From kde-kimageshop Thu May 19 18:20:07 2022 From: L. E. Segovia Date: Thu, 19 May 2022 18:20:07 +0000 To: kde-kimageshop Subject: =?utf-8?q?=5Bgraphics/krita=5D_/=3A_=5BFEATURE=5D_Port_Krita_to_xsimd?= Message-Id: <20220519182007.C3DBD1241A8E () leptone ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=165298437800526 R2l0IGNvbW1pdCA3MDg2Mzk2NjY5OTM3OTg1NmU3ZmEwOGQwZDhmYzJhZWU0MzQyYzI5IGJ5IEwu IEUuIFNlZ292aWEuCkNvbW1pdHRlZCBvbiAxOS8wNS8yMDIyIGF0IDE3OjQwLgpQdXNoZWQgYnkg bHNlZ292aWEgaW50byBicmFuY2ggJ21hc3RlcicuCgpbRkVBVFVSRV0gUG9ydCBLcml0YSB0byB4 c2ltZAoKVGhpcyBjb21taXQgcmVwbGFjZXMgb3VyIFZjIGJhY2tlbmQgd2l0aCB4c2ltZCwgUXVh bnRTdGFjaydzIFNJTUQKb2ZmZXJpbmcgYmFja2luZyB0aGUgeHRlbnNvciBwcm9qZWN0LgoKVGhp cyByZXF1aXJlcyB0aGUgZm9sbG93aW5nOgoKLSB3aG9sZXNhbGUgcmVwbGFjZW1lbnQgb2YgVmMg d2l0aCB4c2ltZCBhbHRlcm5hdGl2ZXMKLSBpbXBsZW1lbnRhdGlvbiBvZiBkaXNwYXRjaGluZyBh Z2FpbnN0IHRoZSB4c2ltZDo6Z2VuZXJpYyBhcmNoaXRlY3R1cmUKICAoaS5lLiBWYzo6U2NhbGFy SW1wbCkKLSBpbXBsZW1lbnRhdGlvbiBvZiBydWRpbWVudGFyeSBnYXRoZXItc2NhdHRlciBhbmQg aW50ZWdlciByb3VuZGluZyBvcHMKClRoaXMgYnJpbmdzIEFybSBzdXBwb3J0IHRvIG91ciBiYWNr ZW5kIGZvciBGcmVlKHRtKS4KCkNvLUF1dGhvcmVkLUJ5OiBEbWl0cnkgS2F6YWtvdiA8ZGltdWxh NzNAZ21haWwuY29tPgoKQ0NNQUlMOiBraW1hZ2VzaG9wQGtkZS5vcmcKCk0gICsyICAgIC0yICAg IDNyZHBhcnR5L2V4dF94c2ltZC9DTWFrZUxpc3RzLnR4dApNICArMzUgICAtMzAgICBDTWFrZUxp c3RzLnR4dApNICArMyAgICAtMTEgICBiZW5jaG1hcmtzL0NNYWtlTGlzdHMudHh0Ck0gICs4MCAg IC02MCAgIGJlbmNobWFya3Mva2lzX2NvbXBvc2l0aW9uX2JlbmNobWFyay5jcHAKTSAgKzIgICAg LTAgICAgYmVuY2htYXJrcy9raXNfY29tcG9zaXRpb25fYmVuY2htYXJrLmgKQSAgKzIwICAgLTAg ICAgY21ha2UvbW9kdWxlcy9GaW5keHNpbWQuY21ha2UKQSAgKzEwNSAgLTAgICAgY21ha2UvbW9k dWxlcy94c2ltZC94c2ltZEFkZENvbXBpbGVyRmxhZy5jbWFrZQpBICArMjY3ICAtMCAgICBjbWFr ZS9tb2R1bGVzL3hzaW1kL3hzaW1kTWFjcm9zLmNtYWtlCkQgICswICAgIC00ICAgIGNvbmZpZy12 Yy5oLmNtYWtlCkEgICs0ICAgIC0wICAgIGNvbmZpZy14c2ltZC5oLmNtYWtlCk0gICsxICAgIC0x ICAgIGtyaXRhL2RhdGEvYWJvdXRkYXRhL2xpYnJhcmllcy50eHQKTSAgKzEgICAgLTAgICAgbGli cy9DTWFrZUxpc3RzLnR4dApNICArMSAgICAtNiAgICBsaWJzL2JydXNoL0NNYWtlTGlzdHMudHh0 Ck0gICswICAgIC02ICAgIGxpYnMvYnJ1c2gvdGVzdHMvQ01ha2VMaXN0cy50eHQKTSAgKzIgICAg LTUgICAgbGlicy9pbWFnZS9DTWFrZUxpc3RzLnR4dApNICArMTAzICAtNzkgICBsaWJzL2ltYWdl L2tpc19hbnRpYWxpYXNpbmdfZmFkZV9tYWtlci5oCk0gICsxICAgIC0xICAgIGxpYnMvaW1hZ2Uv a2lzX2Jhc2VfbWFza19nZW5lcmF0b3IuY3BwCk0gICsxNCAgIC0xNSAgIGxpYnMvaW1hZ2Uva2lz X2JydXNoX21hc2tfYXBwbGljYXRvcl9mYWN0b3JpZXMuY3BwCk0gICs0ICAgIC0zICAgIGxpYnMv aW1hZ2Uva2lzX2JydXNoX21hc2tfYXBwbGljYXRvcl9mYWN0b3JpZXMuaApNICArMTQgICAtMTQg ICBsaWJzL2ltYWdlL2tpc19icnVzaF9tYXNrX2FwcGxpY2F0b3JfZmFjdG9yaWVzX1NjYWxhci5j cHAKTSAgKzI3NSAgLTI2NCAgbGlicy9pbWFnZS9raXNfYnJ1c2hfbWFza19wcm9jZXNzb3JfZmFj dG9yaWVzLmNwcApNICArMSAgICAtMSAgICBsaWJzL2ltYWdlL2tpc19icnVzaF9tYXNrX3NjYWxh cl9hcHBsaWNhdG9yLmgKTSAgKzE1ICAgLTE1ICAgbGlicy9pbWFnZS9raXNfYnJ1c2hfbWFza192 ZWN0b3JfYXBwbGljYXRvci5oCk0gICsyICAgIC0yICAgIGxpYnMvaW1hZ2Uva2lzX2NpcmNsZV9t YXNrX2dlbmVyYXRvci5oCk0gICsyICAgIC0yICAgIGxpYnMvaW1hZ2Uva2lzX2N1cnZlX2NpcmNs ZV9tYXNrX2dlbmVyYXRvci5oCk0gICsyICAgIC0yICAgIGxpYnMvaW1hZ2Uva2lzX2N1cnZlX3Jl Y3RfbWFza19nZW5lcmF0b3IuaApNICArMiAgICAtMiAgICBsaWJzL2ltYWdlL2tpc19nYXVzc19j aXJjbGVfbWFza19nZW5lcmF0b3IuaApNICArMiAgICAtMiAgICBsaWJzL2ltYWdlL2tpc19nYXVz c19yZWN0X21hc2tfZ2VuZXJhdG9yLmgKTSAgKzIgICAgLTIgICAgbGlicy9pbWFnZS9raXNfcmVj dF9tYXNrX2dlbmVyYXRvci5oCk0gICswICAgIC00ICAgIGxpYnMvaW1hZ2UvdGVzdHMvQ01ha2VM aXN0cy50eHQKTSAgKzI2ICAgLTIzICAgbGlicy9pbWFnZS92Y19leHRyYV9tYXRoLmgKQSAgKzkg ICAgLTAgICAgbGlicy9tdWx0aWFyY2gvQ01ha2VMaXN0cy50eHQKQSAgKzEzMyAgLTAgICAgbGli cy9tdWx0aWFyY2gveHNpbWRfZXh0ZW5zaW9ucy9hcmNoL3hzaW1kX2dlbmVyaWMuaHBwICAgICBb TGljZW5zZTogQlNEXQpBICArMTA1ICAtMCAgICBsaWJzL211bHRpYXJjaC94c2ltZF9leHRlbnNp b25zL2FyY2gveHNpbWRfZ2VuZXJpY19kZXRhaWxzLmhwcCAgICAgW0xpY2Vuc2U6IEJTRF0KQSAg KzE4ICAgLTAgICAgbGlicy9tdWx0aWFyY2gveHNpbWRfZXh0ZW5zaW9ucy9hcmNoL3hzaW1kX2lz YS5ocHAgICAgIFtMaWNlbnNlOiBCU0RdCkEgICsxMDYgIC0wICAgIGxpYnMvbXVsdGlhcmNoL3hz aW1kX2V4dGVuc2lvbnMvY29uZmlnL3hzaW1kX2FyY2guaHBwICAgICBbTGljZW5zZTogQlNEXQpB ICArNDcgICAtMCAgICBsaWJzL211bHRpYXJjaC94c2ltZF9leHRlbnNpb25zL2NvbmZpZy94c2lt ZF9jb25maWcuaHBwICAgICBbTGljZW5zZTogQlNEXQpBICArMTggICAtMCAgICBsaWJzL211bHRp YXJjaC94c2ltZF9leHRlbnNpb25zL3hzaW1kLmhwcCAgICAgW0xpY2Vuc2U6IEJTRF0KTSAgKzIg ICAgLTQgICAgbGlicy9waWdtZW50L0NNYWtlTGlzdHMudHh0Ck0gICszMiAgIC0zMyAgIGxpYnMv cGlnbWVudC9Lb0FscGhhTWFza0FwcGxpY2F0b3IuaApNICArMTcgICAtMTcgICBsaWJzL3BpZ21l bnQvS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUltcGwuY3BwCk0gICsyICAgIC0yICAgIGxp YnMvcGlnbWVudC9Lb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0b3J5SW1wbC5oCk0gICsyICAgIC0y ICAgIGxpYnMvcGlnbWVudC9Lb09wdGltaXplZFBpeGVsRGF0YVNjYWxlclU4VG9VMTYuaApNICAr MyAgICAtMiAgICBsaWJzL3BpZ21lbnQvS29PcHRpbWl6ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2 RmFjdG9yeUltcGwuY3BwCk0gICsyICAgIC0yICAgIGxpYnMvcGlnbWVudC9Lb09wdGltaXplZFBp eGVsRGF0YVNjYWxlclU4VG9VMTZGYWN0b3J5SW1wbC5oCkEgICs4NiAgIC0wICAgIGxpYnMvcGln bWVudC9jb21wb3NpdGVvcHMvS29NdWx0aUFyY2hCdWlsZFN1cHBvcnQuaCAgICAgW0xpY2Vuc2U6 IExHUEwodjIuMSspXQpNICArNDMgICAtNDMgICBsaWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tv T3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbjEyOC5oCk0gICs1MCAgIC01NCAgIGxpYnMv cGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuMzIu aApNICArMzcgICAtMzMgICBsaWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29t cG9zaXRlT3BDb3B5MTI4LmgKTSAgKzI1ICAgLTMyICAgbGlicy9waWdtZW50L2NvbXBvc2l0ZW9w cy9Lb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2guY3BwCk0gICsxOSAgIC0yMCAg IGxpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQ ZXJBcmNoLmgKTSAgKzEzICAgLTEyICAgbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGlt aXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2hfU2NhbGFyLmNwcApNICArMzYgICAtMjggICBs aWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9zaXRlT3BPdmVyMTI4LmgK TSAgKzI4ICAgLTU3ICAgbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENvbXBv c2l0ZU9wT3ZlcjMyLmgKTSAgKzUxMSAgLTUzMyAgbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9L b1N0cmVhbWVkTWF0aC5oCkQgICswICAgIC0xMjIgIGxpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMv S29WY011bHRpQXJjaEJ1aWxkU3VwcG9ydC5oCk0gICszICAgIC0zICAgIGxpYnMvcGlnbWVudC90 ZXN0cy9Lb1JnYlU4Q29sb3JTcGFjZVRlc3Rlci5jcHAKCmh0dHBzOi8vaW52ZW50LmtkZS5vcmcv Z3JhcGhpY3Mva3JpdGEvY29tbWl0LzcwODYzOTY2Njk5Mzc5ODU2ZTdmYTA4ZDBkOGZjMmFlZTQz NDJjMjkKCmRpZmYgLS1naXQgYS8zcmRwYXJ0eS9leHRfeHNpbWQvQ01ha2VMaXN0cy50eHQgYi8z cmRwYXJ0eS9leHRfeHNpbWQvQ01ha2VMaXN0cy50eHQKaW5kZXggZDBhZmM1NzA0Yy4uOWM3ZjU5 MzU0YiAxMDA2NDQKLS0tIGEvM3JkcGFydHkvZXh0X3hzaW1kL0NNYWtlTGlzdHMudHh0CisrKyBi LzNyZHBhcnR5L2V4dF94c2ltZC9DTWFrZUxpc3RzLnR4dApAQCAtMiw4ICsyLDggQEAgU0VUKEVY VFBSRUZJWF94c2ltZCAiJHtFWFRQUkVGSVh9IiApCiAKIEV4dGVybmFsUHJvamVjdF9BZGQoIGV4 dF94c2ltZAogICAgIERPV05MT0FEX0RJUiAke0VYVEVSTkFMU19ET1dOTE9BRF9ESVJ9Ci0gICAg VVJMIGh0dHBzOi8vZ2l0aHViLmNvbS94dGVuc29yLXN0YWNrL3hzaW1kL2FyY2hpdmUvOC4wLjUv eHNpbWQtOC4wLjUudGFyLmd6Ci0gICAgVVJMX0hBU0ggU0hBNTEyPTE2NWNhMzA3YmNhY2NjMjI2 ZGQ1MTg1NjJhOTI2OWFhOWZjNDRjNzBmYWIyOTllYTA4MjdkN2EwYTljZjU4ZWM0OTNiMzgxZmNm MmM0ZDlkMWY2ZWRmZGE4ZmEzMDk2NDNjNjNiMTdmYjIwZDlkZTc4YTRiZTE5ZWI3MGUzMGIzCisg ICAgVVJMIGh0dHBzOi8vZ2l0aHViLmNvbS94dGVuc29yLXN0YWNrL3hzaW1kL2FyY2hpdmUvNTY0 NzI1NDYzNWVhNmY1OTBiNzM2NmUwODQ4YThhMGFiMzAwN2VmYS50YXIuZ3oKKyAgICBVUkxfSEFT SCBTSEEyNTY9NWIxNzVjOGI2NzFkNDI4NzM0M2IwZTc5ZTllM2E4MDcwOTkyODE1ZjVlMGVkNDRi ZmM5YmNlMDFmODg4MDgxNAogCiAgICAgQ01BS0VfQVJHUyAtRENNQUtFX0lOU1RBTExfUFJFRklY PSR7RVhUUFJFRklYX3hzaW1kfSAtRENNQUtFX0JVSUxEX1RZUEU9JHtHTE9CQUxfQlVJTERfVFlQ RX0gJHtHTE9CQUxfUFJPRklMRX0KIApkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFr ZUxpc3RzLnR4dAppbmRleCA4YWEyOTUxZDgxLi4xMjRhNTNjZjIwIDEwMDY0NAotLS0gYS9DTWFr ZUxpc3RzLnR4dAorKysgYi9DTWFrZUxpc3RzLnR4dApAQCAtOTYwLDMxICs5NjAsMTkgQEAgZW5k aWYoKQogbGlzdCAoQVBQRU5EIEFORFJPSURfRVhUUkFfTElCUyAke0xDTVMyX0xJQlJBUklFU30p CiAKICMjCi0jIyBUZXN0IGZvciBWYworIyMgVGVzdCBmb3IgeHNpbWQKICMjCi1zZXQoT0xEX0NN QUtFX01PRFVMRV9QQVRIICR7Q01BS0VfTU9EVUxFX1BBVEh9ICkKLXNldChDTUFLRV9NT0RVTEVf UEFUSCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlL21vZHVsZXMgKQotc2V0KEhBVkVfVkMgRkFM U0UpCi1pZiAoTk9UIChDTUFLRV9TWVNURU1fUFJPQ0VTU09SIE1BVENIRVMgIl4oYWFyY2g2NC4q fEFBUkNINjQuKnxhcm02NC4qfEFSTTY0Lip8cmlzY3Y2NC4qfFJJU0NWNjQuKikiIAotICAgIE9S IENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgTUFUQ0hFUyAiXihhcm0uKnxBUk0uKikiKSkKLSAgICBm aW5kX3BhY2thZ2UoVmMgMS4xLjApCi0gICAgc2V0X3BhY2thZ2VfcHJvcGVydGllcyhWYyBQUk9Q RVJUSUVTCi0gICAgICAgIERFU0NSSVBUSU9OICJQb3J0YWJsZSwgemVyby1vdmVyaGVhZCBTSU1E IGxpYnJhcnkgZm9yIEMrKyIKLSAgICAgICAgVVJMICJodHRwczovL2dpdGh1Yi5jb20vVmNEZXZl bC9WYyIKLSAgICAgICAgVFlQRSBPUFRJT05BTAotICAgICAgICBQVVJQT1NFICJSZXF1aXJlZCBi eSB0aGUgS3JpdGEgZm9yIHZlY3Rvcml6YXRpb24iKQotICAgIG1hY3JvX2Jvb2xfdG9fMDEoVmNf Rk9VTkQgSEFWRV9WQykKLWVuZGlmKCkKLWNvbmZpZ3VyZV9maWxlKGNvbmZpZy12Yy5oLmNtYWtl ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25maWctdmMuaCApCi0KLWlmKEhBVkVfVkMp Ci0gICAgbWVzc2FnZShTVEFUVVMgIlZjIGZvdW5kISIpCi0gICAgc2V0KENNQUtFX01PRFVMRV9Q QVRIICR7Q01BS0VfTU9EVUxFX1BBVEh9Ci0gICAgICAgICAgICAgICAgICAgICAgICAiJHtDTUFL RV9TT1VSQ0VfRElSfS9jbWFrZS92YyIpCi0KLSAgICBpbmNsdWRlIChWY01hY3JvcykKK2ZpbmRf cGFja2FnZSh4c2ltZCA4LjAuNSkKK3NldF9wYWNrYWdlX3Byb3BlcnRpZXMoeHNpbWQgUFJPUEVS VElFUworICAgIERFU0NSSVBUSU9OICJDKysgd3JhcHBlcnMgZm9yIFNJTUQgaW50cmluc2ljcyIK KyAgICBVUkwgImh0dHBzOi8vZ2l0aHViLmNvbS94dGVuc29yLXN0YWNrL3hzaW1kIgorICAgIFRZ UEUgT1BUSU9OQUwKKyAgICBQVVJQT1NFICJSZXF1aXJlZCBieSBLcml0YSBmb3IgdmVjdG9yaXph dGlvbiIpCittYWNyb19ib29sX3RvXzAxKHhzaW1kX0ZPVU5EIEhBVkVfWFNJTUQpCitjb25maWd1 cmVfZmlsZShjb25maWcteHNpbWQuaC5jbWFrZSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0v Y29uZmlnLXhzaW1kLmggKQogCi0gICAgaWYoVmNfQ09NUElMRVJfSVNfQ0xBTkcpCitpZihIQVZF X1hTSU1EKQorICAgIGlmKHhzaW1kX0NPTVBJTEVSX0lTX0NMQU5HKQogICAgICAgICBzZXQoQURE SVRJT05BTF9WQ19GTEFHUyAiLWZmcC1jb250cmFjdD1mYXN0IikKICAgICAgICAgaWYoTk9UIFdJ TjMyKQogICAgICAgICAgICAgc2V0KEFERElUSU9OQUxfVkNfRkxBR1MgIiR7QURESVRJT05BTF9W Q19GTEFHU30gLWZQSUMiKQpAQCAtOTk2LDE1ICs5ODQsMzIgQEAgaWYoSEFWRV9WQykKICAgICAg ICAgZW5kaWYoKQogICAgIGVuZGlmKCkKIAotICAgIG1hY3JvKGtvX2NvbXBpbGVfZm9yX2FsbF9p bXBsZW1lbnRhdGlvbnNfbm9fc2NhbGFyIF9vYmpzIF9zcmMpCi0gICAgICAgIHZjX2NvbXBpbGVf Zm9yX2FsbF9pbXBsZW1lbnRhdGlvbnMoJHtfb2Jqc30gJHtfc3JjfSBGTEFHUyAke0FERElUSU9O QUxfVkNfRkxBR1N9IE9OTFkgU1NFMiBTU1NFMyBTU0U0XzEgQVZYIEFWWDIrRk1BK0JNSTIpCi0g ICAgZW5kbWFjcm8oKQorICAgIGlmIChDTUFLRV9TWVNURU1fUFJPQ0VTU09SIE1BVENIRVMgIl4o YXJtLip8QVJNLiopIikKKyAgICAgICAgbWFjcm8oa29fY29tcGlsZV9mb3JfYWxsX2ltcGxlbWVu dGF0aW9uc19ub19zY2FsYXIgX29ianMgX3NyYykKKyAgICAgICAgICAgIHhzaW1kX2NvbXBpbGVf Zm9yX2FsbF9pbXBsZW1lbnRhdGlvbnMoJHtfb2Jqc30gJHtfc3JjfSBGTEFHUyAke0FERElUSU9O QUxfVkNfRkxBR1N9IE9OTFkgTkVPTikKKyAgICAgICAgZW5kbWFjcm8oKQorCisgICAgICAgIG1h Y3JvKGtvX2NvbXBpbGVfZm9yX2FsbF9pbXBsZW1lbnRhdGlvbnMgX29ianMgX3NyYykKKyAgICAg ICAgICAgIHhzaW1kX2NvbXBpbGVfZm9yX2FsbF9pbXBsZW1lbnRhdGlvbnMoJHtfb2Jqc30gJHtf c3JjfSBGTEFHUyAke0FERElUSU9OQUxfVkNfRkxBR1N9IE9OTFkgU2NhbGFyIE5FT04pCisgICAg ICAgIGVuZG1hY3JvKCkKKyAgICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVT ICJeKGFhcmNoNjQuKnxBQVJDSDY0Lip8YXJtNjQuKnxBUk02NC4qKSIpCisgICAgICAgIG1hY3Jv KGtvX2NvbXBpbGVfZm9yX2FsbF9pbXBsZW1lbnRhdGlvbnNfbm9fc2NhbGFyIF9vYmpzIF9zcmMp CisgICAgICAgICAgICB4c2ltZF9jb21waWxlX2Zvcl9hbGxfaW1wbGVtZW50YXRpb25zKCR7X29i anN9ICR7X3NyY30gRkxBR1MgJHtBRERJVElPTkFMX1ZDX0ZMQUdTfSBPTkxZIE5FT042NCkKKyAg ICAgICAgZW5kbWFjcm8oKQorCisgICAgICAgIG1hY3JvKGtvX2NvbXBpbGVfZm9yX2FsbF9pbXBs ZW1lbnRhdGlvbnMgX29ianMgX3NyYykKKyAgICAgICAgICAgIHhzaW1kX2NvbXBpbGVfZm9yX2Fs bF9pbXBsZW1lbnRhdGlvbnMoJHtfb2Jqc30gJHtfc3JjfSBGTEFHUyAke0FERElUSU9OQUxfVkNf RkxBR1N9IE9OTFkgU2NhbGFyIE5FT042NCkKKyAgICAgICAgZW5kbWFjcm8oKQorICAgIGVsc2Uo KQorICAgICAgICBtYWNybyhrb19jb21waWxlX2Zvcl9hbGxfaW1wbGVtZW50YXRpb25zX25vX3Nj YWxhciBfb2JqcyBfc3JjKQorICAgICAgICAgICAgeHNpbWRfY29tcGlsZV9mb3JfYWxsX2ltcGxl bWVudGF0aW9ucygke19vYmpzfSAke19zcmN9IEZMQUdTICR7QURESVRJT05BTF9WQ19GTEFHU30g T05MWSBTU0UyIFNTU0UzIFNTRTRfMSBBVlggQVZYMitGTUEpCisgICAgICAgIGVuZG1hY3JvKCkK IAotICAgIG1hY3JvKGtvX2NvbXBpbGVfZm9yX2FsbF9pbXBsZW1lbnRhdGlvbnMgX29ianMgX3Ny YykKLSAgICAgICAgdmNfY29tcGlsZV9mb3JfYWxsX2ltcGxlbWVudGF0aW9ucygke19vYmpzfSAk e19zcmN9IEZMQUdTICR7QURESVRJT05BTF9WQ19GTEFHU30gT05MWSBTY2FsYXIgU1NFMiBTU1NF MyBTU0U0XzEgQVZYIEFWWDIrRk1BK0JNSTIpCi0gICAgZW5kbWFjcm8oKQorICAgICAgICBtYWNy byhrb19jb21waWxlX2Zvcl9hbGxfaW1wbGVtZW50YXRpb25zIF9vYmpzIF9zcmMpCisgICAgICAg ICAgICB4c2ltZF9jb21waWxlX2Zvcl9hbGxfaW1wbGVtZW50YXRpb25zKCR7X29ianN9ICR7X3Ny Y30gRkxBR1MgJHtBRERJVElPTkFMX1ZDX0ZMQUdTfSBPTkxZIFNjYWxhciBTU0UyIFNTU0UzIFNT RTRfMSBBVlggQVZYMitGTUEpCisgICAgICAgIGVuZG1hY3JvKCkKKyAgICBlbmRpZigpCiBlbmRp ZigpCi1zZXQoQ01BS0VfTU9EVUxFX1BBVEggJHtPTERfQ01BS0VfTU9EVUxFX1BBVEh9ICkKIAog IyMKICMjIFRlc3QgZW5kaWFubmVzcwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9DTWFrZUxpc3Rz LnR4dCBiL2JlbmNobWFya3MvQ01ha2VMaXN0cy50eHQKaW5kZXggNWJlMGQ3NzhlZi4uNTRiNjNj ZTNkNyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9DTWFrZUxpc3RzLnR4dAorKysgYi9iZW5jaG1h cmtzL0NNYWtlTGlzdHMudHh0CkBAIC03LDE0ICs3LDYgQEAgaW5jbHVkZV9kaXJlY3RvcmllcyhT WVNURU0KICAgICAke0VJR0VOM19JTkNMVURFX0RJUn0KICkKIAotCi1zZXQoTElOS19WQ19MSUIp Ci1pZihIQVZFX1ZDKQotICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7VmNfSU5DTFVERV9ESVJ9KQot ICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gJHtWY19ERUZJTklUSU9O U30iKQotICBzZXQoTElOS19WQ19MSUIgJHtWY19MSUJSQVJJRVN9KQotZW5kaWYoKQotCiBtYWNy b19hZGRfdW5pdHRlc3RfZGVmaW5pdGlvbnMoKQogCiAjIyMjIyMjIyMjIyBuZXh0IHRhcmdldCAj IyMjIyMjIyMjIyMjIyMKQEAgLTc2LDkgKzY4LDkgQEAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEtp c0xvd01lbW9yeUJlbmNobWFyayAga3JpdGFpbWFnZSAgUXQ1OjpUZXN0KQogdGFyZ2V0X2xpbmtf bGlicmFyaWVzKEtpc0FuaW1hdGlvblJlbmRlcmluZ0JlbmNobWFyayAga3JpdGFpbWFnZSBrcml0 YXVpICBRdDU6OlRlc3QpCiB0YXJnZXRfbGlua19saWJyYXJpZXMoS2lzRmlsdGVyU2VsZWN0aW9u c0JlbmNobWFyayAgIGtyaXRhaW1hZ2UgIFF0NTo6VGVzdCkKIAotdGFyZ2V0X2xpbmtfbGlicmFy aWVzKEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrICBrcml0YWltYWdlICBRdDU6OlRlc3QgJHtMSU5L X1ZDX0xJQn0pCi1pZihIQVZFX1ZDKQotICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgS2lzQ29tcG9z aXRpb25CZW5jaG1hcmsgQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfT1BUSU9OUyAiJHtWY19BUkNI SVRFQ1RVUkVfRkxBR1N9IikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhLaXNDb21wb3NpdGlvbkJl bmNobWFyayAga3JpdGFpbWFnZSAgUXQ1OjpUZXN0IGtyaXRhbXVsdGlhcmNoKQoraWYoSEFWRV9Y U0lNRCkKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrIEFQ UEVORCBQUk9QRVJUWSBDT01QSUxFX09QVElPTlMgIiR7eHNpbWRfQVJDSElURUNUVVJFX0ZMQUdT fSIpCiBlbmRpZigpCiB0YXJnZXRfbGlua19saWJyYXJpZXMoS2lzTWFza0dlbmVyYXRvckJlbmNo bWFyayAga3JpdGFpbWFnZSAgUXQ1OjpUZXN0KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEtpc1Ro dW1ibmFpbEJlbmNobWFyayAga3JpdGFpbWFnZSAgUXQ1OjpUZXN0KQpkaWZmIC0tZ2l0IGEvYmVu Y2htYXJrcy9raXNfY29tcG9zaXRpb25fYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3Mva2lzX2Nv bXBvc2l0aW9uX2JlbmNobWFyay5jcHAKaW5kZXggNDNiYTgwYjM4Ny4uYTk0ODlhNjQxYiAxMDA2 NDQKLS0tIGEvYmVuY2htYXJrcy9raXNfY29tcG9zaXRpb25fYmVuY2htYXJrLmNwcAorKysgYi9i ZW5jaG1hcmtzL2tpc19jb21wb3NpdGlvbl9iZW5jaG1hcmsuY3BwCkBAIC0yLDI1ICsyLDE0IEBA CiAgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxMiBEbWl0cnkgS2F6YWtvdiA8ZGltdWxh NzNAZ21haWwuY29tPgogICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMTUgVGhvcnN0ZW4g WmFjaG1hbm4gPHphY2htYW5uQGtkZS5vcmc+CiAgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDog MjAyMCBNYXRoaWFzIFdlaW4gPGx5bngubXcra2RlQGdtYWlsLmNvbT4KKyAqICBTUERYLUZpbGVD b3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292aWEgPGFteUBhbXlzcGFyay5tZT4KICAqCiAg KiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKICAqLwogCiAvLyBm b3IgY2FsY3VsYXRpb24gb2YgdGhlIG5lZWRlZCBhbGlnbm1lbnQKLSNpbmNsdWRlIDxjb25maWct dmMuaD4KLSNpZmRlZiBIQVZFX1ZDCi0jaWYgZGVmaW5lZCBfTVNDX1ZFUgotLy8gTGV0cyBzaHV0 IHVwIHRoZSAicG9zc2libGUgbG9zcyBvZiBkYXRhIiBhbmQgImZvcmNpbmcgdmFsdWUgdG8gYm9v bCAndHJ1ZScgb3IgJ2ZhbHNlJwotI3ByYWdtYSB3YXJuaW5nICggcHVzaCApCi0jcHJhZ21hIHdh cm5pbmcgKCBkaXNhYmxlIDogNDI0NCApCi0jcHJhZ21hIHdhcm5pbmcgKCBkaXNhYmxlIDogNDgw MCApCi0jZW5kaWYKLSNpbmNsdWRlIDxWYy9WYz4KLSNpbmNsdWRlIDxWYy9JTz4KLSNpZiBkZWZp bmVkIF9NU0NfVkVSCi0jcHJhZ21hIHdhcm5pbmcgKCBwb3AgKQotI2VuZGlmCi0KKyNpbmNsdWRl IDx4c2ltZF9leHRlbnNpb25zL3hzaW1kLmhwcD4KKyNpZmRlZiBIQVZFX1hTSU1ECiAjaW5jbHVk ZSA8S29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIzMi5oPgogI2luY2x1ZGUgPEtvT3B0aW1pemVk Q29tcG9zaXRlT3BPdmVyMTI4Lmg+CiAjaW5jbHVkZSA8S29PcHRpbWl6ZWRDb21wb3NpdGVPcENv cHkxMjguaD4KQEAgLTU1LDYgKzQ0LDEwIEBACiAjZGVmaW5lIE1FTUFMSUdOX0ZSRUUocCkgZnJl ZSgocCkpCiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfWFNJTUQKK3VzaW5nIGZsb2F0X3YgPSB4c2lt ZDo6YmF0Y2g8ZmxvYXQsIHhzaW1kOjpjdXJyZW50X2FyY2g+OworI2VuZGlmCisKIGVudW0gQWxw aGFSYW5nZSB7CiAgICAgQUxQSEFfWkVSTywKICAgICBBTFBIQV9VTklULApAQCAtMjM4LDggKzIz MSw4IEBAIFFWZWN0b3I8VGlsZT4gZ2VuZXJhdGVUaWxlcyhpbnQgc2l6ZSwKIHsKICAgICBRVmVj dG9yPFRpbGU+IHRpbGVzKHNpemUpOwogCi0jaWZkZWYgSEFWRV9WQwotICAgIGNvbnN0IGludCB2 ZWNTaXplID0gVmM6OmZsb2F0X3Y6OnNpemUoKTsKKyNpZmRlZiBIQVZFX1hTSU1ECisgICAgY29u c3QgaW50IHZlY1NpemUgPSBmbG9hdF92OjpzaXplOwogI2Vsc2UKICAgICBjb25zdCBpbnQgdmVj U2l6ZSA9IDE7CiAjZW5kaWYKQEAgLTUxMiw3ICs1MDUsNyBAQCB2b2lkIGJlbmNobWFya0NvbXBv c2l0ZU9wKGNvbnN0IEtvQ29tcG9zaXRlT3AgKm9wLCBjb25zdCBRU3RyaW5nICZwb3N0Zml4KQog ICAgIGJlbmNobWFya0NvbXBvc2l0ZU9wKG9wLCBmYWxzZSwgMS4wLCAxLjAsIDAsIDAsIEFMUEhB X1VOSVQsIEFMUEhBX1VOSVQpOwogfQogCi0jaWZkZWYgSEFWRV9WQworI2lmZGVmIEhBVkVfWFNJ TUQKIAogdGVtcGxhdGUgPHR5cGVuYW1lIGNoYW5uZWxzX3R5cGU+CiB2b2lkIHByaW50RXJyb3Io cXVpbnQ4ICpzLCBxdWludDggKmQxLCBxdWludDggKmQyLCBxdWludDggKm1zazEsIGludCBwb3Mp CkBAIC01MzUsNyArNTI4LDcgQEAgdm9pZCBjaGVja1JvdW5kaW5nKHFyZWFsIG9wYWNpdHksIHFy ZWFsIGZsb3csIHFyZWFsIGF2ZXJhZ2VPcGFjaXR5ID0gLTEsIHF1aW50MzIKICAgICBRVmVjdG9y PFRpbGU+IHRpbGVzID0KICAgICAgICAgZ2VuZXJhdGVUaWxlcygyLCAwLCAwLCBBTFBIQV9SQU5E T00sIEFMUEhBX1JBTkRPTSwgcGl4ZWxTaXplKTsKIAotICAgIGNvbnN0IGludCB2ZWNTaXplID0g VmM6OmZsb2F0X3Y6OnNpemUoKTsKKyAgICBjb25zdCBpbnQgdmVjU2l6ZSA9IGZsb2F0X3Y6OnNp emU7CiAKICAgICBjb25zdCBpbnQgbnVtQmxvY2tzID0gbnVtUGl4ZWxzIC8gdmVjU2l6ZTsKIApA QCAtNTYyLDcgKzU1NSw3IEBAIHZvaWQgY2hlY2tSb3VuZGluZyhxcmVhbCBvcGFjaXR5LCBxcmVh bCBmbG93LCBxcmVhbCBhdmVyYWdlT3BhY2l0eSA9IC0xLCBxdWludDMyCiAgICAgLy8gVGhlIGVy cm9yIGNvdW50IGlzIG5lZWRlZCBhcyAzOC41IGdldHMgcm91bmRlZCB0byAzOCBpbnN0ZWFkIG9m IDM5IGluIHRoZSB2YyB2ZXJzaW9uLgogICAgIGludCBlcnJvcmNvdW50ID0gMDsKICAgICBmb3Ig KGludCBpID0gMDsgaSA8IG51bUJsb2NrczsgaSsrKSB7Ci0gICAgICAgIENvbXBvc2l0b3I6OnRl bXBsYXRlIGNvbXBvc2l0ZVZlY3Rvcjx0cnVlLHRydWUsIFZjOjpDdXJyZW50SW1wbGVtZW50YXRp b246OmN1cnJlbnQoKT4oc3JjMSwgZHN0MSwgbXNrMSwgcGFyYW1zLm9wYWNpdHksIHBhcmFtc1dy YXBwZXIpOworICAgICAgICBDb21wb3NpdG9yOjp0ZW1wbGF0ZSBjb21wb3NpdGVWZWN0b3I8dHJ1 ZSx0cnVlLCB4c2ltZDo6Y3VycmVudF9hcmNoPihzcmMxLCBkc3QxLCBtc2sxLCBwYXJhbXMub3Bh Y2l0eSwgcGFyYW1zV3JhcHBlcik7CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmVjU2l6 ZTsgaisrKSB7CiAKICAgICAgICAgICAgIC8vaWYgKDggKiBpICsgaiA9PSA3MDgwKSB7CkBAIC01 NzEsNyArNTY0LDcgQEAgdm9pZCBjaGVja1JvdW5kaW5nKHFyZWFsIG9wYWNpdHksIHFyZWFsIGZs b3csIHFyZWFsIGF2ZXJhZ2VPcGFjaXR5ID0gLTEsIHF1aW50MzIKICAgICAgICAgICAgIC8vICAg IHFEZWJ1ZygpIDw8ICJtc2s6IiA8PCBtc2syWzBdOwogICAgICAgICAgICAgLy99CiAKLSAgICAg ICAgICAgIENvbXBvc2l0b3I6OnRlbXBsYXRlIGNvbXBvc2l0ZU9uZVBpeGVsU2NhbGFyPHRydWUs IFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oc3JjMiwgZHN0MiwgbXNrMiwg cGFyYW1zLm9wYWNpdHksIHBhcmFtc1dyYXBwZXIpOworICAgICAgICAgICAgQ29tcG9zaXRvcjo6 dGVtcGxhdGUgY29tcG9zaXRlT25lUGl4ZWxTY2FsYXI8dHJ1ZSwgeHNpbWQ6OmN1cnJlbnRfYXJj aD4oc3JjMiwgZHN0MiwgbXNrMiwgcGFyYW1zLm9wYWNpdHksIHBhcmFtc1dyYXBwZXIpOwogCiAg ICAgICAgICAgICBib29sIGNvbXBhcmVSZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHBp eGVsU2l6ZSA9PSA0KSB7CkBAIC02MjMsMTA3ICs2MTYsMTM0IEBAIHZvaWQgY2hlY2tSb3VuZGlu ZyhxcmVhbCBvcGFjaXR5LCBxcmVhbCBmbG93LCBxcmVhbCBhdmVyYWdlT3BhY2l0eSA9IC0xLCBx dWludDMyCiAjZW5kaWYKIAogCit2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrOjpkZXRlY3RC dWlsZEFyY2hpdGVjdHVyZSgpCit7CisjaWZkZWYgSEFWRV9YU0lNRAorICAgIHVzaW5nIG5hbWVz cGFjZSB4c2ltZDsKKworICAgIHFEZWJ1ZygpIDw8ICJidWlsdCBmb3IiIDw8IHBwVmFyKGN1cnJl bnRfYXJjaCgpLm5hbWUoKSk7CisgICAgcURlYnVnKCkgPDwgImJ1aWx0IGZvciIgPDwgcHBWYXIo ZGVmYXVsdF9hcmNoKCkubmFtZSgpKTsKKworICAgIHFEZWJ1ZygpIDw8IHBwVmFyKHN1cHBvcnRl ZF9hcmNoaXRlY3R1cmVzKCkuY29udGFpbnM8c3NlMj4oKSk7CisgICAgcURlYnVnKCkgPDwgcHBW YXIoc3VwcG9ydGVkX2FyY2hpdGVjdHVyZXMoKS5jb250YWluczxzc2UzPigpKTsKKyAgICBxRGVi dWcoKSA8PCBwcFZhcihzdXBwb3J0ZWRfYXJjaGl0ZWN0dXJlcygpLmNvbnRhaW5zPHNzc2UzPigp KTsKKyAgICBxRGVidWcoKSA8PCBwcFZhcihzdXBwb3J0ZWRfYXJjaGl0ZWN0dXJlcygpLmNvbnRh aW5zPHNzZTRfMT4oKSk7CisgICAgcURlYnVnKCkgPDwgcHBWYXIoc3VwcG9ydGVkX2FyY2hpdGVj dHVyZXMoKS5jb250YWluczxzc2U0XzI+KCkpOworICAgIHFEZWJ1ZygpIDw8IHBwVmFyKHN1cHBv cnRlZF9hcmNoaXRlY3R1cmVzKCkuY29udGFpbnM8Zm1hMzxzc2U0XzI+PigpKTsKKworICAgIHFE ZWJ1ZygpIDw8IHBwVmFyKHN1cHBvcnRlZF9hcmNoaXRlY3R1cmVzKCkuY29udGFpbnM8YXZ4Pigp KTsKKyAgICBxRGVidWcoKSA8PCBwcFZhcihzdXBwb3J0ZWRfYXJjaGl0ZWN0dXJlcygpLmNvbnRh aW5zPGF2eDI+KCkpOworICAgIHFEZWJ1ZygpIDw8IHBwVmFyKHN1cHBvcnRlZF9hcmNoaXRlY3R1 cmVzKCkuY29udGFpbnM8Zm1hMzxhdngyPj4oKSk7CisgICAgcURlYnVnKCkgPDwgcHBWYXIoc3Vw cG9ydGVkX2FyY2hpdGVjdHVyZXMoKS5jb250YWluczxmbWE0PigpKTsKKyAgICBxRGVidWcoKSA8 PCBwcFZhcihzdXBwb3J0ZWRfYXJjaGl0ZWN0dXJlcygpLmNvbnRhaW5zPGF2eDUxMmY+KCkpOwor ICAgIHFEZWJ1ZygpIDw8IHBwVmFyKHN1cHBvcnRlZF9hcmNoaXRlY3R1cmVzKCkuY29udGFpbnM8 YXZ4NTEyYnc+KCkpOworICAgIHFEZWJ1ZygpIDw8IHBwVmFyKHN1cHBvcnRlZF9hcmNoaXRlY3R1 cmVzKCkuY29udGFpbnM8YXZ4NTEyZHE+KCkpOworICAgIHFEZWJ1ZygpIDw8IHBwVmFyKHN1cHBv cnRlZF9hcmNoaXRlY3R1cmVzKCkuY29udGFpbnM8YXZ4NTEyY2Q+KCkpOworICAgIHFEZWJ1Zygp Lm5vc3BhY2UoKSA8PCAicnVubmluZyBvbiAiIDw8IGhleCA8PCAiMHgiIDw8IHhzaW1kOjphdmFp bGFibGVfYXJjaGl0ZWN0dXJlcygpLmJlc3Q7CisjZW5kaWYKK30KKwogdm9pZCBLaXNDb21wb3Np dGlvbkJlbmNobWFyazo6Y2hlY2tSb3VuZGluZ0FscGhhRGFya2VuXzA1XzAzKCkKIHsKLSNpZmRl ZiBIQVZFX1ZDCisjaWZkZWYgSEFWRV9YU0lNRAogICAgIGNoZWNrUm91bmRpbmc8QWxwaGFEYXJr ZW5Db21wb3NpdG9yMzI8cXVpbnQ4LCBxdWludDMyLCBLb0FscGhhRGFya2VuUGFyYW1zV3JhcHBl ckNyZWFteT4gPigwLjUsMC4zKTsKICNlbmRpZgogfQogCiB2b2lkIEtpc0NvbXBvc2l0aW9uQmVu Y2htYXJrOjpjaGVja1JvdW5kaW5nQWxwaGFEYXJrZW5fMDVfMDUoKQogewotI2lmZGVmIEhBVkVf VkMKKyNpZmRlZiBIQVZFX1hTSU1ECiAgICAgY2hlY2tSb3VuZGluZzxBbHBoYURhcmtlbkNvbXBv c2l0b3IzMjxxdWludDgsIHF1aW50MzIsIEtvQWxwaGFEYXJrZW5QYXJhbXNXcmFwcGVyQ3JlYW15 PiA+KDAuNSwwLjUpOwogI2VuZGlmCiB9CiAKIHZvaWQgS2lzQ29tcG9zaXRpb25CZW5jaG1hcms6 OmNoZWNrUm91bmRpbmdBbHBoYURhcmtlbl8wNV8wNygpCiB7Ci0jaWZkZWYgSEFWRV9WQworI2lm ZGVmIEhBVkVfWFNJTUQKICAgICBjaGVja1JvdW5kaW5nPEFscGhhRGFya2VuQ29tcG9zaXRvcjMy PHF1aW50OCwgcXVpbnQzMiwgS29BbHBoYURhcmtlblBhcmFtc1dyYXBwZXJDcmVhbXk+ID4oMC41 LDAuNyk7CiAjZW5kaWYKIH0KIAogdm9pZCBLaXNDb21wb3NpdGlvbkJlbmNobWFyazo6Y2hlY2tS b3VuZGluZ0FscGhhRGFya2VuXzA1XzEwKCkKIHsKLSNpZmRlZiBIQVZFX1ZDCisjaWZkZWYgSEFW RV9YU0lNRAogICAgIGNoZWNrUm91bmRpbmc8QWxwaGFEYXJrZW5Db21wb3NpdG9yMzI8cXVpbnQ4 LCBxdWludDMyLCBLb0FscGhhRGFya2VuUGFyYW1zV3JhcHBlckNyZWFteT4gPigwLjUsMS4wKTsK ICNlbmRpZgogfQogCiB2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrOjpjaGVja1JvdW5kaW5n QWxwaGFEYXJrZW5fMDVfMTBfMDgoKQogewotI2lmZGVmIEhBVkVfVkMKKyNpZmRlZiBIQVZFX1hT SU1ECiAgICAgY2hlY2tSb3VuZGluZzxBbHBoYURhcmtlbkNvbXBvc2l0b3IzMjxxdWludDgsIHF1 aW50MzIsIEtvQWxwaGFEYXJrZW5QYXJhbXNXcmFwcGVyQ3JlYW15PiA+KDAuNSwxLjAsMC44KTsK ICNlbmRpZgogfQogCiB2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrOjpjaGVja1JvdW5kaW5n QWxwaGFEYXJrZW5GMzJfMDVfMDMoKQogewotI2lmZGVmIEhBVkVfVkMKKyNpZmRlZiBIQVZFX1hT SU1ECiAgICAgY2hlY2tSb3VuZGluZzxPdmVyQ29tcG9zaXRvcjEyODxmbG9hdCwgZmFsc2UsIHRy dWU+ID4oMC41LCAwLjMsIC0xLCAxNik7CiAjZW5kaWYKIH0KIAogdm9pZCBLaXNDb21wb3NpdGlv bkJlbmNobWFyazo6Y2hlY2tSb3VuZGluZ0FscGhhRGFya2VuRjMyXzA1XzA1KCkKIHsKLSNpZmRl ZiBIQVZFX1ZDCisjaWZkZWYgSEFWRV9YU0lNRAogICAgIGNoZWNrUm91bmRpbmc8T3ZlckNvbXBv c2l0b3IxMjg8ZmxvYXQsIGZhbHNlLCB0cnVlPiA+KDAuNSwgMC41LCAtMSwgMTYpOwogI2VuZGlm CiB9CiAKIHZvaWQgS2lzQ29tcG9zaXRpb25CZW5jaG1hcms6OmNoZWNrUm91bmRpbmdBbHBoYURh cmtlbkYzMl8wNV8wNygpCiB7Ci0jaWZkZWYgSEFWRV9WQworI2lmZGVmIEhBVkVfWFNJTUQKICAg ICBjaGVja1JvdW5kaW5nPE92ZXJDb21wb3NpdG9yMTI4PGZsb2F0LCBmYWxzZSwgdHJ1ZT4gPigw LjUsIDAuNywgLTEsIDE2KTsKICNlbmRpZgogfQogCiB2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2ht YXJrOjpjaGVja1JvdW5kaW5nQWxwaGFEYXJrZW5GMzJfMDVfMTAoKQogewotI2lmZGVmIEhBVkVf VkMKKyNpZmRlZiBIQVZFX1hTSU1ECiAgICAgY2hlY2tSb3VuZGluZzxPdmVyQ29tcG9zaXRvcjEy ODxmbG9hdCwgZmFsc2UsIHRydWU+ID4oMC41LCAxLjAsIC0xLCAxNik7CiAjZW5kaWYKIH0KIAog dm9pZCBLaXNDb21wb3NpdGlvbkJlbmNobWFyazo6Y2hlY2tSb3VuZGluZ0FscGhhRGFya2VuRjMy XzA1XzEwXzA4KCkKIHsKLSNpZmRlZiBIQVZFX1ZDCisjaWZkZWYgSEFWRV9YU0lNRAogICAgIGNo ZWNrUm91bmRpbmc8T3ZlckNvbXBvc2l0b3IxMjg8ZmxvYXQsIGZhbHNlLCB0cnVlPiA+KDAuNSwg MS4wLCAwLjgsIDE2KTsKICNlbmRpZgogfQogCiB2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJr OjpjaGVja1JvdW5kaW5nT3ZlcigpCiB7Ci0jaWZkZWYgSEFWRV9WQworI2lmZGVmIEhBVkVfWFNJ TUQKICAgICBjaGVja1JvdW5kaW5nPE92ZXJDb21wb3NpdG9yMzI8cXVpbnQ4LCBxdWludDMyLCBm YWxzZSwgdHJ1ZT4gPigwLjUsIDAuMyk7CiAjZW5kaWYKIH0KIAogdm9pZCBLaXNDb21wb3NpdGlv bkJlbmNobWFyazo6Y2hlY2tSb3VuZGluZ092ZXJSZ2JhVTE2KCkKIHsKLSNpZmRlZiBIQVZFX1ZD CisjaWZkZWYgSEFWRV9YU0lNRAogICAgIGNoZWNrUm91bmRpbmc8T3ZlckNvbXBvc2l0b3IxMjg8 cXVpbnQxNiwgZmFsc2UsIHRydWU+ID4oMC41LCAxLjAsIC0xLCA4KTsKICNlbmRpZgogfQogCiB2 b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrOjpjaGVja1JvdW5kaW5nT3ZlclJnYmFGMzIoKQog ewotI2lmZGVmIEhBVkVfVkMKKyNpZmRlZiBIQVZFX1hTSU1ECiAgICAgY2hlY2tSb3VuZGluZzxP dmVyQ29tcG9zaXRvcjEyODxmbG9hdCwgZmFsc2UsIHRydWU+ID4oMC41LCAxLjAsIC0xLCAxNik7 CiAjZW5kaWYKIH0KICNpbmNsdWRlIDxjZmVudj4KIHZvaWQgS2lzQ29tcG9zaXRpb25CZW5jaG1h cms6OmNoZWNrUm91bmRpbmdDb3B5UmdiYVUxNigpCiB7Ci0jaWZkZWYgSEFWRV9WQworI2lmZGVm IEhBVkVfWFNJTUQKICAgICBjaGVja1JvdW5kaW5nPENvcHlDb21wb3NpdG9yMTI4PHF1aW50MTYs IGZhbHNlLCB0cnVlPiA+KDAuNSwgMS4wLCAtMSwgOCk7CiAjZW5kaWYKIH0KIAogdm9pZCBLaXND b21wb3NpdGlvbkJlbmNobWFyazo6Y2hlY2tSb3VuZGluZ0NvcHlSZ2JhRjMyKCkKIHsKLSNpZmRl ZiBIQVZFX1ZDCisjaWZkZWYgSEFWRV9YU0lNRAogICAgIGNoZWNrUm91bmRpbmc8Q29weUNvbXBv c2l0b3IxMjg8ZmxvYXQsIGZhbHNlLCB0cnVlPiA+KDAuNSwgMS4wLCAtMSwgMTYpOwogI2VuZGlm CiB9CkBAIC0xMDM2LDggKzEwNTYsOCBAQCB2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrOjpi ZW5jaG1hcmtNZW1jcHkoKQogICAgIGZyZWVUaWxlcyh0aWxlcywgMCwgMCk7CiB9CiAKLSNpZmRl ZiBIQVZFX1ZDCi0gICAgY29uc3QgaW50IHZlY1NpemUgPSBWYzo6ZmxvYXRfdjo6c2l6ZSgpOwor I2lmZGVmIEhBVkVfWFNJTUQKKyAgICBjb25zdCBpbnQgdmVjU2l6ZSA9IGZsb2F0X3Y6OnNpemU7 CiAgICAgY29uc3Qgc2l6ZV90IHVpbnQ4VmVjQWxpZ25tZW50ID0gcU1heCh2ZWNTaXplICogc2l6 ZW9mKHF1aW50OCksIHNpemVvZih2b2lkKikpOwogICAgIGNvbnN0IHNpemVfdCB1aW50MzJWZWNB bGlnbm1lbnQgPSBxTWF4KHZlY1NpemUgKiBzaXplb2YocXVpbnQzMiksIHNpemVvZih2b2lkKikp OwogICAgIGNvbnN0IHNpemVfdCBmbG9hdFZlY0FsaWdubWVudCA9IHFNYXgodmVjU2l6ZSAqIHNp emVvZihmbG9hdCksIHNpemVvZih2b2lkKikpOwpAQCAtMTA0NSw4ICsxMDY1LDggQEAgdm9pZCBL aXNDb21wb3NpdGlvbkJlbmNobWFyazo6YmVuY2htYXJrTWVtY3B5KCkKIAogdm9pZCBLaXNDb21w b3NpdGlvbkJlbmNobWFyazo6YmVuY2htYXJrVWludEZsb2F0KCkKIHsKLSNpZmRlZiBIQVZFX1ZD Ci0gICAgdXNpbmcgdWludF92ID0gVmM6OlNpbWRBcnJheTx1bnNpZ25lZCBpbnQsIFZjOjpmbG9h dF92OjpzaXplKCk+OworI2lmZGVmIEhBVkVfWFNJTUQKKyAgICB1c2luZyB1aW50X3YgPSB4c2lt ZDo6YmF0Y2g8dW5zaWduZWQgaW50LCB4c2ltZDo6Y3VycmVudF9hcmNoPjsKIAogICAgIGNvbnN0 IGludCBkYXRhU2l6ZSA9IDQwOTY7CiAgICAgdm9pZCAqcHRyID0gMDsKQEAgLTEwNjIsMTEgKzEw ODIsMTMgQEAgdm9pZCBLaXNDb21wb3NpdGlvbkJlbmNobWFyazo6YmVuY2htYXJrVWludEZsb2F0 KCkKICAgICBmbG9hdCAqZkRhdGEgPSAoZmxvYXQqKXB0cjsKIAogICAgIFFCRU5DSE1BUksgewot ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFTaXplOyBpICs9IFZjOjpmbG9hdF92Ojpz aXplKCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgaSArPSBmbG9h dF92OjpzaXplKSB7CiAgICAgICAgICAgICAvLyBjb252ZXJ0IHVpbnQgLT4gZmxvYXQgZGlyZWN0 bHksIHRoaXMgY2F1c2VzCiAgICAgICAgICAgICAvLyBzdGF0aWNfY2FzdCBoZWxwZXIgYmUgY2Fs bGVkCi0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBiKHVpbnRfdihpRGF0YSArIGkpKTsKLSAgICAg ICAgICAgIGIuc3RvcmUoZkRhdGEgKyBpKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gYiA9IHhz aW1kOjpiYXRjaF9jYXN0PHR5cGVuYW1lIGZsb2F0X3Y6OnZhbHVlX3R5cGU+KAorICAgICAgICAg ICAgICAgIHhzaW1kOjpsb2FkX2FuZF9leHRlbmQ8dWludF92PihpRGF0YSArIGkpCisgICAgICAg ICAgICApOworICAgICAgICAgICAgYi5zdG9yZV9hbGlnbmVkKGZEYXRhICsgaSk7CiAgICAgICAg IH0KICAgICB9CiAKQEAgLTEwNzcsOSArMTA5OSw4IEBAIHZvaWQgS2lzQ29tcG9zaXRpb25CZW5j aG1hcms6OmJlbmNobWFya1VpbnRGbG9hdCgpCiAKIHZvaWQgS2lzQ29tcG9zaXRpb25CZW5jaG1h cms6OmJlbmNobWFya1VpbnRJbnRGbG9hdCgpCiB7Ci0jaWZkZWYgSEFWRV9WQwotICAgIHVzaW5n IGludF92ID0gVmM6OlNpbWRBcnJheTxpbnQsIFZjOjpmbG9hdF92OjpzaXplKCk+OwotICAgIHVz aW5nIHVpbnRfdiA9IFZjOjpTaW1kQXJyYXk8dW5zaWduZWQgaW50LCBWYzo6ZmxvYXRfdjo6c2l6 ZSgpPjsKKyNpZmRlZiBIQVZFX1hTSU1ECisgICAgdXNpbmcgdWludF92ID0geHNpbWQ6OmJhdGNo PHVuc2lnbmVkIGludCwgeHNpbWQ6OmN1cnJlbnRfYXJjaD47CiAKICAgICBjb25zdCBpbnQgZGF0 YVNpemUgPSA0MDk2OwogICAgIHZvaWQgKnB0ciA9IDA7CkBAIC0xMDk1LDExICsxMTE2LDExIEBA IHZvaWQgS2lzQ29tcG9zaXRpb25CZW5jaG1hcms6OmJlbmNobWFya1VpbnRJbnRGbG9hdCgpCiAg ICAgZmxvYXQgKmZEYXRhID0gKGZsb2F0KilwdHI7CiAKICAgICBRQkVOQ0hNQVJLIHsKLSAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgaSArPSBWYzo6ZmxvYXRfdjo6c2l6ZSgp KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YVNpemU7IGkgKz0gZmxvYXRfdjo6 c2l6ZSkgewogICAgICAgICAgICAgLy8gY29udmVydCB1aW50LT5pbnQtPmZsb2F0LCB0aGF0IGF2 b2lkcyBzcGVjaWFsIHNpZ24KICAgICAgICAgICAgIC8vIHRyZWF0aW5nLCBhbmQgZ2l2ZXMgMi42 IHRpbWVzIHNwZWVkdXAKLSAgICAgICAgICAgIFZjOjpmbG9hdF92IGIoaW50X3YodWludF92KGlE YXRhICsgaSkpKTsKLSAgICAgICAgICAgIGIuc3RvcmUoZkRhdGEgKyBpKTsKKyAgICAgICAgICAg IGNvbnN0IGF1dG8gYiA9IHhzaW1kOjpiYXRjaF9jYXN0PHR5cGVuYW1lIGZsb2F0X3Y6OnZhbHVl X3R5cGU+KHhzaW1kOjpsb2FkX2FuZF9leHRlbmQ8dWludF92PihpRGF0YSArIGkpKTsKKyAgICAg ICAgICAgIGIuc3RvcmVfYWxpZ25lZChmRGF0YSArIGkpOwogICAgICAgICB9CiAgICAgfQogCkBA IC0xMTEwLDggKzExMzEsOCBAQCB2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrOjpiZW5jaG1h cmtVaW50SW50RmxvYXQoKQogCiB2b2lkIEtpc0NvbXBvc2l0aW9uQmVuY2htYXJrOjpiZW5jaG1h cmtGbG9hdFVpbnQoKQogewotI2lmZGVmIEhBVkVfVkMKLSAgICB1c2luZyB1aW50X3YgPSBWYzo6 U2ltZEFycmF5PHVuc2lnbmVkIGludCwgVmM6OmZsb2F0X3Y6OnNpemUoKT47CisjaWZkZWYgSEFW RV9YU0lNRAorICAgIHVzaW5nIHVpbnRfdiA9IHhzaW1kOjpiYXRjaDx1bnNpZ25lZCBpbnQsIHhz aW1kOjpjdXJyZW50X2FyY2g+OwogCiAgICAgY29uc3QgaW50IGRhdGFTaXplID0gNDA5NjsKICAg ICB2b2lkICpwdHIgPSAwOwpAQCAtMTEyNywxMSArMTE0OCwxMiBAQCB2b2lkIEtpc0NvbXBvc2l0 aW9uQmVuY2htYXJrOjpiZW5jaG1hcmtGbG9hdFVpbnQoKQogICAgIGZsb2F0ICpmRGF0YSA9IChm bG9hdCopcHRyOwogCiAgICAgUUJFTkNITUFSSyB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgZGF0YVNpemU7IGkgKz0gVmM6OmZsb2F0X3Y6OnNpemUoKSkgeworICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGRhdGFTaXplOyBpICs9IGZsb2F0X3Y6OnNpemUpIHsKICAgICAgICAgICAg IC8vIGNvbnZlcnNpb24gZmxvYXQgLT4gdWludAotICAgICAgICAgICAgdWludF92IGIoVmM6OmZs b2F0X3YoZkRhdGEgKyBpKSk7CisgICAgICAgICAgICAvLyB0aGlzIGJlaW5nIGEgZGlyZWN0IGNv bnZlcnNpb24sIGxvYWRfYW5kX2V4dGVuZCBkb2VzIG5vdCBhcHBseQorICAgICAgICAgICAgY29u c3QgYXV0byBiID0geHNpbWQ6OmJhdGNoX2Nhc3Q8dHlwZW5hbWUgdWludF92Ojp2YWx1ZV90eXBl PihmbG9hdF92Ojpsb2FkX2FsaWduZWQoZkRhdGEgKyBpKSk7CiAKLSAgICAgICAgICAgIGIuc3Rv cmUoaURhdGEgKyBpKTsKKyAgICAgICAgICAgIGIuc3RvcmVfYWxpZ25lZChpRGF0YSArIGkpOwog ICAgICAgICB9CiAgICAgfQogCkBAIC0xMTQyLDEwICsxMTY0LDggQEAgdm9pZCBLaXNDb21wb3Np dGlvbkJlbmNobWFyazo6YmVuY2htYXJrRmxvYXRVaW50KCkKIAogdm9pZCBLaXNDb21wb3NpdGlv bkJlbmNobWFyazo6YmVuY2htYXJrRmxvYXRJbnRVaW50KCkKIHsKLSNpZmRlZiBIQVZFX1ZDCi0g ICAgdXNpbmcgaW50X3YgPSBWYzo6U2ltZEFycmF5PGludCwgVmM6OmZsb2F0X3Y6OnNpemUoKT47 Ci0gICAgdXNpbmcgdWludF92ID0gVmM6OlNpbWRBcnJheTx1bnNpZ25lZCBpbnQsIFZjOjpmbG9h dF92OjpzaXplKCk+OwotCisjaWZkZWYgSEFWRV9YU0lNRAorICAgIHVzaW5nIHVpbnRfdiA9IHhz aW1kOjpiYXRjaDx1bnNpZ25lZCBpbnQsIHhzaW1kOjpjdXJyZW50X2FyY2g+OwogICAgIGNvbnN0 IGludCBkYXRhU2l6ZSA9IDQwOTY7CiAgICAgdm9pZCAqcHRyID0gMDsKICAgICBpbnQgZXJyb3Ig PSBNRU1BTElHTl9BTExPQygmcHRyLCB1aW50MzJWZWNBbGlnbm1lbnQsIGRhdGFTaXplICogc2l6 ZW9mKHF1aW50MzIpKTsKQEAgLTExNjAsMTEgKzExODAsMTEgQEAgdm9pZCBLaXNDb21wb3NpdGlv bkJlbmNobWFyazo6YmVuY2htYXJrRmxvYXRJbnRVaW50KCkKICAgICBmbG9hdCAqZkRhdGEgPSAo ZmxvYXQqKXB0cjsKIAogICAgIFFCRU5DSE1BUksgewotICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IGRhdGFTaXplOyBpICs9IFZjOjpmbG9hdF92OjpzaXplKCkpIHsKKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgaSArPSBmbG9hdF92OjpzaXplKSB7CiAgICAgICAgICAg ICAvLyBjb252ZXJzaW9uIGZsb2F0IC0+IGludCAtPiB1aW50Ci0gICAgICAgICAgICB1aW50X3Yg YihpbnRfdihWYzo6ZmxvYXRfdihmRGF0YSArIGkpKSk7CisgICAgICAgICAgICBjb25zdCBhdXRv IGIgPSB4c2ltZDo6YmF0Y2hfY2FzdDx0eXBlbmFtZSB1aW50X3Y6OnZhbHVlX3R5cGU+KGZsb2F0 X3Y6OmxvYWRfYWxpZ25lZChmRGF0YSArIGkpKTsKIAotICAgICAgICAgICAgYi5zdG9yZShpRGF0 YSArIGkpOworICAgICAgICAgICAgYi5zdG9yZV9hbGlnbmVkKGlEYXRhICsgaSk7CiAgICAgICAg IH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mva2lzX2NvbXBvc2l0aW9uX2JlbmNo bWFyay5oIGIvYmVuY2htYXJrcy9raXNfY29tcG9zaXRpb25fYmVuY2htYXJrLmgKaW5kZXggMTky NGFhMzEwZS4uMDIxZjE4NjQ2YyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9raXNfY29tcG9zaXRp b25fYmVuY2htYXJrLmgKKysrIGIvYmVuY2htYXJrcy9raXNfY29tcG9zaXRpb25fYmVuY2htYXJr LmgKQEAgLTEzLDYgKzEzLDggQEAgY2xhc3MgS2lzQ29tcG9zaXRpb25CZW5jaG1hcmsgOiBwdWJs aWMgUU9iamVjdAogewogICAgIFFfT0JKRUNUCiBwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBk ZXRlY3RCdWlsZEFyY2hpdGVjdHVyZSgpOworCiAgICAgdm9pZCBjaGVja1JvdW5kaW5nQWxwaGFE YXJrZW5fMDVfMDMoKTsKICAgICB2b2lkIGNoZWNrUm91bmRpbmdBbHBoYURhcmtlbl8wNV8wNSgp OwogICAgIHZvaWQgY2hlY2tSb3VuZGluZ0FscGhhRGFya2VuXzA1XzA3KCk7CmRpZmYgLS1naXQg YS9jbWFrZS9tb2R1bGVzL0ZpbmR4c2ltZC5jbWFrZSBiL2NtYWtlL21vZHVsZXMvRmluZHhzaW1k LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBmOTNiZjdlNGUK LS0tIC9kZXYvbnVsbAorKysgYi9jbWFrZS9tb2R1bGVzL0ZpbmR4c2ltZC5jbWFrZQpAQCAtMCww ICsxLDIwIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIgTC4gRS4gU2Vnb3ZpYSA8 YW15QGFteXNwYXJrLm1lPgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl CisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCisKK2ZpbmRfcGFja2Fn ZShQa2dDb25maWcgUVVJRVQpCitwa2dfY2hlY2tfbW9kdWxlcyhQQ194c2ltZCBRVUlFVCB4c2lt ZCkKKworZmluZF9wYWNrYWdlKHhzaW1kIFFVSUVUIE5PX01PRFVMRQorICAgIEhJTlRTICR7UENf eHNpbWRfQ09ORklHX0RJUn0gL3Vzci9saWIvY21ha2UveHNpbWQgL3Vzci9sb2NhbC9saWIvY21h a2UveHNpbWQKKykKKworaWYoeHNpbWRfRk9VTkQpCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTU9E VUxFX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0veHNpbWQiKQorICAgIGluY2x1ZGUo eHNpbWRNYWNyb3MpCisgICAgeHNpbWRfc2V0X3ByZWZlcnJlZF9jb21waWxlcl9mbGFncygpCitl bmRpZigpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3Bh Y2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoeHNpbWQgQ09ORklHX01PREUgUkVRVUlSRURfVkFS UyB4c2ltZF9JU19DT05GSUdVUkFUSU9OX1ZBTElEKQpkaWZmIC0tZ2l0IGEvY21ha2UvbW9kdWxl cy94c2ltZC94c2ltZEFkZENvbXBpbGVyRmxhZy5jbWFrZSBiL2NtYWtlL21vZHVsZXMveHNpbWQv eHNpbWRBZGRDb21waWxlckZsYWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uYzc5ZDNlMDUwMAotLS0gL2Rldi9udWxsCisrKyBiL2NtYWtlL21vZHVsZXMveHNp bWQveHNpbWRBZGRDb21waWxlckZsYWcuY21ha2UKQEAgLTAsMCArMSwxMDUgQEAKKyMgLSBBZGQg YSBnaXZlbiBjb21waWxlciBmbGFnIHRvIGZsYWdzIHZhcmlhYmxlcy4KKyMgQWRkQ29tcGlsZXJG bGFnKDxmbGFnPiBbPHZhcj5dKQorIyBvcgorIyBBZGRDb21waWxlckZsYWcoPGZsYWc+IFtDX0ZM QUdTIDx2YXI+XSBbQ1hYX0ZMQUdTIDx2YXI+XSBbQ19SRVNVTFQgPHZhcj5dCisjICAgICAgICAg ICAgICAgICAgICAgICAgW0NYWF9SRVNVTFQgPHZhcj5dKQorCisjPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxMC0yMDE1IE1hdHRoaWFzIEtyZXR6IDxr cmV0ekBrZGUub3JnPgorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIEwuIEUuIFNlZ292 aWEgPGFteUBhbXlzcGFyay5tZQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh dXNlCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworaW5jbHVkZShDaGVja0NDb21waWxlckZsYWcp CitpbmNsdWRlKENoZWNrQ1hYQ29tcGlsZXJGbGFnKQorCittYWNybyhBZGRDb21waWxlckZsYWcg X2ZsYWcpCisgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiWy0uKy86PSBdIiAiXyIgX2ZsYWdfZXNj ICIke19mbGFnfSIpCisKKyAgIHNldChfY19mbGFncyAiQ01BS0VfQ19GTEFHUyIpCisgICBzZXQo X2N4eF9mbGFncyAiQ01BS0VfQ1hYX0ZMQUdTIikKKyAgIHNldChfY19yZXN1bHQgdG1wKQorICAg c2V0KF9jeHhfcmVzdWx0IHRtcCkKKyAgIGlmKCR7QVJHQ30gRVFVQUwgMikKKyAgICAgIG1lc3Nh Z2UoV0FSTklORyAiRGVwcmVjYXRlZCB1c2Ugb2YgdGhlIEFkZENvbXBpbGVyRmxhZyBtYWNyby4i KQorICAgICAgdW5zZXQoX2NfcmVzdWx0KQorICAgICAgc2V0KF9jeHhfcmVzdWx0ICR7QVJHVjF9 KQorICAgZWxzZWlmKCR7QVJHQ30gR1JFQVRFUiAyKQorICAgICAgc2V0KHN0YXRlIDApCisgICAg ICB1bnNldChfY19mbGFncykKKyAgICAgIHVuc2V0KF9jeHhfZmxhZ3MpCisgICAgICB1bnNldChf Y19yZXN1bHQpCisgICAgICB1bnNldChfY3h4X3Jlc3VsdCkKKyAgICAgIGZvcmVhY2goX2FyZyAk e0FSR059KQorICAgICAgICAgaWYoIngke19hcmd9IiBTVFJFUVVBTCAieENfRkxBR1MiKQorICAg ICAgICAgICAgc2V0KHN0YXRlIDEpCisgICAgICAgICAgICBpZihOT1QgREVGSU5FRCBfY19yZXN1 bHQpCisgICAgICAgICAgICAgICBzZXQoX2NfcmVzdWx0IHRtcDApCisgICAgICAgICAgICBlbmRp ZigpCisgICAgICAgICBlbHNlaWYoIngke19hcmd9IiBTVFJFUVVBTCAieENYWF9GTEFHUyIpCisg ICAgICAgICAgICBzZXQoc3RhdGUgMikKKyAgICAgICAgICAgIGlmKE5PVCBERUZJTkVEIF9jeHhf cmVzdWx0KQorICAgICAgICAgICAgICAgc2V0KF9jeHhfcmVzdWx0IHRtcDEpCisgICAgICAgICAg ICBlbmRpZigpCisgICAgICAgICBlbHNlaWYoIngke19hcmd9IiBTVFJFUVVBTCAieENfUkVTVUxU IikKKyAgICAgICAgICAgIHNldChzdGF0ZSAzKQorICAgICAgICAgZWxzZWlmKCJ4JHtfYXJnfSIg U1RSRVFVQUwgInhDWFhfUkVTVUxUIikKKyAgICAgICAgICAgIHNldChzdGF0ZSA0KQorICAgICAg ICAgZWxzZWlmKHN0YXRlIEVRVUFMIDEpCisgICAgICAgICAgICBzZXQoX2NfZmxhZ3MgIiR7X2Fy Z30iKQorICAgICAgICAgZWxzZWlmKHN0YXRlIEVRVUFMIDIpCisgICAgICAgICAgICBzZXQoX2N4 eF9mbGFncyAiJHtfYXJnfSIpCisgICAgICAgICBlbHNlaWYoc3RhdGUgRVFVQUwgMykKKyAgICAg ICAgICAgIHNldChfY19yZXN1bHQgIiR7X2FyZ30iKQorICAgICAgICAgZWxzZWlmKHN0YXRlIEVR VUFMIDQpCisgICAgICAgICAgICBzZXQoX2N4eF9yZXN1bHQgIiR7X2FyZ30iKQorICAgICAgICAg ZWxzZSgpCisgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJTeW50YXggZXJyb3IgZm9y IEFkZENvbXBpbGVyRmxhZyIpCisgICAgICAgICBlbmRpZigpCisgICAgICBlbmRmb3JlYWNoKCkK KyAgIGVuZGlmKCkKKworICAgc2V0KF9jX2NvZGUgImludCBtYWluKCkgeyByZXR1cm4gMDsgfSIp CisgICBzZXQoX2N4eF9jb2RlICJpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0iKQorICAgaWYoIiR7 X2ZsYWd9IiBTVFJFUVVBTCAiLW1mbWEiKQorICAgICAgIyBDb21waWxpbmcgd2l0aCBGTUEzIHN1 cHBvcnQgbWF5IGZhaWwgb25seSBhdCB0aGUgYXNzZW1ibGVyIGxldmVsLgorICAgICAgIyBJbiB0 aGF0IGNhc2Ugd2UgbmVlZCB0byBoYXZlIHN1Y2ggYW4gaW5zdHJ1Y3Rpb24gaW4gdGhlIHRlc3Qg Y29kZQorICAgICAgc2V0KF9jX2NvZGUgIiNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyAgICAgIF9f bTEyOCBmb28oX19tMTI4IHgpIHsgcmV0dXJuIF9tbV9mbWFkZF9wcyh4LCB4LCB4KTsgfQorICAg ICAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9IikKKyAgICAgIHNldChfY3h4X2NvZGUgIiR7X2Nf Y29kZX0iKQorICAgZWxzZWlmKCIke19mbGFnfSIgU1RSRVFVQUwgIi1zdGRsaWI9bGliYysrIikK KyAgICAgICMgQ29tcGlsaW5nIHdpdGggbGliYysrIG5vdCBvbmx5IHJlcXVpcmVzIGEgY29tcGls ZXIgdGhhdCB1bmRlcnN0YW5kcyBpdCwgYnV0IGFsc28KKyAgICAgICMgdGhlIGxpYmMrKyBoZWFk ZXJzIGl0c2VsZgorICAgICAgc2V0KF9jeHhfY29kZSAiI2luY2x1ZGUgPGlvc3RyZWFtPgorICAg ICAgI2luY2x1ZGUgPGNzdGRpbz4KKyAgICAgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfSIpCisg ICBlbHNlKCkKKyAgICAgIHNldChfY3h4X2NvZGUgIiNpbmNsdWRlIDxjc3RkaW8+CisgICAgICBp bnQgbWFpbigpIHsgcmV0dXJuIDA7IH0iKQorICAgZW5kaWYoKQorCisgICBpZihERUZJTkVEIF9j X3Jlc3VsdCkKKyAgICAgIGNoZWNrX2NfY29tcGlsZXJfZmxhZygiJHtfZmxhZ30iIGNoZWNrX2Nf Y29tcGlsZXJfZmxhZ18ke19mbGFnX2VzY30gIiR7X2NfY29kZX0iKQorICAgICAgc2V0KCR7X2Nf cmVzdWx0fSAke2NoZWNrX2NfY29tcGlsZXJfZmxhZ18ke19mbGFnX2VzY319KQorICAgZW5kaWYo KQorICAgaWYoREVGSU5FRCBfY3h4X3Jlc3VsdCkKKyAgICAgIGNoZWNrX2N4eF9jb21waWxlcl9m bGFnKCIke19mbGFnfSIgY2hlY2tfY3h4X2NvbXBpbGVyX2ZsYWdfJHtfZmxhZ19lc2N9ICIke19j eHhfY29kZX0iKQorICAgICAgc2V0KCR7X2N4eF9yZXN1bHR9ICR7Y2hlY2tfY3h4X2NvbXBpbGVy X2ZsYWdfJHtfZmxhZ19lc2N9fSkKKyAgIGVuZGlmKCkKKworICAgbWFjcm8obXlfYXBwZW5kIF9s aXN0IF9mbGFnIF9zcGVjaWFsKQorICAgICAgaWYoIngke19saXN0fSIgU1RSRVFVQUwgIngke19z cGVjaWFsfSIpCisgICAgICAgICBzZXQoJHtfbGlzdH0gIiR7JHtfbGlzdH19ICR7X2ZsYWd9IikK KyAgICAgIGVsc2UoKQorICAgICAgICAgbGlzdChBUFBFTkQgJHtfbGlzdH0gIiR7X2ZsYWd9IikK KyAgICAgIGVuZGlmKCkKKyAgIGVuZG1hY3JvKCkKKworICAgaWYoY2hlY2tfY19jb21waWxlcl9m bGFnXyR7X2ZsYWdfZXNjfSBBTkQgREVGSU5FRCBfY19mbGFncykKKyAgICAgIG15X2FwcGVuZCgk e19jX2ZsYWdzfSAiJHtfZmxhZ30iIENNQUtFX0NfRkxBR1MpCisgICBlbmRpZigpCisgICBpZihj aGVja19jeHhfY29tcGlsZXJfZmxhZ18ke19mbGFnX2VzY30gQU5EIERFRklORUQgX2N4eF9mbGFn cykKKyAgICAgIG15X2FwcGVuZCgke19jeHhfZmxhZ3N9ICIke19mbGFnfSIgQ01BS0VfQ1hYX0ZM QUdTKQorICAgZW5kaWYoKQorZW5kbWFjcm8oQWRkQ29tcGlsZXJGbGFnKQpkaWZmIC0tZ2l0IGEv Y21ha2UvbW9kdWxlcy94c2ltZC94c2ltZE1hY3Jvcy5jbWFrZSBiL2NtYWtlL21vZHVsZXMveHNp bWQveHNpbWRNYWNyb3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uYjQ5M2I3YTQyMQotLS0gL2Rldi9udWxsCisrKyBiL2NtYWtlL21vZHVsZXMveHNpbWQveHNp bWRNYWNyb3MuY21ha2UKQEAgLTAsMCArMSwyNjcgQEAKKyMgTWFjcm9zIGZvciB1c2Ugd2l0aCB4 c2ltZCA8aHR0cHM6Ly9naXRodWIuY29tL3h0ZW5zb3Itc3RhY2sveHNpbWQ+CisjCisjIFRoZSBm b2xsb3dpbmcgbWFjcm9zIGFyZSBwcm92aWRlZDoKKyMgeHNpbWRfZGV0ZXJtaW5lX2NvbXBpbGVy CisjIHhzaW1kX3NldF9wcmVmZXJyZWRfY29tcGlsZXJfZmxhZ3MKKyMgeHNpbWRfY29tcGlsZV9m b3JfYWxsX2ltcGxlbWVudGF0aW9ucworIworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFNQRFgt RmlsZUNvcHlyaWdodFRleHQ6IDIwMTAtMjAxNSBNYXR0aGlhcyBLcmV0eiA8a3JldHpAa2RlLm9y Zz4KKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMiBMLiBFLiBTZWdvdmlhIDxhbXlAYW15 c3BhcmsubWU+CisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyM9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMi4w KQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS94c2ltZEFkZENvbXBpbGVy RmxhZy5jbWFrZSIpCisKK3NldCh4c2ltZF9JU19DT05GSUdVUkFUSU9OX1ZBTElEIFRSVUUpCitt YXJrX2FzX2FkdmFuY2VkKHhzaW1kX0lTX0NPTkZJR1VSQVRJT05fVkFMSUQpCisKK21hY3JvKHhz aW1kX2RldGVybWluZV9jb21waWxlcikKKyAgIHNldCh4c2ltZF9DT01QSUxFUl9JU19DTEFORyBm YWxzZSkKKyAgIHNldCh4c2ltZF9DT01QSUxFUl9JU19NU1ZDIGZhbHNlKQorICAgc2V0KHhzaW1k X0NPTVBJTEVSX0lTX0dDQyBmYWxzZSkKKyAgIGlmKENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRD SEVTICJDbGFuZyIpCisgICAgICBzZXQoeHNpbWRfQ09NUElMRVJfSVNfQ0xBTkcgdHJ1ZSkKKyAg ICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RlZCBDb21waWxlcjogQ2xhbmcgJHtDTUFLRV9DWFhf Q09NUElMRVJfVkVSU0lPTn0iKQorCisgICAgICAjIGJyZWFrIGJ1aWxkIHdpdGggdG9vIG9sZCBj bGFuZyBhcyBlYXJseSBhcyBwb3NzaWJsZS4KKyAgICAgIGlmKENNQUtFX0NYWF9DT01QSUxFUl9W RVJTSU9OIFZFUlNJT05fTEVTUyA0LjApCisgICAgICAgICBtZXNzYWdlKFdBUk5JTkcgInhzaW1k IHJlcXVpcmVzIGF0IGxlYXN0IGNsYW5nIDQuMCIpCisgICAgICAgICBzZXQoeHNpbWRfSVNfQ09O RklHVVJBVElPTl9WQUxJRCBGQUxTRSkKKyAgICAgIGVuZGlmKCkKKyAgIGVsc2VpZihNU1ZDKQor ICAgICAgc2V0KHhzaW1kX0NPTVBJTEVSX0lTX01TVkMgdHJ1ZSkKKyAgICAgIG1lc3NhZ2UoU1RB VFVTICJEZXRlY3RlZCBDb21waWxlcjogTVNWQyAke01TVkNfVkVSU0lPTn0iKQorICAgICAgIyB2 ZXJzaW9uIGRldGVjdGlvbiBvZiAyMDE1IHVwZGF0ZSAyIG11c3QgYmUgZG9uZSBhZ2FpbnN0IF9N U0NfRlVMTF9WRVIgPT0gMTkwMDIzOTE4CisgICAgICBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJF TlRfQklOQVJZX0RJUn0vbXN2Y192ZXJzaW9uLmMiICJNU1ZDIF9NU0NfRlVMTF9WRVIiKQorICAg ICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DWFhfQ09NUElMRVJ9IC9ub2xvZ28g LUVQICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbXN2Y192ZXJzaW9uLmMiIE9VVFBVVF9T VFJJUF9UUkFJTElOR19XSElURVNQQUNFIE9VVFBVVF9WQVJJQUJMRSB4c2ltZF9NU1ZDX1ZFUlNJ T04pCisgICAgICBzdHJpbmcoU1RSSVAgIiR7eHNpbWRfTVNWQ19WRVJTSU9OfSIgeHNpbWRfTVNW Q19WRVJTSU9OKQorICAgICAgc3RyaW5nKFJFUExBQ0UgIk1TVkMgIiAiIiB4c2ltZF9NU1ZDX1ZF UlNJT04gIiR7eHNpbWRfTVNWQ19WRVJTSU9OfSIpCisgICAgICBpZiAoTVNWQ19WRVJTSU9OIExF U1MgMTkwMCBPUiB4c2ltZF9NU1ZDX1ZFUlNJT04gTEVTUyAxOTAwMjM5MTgpCisgICAgICAgICBt ZXNzYWdlKFdBUk5JTkcgInhzaW1kIHJlcXVpcmVzIGF0IGxlYXN0IE1TVkMgMjAxNSBVcGRhdGUg MiIpCisgICAgICAgICBzZXQoeHNpbWRfSVNfQ09ORklHVVJBVElPTl9WQUxJRCBGQUxTRSkKKyAg ICAgIGVuZGlmKCkKKyAgIGVsc2VpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDWFgpCisgICAgICBz ZXQoeHNpbWRfQ09NUElMRVJfSVNfR0NDIHRydWUpCisgICAgICBtZXNzYWdlKFNUQVRVUyAiRGV0 ZWN0ZWQgQ29tcGlsZXI6IEdDQyAke0NNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OfSIpCisKKyAg ICAgICMgYnJlYWsgYnVpbGQgd2l0aCB0b28gb2xkIEdDQyBhcyBlYXJseSBhcyBwb3NzaWJsZS4K KyAgICAgIGlmKENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA0LjkpCisg ICAgICAgICBtZXNzYWdlKFdBUk5JTkcgInhzaW1kIHJlcXVpcmVzIGF0IGxlYXN0IEdDQyA0Ljki KQorICAgICAgICAgc2V0KHhzaW1kX0lTX0NPTkZJR1VSQVRJT05fVkFMSUQgRkFMU0UpCisgICAg ICBlbmRpZigpCisgICBlbHNlKCkKKyAgICAgIG1lc3NhZ2UoV0FSTklORyAiVW50ZXN0ZWQvLXN1 cHBvcnRlZCBDb21waWxlciAoJHtDTUFLRV9DWFhfQ09NUElMRVJ9ICR7Q01BS0VfQ1hYX0NPTVBJ TEVSX1ZFUlNJT059KSBmb3IgdXNlIHdpdGggeHNpbWQuXG5QbGVhc2UgZmlsbCBvdXQgdGhlIG1p c3NpbmcgcGFydHMgaW4gdGhlIENNYWtlIHNjcmlwdHMgYW5kIHN1Ym1pdCBhIHBhdGNoIHRvIGh0 dHBzOi8vaW52ZW50LmtkZS5vcmcvZ3JhcGhpY3Mva3JpdGEiKQorICAgZW5kaWYoKQorZW5kbWFj cm8oKQorCittYWNybyh4c2ltZF9jaGVja19hc3NlbWJsZXIpCisgICBleGVjX3Byb2dyYW0oJHtD TUFLRV9DWFhfQ09NUElMRVJ9IEFSR1MgLXByaW50LXByb2ctbmFtZT1hcyBPVVRQVVRfVkFSSUFC TEUgX2FzKQorICAgbWFya19hc19hZHZhbmNlZChfYXMpCisgICBpZihOT1QgX2FzKQorICAgICAg bWVzc2FnZShXQVJOSU5HICJDb3VsZCBub3QgZmluZCAnYXMnLCB0aGUgYXNzZW1ibGVyIHVzZWQg YnkgR0NDLiBIb3BpbmcgZXZlcnl0aGluZyB3aWxsIHdvcmsgb3V0Li4uIikKKyAgIGVsc2UoKQor ICAgICAgZXhlY19wcm9ncmFtKCR7X2FzfSBBUkdTIC0tdmVyc2lvbiBPVVRQVVRfVkFSSUFCTEUg X2FzX3ZlcnNpb24pCisgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXFwoW15cXCldKlxcKSIg IiIgX2FzX3ZlcnNpb24gIiR7X2FzX3ZlcnNpb259IikKKyAgICAgIHN0cmluZyhSRUdFWCBNQVRD SCAiWzEtOV1cXC5bMC05XSsoXFwuWzAtOV0rKT8iIF9hc192ZXJzaW9uICIke19hc192ZXJzaW9u fSIpCisgICAgICBpZihfYXNfdmVyc2lvbiBWRVJTSU9OX0xFU1MgIjIuMjEuMCIpCisgICAgICAg ICBtZXNzYWdlKFdBUk5JTkcgIllvdXIgYmludXRpbHMgaXMgdG9vIG9sZCAoJHtfYXNfdmVyc2lv bn0pIGZvciByZWxpYWJseSBjb21waWxpbmcgeHNpbWQuIikKKyAgICAgICAgIHNldCh4c2ltZF9J U19DT05GSUdVUkFUSU9OX1ZBTElEIEZBTFNFKQorICAgICAgZW5kaWYoKQorICAgZW5kaWYoKQor ZW5kbWFjcm8oKQorCittYWNybyh4c2ltZF9zZXRfcHJlZmVycmVkX2NvbXBpbGVyX2ZsYWdzKQor ICAgeHNpbWRfZGV0ZXJtaW5lX2NvbXBpbGVyKCkKKworICAgaWYgKE5PVCB4c2ltZF9DT01QSUxF Ul9JU19NU1ZDKQorICAgICAgeHNpbWRfY2hlY2tfYXNzZW1ibGVyKCkKKyAgIGVuZGlmKCkKKwor ICAgaWYoeHNpbWRfQ09NUElMRVJfSVNfR0NDKQorICAgICAgQWRkQ29tcGlsZXJGbGFnKCItV2Fi aSIgQ1hYX0ZMQUdTIHhzaW1kX0FSQ0hJVEVDVFVSRV9GTEFHUykKKyAgICAgIEFkZENvbXBpbGVy RmxhZygiLWZhYmktdmVyc2lvbj0wIiBDWFhfRkxBR1MgeHNpbWRfQVJDSElURUNUVVJFX0ZMQUdT KSAjIEFCSSB2ZXJzaW9uIDQgaXMgcmVxdWlyZWQgdG8gbWFrZSBfX20xMjggYW5kIF9fbTI1NiBh cHBlYXIgYXMgZGlmZmVyZW50IHR5cGVzLiAwIHNob3VsZCBnaXZlIHVzIHRoZSBsYXRlc3QgdmVy c2lvbi4KKyAgICAgIEFkZENvbXBpbGVyRmxhZygiLWZhYmktY29tcGF0LXZlcnNpb249MCIgQ1hY X0ZMQUdTIHhzaW1kX0FSQ0hJVEVDVFVSRV9GTEFHUykgIyBHQ0MgNSBpbnRyb2R1Y2VkIHRoaXMg c3dpdGNoCisgICAgICAjIGFuZCBkZWZhdWx0cyBpdCB0byAyIGlmIC1mYWJpLXZlcnNpb24gaXMg MC4gQnV0IGluIHRoYXQgY2FzZSB0aGUgYnVnIC1mYWJpLXZlcnNpb249MCBpcworICAgICAgIyBz dXBwb3NlZCB0byBmaXggcmVzdXJmYWNlcy4gRm9yIG5vdyBqdXN0IG1ha2Ugc3VyZSB0aGF0IGl0 IGNvbXBpbGVzIGFuZCBsaW5rcy4KKyAgIGVsc2VpZih4c2ltZF9DT01QSUxFUl9JU19NU1ZDKQor ICAgICAgQWRkQ29tcGlsZXJGbGFnKCIvYmlnb2JqIiBDWFhfRkxBR1MgeHNpbWRfQVJDSElURUNU VVJFX0ZMQUdTKSAjIHJlcXVpcmVkIGZvciBidWlsZGluZyB0ZXN0cyB3aXRoIEFWWAorICAgZWxz ZWlmKHhzaW1kX0NPTVBJTEVSX0lTX0NMQU5HKQorICAgICAgIyBkaXNhYmxlIHRoZXNlIHdhcm5p bmdzIGJlY2F1c2UgY2xhbmcgc2hvd3MgdGhlbSBmb3IgZnVuY3Rpb24gb3ZlcmxvYWRzIHRoYXQg d2VyZSBkaXNjYXJkZWQgdmlhIFNGSU5BRQorICAgICAgQWRkQ29tcGlsZXJGbGFnKCItV25vLWxv Y2FsLXR5cGUtdGVtcGxhdGUtYXJncyIgQ1hYX0ZMQUdTIHhzaW1kX0FSQ0hJVEVDVFVSRV9GTEFH UykKKyAgICAgIEFkZENvbXBpbGVyRmxhZygiLVduby11bm5hbWVkLXR5cGUtdGVtcGxhdGUtYXJn cyIgQ1hYX0ZMQUdTIHhzaW1kX0FSQ0hJVEVDVFVSRV9GTEFHUykKKyAgIGVuZGlmKCkKKworICAg aWYoeHNpbWRfQ09NUElMRVJfSVNfTVNWQykKKyAgICAgIEFkZENvbXBpbGVyRmxhZygiL2ZwOmZh c3QiIENYWF9GTEFHUyB4c2ltZF9BUkNISVRFQ1RVUkVfRkxBR1MpCisgICBlbHNlKCkKKyAgICAg IEFkZENvbXBpbGVyRmxhZygiLWZmcC1jb250cmFjdD1mYXN0IiBDWFhfRkxBR1MgeHNpbWRfQVJD SElURUNUVVJFX0ZMQUdTKQorCisgICAgICBpZiAoTk9UIFdJTjMyKQorICAgICAgICAgQWRkQ29t cGlsZXJGbGFnKCItZlBJQyIgQ1hYX0ZMQUdTIHhzaW1kX0FSQ0hJVEVDVFVSRV9GTEFHUykKKyAg ICAgIGVuZGlmKCkKKyAgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworIyBoZWxwZXIgbWFjcm8gZm9y IHhzaW1kX2NvbXBpbGVfZm9yX2FsbF9pbXBsZW1lbnRhdGlvbnMKK21hY3JvKF94c2ltZF9jb21w aWxlX29uZV9pbXBsZW1lbnRhdGlvbiBfc3JjcyBfaW1wbCkKKyAgIGxpc3QoRklORCBfZGlzYWJs ZWRfdGFyZ2V0cyAiJHtfaW1wbH0iIF9kaXNhYmxlZF9pbmRleCkKKyAgIGxpc3QoRklORCBfb25s eV90YXJnZXRzICIke19pbXBsfSIgX29ubHlfaW5kZXgpCisgICBpZigke19kaXNhYmxlZF9pbmRl eH0gR1JFQVRFUiAtMSkKKyAgICAgIGlmKCR7X29ubHlfaW5kZXh9IEdSRUFURVIgLTEpCisgICAg ICAgICAjIGRpc2FibGVkIGFuZCBlbmFibGVkIC0+IGVycm9yCisgICAgICAgICBtZXNzYWdlKEZB VEFMX0VSUk9SICJ4c2ltZF9jb21waWxlX2Zvcl9hbGxfaW1wbGVtZW50YXRpb25zIGxpc3RzICR7 X2ltcGx9IGluIGJvdGggdGhlIE9OTFkgYW5kIEVYQ0xVREUgbGlzdHMuIFBsZWFzZSByZW1vdmUg b25lLiIpCisgICAgICBlbmRpZigpCisgICAgICBsaXN0KFJFTU9WRV9BVCBfZGlzYWJsZWRfdGFy Z2V0cyAke19kaXNhYmxlZF9pbmRleH0pCisgICAgICAjIHNraXAgdGhlIHJlc3QgYW5kIHJldHVy bgorICAgZWxzZWlmKChOT1QgX29ubHlfdGFyZ2V0cyBBTkQgTk9UIF9zdGF0ZSBFUVVBTCAzKSBP UiAke19vbmx5X2luZGV4fSBHUkVBVEVSIC0xKQorICAgICAgaWYoJHtfb25seV9pbmRleH0gR1JF QVRFUiAtMSkKKyAgICAgICAgIGxpc3QoUkVNT1ZFX0FUIF9vbmx5X3RhcmdldHMgJHtfb25seV9p bmRleH0pCisgICAgICBlbmRpZigpCisgICAgICBzZXQoX2V4dHJhX2ZsYWdzKQorICAgICAgc2V0 KF9vayBGQUxTRSkKKyAgICAgIGZvcmVhY2goX2ZsYWdzX2l0ICR7QVJHTn0pCisgICAgICAgICBp ZihfZmxhZ3NfaXQgU1RSRVFVQUwgIk5PX0ZMQUciKQorICAgICAgICAgICAgc2V0KF9vayBUUlVF KQorICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgZW5kaWYoKQorICAgICAgICAgc3RyaW5n KFJFUExBQ0UgIiAiICI7IiBfZmxhZ19saXN0ICIke19mbGFnc19pdH0iKQorICAgICAgICAgZm9y ZWFjaChfZiAke19mbGFnX2xpc3R9KQorICAgICAgICAgICAgQWRkQ29tcGlsZXJGbGFnKCR7X2Z9 IENYWF9SRVNVTFQgX29rKQorICAgICAgICAgICAgaWYoTk9UIF9vaykKKyAgICAgICAgICAgICAg IGJyZWFrKCkKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgIGVuZGZvcmVhY2goKQorICAg ICAgICAgaWYoX29rKQorICAgICAgICAgICAgc2V0KF9leHRyYV9mbGFncyAke19mbGFnc19pdH0p CisgICAgICAgICAgICBicmVhaygpCisgICAgICAgICBlbmRpZigpCisgICAgICBlbmRmb3JlYWNo KCkKKworICAgICAgaWYoTVNWQykKKyAgICAgICAgICMgTVNWQyBmb3IgNjRiaXQgZG9lcyBub3Qg cmVjb2duaXplIC9hcmNoOlNTRTIgYW55bW9yZS4gVGhlcmVmb3JlIHdlIHNldCBvdmVycmlkZSBf b2sgaWYgX2ltcGwKKyAgICAgICAgICMgc2F5cyBTU0UKKyAgICAgICAgIGlmKCIke19pbXBsfSIg TUFUQ0hFUyAiU1NFIikKKyAgICAgICAgICAgIHNldChfb2sgVFJVRSkKKyAgICAgICAgIGVuZGlm KCkKKyAgICAgIGVuZGlmKCkKKworICAgICAgaWYoX29rKQorICAgICAgICAgZ2V0X2ZpbGVuYW1l X2NvbXBvbmVudChfb3V0ICIke19fY29tcGlsZV9zcmN9IiBOQU1FX1dFKQorICAgICAgICAgZ2V0 X2ZpbGVuYW1lX2NvbXBvbmVudChfZXh0ICIke19fY29tcGlsZV9zcmN9IiBFWFQpCisgICAgICAg ICBzZXQoX291dCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7X291dH1fJHtfaW1wbH0k e19leHR9IikKKyAgICAgICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgIiR7X291dH0iCisg ICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSAiJHtfX2NvbXBpbGVf c3JjfSIgIiR7X291dH0iCisgICAgICAgICAgICBERVBFTkRTICIke19fY29tcGlsZV9zcmN9Igor ICAgICAgICAgICAgQ09NTUVOVCAiQ29weSB0byAke19vdXR9IgorICAgICAgICAgICAgV09SS0lO R19ESVJFQ1RPUlkgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSIKKyAgICAgICAgICAgIFZF UkJBVElNKQorICAgICAgICAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCAiJHtfb3V0fSIg UFJPUEVSVElFUworICAgICAgICAgICAgQ09NUElMRV9GTEFHUyAiJHtfZmxhZ3N9ICR7X2V4dHJh X2ZsYWdzfSIKKyAgICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgIlhTSU1EX0lNUEw9JHtf aW1wbH0iCisgICAgICAgICApCisgICAgICAgICBsaXN0KEFQUEVORCAke19zcmNzfSAiJHtfb3V0 fSIpCisgICAgICBlbmRpZigpCisgICBlbmRpZigpCitlbmRtYWNybygpCisKKyMgR2VuZXJhdGUg Y29tcGlsZSBydWxlcyBmb3IgdGhlIGdpdmVuIEMrKyBzb3VyY2UgZmlsZSBmb3IgYWxsIGF2YWls YWJsZSBpbXBsZW1lbnRhdGlvbnMgYW5kIHJldHVybgorIyB0aGUgcmVzdWx0aW5nIGxpc3Qgb2Yg b2JqZWN0IGZpbGVzIGluIF9vYmoKKyMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGFkZGl0 aW9uYWwgZmxhZ3MKKyMgRXhhbXBsZToKKyMgICB4c2ltZF9jb21waWxlX2Zvcl9hbGxfaW1wbGVt ZW50YXRpb25zKF9vYmpzIHNyYy90cmlnb25vbWV0cmljLmNwcCBGTEFHUyAtRENPTVBJTEVfQkxB SCBFWENMVURFIFNjYWxhcikKKyMgICBhZGRfZXhlY3V0YWJsZShleGVjdXRhYmxlIG1haW4uY3Bw ICR7X29ianN9KQorbWFjcm8oeHNpbWRfY29tcGlsZV9mb3JfYWxsX2ltcGxlbWVudGF0aW9ucyBf c3JjcyBfc3JjKQorICAgc2V0KF9mbGFncykKKyAgIHVuc2V0KF9kaXNhYmxlZF90YXJnZXRzKQor ICAgdW5zZXQoX29ubHlfdGFyZ2V0cykKKyAgIHNldChfc3RhdGUgMCkKKyAgIGZvcmVhY2goX2Fy ZyAke0FSR059KQorICAgICAgaWYoX2FyZyBTVFJFUVVBTCAiRkxBR1MiKQorICAgICAgICAgc2V0 KF9zdGF0ZSAxKQorICAgICAgZWxzZWlmKF9hcmcgU1RSRVFVQUwgIkVYQ0xVREUiKQorICAgICAg ICAgc2V0KF9zdGF0ZSAyKQorICAgICAgZWxzZWlmKF9hcmcgU1RSRVFVQUwgIk9OTFkiKQorICAg ICAgICAgc2V0KF9zdGF0ZSAzKQorICAgICAgZWxzZWlmKF9zdGF0ZSBFUVVBTCAxKQorICAgICAg ICAgc2V0KF9mbGFncyAiJHtfZmxhZ3N9ICR7X2FyZ30iKQorICAgICAgZWxzZWlmKF9zdGF0ZSBF UVVBTCAyKQorICAgICAgICAgbGlzdChBUFBFTkQgX2Rpc2FibGVkX3RhcmdldHMgIiR7X2FyZ30i KQorICAgICAgZWxzZWlmKF9zdGF0ZSBFUVVBTCAzKQorICAgICAgICAgbGlzdChBUFBFTkQgX29u bHlfdGFyZ2V0cyAiJHtfYXJnfSIpCisgICAgICBlbHNlKCkKKyAgICAgICAgIG1lc3NhZ2UoRkFU QUxfRVJST1IgImluY29ycmVjdCBhcmd1bWVudCB0byB4c2ltZF9jb21waWxlX2Zvcl9hbGxfaW1w bGVtZW50YXRpb25zIikKKyAgICAgIGVuZGlmKCkKKyAgIGVuZGZvcmVhY2goKQorCisgICBzZXQo X19jb21waWxlX3NyYyAiJHtfc3JjfSIpCisKKyAgICMjIE5vdGUgdGhlIGZvbGxvd2luZyBzZXR0 aW5ncyBvZiBkZWZhdWx0X2FyY2ggb24gR0NDOgorICAgIyMgLSBmbWEzPHNzZT4gc2hvdWxkIGJl IC1tc3NlIC1tZm1hIGJ1dCA9PSBmbWEzPGF2eD4KKyAgICMjIC0gZm1hMzxhdngoMik+IGFyZSAt bWF2eCgyKSAtbWZtYQorICAgIyMgLSBmbWE0IHNob3VsZCBiZSAtbWZtYTQgYnV0ID09IGF2eAor ICAgIyMKKyAgICMjIE9uIE1TVkM6CisgICAjIyAtIC9hcmNoOkFWWDUxMiBlbmFibGVzIGFsbCB0 aGUgNTEyIHRhbmRlbQorICAgIyMKKyAgICMjIFRvIHRhcmdldCB0aGUgaW5kaXZpZHVhbCBhcmNo aXRlY3R1cmVzLCBpdCBtdXN0IGJlCisgICAjIyBkb25lIG1hbnVhbGx5IG9yIHZpYSBhIHNwZWNp YWwgZGVmaW5pdGlvbiBoZWFkZXIuCisKKyAgICMjIE5vdGUgdGhlIGZvbGxvd2luZyBmb3IgQXJt OgorICAgIyMgTVNWQyByZXF1aXJlcyBtYW51YWwgcGF0Y2hpbmcgdG8gZGV0ZWN0IE5FT04sCisg ICAjIyBpdHMgaW50cmluc2ljcyBhcmUgYXZhaWxhYmxlIGJ1dCB0aGV5IGFyZSBub3QgZGV0ZWN0 YWJsZS4KKworICAgaWYgKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgTUFUQ0hFUyAiXihhcm0uKnxB Uk0uKikiKQorICAgICAgX3hzaW1kX2NvbXBpbGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9 IFNjYWxhcgorICAgICAgICAgTk9fRkxBRykKKyAgICAgIF94c2ltZF9jb21waWxlX29uZV9pbXBs ZW1lbnRhdGlvbigke19zcmNzfSBORU9OCisgICAgICAgICAiLW1mcHU9bmVvbiIpCisgICBlbHNl aWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVTICJeKGFhcmNoNjQuKnxBQVJDSDY0Lip8 YXJtNjQuKnxBUk02NC4qKSIpCisgICAgICBfeHNpbWRfY29tcGlsZV9vbmVfaW1wbGVtZW50YXRp b24oJHtfc3Jjc30gU2NhbGFyCisgICAgICAgICBOT19GTEFHKQorICAgICAgX3hzaW1kX2NvbXBp bGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9IE5FT042NCBOT19GTEFHKQorICAgZWxzZSgp CisgICAgICBfeHNpbWRfY29tcGlsZV9vbmVfaW1wbGVtZW50YXRpb24oJHtfc3Jjc30gU2NhbGFy CisgICAgICAgICBOT19GTEFHKQorICAgICAgX3hzaW1kX2NvbXBpbGVfb25lX2ltcGxlbWVudGF0 aW9uKCR7X3NyY3N9IFNTRTIKKyAgICAgICAgICItbXNzZTIiICAgICAgICAgIi9hcmNoOlNTRTIi KQorICAgICAgX3hzaW1kX2NvbXBpbGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9IFNTRTMK KyAgICAgICAgICItbXNzZTMiICAgICAgICAgIi9hcmNoOlNTRTIiKQorICAgICAgX3hzaW1kX2Nv bXBpbGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9IFNTU0UzCisgICAgICAgICAiLW1zc3Nl MyIgICAgICAgICIvYXJjaDpTU0UyIikKKyAgICAgIF94c2ltZF9jb21waWxlX29uZV9pbXBsZW1l bnRhdGlvbigke19zcmNzfSBTU0U0XzEKKyAgICAgICAgICItbXNzZTQuMSIgICAgICAgIi9hcmNo OlNTRTIiKQorICAgICAgX3hzaW1kX2NvbXBpbGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9 IFNTRTRfMgorICAgICAgICAgIi1tc3NlNC4yIiAgICAgICAiL2FyY2g6U1NFMiIpCisgICAgICBf eHNpbWRfY29tcGlsZV9vbmVfaW1wbGVtZW50YXRpb24oJHtfc3Jjc30gU1NFNF8yK0ZNQQorICAg ICAgICAgIi1tc3NlNC4yIC1tZm1hIiAiL2FyY2g6QVZYIikKKyAgICAgIF94c2ltZF9jb21waWxl X29uZV9pbXBsZW1lbnRhdGlvbigke19zcmNzfSBGTUE0CisgICAgICAgICAiLW1mbWE0IiAgICAg ICAgICIvYXJjaDpBVlgiKQorICAgICAgX3hzaW1kX2NvbXBpbGVfb25lX2ltcGxlbWVudGF0aW9u KCR7X3NyY3N9IEFWWAorICAgICAgICAgIi1tYXZ4IiAgICAgICAgICAiL2FyY2g6QVZYIikKKyAg ICAgIF94c2ltZF9jb21waWxlX29uZV9pbXBsZW1lbnRhdGlvbigke19zcmNzfSBBVlgrRk1BCisg ICAgICAgICAiLW1hdnggLW1mbWEiICAgICIvYXJjaDpBVlgiKQorICAgICAgX3hzaW1kX2NvbXBp bGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9IEFWWDIKKyAgICAgICAgICItbWF2eDIiICAg ICAgICAgIi9hcmNoOkFWWDIiKQorICAgICAgX3hzaW1kX2NvbXBpbGVfb25lX2ltcGxlbWVudGF0 aW9uKCR7X3NyY3N9IEFWWDIrRk1BCisgICAgICAgICAiLW1hdngyIC1tZm1hIiAgICIvYXJjaDpB VlgyIikKKyAgICAgIF94c2ltZF9jb21waWxlX29uZV9pbXBsZW1lbnRhdGlvbigke19zcmNzfSBB Vlg1MTJGCisgICAgICAgICAiLW1hdng1MTJmIiAgICAgICIvYXJjaDpBVlg1MTIiKQorICAgICAg X3hzaW1kX2NvbXBpbGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9IEFWWDUxMkJXCisgICAg ICAgICAiLW1hdng1MTJidyIgICAgICIvYXJjaDpBVlg1MTIiKQorICAgICAgX3hzaW1kX2NvbXBp bGVfb25lX2ltcGxlbWVudGF0aW9uKCR7X3NyY3N9IEFWWDUxMkNECisgICAgICAgICAiLW1hdng1 MTJjZCIgICAgICIvYXJjaDpBVlg1MTIiKQorICAgICAgX3hzaW1kX2NvbXBpbGVfb25lX2ltcGxl bWVudGF0aW9uKCR7X3NyY3N9IEFWWDUxMkRRCisgICAgICAgICAiLW1hdng1MTJkcSIgICAgICIv YXJjaDpBVlg1MTIiKQorICAgZW5kaWYoKQorICAgbGlzdChMRU5HVEggX29ubHlfdGFyZ2V0cyBf bGVuKQorICAgaWYoX2xlbiBHUkVBVEVSIDApCisgICAgICBtZXNzYWdlKFdBUk5JTkcgIlRoZSBm b2xsb3dpbmcgdW5rbm93biB0YXJnZXRzIHdoZXJlIGxpc3RlZCBpbiB0aGUgT05MWSBsaXN0IG9m IHhzaW1kX2NvbXBpbGVfZm9yX2FsbF9pbXBsZW1lbnRhdGlvbnM6ICcke19vbmx5X3RhcmdldHN9 JyIpCisgICBlbmRpZigpCisgICBsaXN0KExFTkdUSCBfZGlzYWJsZWRfdGFyZ2V0cyBfbGVuKQor ICAgaWYoX2xlbiBHUkVBVEVSIDApCisgICAgICBtZXNzYWdlKFdBUk5JTkcgIlRoZSBmb2xsb3dp bmcgdW5rbm93biB0YXJnZXRzIHdoZXJlIGxpc3RlZCBpbiB0aGUgRVhDTFVERSBsaXN0IG9mIHhz aW1kX2NvbXBpbGVfZm9yX2FsbF9pbXBsZW1lbnRhdGlvbnM6ICcke19kaXNhYmxlZF90YXJnZXRz fSciKQorICAgZW5kaWYoKQorZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvY29uZmlnLXZjLmguY21h a2UgYi9jb25maWctdmMuaC5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5 ZGQ3ZDg4OC4uMDAwMDAwMDAwMAotLS0gYS9jb25maWctdmMuaC5jbWFrZQorKysgL2Rldi9udWxs CkBAIC0xLDQgKzAsMCBAQAotLyogY29uZmlnLXZjLmguICBHZW5lcmF0ZWQgYnkgY21ha2UgZnJv bSBjb25maWctVmMuaC5jbWFrZSAqLwotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgVmMsIHRoZSB2 ZWN0b3JpemF0aW9uIGxpYnJhcnkgKi8KLSNjbWFrZWRlZmluZSBIQVZFX1ZDIDEKZGlmZiAtLWdp dCBhL2NvbmZpZy14c2ltZC5oLmNtYWtlIGIvY29uZmlnLXhzaW1kLmguY21ha2UKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTRiYmRhMDNlYQotLS0gL2Rldi9udWxsCisr KyBiL2NvbmZpZy14c2ltZC5oLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorLyogY29uZmlnLXhzaW1k LmguICBHZW5lcmF0ZWQgYnkgY21ha2UgZnJvbSBjb25maWcteHNpbWQuaC5jbWFrZSAqLworCisv KiBEZWZpbmUgaWYgeW91IGhhdmUgeHNpbWQgKi8KKyNjbWFrZWRlZmluZSBIQVZFX1hTSU1EIDEK ZGlmZiAtLWdpdCBhL2tyaXRhL2RhdGEvYWJvdXRkYXRhL2xpYnJhcmllcy50eHQgYi9rcml0YS9k YXRhL2Fib3V0ZGF0YS9saWJyYXJpZXMudHh0CmluZGV4IGI1ZTFkNTU1OTkuLjg5YmM2YWU1NGIg MTAwNjQ0Ci0tLSBhL2tyaXRhL2RhdGEvYWJvdXRkYXRhL2xpYnJhcmllcy50eHQKKysrIGIva3Jp dGEvZGF0YS9hYm91dGRhdGEvbGlicmFyaWVzLnR4dApAQCAtMjksNSArMjksNSBAQCBRdCxodHRw czovL3d3dy5xdC5pbyxHUEx2MiArIEdQTHYzICsgTEdQTHYyLjEgKyBMR1BMdjMKIFF1YXppcCxo dHRwczovL2dpdGh1Yi5jb20vc3RhY2hlbm92L3F1YXppcCxMR1BMdjIuMQogS1NlRXhwcixodHRw czovL2ludmVudC5rZGUub3JnL2dyYXBoaWNzL0tTZUV4cHIsQXBhY2hlIExpY2Vuc2UgVmVyc2lv biAyLjAKIFNJUCxodHRwczovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY29tL3NvZnR3YXJlL3Np cC9kb3dubG9hZCxHUEx2MwotVmMsaHR0cHM6Ly9naXRodWIuY29tL1ZjRGV2ZWwvVmMsQlNECit4 c2ltZCxodHRwczovL2dpdGh1Yi5jb20veHRlbnNvci1zdGFjay94c2ltZCxCU0QKIHpsaWIsaHR0 cDovL3d3dy56bGliLm5ldC8sQlNECmRpZmYgLS1naXQgYS9saWJzL0NNYWtlTGlzdHMudHh0IGIv bGlicy9DTWFrZUxpc3RzLnR4dAppbmRleCBmZDZmZThhZmRhLi4yMDYxYzc2MDIzIDEwMDY0NAot LS0gYS9saWJzL0NNYWtlTGlzdHMudHh0CisrKyBiL2xpYnMvQ01ha2VMaXN0cy50eHQKQEAgLTIy LDMgKzIyLDQgQEAgYWRkX3N1YmRpcmVjdG9yeSggcmVzb3VyY2VzICkKIGFkZF9zdWJkaXJlY3Rv cnkoIG1ldGFkYXRhICkKIGFkZF9zdWJkaXJlY3RvcnkoIHJlc291cmNld2lkZ2V0cyApCiBhZGRf c3ViZGlyZWN0b3J5KCBwc2QgKQorYWRkX3N1YmRpcmVjdG9yeSggbXVsdGlhcmNoICkKZGlmZiAt LWdpdCBhL2xpYnMvYnJ1c2gvQ01ha2VMaXN0cy50eHQgYi9saWJzL2JydXNoL0NNYWtlTGlzdHMu dHh0CmluZGV4IDg4MDUwYWRlOTMuLjNiNzFlZjhjMjYgMTAwNjQ0Ci0tLSBhL2xpYnMvYnJ1c2gv Q01ha2VMaXN0cy50eHQKKysrIGIvbGlicy9icnVzaC9DTWFrZUxpc3RzLnR4dApAQCAtMzYsMTIg KzM2LDcgQEAgZWxzZSAoKQogICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhrcml0YWxpYmJydXNo IGtyaXRhaW1hZ2UgUXQ1OjpTdmcpCiBlbmRpZiAoKQogCi0KLWlmKEhBVkVfVkMpCi0gIGluY2x1 ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICR7VmNfSU5DTFVERV9ESVJ9KQotICB0YXJnZXRfbGlua19s aWJyYXJpZXMoa3JpdGFsaWJicnVzaCAgJHtWY19MSUJSQVJJRVN9KQotIyAgc2V0KENNQUtFX0NY WF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9ICR7VmNfREVGSU5JVElPTlN9IikKLWVuZGlmKCkK K3RhcmdldF9saW5rX2xpYnJhcmllcyhrcml0YWxpYmJydXNoIGtyaXRhbXVsdGlhcmNoKQogCiBz ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoa3JpdGFsaWJicnVzaCBQUk9QRVJUSUVTCiAgICAgVkVSU0lP TiAke0dFTkVSSUNfS1JJVEFfTElCX1ZFUlNJT059IFNPVkVSU0lPTiAke0dFTkVSSUNfS1JJVEFf TElCX1NPVkVSU0lPTn0KZGlmZiAtLWdpdCBhL2xpYnMvYnJ1c2gvdGVzdHMvQ01ha2VMaXN0cy50 eHQgYi9saWJzL2JydXNoL3Rlc3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IDQyNTAxNWQzZWIuLjQ5 OTUxZDZhNzAgMTAwNjQ0Ci0tLSBhL2xpYnMvYnJ1c2gvdGVzdHMvQ01ha2VMaXN0cy50eHQKKysr IGIvbGlicy9icnVzaC90ZXN0cy9DTWFrZUxpc3RzLnR4dApAQCAtOCwxMiArOCw2IEBAIGluY2x1 ZGVfZGlyZWN0b3JpZXMoU1lTVEVNCiAgICAgJHtFSUdFTjNfSU5DTFVERV9ESVJ9CiApCiAKLWlm KEhBVkVfVkMpCi0gIGluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNCi0gICAgICAke1ZjX0lOQ0xV REVfRElSfQotICApCi1lbmRpZigpCi0KIG1hY3JvX2FkZF91bml0dGVzdF9kZWZpbml0aW9ucygp CiAKIGluY2x1ZGUoRUNNQWRkVGVzdHMpCmRpZmYgLS1naXQgYS9saWJzL2ltYWdlL0NNYWtlTGlz dHMudHh0IGIvbGlicy9pbWFnZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzNWEyNjBmODZmLi4wOGVh ZTk1N2IyIDEwMDY0NAotLS0gYS9saWJzL2ltYWdlL0NNYWtlTGlzdHMudHh0CisrKyBiL2xpYnMv aW1hZ2UvQ01ha2VMaXN0cy50eHQKQEAgLTI1LDggKzI1LDcgQEAgaWYoRkZUVzNfRk9VTkQpCiAg IGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtGRlRXM19JTkNMVURFX0RJUn0pCiBlbmRpZigpCiAKLWlm KEhBVkVfVkMpCi0gIGluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICR7VmNfSU5DTFVERV9ESVJ9 ICR7UXQ1Q29yZV9JTkNMVURFX0RJUlN9ICR7UXQ1R3VpX0lOQ0xVREVfRElSU30pCitpZihIQVZF X1hTSU1EKQogICBrb19jb21waWxlX2Zvcl9hbGxfaW1wbGVtZW50YXRpb25zX25vX3NjYWxhcihf X3Blcl9hcmNoX2NpcmNsZV9tYXNrX2dlbmVyYXRvcl9vYmpzIGtpc19icnVzaF9tYXNrX2FwcGxp Y2F0b3JfZmFjdG9yaWVzLmNwcCkKICAga29fY29tcGlsZV9mb3JfYWxsX2ltcGxlbWVudGF0aW9u c19ub19zY2FsYXIoX3Blcl9hcmNoX3Byb2Nlc3Nvcl9vYmpzIGtpc19icnVzaF9tYXNrX3Byb2Nl c3Nvcl9mYWN0b3JpZXMuY3BwKQogCkBAIC0zOTEsOSArMzkwLDcgQEAgaWYoRkZUVzNfRk9VTkQp CiAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhrcml0YWltYWdlIFBSSVZBVEUgJHtGRlRXM19MSUJS QVJJRVN9KQogZW5kaWYoKQogCi1pZihIQVZFX1ZDKQotICB0YXJnZXRfbGlua19saWJyYXJpZXMo a3JpdGFpbWFnZSBQVUJMSUMgJHtWY19MSUJSQVJJRVN9KQotZW5kaWYoKQordGFyZ2V0X2xpbmtf bGlicmFyaWVzKGtyaXRhaW1hZ2UgUFVCTElDIGtyaXRhbXVsdGlhcmNoKQogCiBpZiAoTk9UIEdT TF9GT1VORCkKICAgbWVzc2FnZSAoV0FSTklORyAiS1JJVEEgV0FSTklORyEgTm8gR05VIFNjaWVu dGlmaWMgTGlicmFyeSB3YXMgZm91bmQhIEtyaXRhJ3MgU2hhcGVkIEdyYWRpZW50cyBtaWdodCBi ZSBub24tbm9ybWFsaXplZCEgUGxlYXNlIGluc3RhbGwgR1NMIGxpYnJhcnkuIikKZGlmZiAtLWdp dCBhL2xpYnMvaW1hZ2Uva2lzX2FudGlhbGlhc2luZ19mYWRlX21ha2VyLmggYi9saWJzL2ltYWdl L2tpc19hbnRpYWxpYXNpbmdfZmFkZV9tYWtlci5oCmluZGV4IGU4YmIzYzg4N2UuLmUyNWNmMDdl MWMgMTAwNjQ0Ci0tLSBhL2xpYnMvaW1hZ2Uva2lzX2FudGlhbGlhc2luZ19mYWRlX21ha2VyLmgK KysrIGIvbGlicy9pbWFnZS9raXNfYW50aWFsaWFzaW5nX2ZhZGVfbWFrZXIuaApAQCAtMSw1ICsx LDYgQEAKIC8qCiAgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxNCBEbWl0cnkgS2F6YWtv diA8ZGltdWxhNzNAZ21haWwuY29tPgorICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIg TC4gRS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJrLm1lPgogICoKICAqICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogICovCkBAIC03LDMzICs4LDM2IEBACiAjaWZuZGVm IF9fS0lTX0FOVElBTElBU0lOR19GQURFX01BS0VSX0gKICNkZWZpbmUgX19LSVNfQU5USUFMSUFT SU5HX0ZBREVfTUFLRVJfSAogCi0jaW5jbHVkZSAia2lzX2dsb2JhbC5oIgorI2luY2x1ZGUgPGtp c19nbG9iYWwuaD4KIAotdGVtcGxhdGUgPGNsYXNzIEJhc2VGYWRlPgorI2luY2x1ZGUgPHhzaW1k X2V4dGVuc2lvbnMveHNpbWQuaHBwPgorCit0ZW1wbGF0ZTxjbGFzcyBCYXNlRmFkZT4KIGNsYXNz IEtpc0FudGlhbGlhc2luZ0ZhZGVNYWtlcjFECiB7CiBwdWJsaWM6CiAgICAgS2lzQW50aWFsaWFz aW5nRmFkZU1ha2VyMUQoY29uc3QgQmFzZUZhZGUgJmJhc2VGYWRlLCBib29sIGVuYWJsZUFudGlh bGlhc2luZykKLSAgICAgICAgOiBtX3JhZGl1cygwLjApLAotICAgICAgICAgIG1fZmFkZVN0YXJ0 VmFsdWUoMCksCi0gICAgICAgICAgbV9hbnRpYWxpYXNpbmdGYWRlU3RhcnQoMCksCi0gICAgICAg ICAgbV9hbnRpYWxpYXNpbmdGYWRlQ29lZmYoMCksCi0gICAgICAgICAgbV9lbmFibGVBbnRpYWxp YXNpbmcoZW5hYmxlQW50aWFsaWFzaW5nKSwKLSAgICAgICAgICBtX2Jhc2VGYWRlKGJhc2VGYWRl KQorICAgICAgICA6IG1fcmFkaXVzKDAuMCkKKyAgICAgICAgLCBtX2ZhZGVTdGFydFZhbHVlKDAp CisgICAgICAgICwgbV9hbnRpYWxpYXNpbmdGYWRlU3RhcnQoMCkKKyAgICAgICAgLCBtX2FudGlh bGlhc2luZ0ZhZGVDb2VmZigwKQorICAgICAgICAsIG1fZW5hYmxlQW50aWFsaWFzaW5nKGVuYWJs ZUFudGlhbGlhc2luZykKKyAgICAgICAgLCBtX2Jhc2VGYWRlKGJhc2VGYWRlKQogICAgIHsKICAg ICB9CiAKICAgICBLaXNBbnRpYWxpYXNpbmdGYWRlTWFrZXIxRChjb25zdCBLaXNBbnRpYWxpYXNp bmdGYWRlTWFrZXIxRCAmcmhzLCBjb25zdCBCYXNlRmFkZSAmYmFzZUZhZGUpCi0gICAgICAgIDog bV9yYWRpdXMocmhzLm1fcmFkaXVzKSwKLSAgICAgICAgICBtX2ZhZGVTdGFydFZhbHVlKHJocy5t X2ZhZGVTdGFydFZhbHVlKSwKLSAgICAgICAgICBtX2FudGlhbGlhc2luZ0ZhZGVTdGFydChyaHMu bV9hbnRpYWxpYXNpbmdGYWRlU3RhcnQpLAotICAgICAgICAgIG1fYW50aWFsaWFzaW5nRmFkZUNv ZWZmKHJocy5tX2FudGlhbGlhc2luZ0ZhZGVDb2VmZiksCi0gICAgICAgICAgbV9lbmFibGVBbnRp YWxpYXNpbmcocmhzLm1fZW5hYmxlQW50aWFsaWFzaW5nKSwKLSAgICAgICAgICBtX2Jhc2VGYWRl KGJhc2VGYWRlKQorICAgICAgICA6IG1fcmFkaXVzKHJocy5tX3JhZGl1cykKKyAgICAgICAgLCBt X2ZhZGVTdGFydFZhbHVlKHJocy5tX2ZhZGVTdGFydFZhbHVlKQorICAgICAgICAsIG1fYW50aWFs aWFzaW5nRmFkZVN0YXJ0KHJocy5tX2FudGlhbGlhc2luZ0ZhZGVTdGFydCkKKyAgICAgICAgLCBt X2FudGlhbGlhc2luZ0ZhZGVDb2VmZihyaHMubV9hbnRpYWxpYXNpbmdGYWRlQ29lZmYpCisgICAg ICAgICwgbV9lbmFibGVBbnRpYWxpYXNpbmcocmhzLm1fZW5hYmxlQW50aWFsaWFzaW5nKQorICAg ICAgICAsIG1fYmFzZUZhZGUoYmFzZUZhZGUpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgc2V0 U3F1YXJlTm9ybUNvZWZmcyhxcmVhbCB4Y29lZmYsIHFyZWFsIHljb2VmZikgeworICAgIHZvaWQg c2V0U3F1YXJlTm9ybUNvZWZmcyhxcmVhbCB4Y29lZmYsIHFyZWFsIHljb2VmZikKKyAgICB7CiAg ICAgICAgIG1fcmFkaXVzID0gMS4wOwogCiAgICAgICAgIHFyZWFsIHhmID0gcU1heCgwLjAsICgo MS4wIC8geGNvZWZmKSAtIDEuMCkgKiB4Y29lZmYpOwpAQCAtNDUsNyArNDksOCBAQCBwdWJsaWM6 CiAgICAgICAgIG1fYW50aWFsaWFzaW5nRmFkZUNvZWZmID0gcU1heCgwLjAsIDI1NS4wIC0gbV9m YWRlU3RhcnRWYWx1ZSkgLyAobV9yYWRpdXMgLSBtX2FudGlhbGlhc2luZ0ZhZGVTdGFydCk7CiAg ICAgfQogCi0gICAgdm9pZCBzZXRSYWRpdXMocXJlYWwgcmFkaXVzKSB7CisgICAgdm9pZCBzZXRS YWRpdXMocXJlYWwgcmFkaXVzKQorICAgIHsKICAgICAgICAgbV9yYWRpdXMgPSByYWRpdXM7CiAg ICAgICAgIG1fYW50aWFsaWFzaW5nRmFkZVN0YXJ0ID0gcU1heCgwLjAsIG1fcmFkaXVzIC0gMS4w KTsKIApAQCAtNTMsNyArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYW50aWFsaWFzaW5nRmFk ZUNvZWZmID0gcU1heCgwLjAsIDI1NS4wIC0gbV9mYWRlU3RhcnRWYWx1ZSkgLyAobV9yYWRpdXMg LSBtX2FudGlhbGlhc2luZ0ZhZGVTdGFydCk7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgbmVl ZEZhZGUocXJlYWwgZGlzdCwgcXVpbnQ4ICp2YWx1ZSkgeworICAgIGlubGluZSBib29sIG5lZWRG YWRlKHFyZWFsIGRpc3QsIHF1aW50OCAqdmFsdWUpCisgICAgewogICAgICAgICBpZiAoZGlzdCA+ IG1fcmFkaXVzKSB7CiAgICAgICAgICAgICAqdmFsdWUgPSAyNTU7CiAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKQEAgLTcxLDMwICs3NywzNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICB9CiAKLSNpZiBkZWZpbmVkIEhBVkVfVkMKLSAgICBWYzo6ZmxvYXRfbSBuZWVkRmFk ZShWYzo6ZmxvYXRfdiAmZGlzdCkgewotICAgICAgICBjb25zdCBWYzo6ZmxvYXRfdiB2T25lKFZj OjpPbmUpOwotICAgICAgICBjb25zdCBWYzo6ZmxvYXRfdiB2VmFsTWF4KDI1NS5mKTsKKyNpZiBk ZWZpbmVkIEhBVkVfWFNJTUQKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBPgorICAgIHhzaW1kOjpi YXRjaF9ib29sPGZsb2F0LCBBPiBuZWVkRmFkZSh4c2ltZDo6YmF0Y2g8ZmxvYXQsIEE+ICZkaXN0 KQorICAgIHsKKyAgICAgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxmbG9hdCwgQT47 CisgICAgICAgIHVzaW5nIGZsb2F0X20gPSB0eXBlbmFtZSBmbG9hdF92OjpiYXRjaF9ib29sX3R5 cGU7CisKKyAgICAgICAgY29uc3QgZmxvYXRfdiB2T25lKDEpOworICAgICAgICBjb25zdCBmbG9h dF92IHZWYWxNYXgoMjU1LmYpOwogCi0gICAgICAgIFZjOjpmbG9hdF92IHZSYWRpdXMobV9yYWRp dXMpOwotICAgICAgICBWYzo6ZmxvYXRfdiB2RmFkZVN0YXJ0VmFsdWUobV9mYWRlU3RhcnRWYWx1 ZSk7Ci0gICAgICAgIFZjOjpmbG9hdF92IHZBbnRpYWxpYXNpbmdGYWRlU3RhcnQobV9hbnRpYWxp YXNpbmdGYWRlU3RhcnQpOwotICAgICAgICBWYzo6ZmxvYXRfdiB2QW50aWFsaWFzaW5nRmFkZUNv ZWZmKG1fYW50aWFsaWFzaW5nRmFkZUNvZWZmKTsKKyAgICAgICAgZmxvYXRfdiB2UmFkaXVzKG1f cmFkaXVzKTsKKyAgICAgICAgZmxvYXRfdiB2RmFkZVN0YXJ0VmFsdWUobV9mYWRlU3RhcnRWYWx1 ZSk7CisgICAgICAgIGZsb2F0X3YgdkFudGlhbGlhc2luZ0ZhZGVTdGFydChtX2FudGlhbGlhc2lu Z0ZhZGVTdGFydCk7CisgICAgICAgIGZsb2F0X3YgdkFudGlhbGlhc2luZ0ZhZGVDb2VmZihtX2Fu dGlhbGlhc2luZ0ZhZGVDb2VmZik7CiAKLSAgICAgICAgVmM6OmZsb2F0X20gb3V0c2lkZU1hc2sg PSBkaXN0ID4gdlJhZGl1czsKLSAgICAgICAgZGlzdChvdXRzaWRlTWFzaykgPSB2T25lOworICAg ICAgICBmbG9hdF9tIG91dHNpZGVNYXNrID0gZGlzdCA+IHZSYWRpdXM7CisgICAgICAgIGRpc3Qg PSB4c2ltZDo6c2V0X29uZShkaXN0LCBvdXRzaWRlTWFzayk7CiAKLSAgICAgICAgVmM6OmZsb2F0 X20gZmFkZVN0YXJ0TWFzayhmYWxzZSk7CisgICAgICAgIGZsb2F0X20gZmFkZVN0YXJ0TWFzayhm YWxzZSk7CiAKLSAgICAgICAgaWYobV9lbmFibGVBbnRpYWxpYXNpbmcpeworICAgICAgICBpZiAo bV9lbmFibGVBbnRpYWxpYXNpbmcpIHsKICAgICAgICAgICAgIGZhZGVTdGFydE1hc2sgPSBkaXN0 ID4gdkFudGlhbGlhc2luZ0ZhZGVTdGFydDsKLSAgICAgICAgICAgIGRpc3QoKG91dHNpZGVNYXNr IF4gZmFkZVN0YXJ0TWFzaykgJiBmYWRlU3RhcnRNYXNrKSA9ICh2RmFkZVN0YXJ0VmFsdWUgKwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChkaXN0IC0gdkFudGlhbGlhc2luZ0ZhZGVTdGFydCkgKiB2QW50aWFsaWFzaW5nRmFk ZUNvZWZmKSAvIHZWYWxNYXg7CisgICAgICAgICAgICBkaXN0ID0geHNpbWQ6OnNlbGVjdCgob3V0 c2lkZU1hc2sgXiBmYWRlU3RhcnRNYXNrKSAmIGZhZGVTdGFydE1hc2ssCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodkZhZGVTdGFydFZhbHVlICsgKGRpc3QgLSB2QW50aWFsaWFz aW5nRmFkZVN0YXJ0KSAqIHZBbnRpYWxpYXNpbmdGYWRlQ29lZmYpIC8gdlZhbE1heCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QpOwogICAgICAgICB9CiAgICAgICAgIHJl dHVybiAob3V0c2lkZU1hc2sgfCBmYWRlU3RhcnRNYXNrKTsKICAgICB9CiAKLSNlbmRpZiAvKiBk ZWZpbmVkIEhBVkVfVkMgKi8KKyNlbmRpZiAvKiBkZWZpbmVkIEhBVkVfWFNJTUQgKi8KIAogcHJp dmF0ZToKICAgICBxcmVhbCBtX3JhZGl1czsKQEAgLTEwNSwzNSArMTE3LDM2IEBAIHByaXZhdGU6 CiAgICAgY29uc3QgQmFzZUZhZGUgJm1fYmFzZUZhZGU7CiB9OwogCi10ZW1wbGF0ZSA8Y2xhc3Mg QmFzZUZhZGU+Cit0ZW1wbGF0ZTxjbGFzcyBCYXNlRmFkZT4KIGNsYXNzIEtpc0FudGlhbGlhc2lu Z0ZhZGVNYWtlcjJECiB7CiBwdWJsaWM6CiAgICAgS2lzQW50aWFsaWFzaW5nRmFkZU1ha2VyMkQo Y29uc3QgQmFzZUZhZGUgJmJhc2VGYWRlLCBib29sIGVuYWJsZUFudGlhbGlhc2luZykKLSAgICAg ICAgOiBtX3hMaW1pdCgwKSwKLSAgICAgICAgICBtX3lMaW1pdCgwKSwKLSAgICAgICAgICBtX3hG YWRlTGltaXRTdGFydCgwKSwKLSAgICAgICAgICBtX3lGYWRlTGltaXRTdGFydCgwKSwKLSAgICAg ICAgICBtX3hGYWRlQ29lZmYoMCksCi0gICAgICAgICAgbV95RmFkZUNvZWZmKDApLAotICAgICAg ICAgIG1fZW5hYmxlQW50aWFsaWFzaW5nKGVuYWJsZUFudGlhbGlhc2luZyksCi0gICAgICAgICAg bV9iYXNlRmFkZShiYXNlRmFkZSkKKyAgICAgICAgOiBtX3hMaW1pdCgwKQorICAgICAgICAsIG1f eUxpbWl0KDApCisgICAgICAgICwgbV94RmFkZUxpbWl0U3RhcnQoMCkKKyAgICAgICAgLCBtX3lG YWRlTGltaXRTdGFydCgwKQorICAgICAgICAsIG1feEZhZGVDb2VmZigwKQorICAgICAgICAsIG1f eUZhZGVDb2VmZigwKQorICAgICAgICAsIG1fZW5hYmxlQW50aWFsaWFzaW5nKGVuYWJsZUFudGlh bGlhc2luZykKKyAgICAgICAgLCBtX2Jhc2VGYWRlKGJhc2VGYWRlKQogICAgIHsKICAgICB9CiAK ICAgICBLaXNBbnRpYWxpYXNpbmdGYWRlTWFrZXIyRChjb25zdCBLaXNBbnRpYWxpYXNpbmdGYWRl TWFrZXIyRCAmcmhzLCBjb25zdCBCYXNlRmFkZSAmYmFzZUZhZGUpCi0gICAgICAgIDogbV94TGlt aXQocmhzLm1feExpbWl0KSwKLSAgICAgICAgICBtX3lMaW1pdChyaHMubV95TGltaXQpLAotICAg ICAgICAgIG1feEZhZGVMaW1pdFN0YXJ0KHJocy5tX3hGYWRlTGltaXRTdGFydCksCi0gICAgICAg ICAgbV95RmFkZUxpbWl0U3RhcnQocmhzLm1feUZhZGVMaW1pdFN0YXJ0KSwKLSAgICAgICAgICBt X3hGYWRlQ29lZmYocmhzLm1feEZhZGVDb2VmZiksCi0gICAgICAgICAgbV95RmFkZUNvZWZmKHJo cy5tX3lGYWRlQ29lZmYpLAotICAgICAgICAgIG1fZW5hYmxlQW50aWFsaWFzaW5nKHJocy5tX2Vu YWJsZUFudGlhbGlhc2luZyksCi0gICAgICAgICAgbV9iYXNlRmFkZShiYXNlRmFkZSkKKyAgICAg ICAgOiBtX3hMaW1pdChyaHMubV94TGltaXQpCisgICAgICAgICwgbV95TGltaXQocmhzLm1feUxp bWl0KQorICAgICAgICAsIG1feEZhZGVMaW1pdFN0YXJ0KHJocy5tX3hGYWRlTGltaXRTdGFydCkK KyAgICAgICAgLCBtX3lGYWRlTGltaXRTdGFydChyaHMubV95RmFkZUxpbWl0U3RhcnQpCisgICAg ICAgICwgbV94RmFkZUNvZWZmKHJocy5tX3hGYWRlQ29lZmYpCisgICAgICAgICwgbV95RmFkZUNv ZWZmKHJocy5tX3lGYWRlQ29lZmYpCisgICAgICAgICwgbV9lbmFibGVBbnRpYWxpYXNpbmcocmhz Lm1fZW5hYmxlQW50aWFsaWFzaW5nKQorICAgICAgICAsIG1fYmFzZUZhZGUoYmFzZUZhZGUpCiAg ICAgewogICAgIH0KIAotICAgIHZvaWQgc2V0TGltaXRzKHFyZWFsIGhhbGZXaWR0aCwgcXJlYWwg aGFsZkhlaWdodCkgeworICAgIHZvaWQgc2V0TGltaXRzKHFyZWFsIGhhbGZXaWR0aCwgcXJlYWwg aGFsZkhlaWdodCkKKyAgICB7CiAgICAgICAgIG1feExpbWl0ID0gaGFsZldpZHRoOwogICAgICAg ICBtX3lMaW1pdCA9IGhhbGZIZWlnaHQ7CiAKQEAgLTE0NCw3ICsxNTcsOCBAQCBwdWJsaWM6CiAg ICAgICAgIG1feUZhZGVDb2VmZiA9IDEuMCAvIChtX3lMaW1pdCAtIG1feUZhZGVMaW1pdFN0YXJ0 KTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBuZWVkRmFkZShxcmVhbCB4LCBxcmVhbCB5LCBx dWludDggKnZhbHVlKSB7CisgICAgaW5saW5lIGJvb2wgbmVlZEZhZGUocXJlYWwgeCwgcXJlYWwg eSwgcXVpbnQ4ICp2YWx1ZSkKKyAgICB7CiAgICAgICAgIHggPSBxQWJzKHgpOwogICAgICAgICB5 ID0gcUFicyh5KTsKIApAQCAtMTg3LDU3ICsyMDEsNjcgQEAgcHVibGljOgogICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgfQogCi0jaWYgZGVmaW5lZCBIQVZFX1ZDCi0gICAgVmM6OmZsb2F0X20g bmVlZEZhZGUoVmM6OmZsb2F0X3YgJnhyLCBWYzo6ZmxvYXRfdiAmeXIpIGNvbnN0IHsKKyNpZiBk ZWZpbmVkIEhBVkVfWFNJTUQKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBPgorICAgIHhzaW1kOjpi YXRjaF9ib29sPGZsb2F0LCBBPiBuZWVkRmFkZSh4c2ltZDo6YmF0Y2g8ZmxvYXQsIEE+ICZ4ciwg eHNpbWQ6OmJhdGNoPGZsb2F0LCBBPiAmeXIpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBm bG9hdF92ID0geHNpbWQ6OmJhdGNoPGZsb2F0LCBBPjsKKyAgICAgICAgdXNpbmcgZmxvYXRfbSA9 IHR5cGVuYW1lIGZsb2F0X3Y6OmJhdGNoX2Jvb2xfdHlwZTsKIAotICAgICAgICBWYzo6ZmxvYXRf diB2WExpbWl0KG1feExpbWl0KTsKLSAgICAgICAgVmM6OmZsb2F0X3YgdllMaW1pdChtX3lMaW1p dCk7CisgICAgICAgIGZsb2F0X3YgdlhMaW1pdChtX3hMaW1pdCk7CisgICAgICAgIGZsb2F0X3Yg dllMaW1pdChtX3lMaW1pdCk7CiAKLSAgICAgICAgVmM6OmZsb2F0X20gb3V0WE1hc2sgPSBWYzo6 YWJzKHhyKSA+IHZYTGltaXQ7Ci0gICAgICAgIFZjOjpmbG9hdF9tIG91dFlNYXNrID0gVmM6OmFi cyh5cikgPiB2WUxpbWl0OworICAgICAgICBmbG9hdF9tIG91dFhNYXNrID0geHNpbWQ6OmFicyh4 cikgPiB2WExpbWl0OworICAgICAgICBmbG9hdF9tIG91dFlNYXNrID0geHNpbWQ6OmFicyh5cikg PiB2WUxpbWl0OwogCiAgICAgICAgIHJldHVybiAob3V0WE1hc2sgfCBvdXRZTWFzayk7CiAgICAg fQogCiAgICAgLy8gQXBwbHkgZmFkZXIgc2VwYXJhdGVseSB0byBhdm9pZCBjYWxjdWxhdGluZyB2 VmFsdWUgdHdpY2UuCi0gICAgdm9pZCBhcHBseTJERmFkZXIoVmM6OmZsb2F0X3YgJnZWYWx1ZSwg VmM6OmZsb2F0X20gJmV4Y2x1ZGVNYXNrLCBWYzo6ZmxvYXRfdiAmeHIsIFZjOjpmbG9hdF92ICZ5 cikgY29uc3QgewotICAgICAgICBjb25zdCBWYzo6ZmxvYXRfdiB2VmFsTWF4KDI1NS5mKTsKKyAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBBPgorICAgIHZvaWQgYXBwbHkyREZhZGVyKHhzaW1kOjpiYXRj aDxmbG9hdCwgQT4gJnZWYWx1ZSwgeHNpbWQ6OmJhdGNoX2Jvb2w8ZmxvYXQsIEE+ICZleGNsdWRl TWFzaywgeHNpbWQ6OmJhdGNoPGZsb2F0LCBBPiAmeHIsIHhzaW1kOjpiYXRjaDxmbG9hdCwgQT4g JnlyKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxm bG9hdCwgQT47CisgICAgICAgIHVzaW5nIGZsb2F0X20gPSB0eXBlbmFtZSBmbG9hdF92OjpiYXRj aF9ib29sX3R5cGU7CisKKyAgICAgICAgY29uc3QgZmxvYXRfdiB2VmFsTWF4KDI1NS5mKTsKIAot ICAgICAgICBpZihtX2VuYWJsZUFudGlhbGlhc2luZyl7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRf diB2WEZhZGVMaW1pdFN0YXJ0KG1feEZhZGVMaW1pdFN0YXJ0KTsKLSAgICAgICAgICAgIFZjOjpm bG9hdF92IHZZRmFkZUxpbWl0U3RhcnQobV95RmFkZUxpbWl0U3RhcnQpOwotICAgICAgICAgICAg VmM6OmZsb2F0X3YgdlhGYWRlQ29lZmYobV94RmFkZUNvZWZmKTsKLSAgICAgICAgICAgIFZjOjpm bG9hdF92IHZZRmFkZUNvZWZmKG1feUZhZGVDb2VmZik7CisgICAgICAgIGlmIChtX2VuYWJsZUFu dGlhbGlhc2luZykgeworICAgICAgICAgICAgZmxvYXRfdiB2WEZhZGVMaW1pdFN0YXJ0KG1feEZh ZGVMaW1pdFN0YXJ0KTsKKyAgICAgICAgICAgIGZsb2F0X3YgdllGYWRlTGltaXRTdGFydChtX3lG YWRlTGltaXRTdGFydCk7CisgICAgICAgICAgICBmbG9hdF92IHZYRmFkZUNvZWZmKG1feEZhZGVD b2VmZik7CisgICAgICAgICAgICBmbG9hdF92IHZZRmFkZUNvZWZmKG1feUZhZGVDb2VmZik7CiAK LSAgICAgICAgICAgIFZjOjpmbG9hdF92IHhyYSA9IGFicyh4cik7Ci0gICAgICAgICAgICBWYzo6 ZmxvYXRfbSBmYWRlWFN0YXJ0TWFzayhmYWxzZSk7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfbSBm YWRlWVN0YXJ0TWFzayhmYWxzZSk7CisgICAgICAgICAgICBmbG9hdF92IHhyYSA9IHhzaW1kOjph YnMoeHIpOworICAgICAgICAgICAgZmxvYXRfbSBmYWRlWFN0YXJ0TWFzayhmYWxzZSk7CisgICAg ICAgICAgICBmbG9hdF9tIGZhZGVZU3RhcnRNYXNrKGZhbHNlKTsKIAotICAgICAgICAgICAgVmM6 OmZsb2F0X3YgZmFkZVZhbHVlOwotICAgICAgICAgICAgVmM6OlNpbWRBcnJheTxxdWludDE2LFZj OjpmbG9hdF92OjpzaXplKCk+IHZCYXNlVmFsdWUodlZhbHVlKTsKKyAgICAgICAgICAgIGZsb2F0 X3YgZmFkZVZhbHVle307CisgICAgICAgICAgICBmbG9hdF92IHZCYXNlVmFsdWUgPSB4c2ltZDo6 dHJ1bmNhdGVfdG9fdHlwZTx1aW50MTZfdD4odlZhbHVlKTsKIAogICAgICAgICAgICAgZmFkZVhT dGFydE1hc2sgPSB4cmEgPiB2WEZhZGVMaW1pdFN0YXJ0OwogICAgICAgICAgICAgZmFkZVhTdGFy dE1hc2sgPSAoZmFkZVhTdGFydE1hc2sgXiBleGNsdWRlTWFzaykgJiBmYWRlWFN0YXJ0TWFzazsK LSAgICAgICAgICAgIGlmICghZmFkZVhTdGFydE1hc2suaXNGdWxsKCkpIHsKKyAgICAgICAgICAg IGlmICgheHNpbWQ6OmFsbChmYWRlWFN0YXJ0TWFzaykpIHsKICAgICAgICAgICAgICAgICBmYWRl VmFsdWUgPSB2QmFzZVZhbHVlICsgKHZWYWxNYXggLSB2QmFzZVZhbHVlKSAqICh4cmEgLSB2WEZh ZGVMaW1pdFN0YXJ0KSAqIHZYRmFkZUNvZWZmOwotICAgICAgICAgICAgICAgIGZhZGVWYWx1ZShm YWRlWFN0YXJ0TWFzayAmICgoeXIgPiB2WUZhZGVMaW1pdFN0YXJ0KSAmIChmYWRlVmFsdWUgPCB2 VmFsTWF4KSkgKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWRlVmFsdWUgKyAodlZhbE1h eCAtIGZhZGVWYWx1ZSkgKiAoeXIgLSB2WUZhZGVMaW1pdFN0YXJ0KSAqIHZZRmFkZUNvZWZmOwot ICAgICAgICAgICAgICAgIHZWYWx1ZShmYWRlWFN0YXJ0TWFzaykgPSBmYWRlVmFsdWU7CisgICAg ICAgICAgICAgICAgZmFkZVZhbHVlID0geHNpbWQ6OnNlbGVjdChmYWRlWFN0YXJ0TWFzayAmICgo eXIgPiB2WUZhZGVMaW1pdFN0YXJ0KSAmIChmYWRlVmFsdWUgPCB2VmFsTWF4KSksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWRlVmFsdWUgKyAodlZhbE1heCAt IGZhZGVWYWx1ZSkgKiAoeXIgLSB2WUZhZGVMaW1pdFN0YXJ0KSAqIHZZRmFkZUNvZWZmLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZVZhbHVlKTsKKyAgICAg ICAgICAgICAgICB2VmFsdWUgPSB4c2ltZDo6c2VsZWN0KGZhZGVYU3RhcnRNYXNrLCBmYWRlVmFs dWUsIHZWYWx1ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZhZGVZU3RhcnRNYXNr ID0geXIgPiB2WUZhZGVMaW1pdFN0YXJ0OwogICAgICAgICAgICAgZmFkZVlTdGFydE1hc2sgPSAo ZmFkZVlTdGFydE1hc2sgXiBmYWRlWFN0YXJ0TWFzaykgJiBmYWRlWVN0YXJ0TWFzazsKLSAgICAg ICAgICAgIGlmICghZmFkZVlTdGFydE1hc2suaXNGdWxsKCkpIHsKKyAgICAgICAgICAgIGlmICgh eHNpbWQ6OmFsbChmYWRlWVN0YXJ0TWFzaykpIHsKICAgICAgICAgICAgICAgICBmYWRlVmFsdWUg PSB2QmFzZVZhbHVlICsgKHZWYWxNYXggLSB2QmFzZVZhbHVlKSAqICh5ciAtIHZZRmFkZUxpbWl0 U3RhcnQpICogdllGYWRlQ29lZmY7Ci0gICAgICAgICAgICAgICAgZmFkZVZhbHVlKGZhZGVZU3Rh cnRNYXNrICYgKCh4cmEgPiB2WEZhZGVMaW1pdFN0YXJ0KSAmIChmYWRlVmFsdWUgPCB2VmFsTWF4 KSkgKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWRlVmFsdWUgKyAodlZhbE1heCAtIGZh ZGVWYWx1ZSkgKiAoeHJhIC0gdlhGYWRlTGltaXRTdGFydCkgKiB2WEZhZGVDb2VmZjsKLSAgICAg ICAgICAgICAgICB2VmFsdWUoZmFkZVlTdGFydE1hc2spID0gZmFkZVZhbHVlOworICAgICAgICAg ICAgICAgIGZhZGVWYWx1ZSA9IHhzaW1kOjpzZWxlY3QoZmFkZVlTdGFydE1hc2sgJiAoKHhyYSA+ IHZYRmFkZUxpbWl0U3RhcnQpICYgKGZhZGVWYWx1ZSA8IHZWYWxNYXgpKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhZGVWYWx1ZSArICh2VmFsTWF4IC0gZmFk ZVZhbHVlKSAqICh4cmEgLSB2WEZhZGVMaW1pdFN0YXJ0KSAqIHZYRmFkZUNvZWZmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZVZhbHVlKTsKKyAgICAgICAg ICAgICAgICB2VmFsdWUgPSB4c2ltZDo6c2VsZWN0KGZhZGVZU3RhcnRNYXNrLCBmYWRlVmFsdWUs IHZWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwogICAg IH0KIAotI2VuZGlmIC8qIGRlZmluZWQgSEFWRV9WQyAqLworI2VuZGlmIC8qIGRlZmluZWQgSEFW RV9YU0lNRCAqLwogCiBwcml2YXRlOgogICAgIHFyZWFsIG1feExpbWl0OwpkaWZmIC0tZ2l0IGEv bGlicy9pbWFnZS9raXNfYmFzZV9tYXNrX2dlbmVyYXRvci5jcHAgYi9saWJzL2ltYWdlL2tpc19i YXNlX21hc2tfZ2VuZXJhdG9yLmNwcAppbmRleCA5NGEzZjc1NWEyLi5lYmFkMzY4ZTViIDEwMDY0 NAotLS0gYS9saWJzL2ltYWdlL2tpc19iYXNlX21hc2tfZ2VuZXJhdG9yLmNwcAorKysgYi9saWJz L2ltYWdlL2tpc19iYXNlX21hc2tfZ2VuZXJhdG9yLmNwcApAQCAtNyw3ICs3LDcgQEAKICAqICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogICovCiAKLSNpbmNsdWRl IDxjb21wb3NpdGVvcHMvS29WY011bHRpQXJjaEJ1aWxkU3VwcG9ydC5oPiAvL3ZjLmggbXVzdCBj b21lIGZpcnN0CisjaW5jbHVkZSA8Y29tcG9zaXRlb3BzL0tvTXVsdGlBcmNoQnVpbGRTdXBwb3J0 Lmg+CiAKICNpbmNsdWRlICJraXNfYnJ1c2hfbWFza19hcHBsaWNhdG9yX2ZhY3Rvcmllcy5oIgog I2luY2x1ZGUgImtpc19tYXNrX2dlbmVyYXRvci5oIgpkaWZmIC0tZ2l0IGEvbGlicy9pbWFnZS9r aXNfYnJ1c2hfbWFza19hcHBsaWNhdG9yX2ZhY3Rvcmllcy5jcHAgYi9saWJzL2ltYWdlL2tpc19i cnVzaF9tYXNrX2FwcGxpY2F0b3JfZmFjdG9yaWVzLmNwcAppbmRleCAxMDVkODU3N2RhLi4yMjRi NzcwM2ZjIDEwMDY0NAotLS0gYS9saWJzL2ltYWdlL2tpc19icnVzaF9tYXNrX2FwcGxpY2F0b3Jf ZmFjdG9yaWVzLmNwcAorKysgYi9saWJzL2ltYWdlL2tpc19icnVzaF9tYXNrX2FwcGxpY2F0b3Jf ZmFjdG9yaWVzLmNwcApAQCAtMTQsNjEgKzE0LDYwIEBACiAjaW5jbHVkZSAia2lzX2N1cnZlX3Jl Y3RfbWFza19nZW5lcmF0b3IuaCIKICNpbmNsdWRlICJraXNfcmVjdF9tYXNrX2dlbmVyYXRvci5o IgogCi0jaW5jbHVkZSAia2lzX2JydXNoX21hc2tfYXBwbGljYXRvcl9iYXNlLmgiCiAjaW5jbHVk ZSAia2lzX2JydXNoX21hc2tfdmVjdG9yX2FwcGxpY2F0b3IuaCIKIAogdGVtcGxhdGU8PgogdGVt cGxhdGU8PgogTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc01hc2tHZW5lcmF0b3I+OjpSZXR1cm5U eXBlCi1NYXNrQXBwbGljYXRvckZhY3Rvcnk8S2lzTWFza0dlbmVyYXRvcj46OmNyZWF0ZTxWYzo6 Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KFBhcmFtVHlwZSBtYXNrR2VuZXJhdG9y KQorTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc01hc2tHZW5lcmF0b3I+OjpjcmVhdGU8eHNpbWQ6 OmN1cnJlbnRfYXJjaD4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCiB7Ci0gICAgcmV0dXJuIG5l dyBLaXNCcnVzaE1hc2tTY2FsYXJBcHBsaWNhdG9yPEtpc01hc2tHZW5lcmF0b3IsIFZjOjpDdXJy ZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4obWFza0dlbmVyYXRvcik7CisgICAgcmV0dXJu IG5ldyBLaXNCcnVzaE1hc2tTY2FsYXJBcHBsaWNhdG9yPEtpc01hc2tHZW5lcmF0b3IseHNpbWQ6 OmN1cnJlbnRfYXJjaD4obWFza0dlbmVyYXRvcik7CiB9CiAKIHRlbXBsYXRlPD4KIHRlbXBsYXRl PD4KIE1hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNDaXJjbGVNYXNrR2VuZXJhdG9yPjo6UmV0dXJu VHlwZQotTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0NpcmNsZU1hc2tHZW5lcmF0b3I+OjpjcmVh dGU8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihQYXJhbVR5cGUgbWFza0dl bmVyYXRvcikKK01hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNDaXJjbGVNYXNrR2VuZXJhdG9yPjo6 Y3JlYXRlPHhzaW1kOjpjdXJyZW50X2FyY2g+KFBhcmFtVHlwZSBtYXNrR2VuZXJhdG9yKQogewot ICAgIHJldHVybiBuZXcgS2lzQnJ1c2hNYXNrVmVjdG9yQXBwbGljYXRvcjxLaXNDaXJjbGVNYXNr R2VuZXJhdG9yLCBWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KG1hc2tHZW5l cmF0b3IpOworICAgIHJldHVybiBuZXcgS2lzQnJ1c2hNYXNrVmVjdG9yQXBwbGljYXRvcjxLaXND aXJjbGVNYXNrR2VuZXJhdG9yLHhzaW1kOjpjdXJyZW50X2FyY2g+KG1hc2tHZW5lcmF0b3IpOwog fQogCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBNYXNrQXBwbGljYXRvckZhY3Rvcnk8S2lzR2F1 c3NDaXJjbGVNYXNrR2VuZXJhdG9yPjo6UmV0dXJuVHlwZQotTWFza0FwcGxpY2F0b3JGYWN0b3J5 PEtpc0dhdXNzQ2lyY2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTxWYzo6Q3VycmVudEltcGxlbWVu dGF0aW9uOjpjdXJyZW50KCk+KFBhcmFtVHlwZSBtYXNrR2VuZXJhdG9yKQorTWFza0FwcGxpY2F0 b3JGYWN0b3J5PEtpc0dhdXNzQ2lyY2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTx4c2ltZDo6Y3Vy cmVudF9hcmNoPihQYXJhbVR5cGUgbWFza0dlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gbmV3IEtp c0JydXNoTWFza1ZlY3RvckFwcGxpY2F0b3I8S2lzR2F1c3NDaXJjbGVNYXNrR2VuZXJhdG9yLCBW Yzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KG1hc2tHZW5lcmF0b3IpOworICAg IHJldHVybiBuZXcgS2lzQnJ1c2hNYXNrVmVjdG9yQXBwbGljYXRvcjxLaXNHYXVzc0NpcmNsZU1h c2tHZW5lcmF0b3IsIHhzaW1kOjpjdXJyZW50X2FyY2g+KG1hc2tHZW5lcmF0b3IpOwogfQogCiB0 ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBNYXNrQXBwbGljYXRvckZhY3Rvcnk8S2lzQ3VydmVDaXJj bGVNYXNrR2VuZXJhdG9yPjo6UmV0dXJuVHlwZQotTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0N1 cnZlQ2lyY2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9u OjpjdXJyZW50KCk+KFBhcmFtVHlwZSBtYXNrR2VuZXJhdG9yKQorTWFza0FwcGxpY2F0b3JGYWN0 b3J5PEtpc0N1cnZlQ2lyY2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTx4c2ltZDo6Y3VycmVudF9h cmNoPihQYXJhbVR5cGUgbWFza0dlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gbmV3IEtpc0JydXNo TWFza1ZlY3RvckFwcGxpY2F0b3I8S2lzQ3VydmVDaXJjbGVNYXNrR2VuZXJhdG9yLCBWYzo6Q3Vy cmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KG1hc2tHZW5lcmF0b3IpOworICAgIHJldHVy biBuZXcgS2lzQnJ1c2hNYXNrVmVjdG9yQXBwbGljYXRvcjxLaXNDdXJ2ZUNpcmNsZU1hc2tHZW5l cmF0b3IseHNpbWQ6OmN1cnJlbnRfYXJjaD4obWFza0dlbmVyYXRvcik7CiB9CiAKIHRlbXBsYXRl PD4KIHRlbXBsYXRlPD4KIE1hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNSZWN0YW5nbGVNYXNrR2Vu ZXJhdG9yPjo6UmV0dXJuVHlwZQotTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc1JlY3RhbmdsZU1h c2tHZW5lcmF0b3I+OjpjcmVhdGU8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgp PihQYXJhbVR5cGUgbWFza0dlbmVyYXRvcikKK01hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNSZWN0 YW5nbGVNYXNrR2VuZXJhdG9yPjo6Y3JlYXRlPHhzaW1kOjpjdXJyZW50X2FyY2g+KFBhcmFtVHlw ZSBtYXNrR2VuZXJhdG9yKQogewotICAgIHJldHVybiBuZXcgS2lzQnJ1c2hNYXNrVmVjdG9yQXBw bGljYXRvcjxLaXNSZWN0YW5nbGVNYXNrR2VuZXJhdG9yLCBWYzo6Q3VycmVudEltcGxlbWVudGF0 aW9uOjpjdXJyZW50KCk+KG1hc2tHZW5lcmF0b3IpOworICAgIHJldHVybiBuZXcgS2lzQnJ1c2hN YXNrVmVjdG9yQXBwbGljYXRvcjxLaXNSZWN0YW5nbGVNYXNrR2VuZXJhdG9yLHhzaW1kOjpjdXJy ZW50X2FyY2g+KG1hc2tHZW5lcmF0b3IpOwogfQogCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBN YXNrQXBwbGljYXRvckZhY3Rvcnk8S2lzR2F1c3NSZWN0YW5nbGVNYXNrR2VuZXJhdG9yPjo6UmV0 dXJuVHlwZQotTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0dhdXNzUmVjdGFuZ2xlTWFza0dlbmVy YXRvcj46OmNyZWF0ZTxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KFBhcmFt VHlwZSBtYXNrR2VuZXJhdG9yKQorTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0dhdXNzUmVjdGFu Z2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTx4c2ltZDo6Y3VycmVudF9hcmNoPihQYXJhbVR5cGUg bWFza0dlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gbmV3IEtpc0JydXNoTWFza1ZlY3RvckFwcGxp Y2F0b3I8S2lzR2F1c3NSZWN0YW5nbGVNYXNrR2VuZXJhdG9yLCBWYzo6Q3VycmVudEltcGxlbWVu dGF0aW9uOjpjdXJyZW50KCk+KG1hc2tHZW5lcmF0b3IpOworICAgIHJldHVybiBuZXcgS2lzQnJ1 c2hNYXNrVmVjdG9yQXBwbGljYXRvcjxLaXNHYXVzc1JlY3RhbmdsZU1hc2tHZW5lcmF0b3IseHNp bWQ6OmN1cnJlbnRfYXJjaD4obWFza0dlbmVyYXRvcik7CiB9CiAKIHRlbXBsYXRlPD4KIHRlbXBs YXRlPD4KIE1hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNDdXJ2ZVJlY3RhbmdsZU1hc2tHZW5lcmF0 b3I+OjpSZXR1cm5UeXBlCi1NYXNrQXBwbGljYXRvckZhY3Rvcnk8S2lzQ3VydmVSZWN0YW5nbGVN YXNrR2VuZXJhdG9yPjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQo KT4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCitNYXNrQXBwbGljYXRvckZhY3Rvcnk8S2lzQ3Vy dmVSZWN0YW5nbGVNYXNrR2VuZXJhdG9yPjo6Y3JlYXRlPHhzaW1kOjpjdXJyZW50X2FyY2g+KFBh cmFtVHlwZSBtYXNrR2VuZXJhdG9yKQogewotICAgIHJldHVybiBuZXcgS2lzQnJ1c2hNYXNrVmVj dG9yQXBwbGljYXRvcjxLaXNDdXJ2ZVJlY3RhbmdsZU1hc2tHZW5lcmF0b3IsIFZjOjpDdXJyZW50 SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4obWFza0dlbmVyYXRvcik7CisgICAgcmV0dXJuIG5l dyBLaXNCcnVzaE1hc2tWZWN0b3JBcHBsaWNhdG9yPEtpc0N1cnZlUmVjdGFuZ2xlTWFza0dlbmVy YXRvcix4c2ltZDo6Y3VycmVudF9hcmNoPihtYXNrR2VuZXJhdG9yKTsKIH0KZGlmZiAtLWdpdCBh L2xpYnMvaW1hZ2Uva2lzX2JydXNoX21hc2tfYXBwbGljYXRvcl9mYWN0b3JpZXMuaCBiL2xpYnMv aW1hZ2Uva2lzX2JydXNoX21hc2tfYXBwbGljYXRvcl9mYWN0b3JpZXMuaAppbmRleCA2MDU5MmU0 NTE2Li44NzA1ZWE5ZmEzIDEwMDY0NAotLS0gYS9saWJzL2ltYWdlL2tpc19icnVzaF9tYXNrX2Fw cGxpY2F0b3JfZmFjdG9yaWVzLmgKKysrIGIvbGlicy9pbWFnZS9raXNfYnJ1c2hfbWFza19hcHBs aWNhdG9yX2ZhY3Rvcmllcy5oCkBAIC04LDE2ICs4LDE3IEBACiAjaWZuZGVmIF9fS0lTX0JSVVNI X01BU0tfQVBQTElDQVRPUl9GQUNUT1JJRVNfSAogI2RlZmluZSBfX0tJU19CUlVTSF9NQVNLX0FQ UExJQ0FUT1JfRkFDVE9SSUVTX0gKIAotI2luY2x1ZGUgPGNvbXBvc2l0ZW9wcy9Lb1ZjTXVsdGlB cmNoQnVpbGRTdXBwb3J0Lmg+CisjaW5jbHVkZSA8Y29tcG9zaXRlb3BzL0tvTXVsdGlBcmNoQnVp bGRTdXBwb3J0Lmg+CiAKIGNsYXNzIEtpc0JydXNoTWFza0FwcGxpY2F0b3JCYXNlOwogCiB0ZW1w bGF0ZTxjbGFzcyBNYXNrR2VuZXJhdG9yPgotc3RydWN0IE1hc2tBcHBsaWNhdG9yRmFjdG9yeSB7 CitzdHJ1Y3QgTWFza0FwcGxpY2F0b3JGYWN0b3J5Cit7CiAgICAgdXNpbmcgUGFyYW1UeXBlID0g TWFza0dlbmVyYXRvciAqOwogICAgIHVzaW5nIFJldHVyblR5cGUgPSBLaXNCcnVzaE1hc2tBcHBs aWNhdG9yQmFzZSAqOwogCi0gICAgdGVtcGxhdGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgor ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNyZWF0 ZShQYXJhbVR5cGUgbWFza0dlbmVyYXRvcik7CiB9OwogCmRpZmYgLS1naXQgYS9saWJzL2ltYWdl L2tpc19icnVzaF9tYXNrX2FwcGxpY2F0b3JfZmFjdG9yaWVzX1NjYWxhci5jcHAgYi9saWJzL2lt YWdlL2tpc19icnVzaF9tYXNrX2FwcGxpY2F0b3JfZmFjdG9yaWVzX1NjYWxhci5jcHAKaW5kZXgg NmNmMTQyNTYxZi4uYTdkNjgxNmJkZiAxMDA2NDQKLS0tIGEvbGlicy9pbWFnZS9raXNfYnJ1c2hf bWFza19hcHBsaWNhdG9yX2ZhY3Rvcmllc19TY2FsYXIuY3BwCisrKyBiL2xpYnMvaW1hZ2Uva2lz X2JydXNoX21hc2tfYXBwbGljYXRvcl9mYWN0b3JpZXNfU2NhbGFyLmNwcApAQCAtMTksNTUgKzE5 LDU1IEBACiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBNYXNrQXBwbGljYXRvckZhY3Rvcnk8S2lz TWFza0dlbmVyYXRvcj46OlJldHVyblR5cGUKLU1hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNNYXNr R2VuZXJhdG9yPjo6Y3JlYXRlPFZjOjpTY2FsYXJJbXBsPihQYXJhbVR5cGUgbWFza0dlbmVyYXRv cikKK01hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNNYXNrR2VuZXJhdG9yPjo6Y3JlYXRlPHhzaW1k OjpnZW5lcmljPihQYXJhbVR5cGUgbWFza0dlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gbmV3IEtp c0JydXNoTWFza1NjYWxhckFwcGxpY2F0b3I8S2lzTWFza0dlbmVyYXRvciwgVmM6OlNjYWxhcklt cGw+KG1hc2tHZW5lcmF0b3IpOworICAgIHJldHVybiBuZXcgS2lzQnJ1c2hNYXNrU2NhbGFyQXBw bGljYXRvcjxLaXNNYXNrR2VuZXJhdG9yLCB4c2ltZDo6Z2VuZXJpYz4obWFza0dlbmVyYXRvcik7 CiB9CiAKIHRlbXBsYXRlPD4KIHRlbXBsYXRlPD4KIE1hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXND aXJjbGVNYXNrR2VuZXJhdG9yPjo6UmV0dXJuVHlwZQotTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtp c0NpcmNsZU1hc2tHZW5lcmF0b3I+OjpjcmVhdGU8VmM6OlNjYWxhckltcGw+KFBhcmFtVHlwZSBt YXNrR2VuZXJhdG9yKQorTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0NpcmNsZU1hc2tHZW5lcmF0 b3I+OjpjcmVhdGU8eHNpbWQ6OmdlbmVyaWM+KFBhcmFtVHlwZSBtYXNrR2VuZXJhdG9yKQogewot ICAgIHJldHVybiBuZXcgS2lzQnJ1c2hNYXNrU2NhbGFyQXBwbGljYXRvcjxLaXNDaXJjbGVNYXNr R2VuZXJhdG9yLCBWYzo6U2NhbGFySW1wbD4obWFza0dlbmVyYXRvcik7CisgICAgcmV0dXJuIG5l dyBLaXNCcnVzaE1hc2tTY2FsYXJBcHBsaWNhdG9yPEtpc0NpcmNsZU1hc2tHZW5lcmF0b3IsIHhz aW1kOjpnZW5lcmljPihtYXNrR2VuZXJhdG9yKTsKIH0KIAogdGVtcGxhdGU8PgogdGVtcGxhdGU8 PgogTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0dhdXNzQ2lyY2xlTWFza0dlbmVyYXRvcj46OlJl dHVyblR5cGUKLU1hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNHYXVzc0NpcmNsZU1hc2tHZW5lcmF0 b3I+OjpjcmVhdGU8VmM6OlNjYWxhckltcGw+KFBhcmFtVHlwZSBtYXNrR2VuZXJhdG9yKQorTWFz a0FwcGxpY2F0b3JGYWN0b3J5PEtpc0dhdXNzQ2lyY2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTx4 c2ltZDo6Z2VuZXJpYz4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCiB7Ci0gICAgcmV0dXJuIG5l dyBLaXNCcnVzaE1hc2tTY2FsYXJBcHBsaWNhdG9yPEtpc0dhdXNzQ2lyY2xlTWFza0dlbmVyYXRv ciwgVmM6OlNjYWxhckltcGw+KG1hc2tHZW5lcmF0b3IpOworICAgIHJldHVybiBuZXcgS2lzQnJ1 c2hNYXNrU2NhbGFyQXBwbGljYXRvcjxLaXNHYXVzc0NpcmNsZU1hc2tHZW5lcmF0b3IsIHhzaW1k OjpnZW5lcmljPihtYXNrR2VuZXJhdG9yKTsKIH0KIAogdGVtcGxhdGU8PgogdGVtcGxhdGU8Pgog TWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0N1cnZlQ2lyY2xlTWFza0dlbmVyYXRvcj46OlJldHVy blR5cGUKLU1hc2tBcHBsaWNhdG9yRmFjdG9yeTxLaXNDdXJ2ZUNpcmNsZU1hc2tHZW5lcmF0b3I+ OjpjcmVhdGU8VmM6OlNjYWxhckltcGw+KFBhcmFtVHlwZSBtYXNrR2VuZXJhdG9yKQorTWFza0Fw cGxpY2F0b3JGYWN0b3J5PEtpc0N1cnZlQ2lyY2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTx4c2lt ZDo6Z2VuZXJpYz4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCiB7Ci0gICAgcmV0dXJuIG5ldyBL aXNCcnVzaE1hc2tTY2FsYXJBcHBsaWNhdG9yPEtpc0N1cnZlQ2lyY2xlTWFza0dlbmVyYXRvciwg VmM6OlNjYWxhckltcGw+KG1hc2tHZW5lcmF0b3IpOworICAgIHJldHVybiBuZXcgS2lzQnJ1c2hN YXNrU2NhbGFyQXBwbGljYXRvcjxLaXNDdXJ2ZUNpcmNsZU1hc2tHZW5lcmF0b3IsIHhzaW1kOjpn ZW5lcmljPihtYXNrR2VuZXJhdG9yKTsKIH0KIAogdGVtcGxhdGU8PgogdGVtcGxhdGU8PgogTWFz a0FwcGxpY2F0b3JGYWN0b3J5PEtpc1JlY3RhbmdsZU1hc2tHZW5lcmF0b3I+OjpSZXR1cm5UeXBl Ci1NYXNrQXBwbGljYXRvckZhY3Rvcnk8S2lzUmVjdGFuZ2xlTWFza0dlbmVyYXRvcj46OmNyZWF0 ZTxWYzo6U2NhbGFySW1wbD4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCitNYXNrQXBwbGljYXRv ckZhY3Rvcnk8S2lzUmVjdGFuZ2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTx4c2ltZDo6Z2VuZXJp Yz4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCiB7Ci0gICAgcmV0dXJuIG5ldyBLaXNCcnVzaE1h c2tTY2FsYXJBcHBsaWNhdG9yPEtpc1JlY3RhbmdsZU1hc2tHZW5lcmF0b3IsIFZjOjpTY2FsYXJJ bXBsPihtYXNrR2VuZXJhdG9yKTsKKyAgICByZXR1cm4gbmV3IEtpc0JydXNoTWFza1NjYWxhckFw cGxpY2F0b3I8S2lzUmVjdGFuZ2xlTWFza0dlbmVyYXRvciwgeHNpbWQ6OmdlbmVyaWM+KG1hc2tH ZW5lcmF0b3IpOwogfQogCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBNYXNrQXBwbGljYXRvckZh Y3Rvcnk8S2lzR2F1c3NSZWN0YW5nbGVNYXNrR2VuZXJhdG9yPjo6UmV0dXJuVHlwZQotTWFza0Fw cGxpY2F0b3JGYWN0b3J5PEtpc0dhdXNzUmVjdGFuZ2xlTWFza0dlbmVyYXRvcj46OmNyZWF0ZTxW Yzo6U2NhbGFySW1wbD4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCitNYXNrQXBwbGljYXRvckZh Y3Rvcnk8S2lzR2F1c3NSZWN0YW5nbGVNYXNrR2VuZXJhdG9yPjo6Y3JlYXRlPHhzaW1kOjpnZW5l cmljPihQYXJhbVR5cGUgbWFza0dlbmVyYXRvcikKIHsKLSAgICByZXR1cm4gbmV3IEtpc0JydXNo TWFza1NjYWxhckFwcGxpY2F0b3I8S2lzR2F1c3NSZWN0YW5nbGVNYXNrR2VuZXJhdG9yLCBWYzo6 U2NhbGFySW1wbD4obWFza0dlbmVyYXRvcik7CisgICAgcmV0dXJuIG5ldyBLaXNCcnVzaE1hc2tT Y2FsYXJBcHBsaWNhdG9yPEtpc0dhdXNzUmVjdGFuZ2xlTWFza0dlbmVyYXRvciwgeHNpbWQ6Omdl bmVyaWM+KG1hc2tHZW5lcmF0b3IpOwogfQogCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBNYXNr QXBwbGljYXRvckZhY3Rvcnk8S2lzQ3VydmVSZWN0YW5nbGVNYXNrR2VuZXJhdG9yPjo6UmV0dXJu VHlwZQotTWFza0FwcGxpY2F0b3JGYWN0b3J5PEtpc0N1cnZlUmVjdGFuZ2xlTWFza0dlbmVyYXRv cj46OmNyZWF0ZTxWYzo6U2NhbGFySW1wbD4oUGFyYW1UeXBlIG1hc2tHZW5lcmF0b3IpCitNYXNr QXBwbGljYXRvckZhY3Rvcnk8S2lzQ3VydmVSZWN0YW5nbGVNYXNrR2VuZXJhdG9yPjo6Y3JlYXRl PHhzaW1kOjpnZW5lcmljPihQYXJhbVR5cGUgbWFza0dlbmVyYXRvcikKIHsKLSAgICByZXR1cm4g bmV3IEtpc0JydXNoTWFza1NjYWxhckFwcGxpY2F0b3I8S2lzQ3VydmVSZWN0YW5nbGVNYXNrR2Vu ZXJhdG9yLCBWYzo6U2NhbGFySW1wbD4obWFza0dlbmVyYXRvcik7CisgICAgcmV0dXJuIG5ldyBL aXNCcnVzaE1hc2tTY2FsYXJBcHBsaWNhdG9yPEtpc0N1cnZlUmVjdGFuZ2xlTWFza0dlbmVyYXRv ciwgeHNpbWQ6OmdlbmVyaWM+KG1hc2tHZW5lcmF0b3IpOwogfQpkaWZmIC0tZ2l0IGEvbGlicy9p bWFnZS9raXNfYnJ1c2hfbWFza19wcm9jZXNzb3JfZmFjdG9yaWVzLmNwcCBiL2xpYnMvaW1hZ2Uv a2lzX2JydXNoX21hc2tfcHJvY2Vzc29yX2ZhY3Rvcmllcy5jcHAKaW5kZXggMzk4OWRmNzljZS4u NDhlZmQ1MzUwMSAxMDA2NDQKLS0tIGEvbGlicy9pbWFnZS9raXNfYnJ1c2hfbWFza19wcm9jZXNz b3JfZmFjdG9yaWVzLmNwcAorKysgYi9saWJzL2ltYWdlL2tpc19icnVzaF9tYXNrX3Byb2Nlc3Nv cl9mYWN0b3JpZXMuY3BwCkBAIC01LDkgKzUsOSBAQAogICogIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9yLWxhdGVyCiAgKi8KIAotI2luY2x1ZGUgPGNvbXBvc2l0ZW9wcy9Lb1Zj TXVsdGlBcmNoQnVpbGRTdXBwb3J0Lmg+CisjaW5jbHVkZSAieHNpbWRfZXh0ZW5zaW9ucy94c2lt ZC5ocHAiCiAKLSNpZiBkZWZpbmVkIEhBVkVfVkMKKyNpZiBkZWZpbmVkIEhBVkVfWFNJTUQKIAog I2luY2x1ZGUgImtpc19jaXJjbGVfbWFza19nZW5lcmF0b3IuaCIKICNpbmNsdWRlICJraXNfY2ly Y2xlX21hc2tfZ2VuZXJhdG9yX3AuaCIKQEAgLTMyLDE0ICszMiwxNyBAQAogCiB0ZW1wbGF0ZTw+ CiB0ZW1wbGF0ZTw+Ci12b2lkIEZhc3RSb3dQcm9jZXNzb3I8S2lzQ2lyY2xlTWFza0dlbmVyYXRv cj46OnByb2Nlc3M8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihmbG9hdCAq YnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNvc2EsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmbG9hdCBzaW5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmxvYXQgY2VudGVyWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZsb2F0IGNlbnRlclkpCit2b2lkIEZhc3RSb3dQcm9jZXNzb3I8S2lzQ2lyY2xlTWFza0dl bmVyYXRvcj46OnByb2Nlc3M8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oZmxvYXQgKmJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmbG9hdCBjb3NhLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0 IHNpbmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyWCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmbG9hdCBjZW50ZXJZKQogeworICAgIHVzaW5nIGZsb2F0X3YgPSB4c2ltZDo6YmF0Y2g8 ZmxvYXQsIHhzaW1kOjpjdXJyZW50X2FyY2g+OworICAgIHVzaW5nIGZsb2F0X20gPSB0eXBlbmFt ZSBmbG9hdF92OjpiYXRjaF9ib29sX3R5cGU7CisKICAgICBjb25zdCBib29sIHVzZVNtb290aGlu ZyA9IGQtPmNvcHlPZkFudGlhbGlhc0VkZ2VzOwogCiAgICAgZmxvYXQgeV8gPSB5IC0gY2VudGVy WTsKQEAgLTQ4LDE1MCArNTEsMTU2IEBAIHZvaWQgRmFzdFJvd1Byb2Nlc3NvcjxLaXNDaXJjbGVN YXNrR2VuZXJhdG9yPjo6cHJvY2VzczxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uCiAKICAgICBm bG9hdCAqYnVmZmVyUG9pbnRlciA9IGJ1ZmZlcjsKIAotICAgIFZjOjpmbG9hdF92IGN1cnJlbnRJ bmRpY2VzID0gVmM6OmZsb2F0X3Y6OkluZGV4ZXNGcm9tWmVybygpOworICAgIGZsb2F0X3YgY3Vy cmVudEluZGljZXMgPSB4c2ltZDo6ZGV0YWlsOjptYWtlX3NlcXVlbmNlX2FzX2JhdGNoPGZsb2F0 X3Y+KCk7CiAKLSAgICBWYzo6ZmxvYXRfdiBpbmNyZW1lbnQoKGZsb2F0KVZjOjpmbG9hdF92Ojpz aXplKCkpOwotICAgIFZjOjpmbG9hdF92IHZDZW50ZXJYKGNlbnRlclgpOworICAgIGZsb2F0X3Yg aW5jcmVtZW50KChmbG9hdClmbG9hdF92OjpzaXplKTsKKyAgICBmbG9hdF92IHZDZW50ZXJYKGNl bnRlclgpOwogCi0gICAgVmM6OmZsb2F0X3YgdkNvc2EoY29zYSk7Ci0gICAgVmM6OmZsb2F0X3Yg dlNpbmEoc2luYSk7Ci0gICAgVmM6OmZsb2F0X3YgdkNvc2FZXyhjb3NheV8pOwotICAgIFZjOjpm bG9hdF92IHZTaW5hWV8oc2luYXlfKTsKKyAgICBmbG9hdF92IHZDb3NhKGNvc2EpOworICAgIGZs b2F0X3YgdlNpbmEoc2luYSk7CisgICAgZmxvYXRfdiB2Q29zYVlfKGNvc2F5Xyk7CisgICAgZmxv YXRfdiB2U2luYVlfKHNpbmF5Xyk7CiAKLSAgICBWYzo6ZmxvYXRfdiB2WENvZWZmKHN0YXRpY19j YXN0PGZsb2F0PihkLT54Y29lZikpOwotICAgIFZjOjpmbG9hdF92IHZZQ29lZmYoc3RhdGljX2Nh c3Q8ZmxvYXQ+KGQtPnljb2VmKSk7CisgICAgZmxvYXRfdiB2WENvZWZmKHN0YXRpY19jYXN0PGZs b2F0PihkLT54Y29lZikpOworICAgIGZsb2F0X3YgdllDb2VmZihzdGF0aWNfY2FzdDxmbG9hdD4o ZC0+eWNvZWYpKTsKIAotICAgIFZjOjpmbG9hdF92IHZUcmFuc2Zvcm1lZEZhZGVYKHN0YXRpY19j YXN0PGZsb2F0PihkLT50cmFuc2Zvcm1lZEZhZGVYKSk7Ci0gICAgVmM6OmZsb2F0X3YgdlRyYW5z Zm9ybWVkRmFkZVkoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPnRyYW5zZm9ybWVkRmFkZVkpKTsKKyAg ICBmbG9hdF92IHZUcmFuc2Zvcm1lZEZhZGVYKHN0YXRpY19jYXN0PGZsb2F0PihkLT50cmFuc2Zv cm1lZEZhZGVYKSk7CisgICAgZmxvYXRfdiB2VHJhbnNmb3JtZWRGYWRlWShzdGF0aWNfY2FzdDxm bG9hdD4oZC0+dHJhbnNmb3JtZWRGYWRlWSkpOwogCi0gICAgVmM6OmZsb2F0X3Ygdk9uZShWYzo6 T25lKTsKKyAgICBmbG9hdF92IHZPbmUoMSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8 IHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpOyBpICs9IFZjOjpmbG9hdF92OjpzaXplKCkpIHsK LSAgICAgICAgVmM6OmZsb2F0X3YgeF8gPSBjdXJyZW50SW5kaWNlcyAtIHZDZW50ZXJYOworICAg IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCk7IGkgKz0g ZmxvYXRfdjo6c2l6ZSkgeworICAgICAgICBmbG9hdF92IHhfID0gY3VycmVudEluZGljZXMgLSB2 Q2VudGVyWDsKIAotICAgICAgICBWYzo6ZmxvYXRfdiB4ciA9IHhfICogdkNvc2EgLSB2U2luYVlf OwotICAgICAgICBWYzo6ZmxvYXRfdiB5ciA9IHhfICogdlNpbmEgKyB2Q29zYVlfOworICAgICAg ICBmbG9hdF92IHhyID0geF8gKiB2Q29zYSAtIHZTaW5hWV87CisgICAgICAgIGZsb2F0X3YgeXIg PSB4XyAqIHZTaW5hICsgdkNvc2FZXzsKIAotICAgICAgICBWYzo6ZmxvYXRfdiBuID0gcG93Mih4 ciAqIHZYQ29lZmYpICsgcG93Mih5ciAqIHZZQ29lZmYpOwotICAgICAgICBWYzo6ZmxvYXRfbSBv dXRzaWRlTWFzayA9IG4gPiB2T25lOworICAgICAgICBmbG9hdF92IG4gPSB4c2ltZDo6cG93Mih4 ciAqIHZYQ29lZmYpICsgeHNpbWQ6OnBvdzIoeXIgKiB2WUNvZWZmKTsKKyAgICAgICAgZmxvYXRf bSBvdXRzaWRlTWFzayA9IG4gPiB2T25lOwogCi0gICAgICAgIGlmICghb3V0c2lkZU1hc2suaXNG dWxsKCkpIHsKKyAgICAgICAgaWYgKCF4c2ltZDo6YWxsKG91dHNpZGVNYXNrKSkgewogICAgICAg ICAgICAgaWYgKHVzZVNtb290aGluZykgewotICAgICAgICAgICAgICAgIHhyID0gVmM6OmFicyh4 cikgKyB2T25lOwotICAgICAgICAgICAgICAgIHlyID0gVmM6OmFicyh5cikgKyB2T25lOworICAg ICAgICAgICAgICAgIHhyID0geHNpbWQ6OmFicyh4cikgKyB2T25lOworICAgICAgICAgICAgICAg IHlyID0geHNpbWQ6OmFicyh5cikgKyB2T25lOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg VmM6OmZsb2F0X3Ygdk5vcm1GYWRlID0gcG93Mih4ciAqIHZUcmFuc2Zvcm1lZEZhZGVYKSArIHBv dzIoeXIgKiB2VHJhbnNmb3JtZWRGYWRlWSk7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfbSB2Tm9y bUxvd01hc2sgPSB2Tm9ybUZhZGUgPCB2T25lOwotICAgICAgICAgICAgdk5vcm1GYWRlLnNldFpl cm8odk5vcm1Mb3dNYXNrKTsKKyAgICAgICAgICAgIGZsb2F0X3Ygdk5vcm1GYWRlID0geHNpbWQ6 OnBvdzIoeHIgKiB2VHJhbnNmb3JtZWRGYWRlWCkgKyB4c2ltZDo6cG93Mih5ciAqIHZUcmFuc2Zv cm1lZEZhZGVZKTsKKyAgICAgICAgICAgIGZsb2F0X20gdk5vcm1Mb3dNYXNrID0gdk5vcm1GYWRl IDwgdk9uZTsKKyAgICAgICAgICAgIHZOb3JtRmFkZSA9IHhzaW1kOjpzZXRfemVybyh2Tm9ybUZh ZGUsIHZOb3JtTG93TWFzayk7CiAKICAgICAgICAgICAgIC8vIDI1NSAqIG4gKiAobm9ybWVGYWRl IC0gMSkgLyAobm9ybWVGYWRlIC0gbikKLSAgICAgICAgICAgIFZjOjpmbG9hdF92IHZGYWRlID0g biAqICh2Tm9ybUZhZGUgLSB2T25lKSAvICh2Tm9ybUZhZGUgLSBuKTsKKyAgICAgICAgICAgIGZs b2F0X3YgdkZhZGUgPSBuICogKHZOb3JtRmFkZSAtIHZPbmUpIC8gKHZOb3JtRmFkZSAtIG4pOwog CiAgICAgICAgICAgICAvLyBNYXNrIGluIHRoZSBpbm5lciBjaXJjbGUgb2YgdGhlIG1hc2sKLSAg ICAgICAgICAgIFZjOjpmbG9hdF9tIG1hc2sgPSB2Tm9ybUZhZGUgPCB2T25lOwotICAgICAgICAg ICAgdkZhZGUuc2V0WmVybyhtYXNrKTsKKyAgICAgICAgICAgIGZsb2F0X20gbWFzayA9IHZOb3Jt RmFkZSA8IHZPbmU7CisgICAgICAgICAgICB2RmFkZSA9IHhzaW1kOjpzZXRfemVybyh2RmFkZSwg bWFzayk7CiAKICAgICAgICAgICAgIC8vIE1hc2sgb3V0IHRoZSBvdXRlciBjaXJjbGUgb2YgdGhl IG1hc2sKLSAgICAgICAgICAgIHZGYWRlKG91dHNpZGVNYXNrKSA9IHZPbmU7CisgICAgICAgICAg ICB2RmFkZSA9IHhzaW1kOjpzZXRfb25lKHZGYWRlLCBvdXRzaWRlTWFzayk7CiAKLSAgICAgICAg ICAgIHZGYWRlLnN0b3JlKGJ1ZmZlclBvaW50ZXIsIFZjOjpBbGlnbmVkKTsKKyAgICAgICAgICAg IHZGYWRlLnN0b3JlX2FsaWduZWQoYnVmZmVyUG9pbnRlcik7CiAKICAgICAgICAgfSBlbHNlIHsK ICAgICAgICAgICAgIC8vIE1hc2sgb3V0IGV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGUgY2lyY2xlCi0g ICAgICAgICAgICB2T25lLnN0b3JlKGJ1ZmZlclBvaW50ZXIsIFZjOjpBbGlnbmVkKTsKKyAgICAg ICAgICAgIHZPbmUuc3RvcmVfYWxpZ25lZChidWZmZXJQb2ludGVyKTsKICAgICAgICAgfQogCiAg ICAgICAgIGN1cnJlbnRJbmRpY2VzID0gY3VycmVudEluZGljZXMgKyBpbmNyZW1lbnQ7CiAKLSAg ICAgICAgYnVmZmVyUG9pbnRlciArPSBWYzo6ZmxvYXRfdjo6c2l6ZSgpOworICAgICAgICBidWZm ZXJQb2ludGVyICs9IGZsb2F0X3Y6OnNpemU7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTw+CiB0ZW1w bGF0ZTw+Ci12b2lkIEZhc3RSb3dQcm9jZXNzb3I8S2lzR2F1c3NDaXJjbGVNYXNrR2VuZXJhdG9y Pjo6cHJvY2VzczxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KGZsb2F0ICpi dWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0 aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29zYSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2luYSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyWCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyWSkKK3ZvaWQgRmFz dFJvd1Byb2Nlc3NvcjxLaXNHYXVzc0NpcmNsZU1hc2tHZW5lcmF0b3I+Ojpwcm9jZXNzPHhzaW1k OjpjdXJyZW50X2FyY2g+KGZsb2F0ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmxvYXQgY29zYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNp bmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjZW50ZXJYLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmxvYXQgY2VudGVyWSkKIHsKKyAgICB1c2luZyBmbG9hdF92ID0geHNpbWQ6 OmJhdGNoPGZsb2F0LCB4c2ltZDo6Y3VycmVudF9hcmNoPjsKKyAgICB1c2luZyBmbG9hdF9tID0g ZmxvYXRfdjo6YmF0Y2hfYm9vbF90eXBlOworCiAgICAgZmxvYXQgeV8gPSB5IC0gY2VudGVyWTsK ICAgICBmbG9hdCBzaW5heV8gPSBzaW5hICogeV87CiAgICAgZmxvYXQgY29zYXlfID0gY29zYSAq IHlfOwogCiAgICAgZmxvYXQgKmJ1ZmZlclBvaW50ZXIgPSBidWZmZXI7CiAKLSAgICBWYzo6Zmxv YXRfdiBjdXJyZW50SW5kaWNlcyA9IFZjOjpmbG9hdF92OjpJbmRleGVzRnJvbVplcm8oKTsKKyAg ICBmbG9hdF92IGN1cnJlbnRJbmRpY2VzID0geHNpbWQ6OmRldGFpbDo6bWFrZV9zZXF1ZW5jZV9h c19iYXRjaDxmbG9hdF92PigpOwogCi0gICAgVmM6OmZsb2F0X3YgaW5jcmVtZW50KHN0YXRpY19j YXN0PGZsb2F0PihWYzo6ZmxvYXRfdjo6c2l6ZSgpKSk7Ci0gICAgVmM6OmZsb2F0X3YgdkNlbnRl clgoY2VudGVyWCk7Ci0gICAgVmM6OmZsb2F0X3YgdkNlbnRlcihzdGF0aWNfY2FzdDxmbG9hdD4o ZC0+Y2VudGVyKSk7CisgICAgZmxvYXRfdiBpbmNyZW1lbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZs b2F0X3Y6OnNpemUpKTsKKyAgICBmbG9hdF92IHZDZW50ZXJYKGNlbnRlclgpOworICAgIGZsb2F0 X3YgdkNlbnRlcihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+Y2VudGVyKSk7CiAKLSAgICBWYzo6Zmxv YXRfdiB2Q29zYShjb3NhKTsKLSAgICBWYzo6ZmxvYXRfdiB2U2luYShzaW5hKTsKLSAgICBWYzo6 ZmxvYXRfdiB2Q29zYVlfKGNvc2F5Xyk7Ci0gICAgVmM6OmZsb2F0X3YgdlNpbmFZXyhzaW5heV8p OworICAgIGZsb2F0X3YgdkNvc2EoY29zYSk7CisgICAgZmxvYXRfdiB2U2luYShzaW5hKTsKKyAg ICBmbG9hdF92IHZDb3NhWV8oY29zYXlfKTsKKyAgICBmbG9hdF92IHZTaW5hWV8oc2luYXlfKTsK IAotICAgIFZjOjpmbG9hdF92IHZZQ29lZmYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPnljb2VmKSk7 Ci0gICAgVmM6OmZsb2F0X3YgdkRpc3RmYWN0b3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPmRpc3Rm YWN0b3IpKTsKLSAgICBWYzo6ZmxvYXRfdiB2QWxwaGFmYWN0b3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+ KGQtPmFscGhhZmFjdG9yKSk7CisgICAgZmxvYXRfdiB2WUNvZWZmKHN0YXRpY19jYXN0PGZsb2F0 PihkLT55Y29lZikpOworICAgIGZsb2F0X3YgdkRpc3RmYWN0b3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+ KGQtPmRpc3RmYWN0b3IpKTsKKyAgICBmbG9hdF92IHZBbHBoYWZhY3RvcihzdGF0aWNfY2FzdDxm bG9hdD4oZC0+YWxwaGFmYWN0b3IpKTsKIAotICAgIFZjOjpmbG9hdF92IHZaZXJvKFZjOjpaZXJv KTsKLSAgICBWYzo6ZmxvYXRfdiB2VmFsTWF4KDI1NS5mKTsKKyAgICBmbG9hdF92IHZaZXJvKDAp OworICAgIGZsb2F0X3YgdlZhbE1heCgyNTUuZik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg aSA8IHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpOyBpICs9IFZjOjpmbG9hdF92OjpzaXplKCkp IHsKLSAgICAgICAgVmM6OmZsb2F0X3YgeF8gPSBjdXJyZW50SW5kaWNlcyAtIHZDZW50ZXJYOwor ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCk7IGkg Kz0gZmxvYXRfdjo6c2l6ZSkgeworICAgICAgICBmbG9hdF92IHhfID0gY3VycmVudEluZGljZXMg LSB2Q2VudGVyWDsKIAotICAgICAgICBWYzo6ZmxvYXRfdiB4ciA9IHhfICogdkNvc2EgLSB2U2lu YVlfOwotICAgICAgICBWYzo6ZmxvYXRfdiB5ciA9IHhfICogdlNpbmEgKyB2Q29zYVlfOworICAg ICAgICBmbG9hdF92IHhyID0geF8gKiB2Q29zYSAtIHZTaW5hWV87CisgICAgICAgIGZsb2F0X3Yg eXIgPSB4XyAqIHZTaW5hICsgdkNvc2FZXzsKIAotICAgICAgICBWYzo6ZmxvYXRfdiBkaXN0ID0g c3FydChwb3cyKHhyKSArIHBvdzIoeXIgKiB2WUNvZWZmKSk7CisgICAgICAgIGZsb2F0X3YgZGlz dCA9IHhzaW1kOjpzcXJ0KHhzaW1kOjpwb3cyKHhyKSArIHhzaW1kOjpwb3cyKHlyICogdllDb2Vm ZikpOwogCiAgICAgICAgIC8vIEFwcGx5IEZhZGVNYWtlciBtYXNrIGFuZCBvcGVyYXRpb25zCi0g ICAgICAgIFZjOjpmbG9hdF9tIGV4Y2x1ZGVNYXNrID0gZC0+ZmFkZU1ha2VyLm5lZWRGYWRlKGRp c3QpOworICAgICAgICBmbG9hdF9tIGV4Y2x1ZGVNYXNrID0gZC0+ZmFkZU1ha2VyLm5lZWRGYWRl KGRpc3QpOwogCi0gICAgICAgIGlmICghZXhjbHVkZU1hc2suaXNGdWxsKCkpIHsKLSAgICAgICAg ICAgIFZjOjpmbG9hdF92IHZhbERpc3QgPSBkaXN0ICogdkRpc3RmYWN0b3I7Ci0gICAgICAgICAg ICBWYzo6ZmxvYXRfdiBmdWxsRmFkZSA9Ci0gICAgICAgICAgICAgICAgdkFscGhhZmFjdG9yICog KFZjRXh0cmFNYXRoOjplcmYodmFsRGlzdCArIHZDZW50ZXIpIC0gVmNFeHRyYU1hdGg6OmVyZih2 YWxEaXN0IC0gdkNlbnRlcikpOworICAgICAgICBpZiAoIXhzaW1kOjphbGwoZXhjbHVkZU1hc2sp KSB7CisgICAgICAgICAgICBmbG9hdF92IHZhbERpc3QgPSBkaXN0ICogdkRpc3RmYWN0b3I7Cisg ICAgICAgICAgICBmbG9hdF92IGZ1bGxGYWRlID0gdkFscGhhZmFjdG9yICogKFZjRXh0cmFNYXRo OjplcmYodmFsRGlzdCArIHZDZW50ZXIpIC0gVmNFeHRyYU1hdGg6OmVyZih2YWxEaXN0IC0gdkNl bnRlcikpOwogCi0gICAgICAgICAgICBWYzo6ZmxvYXRfbSBtYXNrOworICAgICAgICAgICAgZmxv YXRfbSBtYXNrOwogICAgICAgICAgICAgLy8gTWFzayBpbiB0aGUgaW5uZXIgY2lyY2xlIG9mIHRo ZSBtYXNrCiAgICAgICAgICAgICBtYXNrID0gZnVsbEZhZGUgPCB2WmVybzsKLSAgICAgICAgICAg IGZ1bGxGYWRlLnNldFplcm8obWFzayk7CisgICAgICAgICAgICBmdWxsRmFkZSA9IHhzaW1kOjpz ZXRfemVybyhmdWxsRmFkZSwgbWFzayk7CiAKICAgICAgICAgICAgIC8vIE1hc2sgdGhlIG91dGVy IGNpcmNsZQogICAgICAgICAgICAgbWFzayA9IGZ1bGxGYWRlID4gMjU0Ljk3NGY7Ci0gICAgICAg ICAgICBmdWxsRmFkZShtYXNrKSA9IHZWYWxNYXg7CisgICAgICAgICAgICBmdWxsRmFkZSA9IHhz aW1kOjpzZWxlY3QobWFzaywgdlZhbE1heCwgZnVsbEZhZGUpOwogCiAgICAgICAgICAgICAvLyBN YXNrICh2YWx1ZSAtIHZhbHVlKSwgcHJlY2lzaW9uIGVycm9ycy4KLSAgICAgICAgICAgIFZjOjpm bG9hdF92IHZGYWRlID0gKHZWYWxNYXggLSBmdWxsRmFkZSkgLyB2VmFsTWF4OworICAgICAgICAg ICAgZmxvYXRfdiB2RmFkZSA9ICh2VmFsTWF4IC0gZnVsbEZhZGUpIC8gdlZhbE1heDsKIAogICAg ICAgICAgICAgLy8gcmV0dXJuIG9yaWdpbmFsIGRpc3QgdmFsdWVzIGJlZm9yZSB2RmFkZSB0cmFu c2Zvcm0KLSAgICAgICAgICAgIHZGYWRlKGV4Y2x1ZGVNYXNrKSA9IGRpc3Q7Ci0gICAgICAgICAg ICB2RmFkZS5zdG9yZShidWZmZXJQb2ludGVyLCBWYzo6QWxpZ25lZCk7CisgICAgICAgICAgICB2 RmFkZSA9IHhzaW1kOjpzZWxlY3QoZXhjbHVkZU1hc2ssIGRpc3QsIHZGYWRlKTsKKyAgICAgICAg ICAgIHZGYWRlLnN0b3JlX2FsaWduZWQoYnVmZmVyUG9pbnRlcik7CiAKICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGRpc3Quc3RvcmUoYnVmZmVyUG9pbnRlciwgVmM6OkFsaWduZWQpOwor ICAgICAgICAgICAgZGlzdC5zdG9yZV9hbGlnbmVkKGJ1ZmZlclBvaW50ZXIpOwogICAgICAgICB9 CiAgICAgICAgIGN1cnJlbnRJbmRpY2VzID0gY3VycmVudEluZGljZXMgKyBpbmNyZW1lbnQ7CiAK LSAgICAgICAgYnVmZmVyUG9pbnRlciArPSBWYzo6ZmxvYXRfdjo6c2l6ZSgpOworICAgICAgICBi dWZmZXJQb2ludGVyICs9IGZsb2F0X3Y6OnNpemU7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTw+CiB0 ZW1wbGF0ZTw+Ci12b2lkIEZhc3RSb3dQcm9jZXNzb3I8S2lzQ3VydmVDaXJjbGVNYXNrR2VuZXJh dG9yPjo6cHJvY2VzczxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KGZsb2F0 ICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3 aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29zYSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2luYSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyWCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyWSkKK3ZvaWQg RmFzdFJvd1Byb2Nlc3NvcjxLaXNDdXJ2ZUNpcmNsZU1hc2tHZW5lcmF0b3I+Ojpwcm9jZXNzPHhz aW1kOjpjdXJyZW50X2FyY2g+KGZsb2F0ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmxvYXQgY29zYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0 IHNpbmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjZW50ZXJYLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyWSkKIHsKKyAgICB1c2luZyBpbnRfdiA9IHhzaW1k OjpiYXRjaDxpbnQsIHhzaW1kOjpjdXJyZW50X2FyY2g+OworICAgIHVzaW5nIGZsb2F0X3YgPSB4 c2ltZDo6YmF0Y2g8ZmxvYXQsIHhzaW1kOjpjdXJyZW50X2FyY2g+OworICAgIHVzaW5nIGZsb2F0 X20gPSBmbG9hdF92OjpiYXRjaF9ib29sX3R5cGU7CisKICAgICBmbG9hdCB5XyA9IHkgLSBjZW50 ZXJZOwogICAgIGZsb2F0IHNpbmF5XyA9IHNpbmEgKiB5XzsKICAgICBmbG9hdCBjb3NheV8gPSBj b3NhICogeV87CkBAIC0yMDAsODggKzIwOSw4OSBAQCB2b2lkIEZhc3RSb3dQcm9jZXNzb3I8S2lz Q3VydmVDaXJjbGVNYXNrR2VuZXJhdG9yPjo6cHJvY2VzczxWYzo6Q3VycmVudEltcGxlbWVudAog CiAgICAgcXJlYWwgKmN1cnZlRGF0YVBvaW50ZXIgPSBkLT5jdXJ2ZURhdGEuZGF0YSgpOwogCi0g ICAgVmM6OmZsb2F0X3YgY3VycmVudEluZGljZXMgPSBWYzo6ZmxvYXRfdjo6SW5kZXhlc0Zyb21a ZXJvKCk7CisgICAgZmxvYXRfdiBjdXJyZW50SW5kaWNlcyA9IHhzaW1kOjpkZXRhaWw6Om1ha2Vf c2VxdWVuY2VfYXNfYmF0Y2g8ZmxvYXRfdj4oKTsKIAotICAgIFZjOjpmbG9hdF92IGluY3JlbWVu dCgoZmxvYXQpVmM6OmZsb2F0X3Y6OnNpemUoKSk7Ci0gICAgVmM6OmZsb2F0X3YgdkNlbnRlclgo Y2VudGVyWCk7CisgICAgZmxvYXRfdiBpbmNyZW1lbnQoKGZsb2F0KWZsb2F0X3Y6OnNpemUpOwor ICAgIGZsb2F0X3YgdkNlbnRlclgoY2VudGVyWCk7CiAKLSAgICBWYzo6ZmxvYXRfdiB2Q29zYShj b3NhKTsKLSAgICBWYzo6ZmxvYXRfdiB2U2luYShzaW5hKTsKLSAgICBWYzo6ZmxvYXRfdiB2Q29z YVlfKGNvc2F5Xyk7Ci0gICAgVmM6OmZsb2F0X3YgdlNpbmFZXyhzaW5heV8pOworICAgIGZsb2F0 X3YgdkNvc2EoY29zYSk7CisgICAgZmxvYXRfdiB2U2luYShzaW5hKTsKKyAgICBmbG9hdF92IHZD b3NhWV8oY29zYXlfKTsKKyAgICBmbG9hdF92IHZTaW5hWV8oc2luYXlfKTsKIAotICAgIFZjOjpm bG9hdF92IHZZQ29lZmYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPnljb2VmKSk7Ci0gICAgVmM6OmZs b2F0X3YgdlhDb2VmZihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+eGNvZWYpKTsKLSAgICBWYzo6Zmxv YXRfdiB2Q3VydmVSZXNvbHV0aW9uKHN0YXRpY19jYXN0PGZsb2F0PihkLT5jdXJ2ZVJlc29sdXRp b24pKTsKKyAgICBmbG9hdF92IHZZQ29lZmYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPnljb2VmKSk7 CisgICAgZmxvYXRfdiB2WENvZWZmKHN0YXRpY19jYXN0PGZsb2F0PihkLT54Y29lZikpOworICAg IGZsb2F0X3YgdkN1cnZlUmVzb2x1dGlvbihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+Y3VydmVSZXNv bHV0aW9uKSk7CiAKLSAgICBWYzo6ZmxvYXRfdiB2Q3VydmVkRGF0YShWYzo6WmVybyk7Ci0gICAg VmM6OmZsb2F0X3YgdkN1cnZlZERhdGExKFZjOjpaZXJvKTsKKyAgICBmbG9hdF92IHZDdXJ2ZWRE YXRhKDApOworICAgIGZsb2F0X3YgdkN1cnZlZERhdGExKDApOwogCi0gICAgVmM6OmZsb2F0X3Yg dk9uZShWYzo6T25lKTsKLSAgICBWYzo6ZmxvYXRfdiB2WmVybyhWYzo6WmVybyk7CisgICAgZmxv YXRfdiB2T25lKDEpOworICAgIGZsb2F0X3Ygdlplcm8oMCk7CiAKLSAgICBmb3IgKHNpemVfdCBp ID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpOyBpICs9IFZjOjpmbG9hdF92Ojpz aXplKCkpIHsKLSAgICAgICAgVmM6OmZsb2F0X3YgeF8gPSBjdXJyZW50SW5kaWNlcyAtIHZDZW50 ZXJYOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0 aCk7IGkgKz0gZmxvYXRfdjo6c2l6ZSkgeworICAgICAgICBmbG9hdF92IHhfID0gY3VycmVudElu ZGljZXMgLSB2Q2VudGVyWDsKIAotICAgICAgICBWYzo6ZmxvYXRfdiB4ciA9IHhfICogdkNvc2Eg LSB2U2luYVlfOwotICAgICAgICBWYzo6ZmxvYXRfdiB5ciA9IHhfICogdlNpbmEgKyB2Q29zYVlf OworICAgICAgICBmbG9hdF92IHhyID0geF8gKiB2Q29zYSAtIHZTaW5hWV87CisgICAgICAgIGZs b2F0X3YgeXIgPSB4XyAqIHZTaW5hICsgdkNvc2FZXzsKIAotICAgICAgICBWYzo6ZmxvYXRfdiBk aXN0ID0gcG93Mih4ciAqIHZYQ29lZmYpICsgcG93Mih5ciAqIHZZQ29lZmYpOworICAgICAgICBm bG9hdF92IGRpc3QgPSB4c2ltZDo6cG93Mih4ciAqIHZYQ29lZmYpICsgeHNpbWQ6OnBvdzIoeXIg KiB2WUNvZWZmKTsKIAogICAgICAgICAvLyBBcHBseSBGYWRlTWFrZXIgbWFzayBhbmQgb3BlcmF0 aW9ucwotICAgICAgICBWYzo6ZmxvYXRfbSBleGNsdWRlTWFzayA9IGQtPmZhZGVNYWtlci5uZWVk RmFkZShkaXN0KTsKKyAgICAgICAgZmxvYXRfbSBleGNsdWRlTWFzayA9IGQtPmZhZGVNYWtlci5u ZWVkRmFkZShkaXN0KTsKIAotICAgICAgICBpZiAoIWV4Y2x1ZGVNYXNrLmlzRnVsbCgpKSB7Ci0g ICAgICAgICAgICBWYzo6ZmxvYXRfdiB2YWxEaXN0ID0gZGlzdCAqIHZDdXJ2ZVJlc29sdXRpb247 CisgICAgICAgIGlmICgheHNpbWQ6OmFsbChleGNsdWRlTWFzaykpIHsKKyAgICAgICAgICAgIGZs b2F0X3YgdmFsRGlzdCA9IGRpc3QgKiB2Q3VydmVSZXNvbHV0aW9uOwogICAgICAgICAgICAgLy8g dHJ1bmNhdGUKLSAgICAgICAgICAgIFZjOjpmbG9hdF92OjpJbmRleFR5cGUgdkFscGhhVmFsdWUo dmFsRGlzdCk7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiB2RmxvYXRBbHBoYVZhbHVlID0gdkFs cGhhVmFsdWU7CisgICAgICAgICAgICBpbnRfdiB2QWxwaGFWYWx1ZSA9IHhzaW1kOjp0b19pbnQo dmFsRGlzdCk7CisgICAgICAgICAgICBmbG9hdF92IHZGbG9hdEFscGhhVmFsdWUgPSB4c2ltZDo6 dG9fZmxvYXQodkFscGhhVmFsdWUpOwogCi0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBhbHBoYVZh bHVlRiA9IHZhbERpc3QgLSB2RmxvYXRBbHBoYVZhbHVlOworICAgICAgICAgICAgZmxvYXRfdiBh bHBoYVZhbHVlRiA9IHZhbERpc3QgLSB2RmxvYXRBbHBoYVZhbHVlOwogCi0gICAgICAgICAgICBW Yzo6ZmxvYXRfbSBhbHBoYU1hc2sgPSB2QWxwaGFWYWx1ZSA8IHZaZXJvOwotICAgICAgICAgICAg dkFscGhhVmFsdWUuc2V0WmVybyhhbHBoYU1hc2spOworICAgICAgICAgICAgYXV0byBhbHBoYU1h c2sgPSB2QWxwaGFWYWx1ZSA8IGludF92KDApOworICAgICAgICAgICAgdkFscGhhVmFsdWUgPSB4 c2ltZDo6c2V0X3plcm8odkFscGhhVmFsdWUsIGFscGhhTWFzayk7CiAKLSAgICAgICAgICAgIHZD dXJ2ZWREYXRhLmdhdGhlcihjdXJ2ZURhdGFQb2ludGVyLCB2QWxwaGFWYWx1ZSk7Ci0gICAgICAg ICAgICB2Q3VydmVkRGF0YTEuZ2F0aGVyKGN1cnZlRGF0YVBvaW50ZXIsIHZBbHBoYVZhbHVlICsg MSk7Ci0gICAgICAgICAgICAvLyAgICAgICAgICAgIFZjOjpmbG9hdF92IHZDdXJ2ZWREYXRhMShj dXJ2ZURhdGFQb2ludGVyLHZBbHBoYVZhbHVlICsgMSk7CisgICAgICAgICAgICB2Q3VydmVkRGF0 YSA9IGZsb2F0X3Y6OmdhdGhlcihjdXJ2ZURhdGFQb2ludGVyLCB2QWxwaGFWYWx1ZSk7CisgICAg ICAgICAgICB2Q3VydmVkRGF0YTEgPSBmbG9hdF92OjpnYXRoZXIoY3VydmVEYXRhUG9pbnRlciwg dkFscGhhVmFsdWUgKyAxKTsKIAogICAgICAgICAgICAgLy8gdkFscGhhCi0gICAgICAgICAgICBW Yzo6ZmxvYXRfdiBmdWxsRmFkZSA9ICgodk9uZSAtIGFscGhhVmFsdWVGKSAqIHZDdXJ2ZWREYXRh ICsgYWxwaGFWYWx1ZUYgKiB2Q3VydmVkRGF0YTEpOworICAgICAgICAgICAgZmxvYXRfdiBmdWxs RmFkZSA9ICgodk9uZSAtIGFscGhhVmFsdWVGKSAqIHZDdXJ2ZWREYXRhICsgYWxwaGFWYWx1ZUYg KiB2Q3VydmVkRGF0YTEpOwogCi0gICAgICAgICAgICBWYzo6ZmxvYXRfbSBtYXNrOwogICAgICAg ICAgICAgLy8gTWFzayBpbiB0aGUgaW5uZXIgY2lyY2xlIG9mIHRoZSBtYXNrCi0gICAgICAgICAg ICBtYXNrID0gZnVsbEZhZGUgPCB2WmVybzsKLSAgICAgICAgICAgIGZ1bGxGYWRlLnNldFplcm8o bWFzayk7CisgICAgICAgICAgICBmbG9hdF9tIG1hc2sgPSBmdWxsRmFkZSA8IHZaZXJvOworICAg ICAgICAgICAgZnVsbEZhZGUgPSB4c2ltZDo6c2V0X3plcm8oZnVsbEZhZGUsIG1hc2spOwogCiAg ICAgICAgICAgICAvLyBNYXNrIG91dGVyIGNpcmNsZSBvZiBtYXNrCiAgICAgICAgICAgICBtYXNr ID0gZnVsbEZhZGUgPj0gdk9uZTsKLSAgICAgICAgICAgIFZjOjpmbG9hdF92IHZGYWRlID0gKHZP bmUgLSBmdWxsRmFkZSk7Ci0gICAgICAgICAgICB2RmFkZS5zZXRaZXJvKG1hc2spOworICAgICAg ICAgICAgZmxvYXRfdiB2RmFkZSA9ICh2T25lIC0gZnVsbEZhZGUpOworICAgICAgICAgICAgdkZh ZGUgPSB4c2ltZDo6c2V0X3plcm8odkZhZGUsIG1hc2spOwogCiAgICAgICAgICAgICAvLyByZXR1 cm4gb3JpZ2luYWwgZGlzdCB2YWx1ZXMgYmVmb3JlIHZGYWRlIHRyYW5zZm9ybQotICAgICAgICAg ICAgdkZhZGUoZXhjbHVkZU1hc2spID0gZGlzdDsKLSAgICAgICAgICAgIHZGYWRlLnN0b3JlKGJ1 ZmZlclBvaW50ZXIsIFZjOjpBbGlnbmVkKTsKKyAgICAgICAgICAgIHZGYWRlID0geHNpbWQ6OnNl bGVjdChleGNsdWRlTWFzaywgZGlzdCwgdkZhZGUpOworICAgICAgICAgICAgdkZhZGUuc3RvcmVf YWxpZ25lZChidWZmZXJQb2ludGVyKTsKIAogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ZGlzdC5zdG9yZShidWZmZXJQb2ludGVyLCBWYzo6QWxpZ25lZCk7CisgICAgICAgICAgICBkaXN0 LnN0b3JlX2FsaWduZWQoYnVmZmVyUG9pbnRlcik7CiAgICAgICAgIH0KICAgICAgICAgY3VycmVu dEluZGljZXMgPSBjdXJyZW50SW5kaWNlcyArIGluY3JlbWVudDsKIAotICAgICAgICBidWZmZXJQ b2ludGVyICs9IFZjOjpmbG9hdF92OjpzaXplKCk7CisgICAgICAgIGJ1ZmZlclBvaW50ZXIgKz0g ZmxvYXRfdjo6c2l6ZTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPD4KIHRlbXBsYXRlPD4KLXZvaWQg RmFzdFJvd1Byb2Nlc3NvcjxLaXNSZWN0YW5nbGVNYXNrR2VuZXJhdG9yPjo6cHJvY2VzczxWYzo6 Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KGZsb2F0ICpidWZmZXIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmxvYXQgY29zYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZsb2F0IHNpbmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmbG9hdCBjZW50ZXJYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxvYXQgY2VudGVyWSkKK3ZvaWQgRmFzdFJvd1Byb2Nlc3NvcjxLaXNSZWN0YW5nbGVN YXNrR2VuZXJhdG9yPjo6cHJvY2Vzczx4c2ltZDo6Y3VycmVudF9hcmNoPihmbG9hdCAqYnVmZmVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmbG9hdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNvc2EsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmxvYXQgc2luYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjZW50 ZXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNlbnRlclkpCiB7CisgICAgdXNpbmcg ZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxmbG9hdCwgeHNpbWQ6OmN1cnJlbnRfYXJjaD47CisgICAg dXNpbmcgZmxvYXRfbSA9IGZsb2F0X3Y6OmJhdGNoX2Jvb2xfdHlwZTsKKwogICAgIGNvbnN0IGJv b2wgdXNlU21vb3RoaW5nID0gZC0+Y29weU9mQW50aWFsaWFzRWRnZXM7CiAKICAgICBmbG9hdCB5 XyA9IHkgLSBjZW50ZXJZOwpAQCAtMjkwLDE2NSArMzAwLDE2OCBAQCB2b2lkIEZhc3RSb3dQcm9j ZXNzb3I8S2lzUmVjdGFuZ2xlTWFza0dlbmVyYXRvcj46OnByb2Nlc3M8VmM6OkN1cnJlbnRJbXBs ZW1lbnRhdAogCiAgICAgZmxvYXQgKmJ1ZmZlclBvaW50ZXIgPSBidWZmZXI7CiAKLSAgICBWYzo6 ZmxvYXRfdiBjdXJyZW50SW5kaWNlcyA9IFZjOjpmbG9hdF92OjpJbmRleGVzRnJvbVplcm8oKTsK KyAgICBmbG9hdF92IGN1cnJlbnRJbmRpY2VzID0geHNpbWQ6OmRldGFpbDo6bWFrZV9zZXF1ZW5j ZV9hc19iYXRjaDxmbG9hdF92PigpOwogCi0gICAgVmM6OmZsb2F0X3YgaW5jcmVtZW50KChmbG9h dClWYzo6ZmxvYXRfdjo6c2l6ZSgpKTsKLSAgICBWYzo6ZmxvYXRfdiB2Q2VudGVyWChjZW50ZXJY KTsKKyAgICBmbG9hdF92IGluY3JlbWVudCgoZmxvYXQpZmxvYXRfdjo6c2l6ZSk7CisgICAgZmxv YXRfdiB2Q2VudGVyWChjZW50ZXJYKTsKIAotICAgIFZjOjpmbG9hdF92IHZDb3NhKGNvc2EpOwot ICAgIFZjOjpmbG9hdF92IHZTaW5hKHNpbmEpOwotICAgIFZjOjpmbG9hdF92IHZDb3NhWV8oY29z YXlfKTsKLSAgICBWYzo6ZmxvYXRfdiB2U2luYVlfKHNpbmF5Xyk7CisgICAgZmxvYXRfdiB2Q29z YShjb3NhKTsKKyAgICBmbG9hdF92IHZTaW5hKHNpbmEpOworICAgIGZsb2F0X3YgdkNvc2FZXyhj b3NheV8pOworICAgIGZsb2F0X3YgdlNpbmFZXyhzaW5heV8pOwogCi0gICAgVmM6OmZsb2F0X3Yg dlhDb2VmZihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+eGNvZWZmKSk7Ci0gICAgVmM6OmZsb2F0X3Yg dllDb2VmZihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+eWNvZWZmKSk7CisgICAgZmxvYXRfdiB2WENv ZWZmKHN0YXRpY19jYXN0PGZsb2F0PihkLT54Y29lZmYpKTsKKyAgICBmbG9hdF92IHZZQ29lZmYo c3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPnljb2VmZikpOwogCi0gICAgVmM6OmZsb2F0X3YgdlRyYW5z Zm9ybWVkRmFkZVgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPnRyYW5zZm9ybWVkRmFkZVgpKTsKLSAg ICBWYzo6ZmxvYXRfdiB2VHJhbnNmb3JtZWRGYWRlWShzdGF0aWNfY2FzdDxmbG9hdD4oZC0+dHJh bnNmb3JtZWRGYWRlWSkpOworICAgIGZsb2F0X3YgdlRyYW5zZm9ybWVkRmFkZVgoc3RhdGljX2Nh c3Q8ZmxvYXQ+KGQtPnRyYW5zZm9ybWVkRmFkZVgpKTsKKyAgICBmbG9hdF92IHZUcmFuc2Zvcm1l ZEZhZGVZKHN0YXRpY19jYXN0PGZsb2F0PihkLT50cmFuc2Zvcm1lZEZhZGVZKSk7CiAKLSAgICBW Yzo6ZmxvYXRfdiB2T25lKFZjOjpPbmUpOwotICAgIFZjOjpmbG9hdF92IHZaZXJvKFZjOjpaZXJv KTsKLSAgICBWYzo6ZmxvYXRfdiB2VG9sZXJhbmNlKDEwMDAwLmYpOworICAgIGZsb2F0X3Ygdk9u ZSgxKTsKKyAgICBmbG9hdF92IHZaZXJvKDApOworICAgIGZsb2F0X3YgdlRvbGVyYW5jZSgxMDAw MC5mKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih3 aWR0aCk7IGkgKz0gVmM6OmZsb2F0X3Y6OnNpemUoKSkgewotICAgICAgICBWYzo6ZmxvYXRfdiB4 XyA9IGN1cnJlbnRJbmRpY2VzIC0gdkNlbnRlclg7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg PCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRoKTsgaSArPSBmbG9hdF92OjpzaXplKSB7CisgICAg ICAgIGZsb2F0X3YgeF8gPSBjdXJyZW50SW5kaWNlcyAtIHZDZW50ZXJYOwogCi0gICAgICAgIFZj OjpmbG9hdF92IHhyID0gVmM6OmFicyh4XyAqIHZDb3NhIC0gdlNpbmFZXyk7Ci0gICAgICAgIFZj OjpmbG9hdF92IHlyID0gVmM6OmFicyh4XyAqIHZTaW5hICsgdkNvc2FZXyk7CisgICAgICAgIGZs b2F0X3YgeHIgPSB4c2ltZDo6YWJzKHhfICogdkNvc2EgLSB2U2luYVlfKTsKKyAgICAgICAgZmxv YXRfdiB5ciA9IHhzaW1kOjphYnMoeF8gKiB2U2luYSArIHZDb3NhWV8pOwogCi0gICAgICAgIFZj OjpmbG9hdF92IG54ciA9IHhyICogdlhDb2VmZjsKLSAgICAgICAgVmM6OmZsb2F0X3YgbnlyID0g eXIgKiB2WUNvZWZmOworICAgICAgICBmbG9hdF92IG54ciA9IHhyICogdlhDb2VmZjsKKyAgICAg ICAgZmxvYXRfdiBueXIgPSB5ciAqIHZZQ29lZmY7CiAKLSAgICAgICAgVmM6OmZsb2F0X20gb3V0 c2lkZU1hc2sgPSAobnhyID4gdk9uZSkgfHwgKG55ciA+IHZPbmUpOworICAgICAgICBmbG9hdF9t IG91dHNpZGVNYXNrID0gKG54ciA+IHZPbmUpIHx8IChueXIgPiB2T25lKTsKIAotICAgICAgICBp ZiAoIW91dHNpZGVNYXNrLmlzRnVsbCgpKSB7CisgICAgICAgIGlmICgheHNpbWQ6OmFsbChvdXRz aWRlTWFzaykpIHsKICAgICAgICAgICAgIGlmICh1c2VTbW9vdGhpbmcpIHsKLSAgICAgICAgICAg ICAgICB4ciA9IFZjOjphYnMoeHIpICsgdk9uZTsKLSAgICAgICAgICAgICAgICB5ciA9IFZjOjph YnMoeXIpICsgdk9uZTsKKyAgICAgICAgICAgICAgICB4ciA9IHhzaW1kOjphYnMoeHIpICsgdk9u ZTsKKyAgICAgICAgICAgICAgICB5ciA9IHhzaW1kOjphYnMoeXIpICsgdk9uZTsKICAgICAgICAg ICAgIH0KIAotICAgICAgICAgICAgVmM6OmZsb2F0X3YgZnhyID0geHIgKiB2VHJhbnNmb3JtZWRG YWRlWDsKLSAgICAgICAgICAgIFZjOjpmbG9hdF92IGZ5ciA9IHlyICogdlRyYW5zZm9ybWVkRmFk ZVk7CisgICAgICAgICAgICBmbG9hdF92IGZ4ciA9IHhyICogdlRyYW5zZm9ybWVkRmFkZVg7Cisg ICAgICAgICAgICBmbG9hdF92IGZ5ciA9IHlyICogdlRyYW5zZm9ybWVkRmFkZVk7CiAKLSAgICAg ICAgICAgIFZjOjpmbG9hdF92IGZ4ck5vcm0gPSBueHIgKiAoZnhyIC0gdk9uZSkgLyAoZnhyIC0g bnhyKTsKLSAgICAgICAgICAgIFZjOjpmbG9hdF92IGZ5ck5vcm0gPSBueXIgKiAoZnlyIC0gdk9u ZSkgLyAoZnlyIC0gbnlyKTsKKyAgICAgICAgICAgIGZsb2F0X3YgZnhyTm9ybSA9IG54ciAqIChm eHIgLSB2T25lKSAvIChmeHIgLSBueHIpOworICAgICAgICAgICAgZmxvYXRfdiBmeXJOb3JtID0g bnlyICogKGZ5ciAtIHZPbmUpIC8gKGZ5ciAtIG55cik7CiAKLSAgICAgICAgICAgIFZjOjpmbG9h dF92IHZGYWRlKHZaZXJvKTsKKyAgICAgICAgICAgIGZsb2F0X3YgdkZhZGUodlplcm8pOwogCi0g ICAgICAgICAgICBWYzo6ZmxvYXRfbSB2RmFkZU1hc2sgPSBmeHJOb3JtIDwgZnlyTm9ybTsKLSAg ICAgICAgICAgIFZjOjpmbG9hdF92IHZNYXhWYWwgPSB2RmFkZTsKLSAgICAgICAgICAgIHZNYXhW YWwoZnhyID4gdk9uZSkgPSBmeHJOb3JtOwotICAgICAgICAgICAgdk1heFZhbCh2RmFkZU1hc2sg JiYgZnlyID4gdk9uZSkgPSBmeXJOb3JtOworICAgICAgICAgICAgZmxvYXRfbSB2RmFkZU1hc2sg PSBmeHJOb3JtIDwgZnlyTm9ybTsKKyAgICAgICAgICAgIGZsb2F0X3Ygdk1heFZhbCA9IHZGYWRl OworICAgICAgICAgICAgdk1heFZhbCA9IHhzaW1kOjpzZWxlY3QoZnhyID4gdk9uZSwgZnhyTm9y bSwgdk1heFZhbCk7CisgICAgICAgICAgICB2TWF4VmFsID0geHNpbWQ6OnNlbGVjdCh2RmFkZU1h c2sgJiYgZnlyID4gdk9uZSwgZnlyTm9ybSwgdk1heFZhbCk7CiAgICAgICAgICAgICB2RmFkZSA9 IHZNYXhWYWw7CiAKICAgICAgICAgICAgIC8vIE1hc2sgb3V0IHRoZSBvdXRlciBjaXJjbGUgb2Yg dGhlIG1hc2sKLSAgICAgICAgICAgIHZGYWRlKG91dHNpZGVNYXNrKSA9IHZPbmU7Ci0gICAgICAg ICAgICB2RmFkZS5zdG9yZShidWZmZXJQb2ludGVyLCBWYzo6QWxpZ25lZCk7CisgICAgICAgICAg ICB2RmFkZSA9IHhzaW1kOjpzZWxlY3Qob3V0c2lkZU1hc2ssIHZPbmUsIHZGYWRlKTsKKyAgICAg ICAgICAgIHZGYWRlLnN0b3JlX2FsaWduZWQoYnVmZmVyUG9pbnRlcik7CiAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAvLyBNYXNrIG91dCBldmVyeXRoaW5nIG91dHNpZGUgdGhlIGNpcmNs ZQotICAgICAgICAgICAgdk9uZS5zdG9yZShidWZmZXJQb2ludGVyLCBWYzo6QWxpZ25lZCk7Cisg ICAgICAgICAgICB2T25lLnN0b3JlX2FsaWduZWQoYnVmZmVyUG9pbnRlcik7CiAgICAgICAgIH0K IAogICAgICAgICBjdXJyZW50SW5kaWNlcyA9IGN1cnJlbnRJbmRpY2VzICsgaW5jcmVtZW50Owog Ci0gICAgICAgIGJ1ZmZlclBvaW50ZXIgKz0gVmM6OmZsb2F0X3Y6OnNpemUoKTsKKyAgICAgICAg YnVmZmVyUG9pbnRlciArPSBmbG9hdF92OjpzaXplOwogICAgIH0KIH0KIAogdGVtcGxhdGU8Pgog dGVtcGxhdGU8Pgotdm9pZCBGYXN0Um93UHJvY2Vzc29yPEtpc0dhdXNzUmVjdGFuZ2xlTWFza0dl bmVyYXRvcj46OnByb2Nlc3M8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihm bG9hdCAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsb2F0IHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs b2F0IGNvc2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs b2F0IHNpbmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs b2F0IGNlbnRlclgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsb2F0IGNlbnRlclkpCit2b2lkIEZhc3RSb3dQcm9jZXNzb3I8S2lzR2F1c3NSZWN0YW5nbGVN YXNrR2VuZXJhdG9yPjo6cHJvY2Vzczx4c2ltZDo6Y3VycmVudF9hcmNoPihmbG9hdCAqYnVmZmVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmxvYXQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNv c2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzaW5hLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsb2F0IGNlbnRlclkpCiB7CisgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxmbG9h dCwgeHNpbWQ6OmN1cnJlbnRfYXJjaD47CisgICAgdXNpbmcgZmxvYXRfbSA9IGZsb2F0X3Y6OmJh dGNoX2Jvb2xfdHlwZTsKKwogICAgIGZsb2F0IHlfID0geSAtIGNlbnRlclk7CiAgICAgZmxvYXQg c2luYXlfID0gc2luYSAqIHlfOwogICAgIGZsb2F0IGNvc2F5XyA9IGNvc2EgKiB5XzsKIAogICAg IGZsb2F0ICpidWZmZXJQb2ludGVyID0gYnVmZmVyOwogCi0gICAgVmM6OmZsb2F0X3YgY3VycmVu dEluZGljZXMgPSBWYzo6ZmxvYXRfdjo6SW5kZXhlc0Zyb21aZXJvKCk7CisgICAgZmxvYXRfdiBj dXJyZW50SW5kaWNlcyA9IHhzaW1kOjpkZXRhaWw6Om1ha2Vfc2VxdWVuY2VfYXNfYmF0Y2g8Zmxv YXRfdj4oKTsKIAotICAgIFZjOjpmbG9hdF92IGluY3JlbWVudCgoZmxvYXQpVmM6OmZsb2F0X3Y6 OnNpemUoKSk7Ci0gICAgVmM6OmZsb2F0X3YgdkNlbnRlclgoY2VudGVyWCk7CisgICAgZmxvYXRf diBpbmNyZW1lbnQoKGZsb2F0KWZsb2F0X3Y6OnNpemUpOworICAgIGZsb2F0X3YgdkNlbnRlclgo Y2VudGVyWCk7CiAKLSAgICBWYzo6ZmxvYXRfdiB2Q29zYShjb3NhKTsKLSAgICBWYzo6ZmxvYXRf diB2U2luYShzaW5hKTsKLSAgICBWYzo6ZmxvYXRfdiB2Q29zYVlfKGNvc2F5Xyk7Ci0gICAgVmM6 OmZsb2F0X3YgdlNpbmFZXyhzaW5heV8pOworICAgIGZsb2F0X3YgdkNvc2EoY29zYSk7CisgICAg ZmxvYXRfdiB2U2luYShzaW5hKTsKKyAgICBmbG9hdF92IHZDb3NhWV8oY29zYXlfKTsKKyAgICBm bG9hdF92IHZTaW5hWV8oc2luYXlfKTsKIAotICAgIFZjOjpmbG9hdF92IHZoYWxmV2lkdGgoc3Rh dGljX2Nhc3Q8ZmxvYXQ+KGQtPmhhbGZXaWR0aCkpOwotICAgIFZjOjpmbG9hdF92IHZoYWxmSGVp Z2h0KHN0YXRpY19jYXN0PGZsb2F0PihkLT5oYWxmSGVpZ2h0KSk7Ci0gICAgVmM6OmZsb2F0X3Yg dlhGYWRlKHN0YXRpY19jYXN0PGZsb2F0PihkLT54ZmFkZSkpOwotICAgIFZjOjpmbG9hdF92IHZZ RmFkZShzdGF0aWNfY2FzdDxmbG9hdD4oZC0+eWZhZGUpKTsKKyAgICBmbG9hdF92IHZoYWxmV2lk dGgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPmhhbGZXaWR0aCkpOworICAgIGZsb2F0X3YgdmhhbGZI ZWlnaHQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPmhhbGZIZWlnaHQpKTsKKyAgICBmbG9hdF92IHZY RmFkZShzdGF0aWNfY2FzdDxmbG9hdD4oZC0+eGZhZGUpKTsKKyAgICBmbG9hdF92IHZZRmFkZShz dGF0aWNfY2FzdDxmbG9hdD4oZC0+eWZhZGUpKTsKIAotICAgIFZjOjpmbG9hdF92IHZBbHBoYWZh Y3RvcihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+YWxwaGFmYWN0b3IpKTsKKyAgICBmbG9hdF92IHZB bHBoYWZhY3RvcihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+YWxwaGFmYWN0b3IpKTsKIAotICAgIFZj OjpmbG9hdF92IHZPbmUoVmM6Ok9uZSk7Ci0gICAgVmM6OmZsb2F0X3Ygdlplcm8oVmM6Olplcm8p OwotICAgIFZjOjpmbG9hdF92IHZWYWxNYXgoMjU1LmYpOworICAgIGZsb2F0X3Ygdk9uZSgxKTsK KyAgICBmbG9hdF92IHZaZXJvKDApOworICAgIGZsb2F0X3YgdlZhbE1heCgyNTUuZik7CiAKLSAg ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpOyBpICs9 IFZjOjpmbG9hdF92OjpzaXplKCkpIHsKLSAgICAgICAgVmM6OmZsb2F0X3YgeF8gPSBjdXJyZW50 SW5kaWNlcyAtIHZDZW50ZXJYOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nh c3Q8c2l6ZV90Pih3aWR0aCk7IGkgKz0gZmxvYXRfdjo6c2l6ZSkgeworICAgICAgICBmbG9hdF92 IHhfID0gY3VycmVudEluZGljZXMgLSB2Q2VudGVyWDsKIAotICAgICAgICBWYzo6ZmxvYXRfdiB4 ciA9IHhfICogdkNvc2EgLSB2U2luYVlfOwotICAgICAgICBWYzo6ZmxvYXRfdiB5ciA9IFZjOjph YnMoeF8gKiB2U2luYSArIHZDb3NhWV8pOworICAgICAgICBmbG9hdF92IHhyID0geF8gKiB2Q29z YSAtIHZTaW5hWV87CisgICAgICAgIGZsb2F0X3YgeXIgPSB4c2ltZDo6YWJzKHhfICogdlNpbmEg KyB2Q29zYVlfKTsKIAotICAgICAgICBWYzo6ZmxvYXRfdiB2VmFsdWU7CisgICAgICAgIGZsb2F0 X3YgdlZhbHVlOwogCiAgICAgICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gYXBwbHkgZmFkZXIg b24gdmFsdWVzCi0gICAgICAgIFZjOjpmbG9hdF9tIGV4Y2x1ZGVNYXNrID0gZC0+ZmFkZU1ha2Vy Lm5lZWRGYWRlKHhyLCB5cik7Ci0gICAgICAgIHZWYWx1ZShleGNsdWRlTWFzaykgPSB2T25lOwor ICAgICAgICBmbG9hdF9tIGV4Y2x1ZGVNYXNrID0gZC0+ZmFkZU1ha2VyLm5lZWRGYWRlKHhyLCB5 cik7CisgICAgICAgIHZWYWx1ZSA9IHhzaW1kOjpzZWxlY3QoZXhjbHVkZU1hc2ssIHZPbmUsIHZW YWx1ZSk7CiAKLSAgICAgICAgaWYgKCFleGNsdWRlTWFzay5pc0Z1bGwoKSkgewotICAgICAgICAg ICAgVmM6OmZsb2F0X3YgZnVsbEZhZGUgPSB2VmFsTWF4Ci0gICAgICAgICAgICAgICAgLSAodkFs cGhhZmFjdG9yCi0gICAgICAgICAgICAgICAgICAgKiAoVmNFeHRyYU1hdGg6OmVyZigodmhhbGZX aWR0aCArIHhyKSAqIHZYRmFkZSkgKyBWY0V4dHJhTWF0aDo6ZXJmKCh2aGFsZldpZHRoIC0geHIp ICogdlhGYWRlKSkKKyAgICAgICAgaWYgKCF4c2ltZDo6YWxsKGV4Y2x1ZGVNYXNrKSkgeworICAg ICAgICAgICAgZmxvYXRfdiBmdWxsRmFkZSA9IHZWYWxNYXgKKyAgICAgICAgICAgICAgICAtICh2 QWxwaGFmYWN0b3IgKiAoVmNFeHRyYU1hdGg6OmVyZigodmhhbGZXaWR0aCArIHhyKSAqIHZYRmFk ZSkgKyBWY0V4dHJhTWF0aDo6ZXJmKCh2aGFsZldpZHRoIC0geHIpICogdlhGYWRlKSkKICAgICAg ICAgICAgICAgICAgICAqIChWY0V4dHJhTWF0aDo6ZXJmKCh2aGFsZkhlaWdodCArIHlyKSAqIHZZ RmFkZSkgKyBWY0V4dHJhTWF0aDo6ZXJmKCh2aGFsZkhlaWdodCAtIHlyKSAqIHZZRmFkZSkpKTsK IAogICAgICAgICAgICAgLy8gYXBwbHkgYW50aWFsaWFzIGZhZGVyCiAgICAgICAgICAgICBkLT5m YWRlTWFrZXIuYXBwbHkyREZhZGVyKGZ1bGxGYWRlLCBleGNsdWRlTWFzaywgeHIsIHlyKTsKIAot ICAgICAgICAgICAgVmM6OmZsb2F0X20gbWFzazsKLQogICAgICAgICAgICAgLy8gTWFzayBpbiB0 aGUgaW5uZXIgY2lyY2xlIG9mIHRoZSBtYXNrCi0gICAgICAgICAgICBtYXNrID0gZnVsbEZhZGUg PCB2WmVybzsKLSAgICAgICAgICAgIGZ1bGxGYWRlLnNldFplcm8obWFzayk7CisgICAgICAgICAg ICBmbG9hdF9tIG1hc2sgPSBmdWxsRmFkZSA8IHZaZXJvOworICAgICAgICAgICAgZnVsbEZhZGUg PSB4c2ltZDo6c2V0X3plcm8oZnVsbEZhZGUsIG1hc2spOwogCiAgICAgICAgICAgICAvLyBNYXNr IHRoZSBvdXRlciBjaXJjbGUKICAgICAgICAgICAgIG1hc2sgPSBmdWxsRmFkZSA+IDI1NC45NzRm OwotICAgICAgICAgICAgZnVsbEZhZGUobWFzaykgPSB2VmFsTWF4OworICAgICAgICAgICAgZnVs bEZhZGUgPSB4c2ltZDo6c2VsZWN0KG1hc2ssIHZWYWxNYXgsIGZ1bGxGYWRlKTsKIAogICAgICAg ICAgICAgLy8gTWFzayAodmFsdWUgLSB2YWx1ZSksIHByZWNpc2lvbiBlcnJvcnMuCi0gICAgICAg ICAgICBWYzo6ZmxvYXRfdiB2RmFkZSA9IGZ1bGxGYWRlIC8gdlZhbE1heDsKKyAgICAgICAgICAg IGZsb2F0X3YgdkZhZGUgPSBmdWxsRmFkZSAvIHZWYWxNYXg7CiAKICAgICAgICAgICAgIC8vIHJl dHVybiBvcmlnaW5hbCB2VmFsdWUgdmFsdWVzIGJlZm9yZSB2RmFkZSB0cmFuc2Zvcm0KLSAgICAg ICAgICAgIHZGYWRlKGV4Y2x1ZGVNYXNrKSA9IHZWYWx1ZTsKLSAgICAgICAgICAgIHZGYWRlLnN0 b3JlKGJ1ZmZlclBvaW50ZXIsIFZjOjpBbGlnbmVkKTsKKyAgICAgICAgICAgIHZGYWRlID0geHNp bWQ6OnNlbGVjdChleGNsdWRlTWFzaywgdlZhbHVlLCB2RmFkZSk7CisgICAgICAgICAgICB2RmFk ZS5zdG9yZV9hbGlnbmVkKGJ1ZmZlclBvaW50ZXIpOwogCiAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICB2VmFsdWUuc3RvcmUoYnVmZmVyUG9pbnRlciwgVmM6OkFsaWduZWQpOworICAgICAg ICAgICAgdlZhbHVlLnN0b3JlX2FsaWduZWQoYnVmZmVyUG9pbnRlcik7CiAgICAgICAgIH0KICAg ICAgICAgY3VycmVudEluZGljZXMgPSBjdXJyZW50SW5kaWNlcyArIGluY3JlbWVudDsKIAotICAg ICAgICBidWZmZXJQb2ludGVyICs9IFZjOjpmbG9hdF92OjpzaXplKCk7CisgICAgICAgIGJ1ZmZl clBvaW50ZXIgKz0gZmxvYXRfdjo6c2l6ZTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPD4KIHRlbXBs YXRlPD4KLXZvaWQgRmFzdFJvd1Byb2Nlc3NvcjxLaXNDdXJ2ZVJlY3RhbmdsZU1hc2tHZW5lcmF0 b3I+Ojpwcm9jZXNzPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oZmxvYXQg KmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h dCB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBj b3NhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBz aW5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBj ZW50ZXJYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h dCBjZW50ZXJZKQordm9pZCBGYXN0Um93UHJvY2Vzc29yPEtpc0N1cnZlUmVjdGFuZ2xlTWFza0dl bmVyYXRvcj46OnByb2Nlc3M8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oZmxvYXQgKmJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZsb2F0IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjb3NhLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2luYSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZsb2F0IGNlbnRlclgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h dCBjZW50ZXJZKQogeworICAgIHVzaW5nIGZsb2F0X3YgPSB4c2ltZDo6YmF0Y2g8ZmxvYXQsIHhz aW1kOjpjdXJyZW50X2FyY2g+OworICAgIHVzaW5nIGZsb2F0X20gPSBmbG9hdF92OjpiYXRjaF9i b29sX3R5cGU7CisKICAgICBmbG9hdCB5XyA9IHkgLSBjZW50ZXJZOwogICAgIGZsb2F0IHNpbmF5 XyA9IHNpbmEgKiB5XzsKICAgICBmbG9hdCBjb3NheV8gPSBjb3NhICogeV87CkBAIC00NTcsNTcg KzQ3MCw1NyBAQCB2b2lkIEZhc3RSb3dQcm9jZXNzb3I8S2lzQ3VydmVSZWN0YW5nbGVNYXNrR2Vu ZXJhdG9yPjo6cHJvY2VzczxWYzo6Q3VycmVudEltcGxlbQogCiAgICAgcXJlYWwgKmN1cnZlRGF0 YVBvaW50ZXIgPSBkLT5jdXJ2ZURhdGEuZGF0YSgpOwogCi0gICAgVmM6OmZsb2F0X3YgY3VycmVu dEluZGljZXMgPSBWYzo6ZmxvYXRfdjo6SW5kZXhlc0Zyb21aZXJvKCk7CisgICAgZmxvYXRfdiBj dXJyZW50SW5kaWNlcyA9IHhzaW1kOjpkZXRhaWw6Om1ha2Vfc2VxdWVuY2VfYXNfYmF0Y2g8Zmxv YXRfdj4oKTsKIAotICAgIFZjOjpmbG9hdF92IGluY3JlbWVudCgoZmxvYXQpVmM6OmZsb2F0X3Y6 OnNpemUoKSk7Ci0gICAgVmM6OmZsb2F0X3YgdkNlbnRlclgoY2VudGVyWCk7CisgICAgZmxvYXRf diBpbmNyZW1lbnQoKGZsb2F0KWZsb2F0X3Y6OnNpemUpOworICAgIGZsb2F0X3YgdkNlbnRlclgo Y2VudGVyWCk7CiAKLSAgICBWYzo6ZmxvYXRfdiB2Q29zYShjb3NhKTsKLSAgICBWYzo6ZmxvYXRf diB2U2luYShzaW5hKTsKLSAgICBWYzo6ZmxvYXRfdiB2Q29zYVlfKGNvc2F5Xyk7Ci0gICAgVmM6 OmZsb2F0X3YgdlNpbmFZXyhzaW5heV8pOworICAgIGZsb2F0X3YgdkNvc2EoY29zYSk7CisgICAg ZmxvYXRfdiB2U2luYShzaW5hKTsKKyAgICBmbG9hdF92IHZDb3NhWV8oY29zYXlfKTsKKyAgICBm bG9hdF92IHZTaW5hWV8oc2luYXlfKTsKIAotICAgIFZjOjpmbG9hdF92IHZZQ29lZmYoc3RhdGlj X2Nhc3Q8ZmxvYXQ+KGQtPnljb2VmZikpOwotICAgIFZjOjpmbG9hdF92IHZYQ29lZmYoc3RhdGlj X2Nhc3Q8ZmxvYXQ+KGQtPnhjb2VmZikpOwotICAgIFZjOjpmbG9hdF92IHZDdXJ2ZVJlc29sdXRp b24oc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPmN1cnZlUmVzb2x1dGlvbikpOworICAgIGZsb2F0X3Yg dllDb2VmZihzdGF0aWNfY2FzdDxmbG9hdD4oZC0+eWNvZWZmKSk7CisgICAgZmxvYXRfdiB2WENv ZWZmKHN0YXRpY19jYXN0PGZsb2F0PihkLT54Y29lZmYpKTsKKyAgICBmbG9hdF92IHZDdXJ2ZVJl c29sdXRpb24oc3RhdGljX2Nhc3Q8ZmxvYXQ+KGQtPmN1cnZlUmVzb2x1dGlvbikpOwogCi0gICAg VmM6OmZsb2F0X3Ygdk9uZShWYzo6T25lKTsKLSAgICBWYzo6ZmxvYXRfdiB2WmVybyhWYzo6WmVy byk7Ci0gICAgVmM6OmZsb2F0X3YgdlZhbE1heCgyNTUuZik7CisgICAgZmxvYXRfdiB2T25lKDEp OworICAgIGZsb2F0X3Ygdlplcm8oMCk7CisgICAgZmxvYXRfdiB2VmFsTWF4KDI1NS5mKTsKIAot ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCk7IGkg Kz0gVmM6OmZsb2F0X3Y6OnNpemUoKSkgewotICAgICAgICBWYzo6ZmxvYXRfdiB4XyA9IGN1cnJl bnRJbmRpY2VzIC0gdkNlbnRlclg7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNf Y2FzdDxzaXplX3Q+KHdpZHRoKTsgaSArPSBmbG9hdF92OjpzaXplKSB7CisgICAgICAgIGZsb2F0 X3YgeF8gPSBjdXJyZW50SW5kaWNlcyAtIHZDZW50ZXJYOwogCi0gICAgICAgIFZjOjpmbG9hdF92 IHhyID0geF8gKiB2Q29zYSAtIHZTaW5hWV87Ci0gICAgICAgIFZjOjpmbG9hdF92IHlyID0gVmM6 OmFicyh4XyAqIHZTaW5hICsgdkNvc2FZXyk7CisgICAgICAgIGZsb2F0X3YgeHIgPSB4XyAqIHZD b3NhIC0gdlNpbmFZXzsKKyAgICAgICAgZmxvYXRfdiB5ciA9IHhzaW1kOjphYnMoeF8gKiB2U2lu YSArIHZDb3NhWV8pOwogCi0gICAgICAgIFZjOjpmbG9hdF92IHZWYWx1ZTsKKyAgICAgICAgZmxv YXRfdiB2VmFsdWU7CiAKICAgICAgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBhcHBseSBmYWRl ciBvbiB2YWx1ZXMKLSAgICAgICAgVmM6OmZsb2F0X20gZXhjbHVkZU1hc2sgPSBkLT5mYWRlTWFr ZXIubmVlZEZhZGUoeHIsIHlyKTsKLSAgICAgICAgdlZhbHVlKGV4Y2x1ZGVNYXNrKSA9IHZPbmU7 CisgICAgICAgIGZsb2F0X20gZXhjbHVkZU1hc2sgPSBkLT5mYWRlTWFrZXIubmVlZEZhZGUoeHIs IHlyKTsKKyAgICAgICAgdlZhbHVlID0geHNpbWQ6OnNlbGVjdChleGNsdWRlTWFzaywgdk9uZSwg dlZhbHVlKTsKIAotICAgICAgICBpZiAoIWV4Y2x1ZGVNYXNrLmlzRnVsbCgpKSB7CisgICAgICAg IGlmICgheHNpbWQ6OmFsbChleGNsdWRlTWFzaykpIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQg dG8gbWFzayB0aGUgZXh0cmEgYXJlYSBnaXZlbiBmb3IgYWxpbmlhdGlvbgogICAgICAgICAgICAg Ly8gdGhlIG5leHQgb3BlcmF0aW9uIHNob3VsZCBuZXZlciBnaXZlIHZhbHVlcyBhYm92ZSAxCi0g ICAgICAgICAgICBWYzo6ZmxvYXRfdiBwcmVTSW5kZXggPSBWYzo6YWJzKHhyKSAqIHZYQ29lZmY7 Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBwcmVUSW5kZXggPSBWYzo6YWJzKHlyKSAqIHZZQ29l ZmY7CisgICAgICAgICAgICBmbG9hdF92IHByZVNJbmRleCA9IHhzaW1kOjphYnMoeHIpICogdlhD b2VmZjsKKyAgICAgICAgICAgIGZsb2F0X3YgcHJlVEluZGV4ID0geHNpbWQ6OmFicyh5cikgKiB2 WUNvZWZmOwogCi0gICAgICAgICAgICBwcmVTSW5kZXgocHJlU0luZGV4ID4gdk9uZSkgPSB2T25l OwotICAgICAgICAgICAgcHJlVEluZGV4KHByZVRJbmRleCA+IHZPbmUpID0gdk9uZTsKKyAgICAg ICAgICAgIHByZVNJbmRleCA9IHhzaW1kOjpzZWxlY3QocHJlU0luZGV4ID4gdk9uZSwgdk9uZSwg cHJlU0luZGV4KTsKKyAgICAgICAgICAgIHByZVRJbmRleCA9IHhzaW1kOjpzZWxlY3QocHJlVElu ZGV4ID4gdk9uZSwgdk9uZSwgcHJlVEluZGV4KTsKIAotICAgICAgICAgICAgVmM6OmZsb2F0X3Y6 OkluZGV4VHlwZSBzSW5kZXgocm91bmQocHJlU0luZGV4ICogdkN1cnZlUmVzb2x1dGlvbikpOwot ICAgICAgICAgICAgVmM6OmZsb2F0X3Y6OkluZGV4VHlwZSB0SW5kZXgocm91bmQocHJlVEluZGV4 ICogdkN1cnZlUmVzb2x1dGlvbikpOworICAgICAgICAgICAgY29uc3QgYXV0byBzSW5kZXggPSB4 c2ltZDo6bmVhcmJ5aW50X2FzX2ludChwcmVTSW5kZXggKiB2Q3VydmVSZXNvbHV0aW9uKTsKKyAg ICAgICAgICAgIGNvbnN0IGF1dG8gdEluZGV4ID0geHNpbWQ6Om5lYXJieWludF9hc19pbnQocHJl VEluZGV4ICogdkN1cnZlUmVzb2x1dGlvbik7CiAKLSAgICAgICAgICAgIFZjOjpmbG9hdF92OjpJ bmRleFR5cGUgc0luZGV4SW52ZXJ0ZWQgPSB2Q3VydmVSZXNvbHV0aW9uIC0gc0luZGV4OwotICAg ICAgICAgICAgVmM6OmZsb2F0X3Y6OkluZGV4VHlwZSB0SW5kZXhJbnZlcnRlZCA9IHZDdXJ2ZVJl c29sdXRpb24gLSB0SW5kZXg7CisgICAgICAgICAgICBhdXRvIHNJbmRleEludmVydGVkID0geHNp bWQ6OnRvX2ludCh2Q3VydmVSZXNvbHV0aW9uIC0geHNpbWQ6OnRvX2Zsb2F0KHNJbmRleCkpOwor ICAgICAgICAgICAgYXV0byB0SW5kZXhJbnZlcnRlZCA9IHhzaW1kOjp0b19pbnQodkN1cnZlUmVz b2x1dGlvbiAtIHhzaW1kOjp0b19mbG9hdCh0SW5kZXgpKTsKIAotICAgICAgICAgICAgVmM6OmZs b2F0X3YgdkN1cnZlZERhdGFTSW5kZXgoY3VydmVEYXRhUG9pbnRlciwgc0luZGV4KTsKLSAgICAg ICAgICAgIFZjOjpmbG9hdF92IHZDdXJ2ZWREYXRhVEluZGV4KGN1cnZlRGF0YVBvaW50ZXIsIHRJ bmRleCk7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiB2Q3VydmVkRGF0YVNJbmRleEludihjdXJ2 ZURhdGFQb2ludGVyLCBzSW5kZXhJbnZlcnRlZCk7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiB2 Q3VydmVkRGF0YVRJbmRleEludihjdXJ2ZURhdGFQb2ludGVyLCB0SW5kZXhJbnZlcnRlZCk7Cisg ICAgICAgICAgICBjb25zdCBhdXRvIHZDdXJ2ZWREYXRhU0luZGV4ID0gZmxvYXRfdjo6Z2F0aGVy KGN1cnZlRGF0YVBvaW50ZXIsIHNJbmRleCk7CisgICAgICAgICAgICBjb25zdCBhdXRvIHZDdXJ2 ZWREYXRhVEluZGV4ID0gZmxvYXRfdjo6Z2F0aGVyKGN1cnZlRGF0YVBvaW50ZXIsIHRJbmRleCk7 CisgICAgICAgICAgICBjb25zdCBhdXRvIHZDdXJ2ZWREYXRhU0luZGV4SW52ID0gZmxvYXRfdjo6 Z2F0aGVyKGN1cnZlRGF0YVBvaW50ZXIsIHNJbmRleEludmVydGVkKTsKKyAgICAgICAgICAgIGNv bnN0IGF1dG8gdkN1cnZlZERhdGFUSW5kZXhJbnYgPSBmbG9hdF92OjpnYXRoZXIoY3VydmVEYXRh UG9pbnRlciwgdEluZGV4SW52ZXJ0ZWQpOwogCi0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBmdWxs RmFkZSA9IHZWYWxNYXgKKyAgICAgICAgICAgIGZsb2F0X3YgZnVsbEZhZGUgPSB2VmFsTWF4CiAg ICAgICAgICAgICAgICAgKiAodk9uZQogICAgICAgICAgICAgICAgICAgIC0gKHZDdXJ2ZWREYXRh U0luZGV4ICogKHZPbmUgLSB2Q3VydmVkRGF0YVNJbmRleEludikgKiB2Q3VydmVkRGF0YVRJbmRl eAogICAgICAgICAgICAgICAgICAgICAgICogKHZPbmUgLSB2Q3VydmVkRGF0YVRJbmRleEludikp KTsKQEAgLTUxNSwzMCArNTI4LDI4IEBAIHZvaWQgRmFzdFJvd1Byb2Nlc3NvcjxLaXNDdXJ2ZVJl Y3RhbmdsZU1hc2tHZW5lcmF0b3I+Ojpwcm9jZXNzPFZjOjpDdXJyZW50SW1wbGVtCiAgICAgICAg ICAgICAvLyBhcHBseSBhbnRpYWxpYXMgZmFkZXIKICAgICAgICAgICAgIGQtPmZhZGVNYWtlci5h cHBseTJERmFkZXIoZnVsbEZhZGUsIGV4Y2x1ZGVNYXNrLCB4ciwgeXIpOwogCi0gICAgICAgICAg ICBWYzo6ZmxvYXRfbSBtYXNrOwotCiAgICAgICAgICAgICAvLyBNYXNrIGluIHRoZSBpbm5lciBj aXJjbGUgb2YgdGhlIG1hc2sKLSAgICAgICAgICAgIG1hc2sgPSBmdWxsRmFkZSA8IHZaZXJvOwot ICAgICAgICAgICAgZnVsbEZhZGUuc2V0WmVybyhtYXNrKTsKKyAgICAgICAgICAgIGZsb2F0X20g bWFzayA9IGZ1bGxGYWRlIDwgdlplcm87CisgICAgICAgICAgICBmdWxsRmFkZSA9IHhzaW1kOjpz ZXRfemVybyhmdWxsRmFkZSwgbWFzayk7CiAKICAgICAgICAgICAgIC8vIE1hc2sgdGhlIG91dGVy IGNpcmNsZQogICAgICAgICAgICAgbWFzayA9IGZ1bGxGYWRlID4gMjU0Ljk3NGY7Ci0gICAgICAg ICAgICBmdWxsRmFkZShtYXNrKSA9IHZWYWxNYXg7CisgICAgICAgICAgICBmdWxsRmFkZSA9IHhz aW1kOjpzZWxlY3QobWFzaywgdlZhbE1heCwgZnVsbEZhZGUpOwogCiAgICAgICAgICAgICAvLyBN YXNrICh2YWx1ZSAtIHZhbHVlKSwgcHJlY2lzaW9uIGVycm9ycy4KLSAgICAgICAgICAgIFZjOjpm bG9hdF92IHZGYWRlID0gZnVsbEZhZGUgLyB2VmFsTWF4OworICAgICAgICAgICAgZmxvYXRfdiB2 RmFkZSA9IGZ1bGxGYWRlIC8gdlZhbE1heDsKIAogICAgICAgICAgICAgLy8gcmV0dXJuIG9yaWdp bmFsIHZWYWx1ZSB2YWx1ZXMgYmVmb3JlIHZGYWRlIHRyYW5zZm9ybQotICAgICAgICAgICAgdkZh ZGUoZXhjbHVkZU1hc2spID0gdlZhbHVlOwotICAgICAgICAgICAgdkZhZGUuc3RvcmUoYnVmZmVy UG9pbnRlciwgVmM6OkFsaWduZWQpOworICAgICAgICAgICAgdkZhZGUgPSB4c2ltZDo6c2VsZWN0 KGV4Y2x1ZGVNYXNrLCB2VmFsdWUsIHZGYWRlKTsKKyAgICAgICAgICAgIHZGYWRlLnN0b3JlX2Fs aWduZWQoYnVmZmVyUG9pbnRlcik7CiAKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZW YWx1ZS5zdG9yZShidWZmZXJQb2ludGVyLCBWYzo6QWxpZ25lZCk7CisgICAgICAgICAgICB2VmFs dWUuc3RvcmVfYWxpZ25lZChidWZmZXJQb2ludGVyKTsKICAgICAgICAgfQogICAgICAgICBjdXJy ZW50SW5kaWNlcyA9IGN1cnJlbnRJbmRpY2VzICsgaW5jcmVtZW50OwogCi0gICAgICAgIGJ1ZmZl clBvaW50ZXIgKz0gVmM6OmZsb2F0X3Y6OnNpemUoKTsKKyAgICAgICAgYnVmZmVyUG9pbnRlciAr PSBmbG9hdF92OjpzaXplOwogICAgIH0KIH0KIAotI2VuZGlmIC8qIGRlZmluZWQgSEFWRV9WQyAq LworI2VuZGlmIC8qIGRlZmluZWQgSEFWRV9YU0lNRCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9pbWFn ZS9raXNfYnJ1c2hfbWFza19zY2FsYXJfYXBwbGljYXRvci5oIGIvbGlicy9pbWFnZS9raXNfYnJ1 c2hfbWFza19zY2FsYXJfYXBwbGljYXRvci5oCmluZGV4IDUxY2ExYTA2NTYuLjhmN2ZmNTkzNjIg MTAwNjQ0Ci0tLSBhL2xpYnMvaW1hZ2Uva2lzX2JydXNoX21hc2tfc2NhbGFyX2FwcGxpY2F0b3Iu aAorKysgYi9saWJzL2ltYWdlL2tpc19icnVzaF9tYXNrX3NjYWxhcl9hcHBsaWNhdG9yLmgKQEAg LTE2LDcgKzE2LDcgQEAKIC8vIDN4MyBzdXBlcnNhbXBsaW5nCiAjZGVmaW5lIFNVUEVSU0FNUExJ TkcgMwogCi10ZW1wbGF0ZTxjbGFzcyBNYXNrR2VuZXJhdG9yLCBWYzo6SW1wbGVtZW50YXRpb24g aW1wbD4KK3RlbXBsYXRlPGNsYXNzIE1hc2tHZW5lcmF0b3IsIHR5cGVuYW1lIGltcGw+CiBzdHJ1 Y3QgS2lzQnJ1c2hNYXNrU2NhbGFyQXBwbGljYXRvciA6IHB1YmxpYyBLaXNCcnVzaE1hc2tBcHBs aWNhdG9yQmFzZSB7CiAgICAgS2lzQnJ1c2hNYXNrU2NhbGFyQXBwbGljYXRvcihNYXNrR2VuZXJh dG9yICptYXNrR2VuZXJhdG9yKQogICAgICAgICA6IG1fbWFza0dlbmVyYXRvcihtYXNrR2VuZXJh dG9yKQpkaWZmIC0tZ2l0IGEvbGlicy9pbWFnZS9raXNfYnJ1c2hfbWFza192ZWN0b3JfYXBwbGlj YXRvci5oIGIvbGlicy9pbWFnZS9raXNfYnJ1c2hfbWFza192ZWN0b3JfYXBwbGljYXRvci5oCmlu ZGV4IGRjNTNhMzY5YTEuLjhlOWVkNzIxYjQgMTAwNjQ0Ci0tLSBhL2xpYnMvaW1hZ2Uva2lzX2Jy dXNoX21hc2tfdmVjdG9yX2FwcGxpY2F0b3IuaAorKysgYi9saWJzL2ltYWdlL2tpc19icnVzaF9t YXNrX3ZlY3Rvcl9hcHBsaWNhdG9yLmgKQEAgLTksMTEgKzksOSBAQAogI2lmbmRlZiBLSVNfQlJV U0hfVkVDVE9SX0FQUExJQ0FUT1JfSAogI2RlZmluZSBLSVNfQlJVU0hfVkVDVE9SX0FQUExJQ0FU T1JfSAogCi0jaW5jbHVkZSA8Y29uZmlnLXZjLmg+CisjaW5jbHVkZSA8eHNpbWRfZXh0ZW5zaW9u cy94c2ltZC5ocHA+CiAKLSNpZiBkZWZpbmVkIEhBVkVfVkMKLQotI2luY2x1ZGUgPEtvVmNNdWx0 aUFyY2hCdWlsZFN1cHBvcnQuaD4KKyNpZiBkZWZpbmVkIEhBVkVfWFNJTUQKIAogI2luY2x1ZGUg Imtpc19icnVzaF9tYXNrX3NjYWxhcl9hcHBsaWNhdG9yLmgiCiAKQEAgLTI0LDEzICsyMiwxMyBA QCBzdHJ1Y3QgRmFzdFJvd1Byb2Nlc3NvciB7CiAgICAgewogICAgIH0KIAotICAgIHRlbXBsYXRl PFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4K ICAgICB2b2lkIHByb2Nlc3MoZmxvYXQgKmJ1ZmZlciwgaW50IHdpZHRoLCBmbG9hdCB5LCBmbG9h dCBjb3NhLCBmbG9hdCBzaW5hLCBmbG9hdCBjZW50ZXJYLCBmbG9hdCBjZW50ZXJZKTsKIAogICAg IHR5cGVuYW1lIFY6OlByaXZhdGUgKmQ7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBNYXNrR2VuZXJh dG9yLCBWYzo6SW1wbGVtZW50YXRpb24gX2ltcGw+Cit0ZW1wbGF0ZTxjbGFzcyBNYXNrR2VuZXJh dG9yLCB0eXBlbmFtZSBfaW1wbD4KIHN0cnVjdCBLaXNCcnVzaE1hc2tWZWN0b3JBcHBsaWNhdG9y IDogcHVibGljIEtpc0JydXNoTWFza1NjYWxhckFwcGxpY2F0b3I8TWFza0dlbmVyYXRvciwgX2lt cGw+IHsKICAgICBLaXNCcnVzaE1hc2tWZWN0b3JBcHBsaWNhdG9yKE1hc2tHZW5lcmF0b3IgKm1h c2tHZW5lcmF0b3IpCiAgICAgICAgIDogS2lzQnJ1c2hNYXNrU2NhbGFyQXBwbGljYXRvcjxNYXNr R2VuZXJhdG9yLCBfaW1wbD4obWFza0dlbmVyYXRvcikKQEAgLTQ2LDE4ICs0NCwxOCBAQCBwcm90 ZWN0ZWQ6CiAgICAgdm9pZCBwcm9jZXNzVmVjdG9yKGNvbnN0IFFSZWN0ICZyZWN0KTsKIAogcHJp dmF0ZToKLSAgICB0ZW1wbGF0ZTxjbGFzcyBVLCBWYzo6SW1wbGVtZW50YXRpb24gVj4KKyAgICB0 ZW1wbGF0ZTxjbGFzcyBVLCB0eXBlbmFtZSBWPgogICAgIHN0cnVjdCBUeXBlSGVscGVyIHsKICAg ICB9OwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFU+Ci0gICAgaW5saW5lIHZvaWQg c3RhcnRQcm9jZXNzaW5nKGNvbnN0IFFSZWN0ICZyZWN0LCBUeXBlSGVscGVyPFUsIFZjOjpTY2Fs YXJJbXBsPikKKyAgICBpbmxpbmUgdm9pZCBzdGFydFByb2Nlc3NpbmcoY29uc3QgUVJlY3QgJnJl Y3QsIFR5cGVIZWxwZXI8VSwgeHNpbWQ6OmdlbmVyaWM+KQogICAgIHsKICAgICAgICAgS2lzQnJ1 c2hNYXNrU2NhbGFyQXBwbGljYXRvcjxNYXNrR2VuZXJhdG9yLCBfaW1wbD46OnByb2Nlc3NTY2Fs YXIocmVjdCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgVSwgVmM6OkltcGxlbWVudGF0 aW9uIFY+CisgICAgdGVtcGxhdGU8Y2xhc3MgVSwgdHlwZW5hbWUgVj4KICAgICBpbmxpbmUgdm9p ZCBzdGFydFByb2Nlc3NpbmcoY29uc3QgUVJlY3QgJnJlY3QsIFR5cGVIZWxwZXI8VSwgVj4pCiAg ICAgewogICAgICAgICBNYXNrR2VuZXJhdG9yICptX21hc2tHZW5lcmF0b3IgPSBLaXNCcnVzaE1h c2tTY2FsYXJBcHBsaWNhdG9yPE1hc2tHZW5lcmF0b3IsIF9pbXBsPjo6bV9tYXNrR2VuZXJhdG9y OwpAQCAtNzAsOSArNjgsMTEgQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi10ZW1wbGF0ZTxjbGFz cyBNYXNrR2VuZXJhdG9yLCBWYzo6SW1wbGVtZW50YXRpb24gaW1wbD4KK3RlbXBsYXRlPGNsYXNz IE1hc2tHZW5lcmF0b3IsIHR5cGVuYW1lIGltcGw+CiB2b2lkIEtpc0JydXNoTWFza1ZlY3RvckFw cGxpY2F0b3I8TWFza0dlbmVyYXRvciwgaW1wbD46OnByb2Nlc3NWZWN0b3IoY29uc3QgUVJlY3Qg JnJlY3QpCiB7CisgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxmbG9hdCwgaW1wbD47 CisKICAgICBjb25zdCBNYXNrUHJvY2Vzc2luZ0RhdGEgKm1fZCA9IEtpc0JydXNoTWFza0FwcGxp Y2F0b3JCYXNlOjptX2Q7CiAgICAgTWFza0dlbmVyYXRvciAqbV9tYXNrR2VuZXJhdG9yID0gS2lz QnJ1c2hNYXNrU2NhbGFyQXBwbGljYXRvcjxNYXNrR2VuZXJhdG9yLCBpbXBsPjo6bV9tYXNrR2Vu ZXJhdG9yOwogCkBAIC04NiwxMiArODYsMTIgQEAgdm9pZCBLaXNCcnVzaE1hc2tWZWN0b3JBcHBs aWNhdG9yPE1hc2tHZW5lcmF0b3IsIGltcGw+Ojpwcm9jZXNzVmVjdG9yKGNvbnN0IFFSZWMKIAog ICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHdpdGggYSBtdWx0aXBsZSBvZiB0aGUgd2lkdGgg b2YgdGhlIHNpbWQgcmVnaXN0ZXIKICAgICBzaXplX3QgYWxpZ25PZmZzZXQgPSAwOwotICAgIGlm ICh3aWR0aCAlIFZjOjpmbG9hdF92OjpzaXplKCkgIT0gMCkgewotICAgICAgICBhbGlnbk9mZnNl dCA9IFZjOjpmbG9hdF92OjpzaXplKCkgLSAod2lkdGggJSBWYzo6ZmxvYXRfdjo6c2l6ZSgpKTsK KyAgICBpZiAod2lkdGggJSBmbG9hdF92OjpzaXplICE9IDApIHsKKyAgICAgICAgYWxpZ25PZmZz ZXQgPSBmbG9hdF92OjpzaXplIC0gKHdpZHRoICUgZmxvYXRfdjo6c2l6ZSk7CiAgICAgfQogICAg IHNpemVfdCBzaW1kV2lkdGggPSB3aWR0aCArIGFsaWduT2Zmc2V0OwogCi0gICAgZmxvYXQgKmJ1 ZmZlciA9IFZjOjptYWxsb2M8ZmxvYXQsIFZjOjpBbGlnbk9uQ2FjaGVsaW5lPihzaW1kV2lkdGgp OworICAgIGF1dG8gKmJ1ZmZlciA9eHNpbWQ6OnZlY3Rvcl9hbGlnbmVkX21hbGxvYzxmbG9hdD4o c2ltZFdpZHRoKTsKIAogICAgIEZhc3RSb3dQcm9jZXNzb3I8TWFza0dlbmVyYXRvcj4gcHJvY2Vz c29yKG1fbWFza0dlbmVyYXRvcik7CiAKQEAgLTEzNSw5ICsxMzUsOSBAQCB2b2lkIEtpc0JydXNo TWFza1ZlY3RvckFwcGxpY2F0b3I8TWFza0dlbmVyYXRvciwgaW1wbD46OnByb2Nlc3NWZWN0b3Io Y29uc3QgUVJlYwogICAgICAgICB9IC8vIGVuZGZvciB4CiAgICAgICAgIGRhYlBvaW50ZXIgKz0g b2Zmc2V0OwogICAgIH0gLy8gZW5kZm9yIHkKLSAgICBWYzo6ZnJlZShidWZmZXIpOworICAgIHhz aW1kOjp2ZWN0b3JfYWxpZ25lZF9mcmVlKGJ1ZmZlcik7CiB9CiAKLSNlbmRpZiAvKiBkZWZpbmVk IEhBVkVfVkMgKi8KKyNlbmRpZiAvKiBkZWZpbmVkIEhBVkVfWFNJTUQgKi8KIAogI2VuZGlmIC8q IEtJU19CUlVTSF9WRUNUT1JfQVBQTElDQVRPUl9IICovCmRpZmYgLS1naXQgYS9saWJzL2ltYWdl L2tpc19jaXJjbGVfbWFza19nZW5lcmF0b3IuaCBiL2xpYnMvaW1hZ2Uva2lzX2NpcmNsZV9tYXNr X2dlbmVyYXRvci5oCmluZGV4IGZhNTViY2RlY2IuLjExZjg1ZWY3MzIgMTAwNjQ0Ci0tLSBhL2xp YnMvaW1hZ2Uva2lzX2NpcmNsZV9tYXNrX2dlbmVyYXRvci5oCisrKyBiL2xpYnMvaW1hZ2Uva2lz X2NpcmNsZV9tYXNrX2dlbmVyYXRvci5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8UVNj b3BlZFBvaW50ZXI+CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBWPgotY2xhc3MgRmFzdFJvd1Byb2Nl c3NvcjsKK3N0cnVjdCBGYXN0Um93UHJvY2Vzc29yOwogCiAvKioKICAqIENyZWF0ZSwgc2VyaWFs aXplIGFuZCBkZXNlcmlhbGl6ZSBhbiBlbGxpcHRpY2FsIDgtYml0IG1hc2suCkBAIC00OCw3ICs0 OCw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFByaXZhdGU7CiAgICAgY29uc3QgUVNjb3BlZFBv aW50ZXI8UHJpdmF0ZT4gZDsKIAotICAgIGZyaWVuZCBjbGFzcyBGYXN0Um93UHJvY2Vzc29yPEtp c0NpcmNsZU1hc2tHZW5lcmF0b3I+OworICAgIGZyaWVuZCBzdHJ1Y3QgRmFzdFJvd1Byb2Nlc3Nv cjxLaXNDaXJjbGVNYXNrR2VuZXJhdG9yPjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGli cy9pbWFnZS9raXNfY3VydmVfY2lyY2xlX21hc2tfZ2VuZXJhdG9yLmggYi9saWJzL2ltYWdlL2tp c19jdXJ2ZV9jaXJjbGVfbWFza19nZW5lcmF0b3IuaAppbmRleCAyMDVkNzZlN2NhLi5kN2Y5MTlm ZWEzIDEwMDY0NAotLS0gYS9saWJzL2ltYWdlL2tpc19jdXJ2ZV9jaXJjbGVfbWFza19nZW5lcmF0 b3IuaAorKysgYi9saWJzL2ltYWdlL2tpc19jdXJ2ZV9jaXJjbGVfbWFza19nZW5lcmF0b3IuaApA QCAtMjIsNyArMjIsNyBAQCBjbGFzcyBRRG9tRG9jdW1lbnQ7CiBjbGFzcyBRUG9pbnRGOwogCiB0 ZW1wbGF0ZTx0eXBlbmFtZSBWPgotY2xhc3MgRmFzdFJvd1Byb2Nlc3NvcjsKK3N0cnVjdCBGYXN0 Um93UHJvY2Vzc29yOwogCiAvKioKICAqIFRoaXMgbWFzayBnZW5lcmF0b3IgdXNlIHNvZnRuZXNz L2hhcmRuZXNzIGRlZmluZWQgYnkgdXNlciBjdXJ2ZQpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRl OgogICAgIHN0cnVjdCBQcml2YXRlOwogICAgIGNvbnN0IFFTY29wZWRQb2ludGVyPFByaXZhdGU+ IGQ7CiAKLSAgICBmcmllbmQgY2xhc3MgRmFzdFJvd1Byb2Nlc3NvcjxLaXNDdXJ2ZUNpcmNsZU1h c2tHZW5lcmF0b3I+OworICAgIGZyaWVuZCBzdHJ1Y3QgRmFzdFJvd1Byb2Nlc3NvcjxLaXNDdXJ2 ZUNpcmNsZU1hc2tHZW5lcmF0b3I+OwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2lt YWdlL2tpc19jdXJ2ZV9yZWN0X21hc2tfZ2VuZXJhdG9yLmggYi9saWJzL2ltYWdlL2tpc19jdXJ2 ZV9yZWN0X21hc2tfZ2VuZXJhdG9yLmgKaW5kZXggNGYwNWQ2M2I1NC4uZWYwMDU5YTdiYyAxMDA2 NDQKLS0tIGEvbGlicy9pbWFnZS9raXNfY3VydmVfcmVjdF9tYXNrX2dlbmVyYXRvci5oCisrKyBi L2xpYnMvaW1hZ2Uva2lzX2N1cnZlX3JlY3RfbWFza19nZW5lcmF0b3IuaApAQCAtMTcsNyArMTcs NyBAQCBjbGFzcyBRRG9tRG9jdW1lbnQ7CiAjaW5jbHVkZSAia2lzX2Jhc2VfbWFza19nZW5lcmF0 b3IuaCIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWNsYXNzIEZhc3RSb3dQcm9jZXNzb3I7Citz dHJ1Y3QgRmFzdFJvd1Byb2Nlc3NvcjsKIAogLyoqCiAgKiBDdXJ2ZSBiYXNlZCBzb2Z0bmVzcyBm b3IgdGhpcyByZWN0YW5ndWxhciBtYXNrIGdlbmVyYXRvcgpAQCAtNDcsNyArNDcsNyBAQCBwcml2 YXRlOgogICAgIHN0cnVjdCBQcml2YXRlOwogICAgIGNvbnN0IFFTY29wZWRQb2ludGVyPFByaXZh dGU+IGQ7CiAKLSAgICBmcmllbmQgY2xhc3MgRmFzdFJvd1Byb2Nlc3NvcjxLaXNDdXJ2ZVJlY3Rh bmdsZU1hc2tHZW5lcmF0b3I+OworICAgIGZyaWVuZCBzdHJ1Y3QgRmFzdFJvd1Byb2Nlc3NvcjxL aXNDdXJ2ZVJlY3RhbmdsZU1hc2tHZW5lcmF0b3I+OwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQg YS9saWJzL2ltYWdlL2tpc19nYXVzc19jaXJjbGVfbWFza19nZW5lcmF0b3IuaCBiL2xpYnMvaW1h Z2Uva2lzX2dhdXNzX2NpcmNsZV9tYXNrX2dlbmVyYXRvci5oCmluZGV4IGFiNDMxZTgxYTYuLjQ4 ZWJlNTk4NDYgMTAwNjQ0Ci0tLSBhL2xpYnMvaW1hZ2Uva2lzX2dhdXNzX2NpcmNsZV9tYXNrX2dl bmVyYXRvci5oCisrKyBiL2xpYnMvaW1hZ2Uva2lzX2dhdXNzX2NpcmNsZV9tYXNrX2dlbmVyYXRv ci5oCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8UVNjb3BlZFBvaW50ZXI+CiAKIHRlbXBs YXRlPHR5cGVuYW1lIFY+Ci1jbGFzcyBGYXN0Um93UHJvY2Vzc29yOworc3RydWN0IEZhc3RSb3dQ cm9jZXNzb3I7CiAKIC8qKgogICogVGhpcyBtYXNrIGdlbmVyYXRvciB1c2VzIGEgR2F1c3NpYW4t Ymx1cnJlZCBjaXJjbGUKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgUHJp dmF0ZTsKICAgICBjb25zdCBRU2NvcGVkUG9pbnRlcjxQcml2YXRlPiBkOwogCi0gICAgZnJpZW5k IGNsYXNzIEZhc3RSb3dQcm9jZXNzb3I8S2lzR2F1c3NDaXJjbGVNYXNrR2VuZXJhdG9yPjsKKyAg ICBmcmllbmQgc3RydWN0IEZhc3RSb3dQcm9jZXNzb3I8S2lzR2F1c3NDaXJjbGVNYXNrR2VuZXJh dG9yPjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9pbWFnZS9raXNfZ2F1c3NfcmVj dF9tYXNrX2dlbmVyYXRvci5oIGIvbGlicy9pbWFnZS9raXNfZ2F1c3NfcmVjdF9tYXNrX2dlbmVy YXRvci5oCmluZGV4IDE1OTRlODBmNDguLmViZDBmYzQwYTUgMTAwNjQ0Ci0tLSBhL2xpYnMvaW1h Z2Uva2lzX2dhdXNzX3JlY3RfbWFza19nZW5lcmF0b3IuaAorKysgYi9saWJzL2ltYWdlL2tpc19n YXVzc19yZWN0X21hc2tfZ2VuZXJhdG9yLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlICJr aXNfYmFzZV9tYXNrX2dlbmVyYXRvci5oIgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotY2xhc3Mg RmFzdFJvd1Byb2Nlc3NvcjsKK3N0cnVjdCBGYXN0Um93UHJvY2Vzc29yOwogCiAvKioKICAqIFRo aXMgbWFzayBnZW5lcmF0b3IgdXNlcyBhIEdhdXNzaWFuLWJsdXJyZWQgcmVjdGFuZ2xlCkBAIC0z OSw3ICszOSw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFByaXZhdGU7CiAgICAgY29uc3QgUVNj b3BlZFBvaW50ZXI8UHJpdmF0ZT4gZDsKIAotICAgIGZyaWVuZCBjbGFzcyBGYXN0Um93UHJvY2Vz c29yPEtpc0dhdXNzUmVjdGFuZ2xlTWFza0dlbmVyYXRvcj47CisgICAgZnJpZW5kIHN0cnVjdCBG YXN0Um93UHJvY2Vzc29yPEtpc0dhdXNzUmVjdGFuZ2xlTWFza0dlbmVyYXRvcj47CiB9OwogCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvaW1hZ2Uva2lzX3JlY3RfbWFza19nZW5lcmF0b3IuaCBi L2xpYnMvaW1hZ2Uva2lzX3JlY3RfbWFza19nZW5lcmF0b3IuaAppbmRleCAwMWI4MjEwOTk0Li4x M2Q3ZWRjMGU2IDEwMDY0NAotLS0gYS9saWJzL2ltYWdlL2tpc19yZWN0X21hc2tfZ2VuZXJhdG9y LmgKKysrIGIvbGlicy9pbWFnZS9raXNfcmVjdF9tYXNrX2dlbmVyYXRvci5oCkBAIC0xNiw3ICsx Niw3IEBACiAjaW5jbHVkZSAia2lzX2Jhc2VfbWFza19nZW5lcmF0b3IuaCIKIAogdGVtcGxhdGU8 dHlwZW5hbWUgVj4KLWNsYXNzIEZhc3RSb3dQcm9jZXNzb3I7CitzdHJ1Y3QgRmFzdFJvd1Byb2Nl c3NvcjsKIAogLyoqCiAgKiBSZXByZXNlbnQsIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgYSBy ZWN0YW5ndWxhciA4LWJpdCBtYXNrLgpAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIHN0 cnVjdCBQcml2YXRlOwogICAgIGNvbnN0IFFTY29wZWRQb2ludGVyPFByaXZhdGU+IGQ7CiAKLSAg ICBmcmllbmQgY2xhc3MgRmFzdFJvd1Byb2Nlc3NvcjxLaXNSZWN0YW5nbGVNYXNrR2VuZXJhdG9y PjsKKyAgICBmcmllbmQgc3RydWN0IEZhc3RSb3dQcm9jZXNzb3I8S2lzUmVjdGFuZ2xlTWFza0dl bmVyYXRvcj47CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvaW1hZ2UvdGVzdHMvQ01h a2VMaXN0cy50eHQgYi9saWJzL2ltYWdlL3Rlc3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IDEwYTYz NTVlYjAuLjIxMWQ1Y2VmMTkgMTAwNjQ0Ci0tLSBhL2xpYnMvaW1hZ2UvdGVzdHMvQ01ha2VMaXN0 cy50eHQKKysrIGIvbGlicy9pbWFnZS90ZXN0cy9DTWFrZUxpc3RzLnR4dApAQCAtMjQsMTAgKzI0 LDYgQEAgaW5jbHVkZV9EaXJlY3RvcmllcyhTWVNURU0KICAgICAke0VJR0VOM19JTkNMVURFX0RJ Un0KICkKIAotaWYoSEFWRV9WQykKLSAgaW5jbHVkZV9kaXJlY3Rvcmllcygke1ZjX0lOQ0xVREVf RElSfSkKLWVuZGlmKCkKLQogaW5jbHVkZShFQ01BZGRUZXN0cykKIAogbWFjcm9fYWRkX3VuaXR0 ZXN0X2RlZmluaXRpb25zKCkKZGlmZiAtLWdpdCBhL2xpYnMvaW1hZ2UvdmNfZXh0cmFfbWF0aC5o IGIvbGlicy9pbWFnZS92Y19leHRyYV9tYXRoLmgKaW5kZXggZWRkMzA2MjkxZC4uMjY3MjliY2Vk NCAxMDA2NDQKLS0tIGEvbGlicy9pbWFnZS92Y19leHRyYV9tYXRoLmgKKysrIGIvbGlicy9pbWFn ZS92Y19leHRyYV9tYXRoLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogIFNQRFgtRmlsZUNvcHly aWdodFRleHQ6IDIwMTggSXbDoW4gU2FudGEgTWFyw61hIDxnaGV2YW5AZ21haWwuY29tPgorICog IFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIgTC4gRS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJr Lm1lPgogICoKICAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgog ICovCkBAIC03LDQwICs4LDQyIEBACiAjaWZuZGVmIFZDX0FERElUSU9OQUxfTUFUSF9ICiAjZGVm aW5lIFZDX0FERElUSU9OQUxfTUFUSF9ICiAKLSNpbmNsdWRlIDxjb25maWctdmMuaD4KKyNpbmNs dWRlIDx4c2ltZF9leHRlbnNpb25zL3hzaW1kLmhwcD4KIAotI2lmIGRlZmluZWQgSEFWRV9WQwot Ci0jaW5jbHVkZSA8VmMvVmM+Ci0jaW5jbHVkZSA8VmMvSU8+CisjaWYgZGVmaW5lZCBIQVZFX1hT SU1ECiAKIGNsYXNzIFZjRXh0cmFNYXRoCiB7CiBwdWJsaWM6CisKICAgICAvLyB2ZWN0b3JpemVk IGVyZiBmdW5jdGlvbiwgcHJlY2lzaW9uIDFlLTUKLSAgICBzdGF0aWMgVmNfQUxXQVlTX0lOTElO RSBWYzo6ZmxvYXRfdiBlcmYoVmM6OmZsb2F0X3Y6OkFzQXJnIHgpIHsKLSAgICAgICAgVmM6OmZs b2F0X3YgeGEgPSBhYnMoeCk7Ci0gICAgICAgIFZjOjpmbG9hdF9tIHByZWNpc2lvbkxpbWl0KHhh ID49IDkuM2YpOyAvLyB3cm9uZyByZXN1bHQgZm9yIGFueSBudW1iZXIgYmV5b25kIHRoaXMKLSAg ICAgICAgeGEocHJlY2lzaW9uTGltaXQpID0gMDsKLSAgICAgICAgVmM6OmZsb2F0X3Ygc2lnbihW Yzo6T25lKTsKLSAgICAgICAgVmM6OmZsb2F0X20gaW52ZXJ0TWFzayA9IHggPCAwLmY7Ci0gICAg ICAgIHNpZ24oaW52ZXJ0TWFzaykgPSAtMS5mOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEE+Cisg ICAgc3RhdGljIGlubGluZSB4c2ltZDo6YmF0Y2g8ZmxvYXQsIEE+IGVyZihjb25zdCB4c2ltZDo6 YmF0Y2g8ZmxvYXQsIEE+IHgpCisgICAgeworICAgICAgICB1c2luZyBmbG9hdF92ID0geHNpbWQ6 OmJhdGNoPGZsb2F0LCBBPjsKKyAgICAgICAgdXNpbmcgZmxvYXRfbSA9IHR5cGVuYW1lIGZsb2F0 X3Y6OmJhdGNoX2Jvb2xfdHlwZTsKKyAgICAgICAgZmxvYXRfdiB4YSA9IHhzaW1kOjphYnMoeCk7 CisgICAgICAgIGZsb2F0X20gcHJlY2lzaW9uTGltaXQgPSB4YSA+PSBmbG9hdF92KDkuM2YpOyAv LyB3cm9uZyByZXN1bHQgZm9yIGFueSBudW1iZXIgYmV5b25kIHRoaXMKKyAgICAgICAgeGEgPSB4 c2ltZDo6c2V0X3plcm8oeGEsIHByZWNpc2lvbkxpbWl0KTsKKyAgICAgICAgZmxvYXRfdiBzaWdu KDEuMGYpOworICAgICAgICBmbG9hdF9tIGludmVydE1hc2sgPSB4IDwgZmxvYXRfdigwLmYpOwor ICAgICAgICBzaWduID0geHNpbWQ6OnNlbGVjdChpbnZlcnRNYXNrLCBmbG9hdF92KC0xLmYpLCBz aWduKTsKIAogICAgICAgICAvLyBDT05TVEFOVFMKLSAgICAgICAgZmxvYXQgYTEgPSAgMC4yNTQ4 Mjk1OTI7Ci0gICAgICAgIGZsb2F0IGEyID0gLTAuMjg0NDk2NzM2OwotICAgICAgICBmbG9hdCBh MyA9ICAxLjQyMTQxMzc0MTsKLSAgICAgICAgZmxvYXQgYTQgPSAtMS40NTMxNTIwMjc7Ci0gICAg ICAgIGZsb2F0IGE1ID0gIDEuMDYxNDA1NDI5OwotICAgICAgICBmbG9hdCBwICA9ICAwLjMyNzU5 MTE7Ci0KLSAgICAgICAgVmM6OmZsb2F0X3YgdCA9IDEuMGYgLyAoMS4wZiArIHAgKiB4YSk7Ci0g ICAgICAgIFZjOjpmbG9hdF92IHkgPSAxLjBmIC0gKCgoKChhNSAqIHQgKyBhNCkgKiB0KSArIGEz KSAqIHQgKyBhMikgKiB0ICsgYTEpICogdCAqIGV4cCgteGEgKiB4YSk7Ci0gICAgICAgIHkocHJl Y2lzaW9uTGltaXQpID0gMS4wZjsKKyAgICAgICAgZmxvYXQgYTEgPSAgMC4yNTQ4Mjk1OTJmOwor ICAgICAgICBmbG9hdCBhMiA9IC0wLjI4NDQ5NjczNmY7CisgICAgICAgIGZsb2F0IGEzID0gIDEu NDIxNDEzNzQxZjsKKyAgICAgICAgZmxvYXQgYTQgPSAtMS40NTMxNTIwMjdmOworICAgICAgICBm bG9hdCBhNSA9ICAxLjA2MTQwNTQyOWY7CisgICAgICAgIGZsb2F0IHAgID0gIDAuMzI3NTkxMWY7 CisKKyAgICAgICAgZmxvYXRfdiB0ID0gMS4wZiAvICgxLjBmICsgcCAqIHhhKTsKKyAgICAgICAg ZmxvYXRfdiB5ID0gMS4wZiAtICgoKCgoYTUgKiB0ICsgYTQpICogdCkgKyBhMykgKiB0ICsgYTIp ICogdCArIGExKSAqIHQgKiBleHAoLXhhICogeGEpOworICAgICAgICB5ID0geHNpbWQ6OnNldF9v bmUoeSwgcHJlY2lzaW9uTGltaXQpOwogICAgICAgICByZXR1cm4gc2lnbiAqIHk7CiAgICAgfQog fTsKLSNlbmRpZiAvKiBkZWZpbmVkIEhBVkVfVkMgKi8KKyNlbmRpZiAvKiBkZWZpbmVkIEhBVkVf WFNJTUQgKi8KIAogCiAjZW5kaWYgLy8gVkNfQURESVRJT05BTF9NQVRIX0gKZGlmZiAtLWdpdCBh L2xpYnMvbXVsdGlhcmNoL0NNYWtlTGlzdHMudHh0IGIvbGlicy9tdWx0aWFyY2gvQ01ha2VMaXN0 cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDExMDRjMzI0Nwot LS0gL2Rldi9udWxsCisrKyBiL2xpYnMvbXVsdGlhcmNoL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAg KzEsOSBAQAorYWRkX2xpYnJhcnkoa3JpdGFtdWx0aWFyY2ggSU5URVJGQUNFKQorCitpZiAoSEFW RV9YU0lNRCkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoa3JpdGFtdWx0aWFyY2ggSU5URVJG QUNFIHhzaW1kKQorZW5kaWYoKQorCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoa3JpdGFtdWx0aWFy Y2ggUFJPUEVSVElFUworICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICQ8QlVJTERf SU5URVJGQUNFOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8+CispCmRpZmYgLS1naXQgYS9s aWJzL211bHRpYXJjaC94c2ltZF9leHRlbnNpb25zL2FyY2gveHNpbWRfZ2VuZXJpYy5ocHAgYi9s aWJzL211bHRpYXJjaC94c2ltZF9leHRlbnNpb25zL2FyY2gveHNpbWRfZ2VuZXJpYy5ocHAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWFkZGFhYTM4MgotLS0gL2Rldi9u dWxsCisrKyBiL2xpYnMvbXVsdGlhcmNoL3hzaW1kX2V4dGVuc2lvbnMvYXJjaC94c2ltZF9nZW5l cmljLmhwcApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6 IDIwMjIgTC4gRS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJrLm1lPgorICoKKyAqIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIEtJU19YU0lNRF9HRU5F UklDX0hQUAorI2RlZmluZSBLSVNfWFNJTURfR0VORVJJQ19IUFAKKworI2luY2x1ZGUgInhzaW1k X2dlbmVyaWNfZGV0YWlscy5ocHAiCisKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx0eXBl X3RyYWl0cz4KKworbmFtZXNwYWNlIHhzaW1kCit7CisvKioqKioqKioqKioqKioqKioqKioqKioK KyAqIFRydW5jYXRlLWluaXRpYWxpemUgKgorICoqKioqKioqKioqKioqKioqKioqKioqLworCit0 ZW1wbGF0ZTx0eXBlbmFtZSBWLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGJhdGNo PFQsIEE+IHRydW5jYXRlX3RvX3R5cGUoeHNpbWQ6OmJhdGNoPFQsIEE+IGNvbnN0ICZzZWxmKSBu b2V4Y2VwdAoreworICAgIHJldHVybiBrZXJuZWw6OmRldGFpbDo6YXBwbHlfd2l0aF92YWx1ZSgK KyAgICAgICAgW10oZmxvYXQgaSkgLT4gZmxvYXQgeworICAgICAgICAgICAgaWYgKHN0ZDo6bnVt ZXJpY19saW1pdHM8Vj46Om1pbigpID4gaSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOwor ICAgICAgICAgICAgfSBlbHNlIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPFY+OjptYXgoKSA8IGkp IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFY+KGkpOworICAgICAgICAgICAgfQorICAg ICAgICB9LAorICAgICAgICBzZWxmKTsKK30KKworLy8gTWFzayB0byAwIGVsZW1lbnRzIG9mIGEg dmVjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBhdXRvIHNl dF96ZXJvKGNvbnN0IGJhdGNoPFQsIEE+ICZzcmMsIGNvbnN0IGJhdGNoX2Jvb2w8VCwgQT4gJm1h c2spIG5vZXhjZXB0Cit7CisgICAgcmV0dXJuIHhzaW1kOjpzZWxlY3QobWFzaywgeHNpbWQ6OmJh dGNoPFQsIEE+KDApLCBzcmMpOworfQorCisvLyBNYXNrIHRvIDEgZWxlbWVudHMgb2YgYSB2ZWN0 b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGF1dG8gc2V0X29u ZShjb25zdCBiYXRjaDxULCBBPiAmc3JjLCBjb25zdCBiYXRjaF9ib29sPFQsIEE+ICZtYXNrKSBu b2V4Y2VwdAoreworICAgIHJldHVybiB4c2ltZDo6c2VsZWN0KG1hc2ssIHhzaW1kOjpiYXRjaDxU LCBBPigxKSwgc3JjKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqIFNpZ24tZXh0ZW5kaW5nIHVuYWxpZ25lZCBsb2FkcyAqCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworLy8gTG9hZCBgVDo6c2l6ZWAgdmFsdWVzIGZyb20gdGhlIGFy cmF5IG9mIGBUMmAgZWxlbWVudHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUMj4K K2lubGluZSBUIGxvYWRfYW5kX2V4dGVuZChjb25zdCBUMiAqc3JjKSBub2V4Y2VwdAoreworICAg IHJldHVybiBrZXJuZWw6OmRldGFpbDo6YXBwbHlfd2l0aF9pbmRleF9hbmRfdmFsdWUoCisgICAg ICAgIFsmXShzaXplX3QgaSwgdHlwZW5hbWUgVDo6dmFsdWVfdHlwZSkgeworICAgICAgICAgICAg cmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGU+KHNyY1tpXSk7CisgICAg ICAgIH0sCisgICAgICAgIFR7fSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBUeXBlLWluZmVycmVkLCBhdXRvLWFsaWduZWQgbWVt b3J5IGFsbG9jYXRpb24gKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisKKy8vIEFsbG9jYXRlIHNpemUgYnl0ZXMgb2YgbWVtb3J5IGFsaWduZWQg dG8gYGJhdGNoPFQsIEE+OjphbGlnbm1lbnQoKWAuCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl bmFtZSBBPgoraW5saW5lIFQgKmFsaWduZWRfbWFsbG9jKHNpemVfdCBzaXplKSBub2V4Y2VwdAor eworICAgIHVzaW5nIFRfdiA9IGJhdGNoPFQsIEE+OworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3Q8VCAqPih4c2ltZDo6YWxpZ25lZF9tYWxsb2Moc2l6ZSwgVF92OjphcmNoX3R5cGU6OmFs aWdubWVudCgpKSk7Cit9CisKKy8vIFJldHVybiB0aGUgbWF4aW11bSBvZiBhIGxpc3Qgb2YgdGVt cGxhdGVkIHZhbHVlcyBhdCBjb21waWxlIHRpbWUuCit0ZW1wbGF0ZTxzaXplX3QgdmFsdWUsIHNp emVfdC4uLiB2YWx1ZXM+Citjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9m Li4uKHZhbHVlcykgPT0gMCwgc2l6ZV90Pjo6dHlwZSBtYXgoKQoreworICAgIHJldHVybiB2YWx1 ZTsKK30KKworLy8gUmV0dXJuIHRoZSBtYXhpbXVtIG9mIGEgbGlzdCBvZiB0ZW1wbGF0ZWQgdmFs dWVzIGF0IGNvbXBpbGUgdGltZS4KK3RlbXBsYXRlPHNpemVfdCB2YWx1ZSwgc2l6ZV90Li4uIHZh bHVlcz4KK2NvbnN0ZXhwciB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YuLi4odmFsdWVz KSAhPSAwLCBzaXplX3Q+Ojp0eXBlIG1heCgpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHZhbHVl LCBtYXg8dmFsdWVzLi4uPigpKTsKK30KKworLy8gQWxsb2NhdGUgbWVtb3J5IGZvciBgc3pgIFQg aXRlbXMsIGFsaWduZWQgdG8gdGhlIHNlbGVjdGVkIGFyY2hpdGVjdHVyZSdzCisvLyBhbGlnbm1l bnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIFQgKnZlY3Rvcl9h bGlnbmVkX21hbGxvYyhzaXplX3Qgc3opIG5vZXhjZXB0Cit7CisgICAgcmV0dXJuIHN0YXRpY19j YXN0PFQgKj4oeHNpbWQ6OmFsaWduZWRfbWFsbG9jKHN6ICogc2l6ZW9mKFQpLCBBOjphbGlnbm1l bnQoKSkpOworfQorCisvLyBGcmVlIGFsbG9jYXRlZCBtZW1vcnksIGhpZGluZyB0aGUgYGNvbnN0 X2Nhc3RgIGlmIG5lY2Vzc2FyeS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCB2 ZWN0b3JfYWxpZ25lZF9mcmVlKGNvbnN0IFQgKnB0cikgbm9leGNlcHQKK3sKKyAgICAvLyBOT0xJ TlRORVhUTElORShjcHBjb3JlZ3VpZGVsaW5lcy1wcm8tdHlwZS1jb25zdC1jYXN0KQorICAgIHJl dHVybiB4c2ltZDo6YWxpZ25lZF9mcmVlKGNvbnN0X2Nhc3Q8VCAqPihwdHIpKTsKK30KKworLyoq KioqKioqKioqKioqKioKKyAqIEludGVybGVhdmluZyAqCisgKioqKioqKioqKioqKioqKi8KKwor Ly8gUmV0dXJuIHRoZSB0dXBsZSBvZiBpbnRlcmxlYXZlZCBiYXRjaGVzIGBhYCBhbmQgYGJgLgor Ly8gRmlyc3QgZWxlbWVudCBpcyB0aGUgbG93IGhhbGYsIHNlY29uZCBpcyB0aGUgdXBwZXIgaGFs Zi4KK3RlbXBsYXRlPHR5cGVuYW1lIFY+CitpbmxpbmUgc3RkOjpwYWlyPFYsIFY+IGludGVybGVh dmUoY29uc3QgViAmYSwgY29uc3QgViAmYikgbm9leGNlcHQKK3sKKyAgICByZXR1cm4ge3hzaW1k Ojp6aXBfbG8oYSwgYiksIHhzaW1kOjp6aXBfaGkoYSwgYil9OworfQorCisvKioqKioqKioqKioq KioqKioqKioqKgorICogUXVhZHJhdGljIGZ1bmN0aW9uICoKKyAqKioqKioqKioqKioqKioqKioq KioqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGJhdGNoPFQs IEE+IHBvdzIgKGJhdGNoPFQsIEE+IGNvbnN0JiBzZWxmKSBub2V4Y2VwdAoreworICAgIHJldHVy biBzZWxmICogc2VsZjsKK30KKworfTsgLy8gbmFtZXNwYWNlIHhzaW1kCisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvbGlicy9tdWx0aWFyY2gveHNpbWRfZXh0ZW5zaW9ucy9hcmNoL3hzaW1kX2dlbmVy aWNfZGV0YWlscy5ocHAgYi9saWJzL211bHRpYXJjaC94c2ltZF9leHRlbnNpb25zL2FyY2gveHNp bWRfZ2VuZXJpY19kZXRhaWxzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5lYzk4YjRmZGVmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9tdWx0aWFyY2gveHNpbWRf ZXh0ZW5zaW9ucy9hcmNoL3hzaW1kX2dlbmVyaWNfZGV0YWlscy5ocHAKQEAgLTAsMCArMSwxMDUg QEAKKy8qCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292aWEgPGFt eUBhbXlzcGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh dXNlCisgKi8KKworI2lmbmRlZiBLSVNfWFNJTURfR0VORVJJQ19ERVRBSUxTX0RFQ0xfSFBQCisj ZGVmaW5lIEtJU19YU0lNRF9HRU5FUklDX0RFVEFJTFNfREVDTF9IUFAKKworI2luY2x1ZGUgPGNz dGRpbnQ+CisjaW5jbHVkZSA8dHVwbGU+CisKK25hbWVzcGFjZSB4c2ltZAoreworLyoqKioqKioq KioqKioqKioqKioqKioqCisgKiBUcnVuY2F0ZS1pbml0aWFsaXplICoKKyAqKioqKioqKioqKioq KioqKioqKioqKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgViwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg QT4KK2JhdGNoPFQsIEE+IHRydW5jYXRlX3RvX3R5cGUoYmF0Y2g8VCwgQT4gY29uc3QgJnNlbGYp IG5vZXhjZXB0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hc2tlZCBpbml0 aWFsaXphdGlvbnMgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBNYXNrIHRv IDAgZWxlbWVudHMgb2YgYSB2ZWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBB PgoraW5saW5lIGF1dG8gc2V0X3plcm8oY29uc3QgYmF0Y2g8VCwgQT4gJnNyYywgY29uc3QgYmF0 Y2hfYm9vbDxULCBBPiAmbWFzaykgbm9leGNlcHQ7CisKKy8vIE1hc2sgdG8gMSBlbGVtZW50cyBv ZiBhIHZlY3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgYXV0 byBzZXRfb25lKGNvbnN0IGJhdGNoPFQsIEE+ICZzcmMsIGNvbnN0IGJhdGNoX2Jvb2w8VCwgQT4g Jm1hc2spIG5vZXhjZXB0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICogU2lnbi1leHRlbmRpbmcgdW5hbGlnbmVkIGxvYWRzICoKKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvLyBMb2FkIGBUOjpzaXplYCB2YWx1ZXMgZnJvbSB0aGUgYXJy YXkgb2YgYFQyYCBlbGVtZW50cy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFQyPgor aW5saW5lIFQgbG9hZF9hbmRfZXh0ZW5kKGNvbnN0IFQyICpzcmMpIG5vZXhjZXB0OworCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVHlwZS1p bmZlcnJlZCwgYXV0by1hbGlnbmVkIG1lbW9yeSBhbGxvY2F0aW9uICoKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBBbGxvY2F0ZSBzaXpl IGJ5dGVzIG9mIG1lbW9yeSBhbGlnbmVkIHRvIGBiYXRjaDxULCBBPjo6YWxpZ25tZW50KClgLgor dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQSA9IHhzaW1kOjpjdXJyZW50X2FyY2g+Citp bmxpbmUgVCAqYWxpZ25lZF9tYWxsb2Moc2l6ZV90IHNpemUpIG5vZXhjZXB0OworCisvLyBBbGxv Y2F0ZSBtZW1vcnkgZm9yIGBzemAgVCBpdGVtcywgYWxpZ25lZCB0byB0aGUgc2VsZWN0ZWQgYXJj aGl0ZWN0dXJlJ3MKKy8vIGFsaWdubWVudC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l IEEgPSB4c2ltZDo6Y3VycmVudF9hcmNoPgoraW5saW5lIFQgKnZlY3Rvcl9hbGlnbmVkX21hbGxv YyhzaXplX3Qgc3opIG5vZXhjZXB0OworCisvLyBGcmVlIGFsbG9jYXRlZCBtZW1vcnksIGhpZGlu ZyB0aGUgYGNvbnN0X2Nhc3RgIGlmIG5lY2Vzc2FyeS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citp bmxpbmUgdm9pZCB2ZWN0b3JfYWxpZ25lZF9mcmVlKGNvbnN0IFQgKnB0cikgbm9leGNlcHQ7CisK Ky8qKioqKioqKioqKioqKioqCisgKiBJbnRlcmxlYXZpbmcgKgorICoqKioqKioqKioqKioqKiov CisKKy8vIFJldHVybiB0aGUgdHVwbGUgb2YgaW50ZXJsZWF2ZWQgYmF0Y2hlcyBgYWAgYW5kIGBi YC4KKy8vIEZpcnN0IGVsZW1lbnQgaXMgdGhlIGxvdyBoYWxmLCBzZWNvbmQgaXMgdGhlIHVwcGVy IGhhbGYuCit0ZW1wbGF0ZTx0eXBlbmFtZSBWPgoraW5saW5lIHN0ZDo6cGFpcjxWLCBWPiBpbnRl cmxlYXZlKGNvbnN0IFYgJmEsIGNvbnN0IFYgJmIpIG5vZXhjZXB0OworCit0ZW1wbGF0ZTx0eXBl bmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHhzaW1kOjpiYXRjaDxULCBBPiBwb3cyKHhzaW1k OjpiYXRjaDxULCBBPiBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisKK25hbWVzcGFjZSBrZXJuZWwK K3sKK25hbWVzcGFjZSBkZXRhaWwKK3sKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICogSGVscGVyczogdW5hcnkgYXBwbGljYXRvciAqCisgKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisKK3RlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIEEsIGNsYXNzIFQ+CitpbmxpbmUgYmF0 Y2g8VCwgQT4gYXBwbHlfd2l0aF92YWx1ZShGICYmZnVuYywgYmF0Y2g8VCwgQT4gY29uc3QgJnNl bGYpIG5vZXhjZXB0Cit7CisgICAgYWxpZ25hcyhBOjphbGlnbm1lbnQoKSkgc3RkOjphcnJheTxU LCBiYXRjaDxULCBBPjo6c2l6ZT4gc2VsZl9idWZmZXI7CisgICAgc2VsZi5zdG9yZV9hbGlnbmVk KHNlbGZfYnVmZmVyLmRhdGEoKSk7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IGJh dGNoPFQsIEE+OjpzaXplOyArK2kpIHsKKyAgICAgICAgc2VsZl9idWZmZXJbaV0gPSBmdW5jKHNl bGZfYnVmZmVyW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIGJhdGNoPFQsIEE+Ojpsb2FkX2FsaWdu ZWQoc2VsZl9idWZmZXIuZGF0YSgpKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRiwgY2xhc3MgQSwg Y2xhc3MgVD4KK2lubGluZSBiYXRjaDxULCBBPiBhcHBseV93aXRoX2luZGV4X2FuZF92YWx1ZShG ICYmZnVuYywgYmF0Y2g8VCwgQT4gY29uc3QgJnNlbGYpIG5vZXhjZXB0Cit7CisgICAgYWxpZ25h cyhBOjphbGlnbm1lbnQoKSkgc3RkOjphcnJheTxULCBiYXRjaDxULCBBPjo6c2l6ZT4gc2VsZl9i dWZmZXI7CisgICAgc2VsZi5zdG9yZV9hbGlnbmVkKHNlbGZfYnVmZmVyLmRhdGEoKSk7CisgICAg Zm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IGJhdGNoPFQsIEE+OjpzaXplOyArK2kpIHsKKyAg ICAgICAgc2VsZl9idWZmZXJbaV0gPSBmdW5jKGksIHNlbGZfYnVmZmVyW2ldKTsKKyAgICB9Cisg ICAgcmV0dXJuIGJhdGNoPFQsIEE+Ojpsb2FkX2FsaWduZWQoc2VsZl9idWZmZXIuZGF0YSgpKTsK K30KK30gLy8gbmFtZXNwYWNlIGtlcm5lbAorfSAvLyBuYW1lc3BhY2UgZGV0YWlsCisKK307IC8v IG5hbWVzcGFjZSB4c2ltZAorCisjZW5kaWYgLy8gS0lTX1hTSU1EX0dFTkVSSUNfREVUQUlMU19E RUNMX0hQUApkaWZmIC0tZ2l0IGEvbGlicy9tdWx0aWFyY2gveHNpbWRfZXh0ZW5zaW9ucy9hcmNo L3hzaW1kX2lzYS5ocHAgYi9saWJzL211bHRpYXJjaC94c2ltZF9leHRlbnNpb25zL2FyY2gveHNp bWRfaXNhLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hOWUzMDc3 YzljCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9tdWx0aWFyY2gveHNpbWRfZXh0ZW5zaW9ucy9h cmNoL3hzaW1kX2lzYS5ocHAKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIFNQRFgtRmlsZUNvcHly aWdodFRleHQ6IDIwMjIgTC4gRS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJrLm1lPgorICoKKyAqIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIEtJU19Y U0lNRF9JU0FfSFBQCisjZGVmaW5lIEtJU19YU0lNRF9JU0FfSFBQCisKKyNpbmNsdWRlIDxjc3Rk aW50PgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisjaW5jbHVkZSAiLi4vY29uZmlnL3hzaW1k X2FyY2guaHBwIgorCisvLyBNdXN0IGNvbWUgbGFzdCB0byBoYXZlIGFjY2VzcyB0byBhbGwgY29u dmVyc2lvbiBzcGVjaWFsaXphdGlvbnMuCisjaW5jbHVkZSAiLi94c2ltZF9nZW5lcmljLmhwcCIK KworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL211bHRpYXJjaC94c2ltZF9leHRlbnNpb25zL2Nv bmZpZy94c2ltZF9hcmNoLmhwcCBiL2xpYnMvbXVsdGlhcmNoL3hzaW1kX2V4dGVuc2lvbnMvY29u ZmlnL3hzaW1kX2FyY2guaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjRkNzEzNzlmOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL211bHRpYXJjaC94c2ltZF9leHRl bnNpb25zL2NvbmZpZy94c2ltZF9hcmNoLmhwcApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIFNQ RFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIgTC4gRS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJrLm1l PgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisj aWZuZGVmIEtJU19YU0lNRF9BUkNIX0hQUAorI2RlZmluZSBLSVNfWFNJTURfQVJDSF9IUFAKKwor I2luY2x1ZGUgIi4veHNpbWRfY29uZmlnLmhwcCIKKworLy8gQXJjaGl0ZWN0dXJlIGluaXRpYWxp emF0aW9uLiBCb3Jyb3dlZCBmcm9tIFZjCisvLyBEZWZpbmUgdGhlIGZvbGxvd2luZyBzdHJpbmdz IHRvIGEgdW5pcXVlIGludGVnZXIsIHdoaWNoIGlzIHRoZSBvbmx5IHR5cGUgdGhlCisvLyBwcmVw cm9jZXNzb3IgY2FuIGNvbXBhcmUuIFRoaXMgYWxsb3dzIHRvIHVzZSAtRFhTSU1EX0lNUEw9U1NF My4gVGhlCisvLyBwcmVwcm9jZXNzb3Igd2lsbCB0aGVuIGNvbnNpZGVyIFhTSU1EX0lNUEwgYW5k IFNTRTMgdG8gYmUgZXF1YWwuCisvLyBBbiBhZGRpdGlvbmFsIGRlZmluZSBJTVBMX01BU0sgYWxs b3dzIHRvIGRldGVjdCB0aGUgRk1BIGV4dGVuc2lvbi4KKworI2RlZmluZSBTY2FsYXIgMHgwMDEw MDAwMAorI2RlZmluZSBTU0UyIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1NFMyAweDAwMzAwMDAwCisj ZGVmaW5lIFNTU0UzIDB4MDA0MDAwMDAKKyNkZWZpbmUgU1NFNF8xIDB4MDA1MDAwMDAKKyNkZWZp bmUgU1NFNF8yIDB4MDA2MDAwMDAKKyNkZWZpbmUgRk1BNCAweDAwNzAwMDAwCisjZGVmaW5lIEFW WCAweDAwODAwMDAwCisjZGVmaW5lIEFWWDIgMHgwMDkwMDAwMAorI2RlZmluZSBBVlg1MTJGIDB4 MDBBMDAwMDAKKyNkZWZpbmUgQVZYNTEyQlcgMHgwMEIwMDAwMAorI2RlZmluZSBBVlg1MTJDRCAw eDAwQzAwMDAwCisjZGVmaW5lIEFWWDUxMkRRIDB4MDBEMDAwMDAKKyNkZWZpbmUgTkVPTiAweDAw RTAwMDAwCisjZGVmaW5lIE5FT042NCAweDAwRjAwMDAwCisKKyNkZWZpbmUgRk1BIDB4MDAwMDAw MDEKKworI2RlZmluZSBJTVBMX01BU0sgMHhGRkYwMDAwMAorCituYW1lc3BhY2UgeHNpbWQKK3sK KyNpZiAhZGVmaW5lZChIQVZFX1hTSU1EKSB8fCBkZWZpbmVkKFhTSU1EX0lNUEwpICYmIChYU0lN RF9JTVBMICYgSU1QTF9NQVNLKSA9PSBTY2FsYXIKK3VzaW5nIGN1cnJlbnRfYXJjaCA9IGdlbmVy aWM7CisjZWxpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgIWRlZmluZWQoWFNJTURfSU1QTCkKK3Vz aW5nIGN1cnJlbnRfYXJjaCA9IGRlZmF1bHRfYXJjaDsKKyNlbGlmIChYU0lNRF9JTVBMICYgSU1Q TF9NQVNLKSA9PSBTU0UyCit1c2luZyBjdXJyZW50X2FyY2ggPSBzc2UyOworI2VsaWYgKFhTSU1E X0lNUEwgJiBJTVBMX01BU0spID09IFNTRTMKK3VzaW5nIGN1cnJlbnRfYXJjaCA9IHNzZTM7Cisj ZWxpZiAoWFNJTURfSU1QTCAmIElNUExfTUFTSykgPT0gU1NTRTMKK3VzaW5nIGN1cnJlbnRfYXJj aCA9IHNzc2UzOworI2VsaWYgKFhTSU1EX0lNUEwgJiBJTVBMX01BU0spID09IFNTRTRfMQordXNp bmcgY3VycmVudF9hcmNoID0gc3NlNF8xOworI2VsaWYgKFhTSU1EX0lNUEwgJiBJTVBMX01BU0sp ID09IFNTRTRfMgorI2lmIChYU0lNRF9JTVBMICYgRk1BKQordXNpbmcgY3VycmVudF9hcmNoID0g Zm1hMzxzc2U0XzI+OworI2Vsc2UKK3VzaW5nIGN1cnJlbnRfYXJjaCA9IHNzZTRfMjsKKyNlbmRp ZgorI2VsaWYgKFhTSU1EX0lNUEwgJiBJTVBMX01BU0spID09IEZNQTQKK3VzaW5nIGN1cnJlbnRf YXJjaCA9IGZtYTQ7CisjZWxpZiAoWFNJTURfSU1QTCAmIElNUExfTUFTSykgPT0gQVZYCisjaWYg KFhTSU1EX0lNUEwgJiBGTUEpCit1c2luZyBjdXJyZW50X2FyY2ggPSBmbWEzPGF2eD47CisjZWxz ZQordXNpbmcgY3VycmVudF9hcmNoID0gYXZ4OworI2VuZGlmCisjZWxpZiAoWFNJTURfSU1QTCAm IElNUExfTUFTSykgPT0gQVZYMgorI2lmIChYU0lNRF9JTVBMICYgRk1BKQordXNpbmcgY3VycmVu dF9hcmNoID0gZm1hMzxhdngyPjsKKyNlbHNlCit1c2luZyBjdXJyZW50X2FyY2ggPSBhdngyOwor I2VuZGlmCisjZWxpZiAoWFNJTURfSU1QTCAmIElNUExfTUFTSykgPT0gQVZYNTEyRgordXNpbmcg Y3VycmVudF9hcmNoID0gYXZ4NTEyZjsKKyNlbGlmIChYU0lNRF9JTVBMICYgSU1QTF9NQVNLKSA9 PSBBVlg1MTJDRAordXNpbmcgY3VycmVudF9hcmNoID0gYXZ4NTEyY2Q7CisjZWxpZiAoWFNJTURf SU1QTCAmIElNUExfTUFTSykgPT0gQVZYNTEyRFEKK3VzaW5nIGN1cnJlbnRfYXJjaCA9IGF2eDUx MmRxOworI2VsaWYgKFhTSU1EX0lNUEwgJiBJTVBMX01BU0spID09IEFWWDUxMkJXCit1c2luZyBj dXJyZW50X2FyY2ggPSBhdng1MTJidzsKKyNlbGlmIChYU0lNRF9JTVBMICYgSU1QTF9NQVNLKSA9 PSBORU9OCit1c2luZyBjdXJyZW50X2FyY2ggPSBuZW9uOworI2VsaWYgKFhTSU1EX0lNUEwgJiBJ TVBMX01BU0spID09IE5FT042NAordXNpbmcgY3VycmVudF9hcmNoID0gbmVvbjY0OworI2VuZGlm Cit9OyAvLyBuYW1lc3BhY2UgeHNpbWQKKworI3VuZGVmIFNjYWxhcgorI3VuZGVmIFNTRTIKKyN1 bmRlZiBTU0UzCisjdW5kZWYgU1NTRTMKKyN1bmRlZiBTU0U0XzEKKyN1bmRlZiBTU0U0XzIKKyN1 bmRlZiBBVlgKKyN1bmRlZiBBVlgyCisjdW5kZWYgQVZYNTEyRgorI3VuZGVmIEFWWDUxMkJXCisj dW5kZWYgQVZYNTEyQ0QKKyN1bmRlZiBBVlg1MTJEUQorI3VuZGVmIE5FT04KKyN1bmRlZiBORU9O NjQKKworI3VuZGVmIEZNQTMKKyN1bmRlZiBGTUE0CisjdW5kZWYgSU1QTF9NQVNLCisKKyNlbmRp ZiAvLyBLSVNfWFNJTURfQVJDSF9IUFAKZGlmZiAtLWdpdCBhL2xpYnMvbXVsdGlhcmNoL3hzaW1k X2V4dGVuc2lvbnMvY29uZmlnL3hzaW1kX2NvbmZpZy5ocHAgYi9saWJzL211bHRpYXJjaC94c2lt ZF9leHRlbnNpb25zL2NvbmZpZy94c2ltZF9jb25maWcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmFiYzFhYTkxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL211 bHRpYXJjaC94c2ltZF9leHRlbnNpb25zL2NvbmZpZy94c2ltZF9jb25maWcuaHBwCkBAIC0wLDAg KzEsNDcgQEAKKy8qCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292 aWEgPGFteUBhbXlzcGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBLSVNfWFNJTURfQ09ORklHX0hQUAorI2RlZmluZSBL SVNfWFNJTURfQ09ORklHX0hQUAorCisjaW5jbHVkZSA8Y29uZmlnLXhzaW1kLmg+CisKKyNpZmRl ZiBIQVZFX1hTSU1ECisKKy8vIE1TVkMgcGF0Y2hpbmcuCisjaWYgZGVmaW5lZChfTVNDX1ZFUikK KyNpZiBkZWZpbmVkKF9NX0FSTTY0KQorI2lmbmRlZiBOREVCVUcKKyNwcmFnbWEgbWVzc2FnZSgi UGF0Y2hpbmcgb3ZlciBNU1ZDIGZvciBhYXJjaDY0LiIpCisjZW5kaWYKKyNkZWZpbmUgX19BUk1f QVJDSCA4CisjZGVmaW5lIF9fYWFyY2g2NF9fIDEKKyNkZWZpbmUgX19BUk1fTkVPTiAxCisjZW5k aWYKKworI2lmIGRlZmluZWQoX01fQVJNKQorI2lmbmRlZiBOREVCVUcKKyNwcmFnbWEgbWVzc2Fn ZSgiUGF0Y2hpbmcgb3ZlciBNU1ZDIGZvciBhcm0tdjdhLiIpCisjZW5kaWYKKyNkZWZpbmUgX19B Uk1fQVJDSCBfTV9BUk0KKyNkZWZpbmUgX19BUk1fTkVPTiAxCisjZW5kaWYKKyNlbmRpZgorCisj aW5jbHVkZSA8eHNpbWQveHNpbWQuaHBwPgorCisjZWxzZSAvKiBIQVZFX1hTSU1EICovCisKK25h bWVzcGFjZSB4c2ltZAoreworY2xhc3MgZ2VuZXJpYworeworfTsKK307IC8vIG5hbWVzcGFjZSB4 c2ltZAorCisjZW5kaWYgLyogSEFWRV9YU0lNRCAqLworCisjZW5kaWYgLy8gS0lTX1hTSU1EX0NP TkZJR19IUFAKZGlmZiAtLWdpdCBhL2xpYnMvbXVsdGlhcmNoL3hzaW1kX2V4dGVuc2lvbnMveHNp bWQuaHBwIGIvbGlicy9tdWx0aWFyY2gveHNpbWRfZXh0ZW5zaW9ucy94c2ltZC5ocHAKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOWZkOTRlMWM5ZgotLS0gL2Rldi9udWxs CisrKyBiL2xpYnMvbXVsdGlhcmNoL3hzaW1kX2V4dGVuc2lvbnMveHNpbWQuaHBwCkBAIC0wLDAg KzEsMTggQEAKKy8qCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292 aWEgPGFteUBhbXlzcGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBYU0lNRF9FWFRFTlNJT05TX0gKKyNkZWZpbmUgWFNJ TURfRVhURU5TSU9OU19ICisKKy8vIHhzaW1kIGRldGVjdGlvbiBhbmQgYXJjaGl0ZWN0dXJlIHNl dHVwLgorI2luY2x1ZGUgImNvbmZpZy94c2ltZF9hcmNoLmhwcCIKKworI2lmZGVmIEhBVkVfWFNJ TUQKKy8vIHhzaW1kIGV4dGVuc2lvbnMuCisjaW5jbHVkZSAiYXJjaC94c2ltZF9pc2EuaHBwIgor I2VuZGlmIC8vIEhBVkVfWFNJTUQKKworI2VuZGlmIC8vIFhTSU1EX0VYVEVOU0lPTlNfSApkaWZm IC0tZ2l0IGEvbGlicy9waWdtZW50L0NNYWtlTGlzdHMudHh0IGIvbGlicy9waWdtZW50L0NNYWtl TGlzdHMudHh0CmluZGV4IGZkNDQ4MmNlYzAuLmY2MGViOThhNWMgMTAwNjQ0Ci0tLSBhL2xpYnMv cGlnbWVudC9DTWFrZUxpc3RzLnR4dAorKysgYi9saWJzL3BpZ21lbnQvQ01ha2VMaXN0cy50eHQK QEAgLTE5LDkgKzE5LDcgQEAgZW5kaWYoKQogCiBzZXQoTElOS19WQ19MSUIpCiAKLWlmKEhBVkVf VkMpCi0gICAgaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtWY19JTkNMVURFX0RJUn0pCi0g ICAgc2V0KExJTktfVkNfTElCICR7VmNfTElCUkFSSUVTfSkKK2lmKEhBVkVfWFNJTUQpCiAgICAg a29fY29tcGlsZV9mb3JfYWxsX2ltcGxlbWVudGF0aW9uc19ub19zY2FsYXIoX19wZXJfYXJjaF9m YWN0b3J5X29ianMgY29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVy QXJjaC5jcHApCiAgICAga29fY29tcGlsZV9mb3JfYWxsX2ltcGxlbWVudGF0aW9ucyhfX3Blcl9h cmNoX2FscGhhX2FwcGxpY2F0b3JfZmFjdG9yeV9vYmpzIEtvQWxwaGFNYXNrQXBwbGljYXRvckZh Y3RvcnlJbXBsLmNwcCkKICAgICBrb19jb21waWxlX2Zvcl9hbGxfaW1wbGVtZW50YXRpb25zKF9f cGVyX2FyY2hfcmdiX3NjYWxlcl9mYWN0b3J5X29ianMgS29PcHRpbWl6ZWRQaXhlbERhdGFTY2Fs ZXJVOFRvVTE2RmFjdG9yeUltcGwuY3BwKQpAQCAtOTYsNyArOTQsNyBAQCBzZXQoa3JpdGFwaWdt ZW50X1NSQ1MKICAgICByZXNvdXJjZXMvS2lzR3JhZGllbnRDb252ZXJzaW9uLmNwcAogKQogCi1z ZXQgKEVYVFJBX0xJQlJBUklFUyAke0xJTktfT1BFTkVYUl9MSUJ9ICR7TElOS19WQ19MSUJ9KQor c2V0IChFWFRSQV9MSUJSQVJJRVMgJHtMSU5LX09QRU5FWFJfTElCfSBrcml0YW11bHRpYXJjaCkK IAogaWYoTVNWQyBPUiAoV0lOMzIgQU5EICIke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0iIFNUUkVR VUFMICJJbnRlbCIpKQogICAjIGF2b2lkICJjYW5ub3Qgb3BlbiBmaWxlICdMSUJDLmxpYiciIGVy cm9yCmRpZmYgLS1naXQgYS9saWJzL3BpZ21lbnQvS29BbHBoYU1hc2tBcHBsaWNhdG9yLmggYi9s aWJzL3BpZ21lbnQvS29BbHBoYU1hc2tBcHBsaWNhdG9yLmgKaW5kZXggY2NlYThkNzAxOC4uNDA2 NThkODdjZiAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50L0tvQWxwaGFNYXNrQXBwbGljYXRvci5o CisrKyBiL2xpYnMvcGlnbWVudC9Lb0FscGhhTWFza0FwcGxpY2F0b3IuaApAQCAtMSw1ICsxLDYg QEAKIC8qCiAgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBEbWl0cnkgS2F6YWtvdiA8 ZGltdWxhNzNAZ21haWwuY29tPgorICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIgTC4g RS4gU2Vnb3ZpYSA8YW15QGFteXNwYXJrLm1lPgogICoKICAqICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vci1sYXRlcgogICovCkBAIC05LDEzICsxMCwxMyBAQAogCiAjaW5jbHVk ZSAiS29BbHBoYU1hc2tBcHBsaWNhdG9yQmFzZS5oIgogI2luY2x1ZGUgIktvQ29sb3JTcGFjZVRy YWl0cy5oIgotI2luY2x1ZGUgIktvVmNNdWx0aUFyY2hCdWlsZFN1cHBvcnQuaCIKKyNpbmNsdWRl ICJLb011bHRpQXJjaEJ1aWxkU3VwcG9ydC5oIgogCiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9jaGFu bmVsc190eXBlXywKICAgICAgICAgIGludCBfY2hhbm5lbHNfbmJfLAogICAgICAgICAgaW50IF9h bHBoYV9wb3NfLAotICAgICAgICAgVmM6OkltcGxlbWVudGF0aW9uIF9pbXBsLAorICAgICAgICAg dHlwZW5hbWUgX2ltcGwsCiAgICAgICAgICB0eXBlbmFtZSBFbmFibGVEdW1teVR5cGUgPSB2b2lk Pgogc3RydWN0IEtvQWxwaGFNYXNrQXBwbGljYXRvciA6IHB1YmxpYyBLb0FscGhhTWFza0FwcGxp Y2F0b3JCYXNlCiB7CkBAIC00OSwxOCArNTAsMTggQEAgc3RydWN0IEtvQWxwaGFNYXNrQXBwbGlj YXRvciA6IHB1YmxpYyBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNlCiAgICAgfQogfTsKIAotI2lm ZGVmIEhBVkVfVkMKKyNpZmRlZiBIQVZFX1hTSU1ECiAKICNpbmNsdWRlICJLb1N0cmVhbWVkTWF0 aC5oIgogCi10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50YXRpb24gX2ltcGw+Cit0ZW1wbGF0ZTx0eXBl bmFtZSBfaW1wbD4KIHN0cnVjdCBLb0FscGhhTWFza0FwcGxpY2F0b3I8CiAgICAgICAgIHF1aW50 OCwgNCwgMywgX2ltcGwsCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9pbXBsICE9 IFZjOjpTY2FsYXJJbXBsPjo6dHlwZT4gOiBwdWJsaWMgS29BbHBoYU1hc2tBcHBsaWNhdG9yQmFz ZQorICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPF9pbXBsLCB4 c2ltZDo6Z2VuZXJpYz46OnZhbHVlPjo6dHlwZT4gOiBwdWJsaWMgS29BbHBoYU1hc2tBcHBsaWNh dG9yQmFzZQogewogICAgIHVzaW5nIHVpbnRfdiA9IHR5cGVuYW1lIEtvU3RyZWFtZWRNYXRoPF9p bXBsPjo6dWludF92OwogICAgIHVzaW5nIGludF92ID0gdHlwZW5hbWUgS29TdHJlYW1lZE1hdGg8 X2ltcGw+OjppbnRfdjsKLQorICAgIHVzaW5nIGZsb2F0X3YgPSB0eXBlbmFtZSBLb1N0cmVhbWVk TWF0aDxfaW1wbD46OmZsb2F0X3Y7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1DaGFu bmVscyA9IDQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYWxwaGFQb3MgPSAzOwpAQCAtNjks MjcgKzcwLDI2IEBAIHN0cnVjdCBLb0FscGhhTWFza0FwcGxpY2F0b3I8CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKmFscGhhLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHFpbnQzMiBuUGl4ZWxzKSBjb25zdCBvdmVycmlkZQog ICAgIHsKLSAgICAgICAgY29uc3QgaW50IGJsb2NrMSA9IG5QaXhlbHMgLyBzdGF0aWNfY2FzdDxp bnQ+KFZjOjpmbG9hdF92OjpzaXplKCkpOwotICAgICAgICBjb25zdCBpbnQgYmxvY2syID0gblBp eGVscyAlIHN0YXRpY19jYXN0PGludD4oVmM6OmZsb2F0X3Y6OnNpemUoKSk7Ci0gICAgICAgIGNv bnN0IGludCB2ZWN0b3JQaXhlbFN0cmlkZSA9IG51bUNoYW5uZWxzICogc3RhdGljX2Nhc3Q8aW50 PihWYzo6ZmxvYXRfdjo6c2l6ZSgpKTsKKyAgICAgICAgY29uc3QgaW50IGJsb2NrMSA9IG5QaXhl bHMgLyBzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0X3Y6OnNpemUpOworICAgICAgICBjb25zdCBpbnQg YmxvY2syID0gblBpeGVscyAlIHN0YXRpY19jYXN0PGludD4oZmxvYXRfdjo6c2l6ZSk7CisgICAg ICAgIGNvbnN0IGludCB2ZWN0b3JQaXhlbFN0cmlkZSA9IG51bUNoYW5uZWxzICogc3RhdGljX2Nh c3Q8aW50PihmbG9hdF92OjpzaXplKTsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJs b2NrMTsgaSsrKSB7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBtYXNrQWxwaGEoYWxwaGEsIFZj OjpVbmFsaWduZWQpOworICAgICAgICAgICAgYXV0byBtYXNrQWxwaGEgPSBmbG9hdF92Ojpsb2Fk X3VuYWxpZ25lZChhbHBoYSk7CiAKLSAgICAgICAgICAgIHVpbnRfdiBkYXRhX2k7Ci0gICAgICAg ICAgICBkYXRhX2kubG9hZChyZWludGVycHJldF9jYXN0PGNvbnN0IHF1aW50MzIqPihwaXhlbHMp LCBWYzo6VW5hbGlnbmVkKTsKKyAgICAgICAgICAgIGF1dG8gZGF0YV9pID0gdWludF92Ojpsb2Fk X3VuYWxpZ25lZChyZWludGVycHJldF9jYXN0PGNvbnN0IHF1aW50MzIgKj4ocGl4ZWxzKSk7CiAK LSAgICAgICAgICAgIFZjOjpmbG9hdF92IHBpeGVsQWxwaGEgPSBWYzo6c2ltZF9jYXN0PFZjOjpm bG9hdF92PihkYXRhX2kgPj4gMjRVKTsKLSAgICAgICAgICAgIHBpeGVsQWxwaGEgKj0gVmM6OmZs b2F0X3YoMS4wZikgLSBtYXNrQWxwaGE7CisgICAgICAgICAgICBhdXRvIHBpeGVsQWxwaGEgPSB4 c2ltZDo6dG9fZmxvYXQoeHNpbWQ6OmJpdHdpc2VfY2FzdDxpbnRfdj4oZGF0YV9pID4+IDI0VSkp OworICAgICAgICAgICAgcGl4ZWxBbHBoYSAqPSBmbG9hdF92KDEuMGYpIC0gbWFza0FscGhhOwog CiAgICAgICAgICAgICBjb25zdCBxdWludDMyIGNvbG9yQ2hhbm5lbHNNYXNrID0gMHgwMEZGRkZG RjsKIAotICAgICAgICAgICAgdWludF92IHBpeGVsQWxwaGFfaSA9IHVpbnRfdihpbnRfdihWYzo6 cm91bmQocGl4ZWxBbHBoYSkpKTsKKyAgICAgICAgICAgIHVpbnRfdiBwaXhlbEFscGhhX2kgPSB4 c2ltZDo6Yml0d2lzZV9jYXN0PHVpbnRfdj4oeHNpbWQ6Om5lYXJieWludF9hc19pbnQocGl4ZWxB bHBoYSkpOwogICAgICAgICAgICAgZGF0YV9pID0gKGRhdGFfaSAmIGNvbG9yQ2hhbm5lbHNNYXNr KSB8IChwaXhlbEFscGhhX2kgPDwgMjQpOwotICAgICAgICAgICAgZGF0YV9pLnN0b3JlKHJlaW50 ZXJwcmV0X2Nhc3Q8cXVpbnQzMiAqPihwaXhlbHMpLCBWYzo6VW5hbGlnbmVkKTsKKyAgICAgICAg ICAgIGRhdGFfaS5zdG9yZV91bmFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSB1aW50 X3Y6OnZhbHVlX3R5cGUgKj4ocGl4ZWxzKSk7CiAKICAgICAgICAgICAgIHBpeGVscyArPSB2ZWN0 b3JQaXhlbFN0cmlkZTsKLSAgICAgICAgICAgIGFscGhhICs9IFZjOjpmbG9hdF92OjpzaXplKCk7 CisgICAgICAgICAgICBhbHBoYSArPSBmbG9hdF92OjpzaXplOwogICAgICAgICB9CiAKICAgICAg ICAgS29Db2xvclNwYWNlVHJhaXQ8cXVpbnQ4LCA0LCAzPjo6CkBAIC0xMDAsMjEgKzEwMCwyMSBA QCBzdHJ1Y3QgS29BbHBoYU1hc2tBcHBsaWNhdG9yPAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqIGFscGhhLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWludDggKmJy dXNoQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHFpbnQzMiBuUGl4ZWxzKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgICAgIGNvbnN0IGludCBi bG9jazEgPSBuUGl4ZWxzIC8gc3RhdGljX2Nhc3Q8aW50PihWYzo6ZmxvYXRfdjo6c2l6ZSgpKTsK LSAgICAgICAgY29uc3QgaW50IGJsb2NrMiA9IG5QaXhlbHMgJSBzdGF0aWNfY2FzdDxpbnQ+KFZj OjpmbG9hdF92OjpzaXplKCkpOwotICAgICAgICBjb25zdCBpbnQgdmVjdG9yUGl4ZWxTdHJpZGUg PSBudW1DaGFubmVscyAqIHN0YXRpY19jYXN0PGludD4oVmM6OmZsb2F0X3Y6OnNpemUoKSk7Cisg ICAgICAgIGNvbnN0IGludCBibG9jazEgPSBuUGl4ZWxzIC8gc3RhdGljX2Nhc3Q8aW50PihmbG9h dF92OjpzaXplKTsKKyAgICAgICAgY29uc3QgaW50IGJsb2NrMiA9IG5QaXhlbHMgJSBzdGF0aWNf Y2FzdDxpbnQ+KGZsb2F0X3Y6OnNpemUpOworICAgICAgICBjb25zdCBpbnQgdmVjdG9yUGl4ZWxT dHJpZGUgPSBudW1DaGFubmVscyAqIHN0YXRpY19jYXN0PGludD4oZmxvYXRfdjo6c2l6ZSk7CiAg ICAgICAgIGNvbnN0IHVpbnRfdiBicnVzaENvbG9yX2koKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg cXVpbnQzMio+KGJydXNoQ29sb3IpICYgMHgwMEZGRkZGRnUpOwogCiAgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgYmxvY2sxOyBpKyspIHsKLSAgICAgICAgICAgIFZjOjpmbG9hdF92IG1hc2tB bHBoYShhbHBoYSwgVmM6OlVuYWxpZ25lZCk7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBwaXhl bEFscGhhID0gVmM6OmZsb2F0X3YoMjU1LjBmKSAqIChWYzo6ZmxvYXRfdigxLjBmKSAtIG1hc2tB bHBoYSk7CisgICAgICAgICAgICBhdXRvIG1hc2tBbHBoYSA9IGZsb2F0X3Y6OmxvYWRfdW5hbGln bmVkKGFscGhhKTsKKyAgICAgICAgICAgIGF1dG8gcGl4ZWxBbHBoYSA9IGZsb2F0X3YoMjU1LjBm KSAqIChmbG9hdF92KDEuMGYpIC0gbWFza0FscGhhKTsKIAotICAgICAgICAgICAgdWludF92IHBp eGVsQWxwaGFfaSA9IHVpbnRfdihpbnRfdihWYzo6cm91bmQocGl4ZWxBbHBoYSkpKTsKKyAgICAg ICAgICAgIHVpbnRfdiBwaXhlbEFscGhhX2kgPSB4c2ltZDo6Yml0d2lzZV9jYXN0PHVpbnRfdj4o eHNpbWQ6Om5lYXJieWludF9hc19pbnQocGl4ZWxBbHBoYSkpOwogICAgICAgICAgICAgdWludF92 IGRhdGFfaSA9IGJydXNoQ29sb3JfaSB8IChwaXhlbEFscGhhX2kgPDwgMjQpOwotICAgICAgICAg ICAgZGF0YV9pLnN0b3JlKHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMiAqPihwaXhlbHMpLCBWYzo6 VW5hbGlnbmVkKTsKKyAgICAgICAgICAgIGRhdGFfaS5zdG9yZV91bmFsaWduZWQocmVpbnRlcnBy ZXRfY2FzdDx0eXBlbmFtZSB1aW50X3Y6OnZhbHVlX3R5cGUgKj4ocGl4ZWxzKSk7CiAKICAgICAg ICAgICAgIHBpeGVscyArPSB2ZWN0b3JQaXhlbFN0cmlkZTsKLSAgICAgICAgICAgIGFscGhhICs9 IFZjOjpmbG9hdF92OjpzaXplKCk7CisgICAgICAgICAgICBhbHBoYSArPSBmbG9hdF92OjpzaXpl OwogICAgICAgICB9CiAKICAgICAgICAgS29Db2xvclNwYWNlVHJhaXQ8cXVpbnQ4LCA0LCAzPjo6 CkBAIC0xMjgsMjYgKzEyOCwyNSBAQCBzdHJ1Y3QgS29BbHBoYU1hc2tBcHBsaWNhdG9yPAogICAg IH0KIAogICAgIHZvaWQgZmlsbEdyYXlCcnVzaFdpdGhDb2xvcihxdWludDggKmRzdCwgY29uc3Qg UVJnYiAqYnJ1c2gsIHF1aW50OCAqYnJ1c2hDb2xvciwgcWludDMyIG5QaXhlbHMpIGNvbnN0IG92 ZXJyaWRlIHsKLSAgICAgICAgY29uc3QgaW50IGJsb2NrMSA9IG5QaXhlbHMgLyBzdGF0aWNfY2Fz dDxpbnQ+KFZjOjpmbG9hdF92OjpzaXplKCkpOwotICAgICAgICBjb25zdCBpbnQgYmxvY2syID0g blBpeGVscyAlIHN0YXRpY19jYXN0PGludD4oVmM6OmZsb2F0X3Y6OnNpemUoKSk7Ci0gICAgICAg IGNvbnN0IGludCB2ZWN0b3JQaXhlbFN0cmlkZSA9IG51bUNoYW5uZWxzICogc3RhdGljX2Nhc3Q8 aW50PihWYzo6ZmxvYXRfdjo6c2l6ZSgpKTsKKyAgICAgICAgY29uc3QgaW50IGJsb2NrMSA9IG5Q aXhlbHMgLyBzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0X3Y6OnNpemUpOworICAgICAgICBjb25zdCBp bnQgYmxvY2syID0gblBpeGVscyAlIHN0YXRpY19jYXN0PGludD4oZmxvYXRfdjo6c2l6ZSk7Cisg ICAgICAgIGNvbnN0IGludCB2ZWN0b3JQaXhlbFN0cmlkZSA9IG51bUNoYW5uZWxzICogc3RhdGlj X2Nhc3Q8aW50PihmbG9hdF92OjpzaXplKTsKICAgICAgICAgY29uc3QgdWludF92IGJydXNoQ29s b3JfaSgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBxdWludDMyKj4oYnJ1c2hDb2xvcikgJiAweDAw RkZGRkZGdSk7CiAKICAgICAgICAgY29uc3QgdWludF92IHJlZENoYW5uZWxNYXNrKDB4RkYpOwog CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2sxOyBpKyspIHsKLSAgICAgICAgICAg IHVpbnRfdiBtYXNrUGl4ZWxzOwotICAgICAgICAgICAgbWFza1BpeGVscy5sb2FkKHJlaW50ZXJw cmV0X2Nhc3Q8Y29uc3QgcXVpbnQzMio+KGJydXNoKSwgVmM6OlVuYWxpZ25lZCk7CisgICAgICAg ICAgICBjb25zdCBhdXRvIG1hc2tQaXhlbHMgPSB1aW50X3Y6OmxvYWRfdW5hbGlnbmVkKHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgcXVpbnQzMio+KGJydXNoKSk7CiAKICAgICAgICAgICAgIGNvbnN0 IHVpbnRfdiBwaXhlbEFscGhhID0gbWFza1BpeGVscyA+PiAyNDsKICAgICAgICAgICAgIGNvbnN0 IHVpbnRfdiBwaXhlbFJlZCA9IG1hc2tQaXhlbHMgJiByZWRDaGFubmVsTWFzazsKICAgICAgICAg ICAgIGNvbnN0IHVpbnRfdiBwaXhlbEFscGhhX2kgPSBtdWx0aXBseShyZWRDaGFubmVsTWFzayAt IHBpeGVsUmVkLCBwaXhlbEFscGhhKTsKIAogICAgICAgICAgICAgY29uc3QgdWludF92IGRhdGFf aSA9IGJydXNoQ29sb3JfaSB8IChwaXhlbEFscGhhX2kgPDwgMjQpOwotICAgICAgICAgICAgZGF0 YV9pLnN0b3JlKHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMiAqPihkc3QpLCBWYzo6VW5hbGlnbmVk KTsKKyAgICAgICAgICAgIGRhdGFfaS5zdG9yZV91bmFsaWduZWQocmVpbnRlcnByZXRfY2FzdDx0 eXBlbmFtZSB1aW50X3Y6OnZhbHVlX3R5cGUgKj4oZHN0KSk7CiAKICAgICAgICAgICAgIGRzdCAr PSB2ZWN0b3JQaXhlbFN0cmlkZTsKLSAgICAgICAgICAgIGJydXNoICs9IFZjOjpmbG9hdF92Ojpz aXplKCk7CisgICAgICAgICAgICBicnVzaCArPSBmbG9hdF92OjpzaXplOwogICAgICAgICB9CiAK ICAgICAgICAgS29Db2xvclNwYWNlVHJhaXQ8cXVpbnQ4LCA0LCAzPjo6CkBAIC0xNTUsNiArMTU0 LDYgQEAgc3RydWN0IEtvQWxwaGFNYXNrQXBwbGljYXRvcjwKICAgICB9CiB9OwogCi0jZW5kaWYg LyogSEFWRV9WQyAqLworI2VuZGlmIC8qIEhBVkVfWFNJTUQgKi8KIAogI2VuZGlmIC8vIEtPQUxQ SEFNQVNLQVBQTElDQVRPUl9ICmRpZmYgLS1naXQgYS9saWJzL3BpZ21lbnQvS29BbHBoYU1hc2tB cHBsaWNhdG9yRmFjdG9yeUltcGwuY3BwIGIvbGlicy9waWdtZW50L0tvQWxwaGFNYXNrQXBwbGlj YXRvckZhY3RvcnlJbXBsLmNwcAppbmRleCA3MDJjZjYyYWRkLi5kOWM1YWMyZWRjIDEwMDY0NAot LS0gYS9saWJzL3BpZ21lbnQvS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUltcGwuY3BwCisr KyBiL2xpYnMvcGlnbWVudC9Lb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0b3J5SW1wbC5jcHAKQEAg LTE1LDcgKzE1LDcgQEAKIHRlbXBsYXRlPHR5cGVuYW1lIF9jaGFubmVsc190eXBlXywKICAgICAg ICAgIGludCBfY2hhbm5lbHNfbmJfLAogICAgICAgICAgaW50IF9hbHBoYV9wb3NfPgotdGVtcGxh dGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgordGVtcGxhdGU8dHlwZW5hbWUgX2ltcGw+CiBL b0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKgogS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUlt cGw8X2NoYW5uZWxzX3R5cGVfLCBfY2hhbm5lbHNfbmJfLCBfYWxwaGFfcG9zXz46OmNyZWF0ZShp bnQpCiB7CkBAIC0yNSwzMCArMjUsMzAgQEAgS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUlt cGw8X2NoYW5uZWxzX3R5cGVfLCBfY2hhbm5lbHNfbmJfLCBfYWxwaGFfcG9zXz46OmMKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW1wbD4oKTsKIH0KIAotdGVtcGxhdGUg S29BbHBoYU1hc2tBcHBsaWNhdG9yQmFzZSogS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUlt cGw8cXVpbnQ4LCAgNCwgMz46OmNyZWF0ZTxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJy ZW50KCk+KGludCk7Ci10ZW1wbGF0ZSBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKiBLb0FscGhh TWFza0FwcGxpY2F0b3JGYWN0b3J5SW1wbDxxdWludDE2LCA0LCAzPjo6Y3JlYXRlPFZjOjpDdXJy ZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oaW50KTsKK3RlbXBsYXRlIEtvQWxwaGFNYXNr QXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPHF1aW50OCwg IDQsIDM+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKK3RlbXBsYXRlIEtvQWxw aGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPHF1 aW50MTYsIDQsIDM+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKICNpZmRlZiBI QVZFX09QRU5FWFIKLXRlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFN YXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPGhhbGYsICAgIDQsIDM+OjpjcmVhdGU8VmM6OkN1cnJl bnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihpbnQpOwordGVtcGxhdGUgS29BbHBoYU1hc2tB cHBsaWNhdG9yQmFzZSogS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUltcGw8aGFsZiwgICAg NCwgMz46OmNyZWF0ZTx4c2ltZDo6Y3VycmVudF9hcmNoPihpbnQpOwogI2VuZGlmCi10ZW1wbGF0 ZSBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKiBLb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0b3J5 SW1wbDxmbG9hdCwgICA0LCAzPjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1 cnJlbnQoKT4oaW50KTsKK3RlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxw aGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPGZsb2F0LCAgIDQsIDM+OjpjcmVhdGU8eHNpbWQ6 OmN1cnJlbnRfYXJjaD4oaW50KTsKIAotdGVtcGxhdGUgS29BbHBoYU1hc2tBcHBsaWNhdG9yQmFz ZSogS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUltcGw8cXVpbnQ4LCAgNSwgND46OmNyZWF0 ZTxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KGludCk7Ci10ZW1wbGF0ZSBL b0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKiBLb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0b3J5SW1w bDxxdWludDE2LCA1LCA0Pjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJl bnQoKT4oaW50KTsKK3RlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFN YXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPHF1aW50OCwgIDUsIDQ+OjpjcmVhdGU8eHNpbWQ6OmN1 cnJlbnRfYXJjaD4oaW50KTsKK3RlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtv QWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPHF1aW50MTYsIDUsIDQ+OjpjcmVhdGU8eHNp bWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKICNpZmRlZiBIQVZFX09QRU5FWFIKLXRlbXBsYXRlIEtv QWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBs PGhhbGYsICAgIDUsIDQ+OjpjcmVhdGU8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVu dCgpPihpbnQpOwordGVtcGxhdGUgS29BbHBoYU1hc2tBcHBsaWNhdG9yQmFzZSogS29BbHBoYU1h c2tBcHBsaWNhdG9yRmFjdG9yeUltcGw8aGFsZiwgICAgNSwgND46OmNyZWF0ZTx4c2ltZDo6Y3Vy cmVudF9hcmNoPihpbnQpOwogI2VuZGlmCi10ZW1wbGF0ZSBLb0FscGhhTWFza0FwcGxpY2F0b3JC YXNlKiBLb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0b3J5SW1wbDxmbG9hdCwgICA1LCA0Pjo6Y3Jl YXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oaW50KTsKK3RlbXBsYXRl IEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJ bXBsPGZsb2F0LCAgIDUsIDQ+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKIAot dGVtcGxhdGUgS29BbHBoYU1hc2tBcHBsaWNhdG9yQmFzZSogS29BbHBoYU1hc2tBcHBsaWNhdG9y RmFjdG9yeUltcGw8cXVpbnQ4LCAgMiwgMT46OmNyZWF0ZTxWYzo6Q3VycmVudEltcGxlbWVudGF0 aW9uOjpjdXJyZW50KCk+KGludCk7Ci10ZW1wbGF0ZSBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNl KiBLb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0b3J5SW1wbDxxdWludDE2LCAyLCAxPjo6Y3JlYXRl PFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oaW50KTsKK3RlbXBsYXRlIEtv QWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBs PHF1aW50OCwgIDIsIDE+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKK3RlbXBs YXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3Rv cnlJbXBsPHF1aW50MTYsIDIsIDE+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsK ICNpZmRlZiBIQVZFX09QRU5FWFIKLXRlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2Uq IEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPGhhbGYsICAgIDIsIDE+OjpjcmVhdGU8 VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihpbnQpOwordGVtcGxhdGUgS29B bHBoYU1hc2tBcHBsaWNhdG9yQmFzZSogS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUltcGw8 aGFsZiwgICAgMiwgMT46OmNyZWF0ZTx4c2ltZDo6Y3VycmVudF9hcmNoPihpbnQpOwogI2VuZGlm Ci10ZW1wbGF0ZSBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKiBLb0FscGhhTWFza0FwcGxpY2F0 b3JGYWN0b3J5SW1wbDxmbG9hdCwgICAyLCAxPjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50 YXRpb246OmN1cnJlbnQoKT4oaW50KTsKK3RlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJh c2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPGZsb2F0LCAgIDIsIDE+OjpjcmVh dGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKIAotdGVtcGxhdGUgS29BbHBoYU1hc2tBcHBs aWNhdG9yQmFzZSogS29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUltcGw8cXVpbnQ4LCAgMSwg MD46OmNyZWF0ZTxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KGludCk7Ci10 ZW1wbGF0ZSBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKiBLb0FscGhhTWFza0FwcGxpY2F0b3JG YWN0b3J5SW1wbDxxdWludDE2LCAxLCAwPjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRp b246OmN1cnJlbnQoKT4oaW50KTsKK3RlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2Uq IEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPHF1aW50OCwgIDEsIDA+OjpjcmVhdGU8 eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKK3RlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRv ckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsPHF1aW50MTYsIDEsIDA+Ojpj cmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oaW50KTsKICNpZmRlZiBIQVZFX09QRU5FWFIKLXRl bXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRvckZh Y3RvcnlJbXBsPGhhbGYsICAgIDEsIDA+OjpjcmVhdGU8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlv bjo6Y3VycmVudCgpPihpbnQpOwordGVtcGxhdGUgS29BbHBoYU1hc2tBcHBsaWNhdG9yQmFzZSog S29BbHBoYU1hc2tBcHBsaWNhdG9yRmFjdG9yeUltcGw8aGFsZiwgICAgMSwgMD46OmNyZWF0ZTx4 c2ltZDo6Y3VycmVudF9hcmNoPihpbnQpOwogI2VuZGlmCi10ZW1wbGF0ZSBLb0FscGhhTWFza0Fw cGxpY2F0b3JCYXNlKiBLb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0b3J5SW1wbDxmbG9hdCwgICAx LCAwPjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oaW50KTsK K3RlbXBsYXRlIEtvQWxwaGFNYXNrQXBwbGljYXRvckJhc2UqIEtvQWxwaGFNYXNrQXBwbGljYXRv ckZhY3RvcnlJbXBsPGZsb2F0LCAgIDEsIDA+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4o aW50KTsKZGlmZiAtLWdpdCBhL2xpYnMvcGlnbWVudC9Lb0FscGhhTWFza0FwcGxpY2F0b3JGYWN0 b3J5SW1wbC5oIGIvbGlicy9waWdtZW50L0tvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBs LmgKaW5kZXggYzBmYWU0ZGNmNy4uNDM2ODk4NzY2MSAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50 L0tvQWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsLmgKKysrIGIvbGlicy9waWdtZW50L0tv QWxwaGFNYXNrQXBwbGljYXRvckZhY3RvcnlJbXBsLmgKQEAgLTcsNyArNyw3IEBACiAjZGVmaW5l IEtPQUxQSEFNQVNLQVBQTElDQVRPUkZBQ1RPUllJTVBMX0gKIAogI2luY2x1ZGUgPEtvQWxwaGFN YXNrQXBwbGljYXRvckJhc2UuaD4KLSNpbmNsdWRlIDxLb1ZjTXVsdGlBcmNoQnVpbGRTdXBwb3J0 Lmg+CisjaW5jbHVkZSA8S29NdWx0aUFyY2hCdWlsZFN1cHBvcnQuaD4KIAogdGVtcGxhdGU8dHlw ZW5hbWUgX2NoYW5uZWxzX3R5cGVfLAogICAgICAgICAgaW50IF9jaGFubmVsc19uYl8sCkBAIC0x OCw3ICsxOCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIGludCBQYXJhbVR5cGU7CiAgICAgdHlw ZWRlZiBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKiBSZXR1cm5UeXBlOwogCi0gICAgdGVtcGxh dGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9pbXBs PgogICAgIHN0YXRpYyBLb0FscGhhTWFza0FwcGxpY2F0b3JCYXNlKiBjcmVhdGUoaW50KTsKIH07 CiAKZGlmZiAtLWdpdCBhL2xpYnMvcGlnbWVudC9Lb09wdGltaXplZFBpeGVsRGF0YVNjYWxlclU4 VG9VMTYuaCBiL2xpYnMvcGlnbWVudC9Lb09wdGltaXplZFBpeGVsRGF0YVNjYWxlclU4VG9VMTYu aAppbmRleCAzNjAwMmY2YzlmLi4wNmZkYzkzMDhmIDEwMDY0NAotLS0gYS9saWJzL3BpZ21lbnQv S29PcHRpbWl6ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2LmgKKysrIGIvbGlicy9waWdtZW50L0tv T3B0aW1pemVkUGl4ZWxEYXRhU2NhbGVyVThUb1UxNi5oCkBAIC05LDcgKzksNyBAQAogCiAjaW5j bHVkZSAiS29PcHRpbWl6ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2QmFzZS5oIgogCi0jaW5jbHVk ZSAiS29WY011bHRpQXJjaEJ1aWxkU3VwcG9ydC5oIgorI2luY2x1ZGUgIktvTXVsdGlBcmNoQnVp bGRTdXBwb3J0LmgiCiAjaW5jbHVkZSAia2lzX2RlYnVnLmgiCiAKICNpZiBkZWZpbmVkKF9faTM4 Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCkBAIC0xNyw3ICsxNyw3IEBACiAjZW5kaWYKIAog Ci10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50YXRpb24gX2ltcGw+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBf aW1wbCA9IHhzaW1kOjpjdXJyZW50X2FyY2g+CiBjbGFzcyBLb09wdGltaXplZFBpeGVsRGF0YVNj YWxlclU4VG9VMTYgOiBwdWJsaWMgS29PcHRpbWl6ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2QmFz ZQogewogcHVibGljOgpkaWZmIC0tZ2l0IGEvbGlicy9waWdtZW50L0tvT3B0aW1pemVkUGl4ZWxE YXRhU2NhbGVyVThUb1UxNkZhY3RvcnlJbXBsLmNwcCBiL2xpYnMvcGlnbWVudC9Lb09wdGltaXpl ZFBpeGVsRGF0YVNjYWxlclU4VG9VMTZGYWN0b3J5SW1wbC5jcHAKaW5kZXggYTBmNDNlYmIxMS4u ZWYyMTRkZDc5ZSAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50L0tvT3B0aW1pemVkUGl4ZWxEYXRh U2NhbGVyVThUb1UxNkZhY3RvcnlJbXBsLmNwcAorKysgYi9saWJzL3BpZ21lbnQvS29PcHRpbWl6 ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2RmFjdG9yeUltcGwuY3BwCkBAIC04LDEwICs4LDExIEBA CiAKICNpbmNsdWRlICJLb09wdGltaXplZFBpeGVsRGF0YVNjYWxlclU4VG9VMTYuaCIKIAotdGVt cGxhdGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgordGVtcGxhdGU8dHlwZW5hbWUgX2ltcGw+ CiBLb09wdGltaXplZFBpeGVsRGF0YVNjYWxlclU4VG9VMTZCYXNlICpLb09wdGltaXplZFBpeGVs RGF0YVNjYWxlclU4VG9VMTZGYWN0b3J5SW1wbDo6Y3JlYXRlKGludCBjaGFubmVsc1BlclBpeGVs KQogewogICAgIHJldHVybiBuZXcgS29PcHRpbWl6ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2PF9p bXBsPihjaGFubmVsc1BlclBpeGVsKTsKIH0KIAotdGVtcGxhdGUgS29PcHRpbWl6ZWRQaXhlbERh dGFTY2FsZXJVOFRvVTE2QmFzZSAqS29PcHRpbWl6ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2RmFj dG9yeUltcGw6OmNyZWF0ZTxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KGlu dCk7Cit0ZW1wbGF0ZSBLb09wdGltaXplZFBpeGVsRGF0YVNjYWxlclU4VG9VMTZCYXNlICoKK0tv T3B0aW1pemVkUGl4ZWxEYXRhU2NhbGVyVThUb1UxNkZhY3RvcnlJbXBsOjpjcmVhdGU8eHNpbWQ6 OmN1cnJlbnRfYXJjaD4oaW50KTsKZGlmZiAtLWdpdCBhL2xpYnMvcGlnbWVudC9Lb09wdGltaXpl ZFBpeGVsRGF0YVNjYWxlclU4VG9VMTZGYWN0b3J5SW1wbC5oIGIvbGlicy9waWdtZW50L0tvT3B0 aW1pemVkUGl4ZWxEYXRhU2NhbGVyVThUb1UxNkZhY3RvcnlJbXBsLmgKaW5kZXggYWQyMmVmZGFm Ny4uYzI3NjJkZWYxYyAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50L0tvT3B0aW1pemVkUGl4ZWxE YXRhU2NhbGVyVThUb1UxNkZhY3RvcnlJbXBsLmgKKysrIGIvbGlicy9waWdtZW50L0tvT3B0aW1p emVkUGl4ZWxEYXRhU2NhbGVyVThUb1UxNkZhY3RvcnlJbXBsLmgKQEAgLTgsNyArOCw3IEBACiAj ZGVmaW5lIEtvT3B0aW1pemVkUGl4ZWxEYXRhU2NhbGVyVThUb1UxNkZBQ1RPUllJTVBMX0gKIAog I2luY2x1ZGUgPEtvT3B0aW1pemVkUGl4ZWxEYXRhU2NhbGVyVThUb1UxNkJhc2UuaD4KLSNpbmNs dWRlIDxLb1ZjTXVsdGlBcmNoQnVpbGRTdXBwb3J0Lmg+CisjaW5jbHVkZSA8S29NdWx0aUFyY2hC dWlsZFN1cHBvcnQuaD4KIAogY2xhc3MgS1JJVEFQSUdNRU5UX0VYUE9SVCBLb09wdGltaXplZFBp eGVsRGF0YVNjYWxlclU4VG9VMTZGYWN0b3J5SW1wbAogewpAQCAtMTYsNyArMTYsNyBAQCBwdWJs aWM6CiAgICAgdHlwZWRlZiBpbnQgUGFyYW1UeXBlOwogICAgIHR5cGVkZWYgS29PcHRpbWl6ZWRQ aXhlbERhdGFTY2FsZXJVOFRvVTE2QmFzZSogUmV0dXJuVHlwZTsKIAotICAgIHRlbXBsYXRlPFZj OjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4KICAg ICBzdGF0aWMgS29PcHRpbWl6ZWRQaXhlbERhdGFTY2FsZXJVOFRvVTE2QmFzZSogY3JlYXRlKGlu dCk7CiB9OwogCmRpZmYgLS1naXQgYS9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvTXVsdGlB cmNoQnVpbGRTdXBwb3J0LmggYi9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvTXVsdGlBcmNo QnVpbGRTdXBwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWYw MjA0ODk5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29N dWx0aUFyY2hCdWlsZFN1cHBvcnQuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogIFNQRFgtRmls ZUNvcHlyaWdodFRleHQ6IDIwMTIgRG1pdHJ5IEthemFrb3YgPGRpbXVsYTczQGdtYWlsLmNvbT4K KyAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292aWEgPGFteUBhbXlz cGFyay5tZT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEtb3ItbGF0 ZXIKKyAqLworCisjaWZuZGVmIEtPX01VTFRJX0FSQ0hfQlVJTERfU1VQUE9SVF9ICisjZGVmaW5l IEtPX01VTFRJX0FSQ0hfQlVJTERfU1VQUE9SVF9ICisKKworI2luY2x1ZGUgPFFEZWJ1Zz4KKyNp bmNsdWRlIDxrc2hhcmVkY29uZmlnLmg+CisjaW5jbHVkZSA8a2NvbmZpZy5oPgorI2luY2x1ZGUg PGtjb25maWdncm91cC5oPgorI2luY2x1ZGUgPHhzaW1kX2V4dGVuc2lvbnMveHNpbWQuaHBwPgor Cit0ZW1wbGF0ZTxjbGFzcyBGYWN0b3J5VHlwZT4KK3R5cGVuYW1lIEZhY3RvcnlUeXBlOjpSZXR1 cm5UeXBlCitjcmVhdGVPcHRpbWl6ZWRDbGFzcyh0eXBlbmFtZSBGYWN0b3J5VHlwZTo6UGFyYW1U eXBlIHBhcmFtKQoreworI2lmZGVmIEhBVkVfWFNJTUQKKyAgICBjb25zdCBhdXRvIGJlc3RfYXJj aCA9IHhzaW1kOjphdmFpbGFibGVfYXJjaGl0ZWN0dXJlcygpLmJlc3Q7CisKKyNpZmRlZiBRX1BS T0NFU1NPUl9YODYKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZpZ0luaXRpYWxpemVkID0gZmFsc2U7 CisgICAgc3RhdGljIGJvb2wgdXNlVmVjdG9yaXphdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJv b2wgZGlzYWJsZUFWWE9wdGltaXphdGlvbnMgPSBmYWxzZTsKKworICAgIGlmICghaXNDb25maWdJ bml0aWFsaXplZCkgeworICAgICAgICBLQ29uZmlnR3JvdXAgY2ZnID0gS1NoYXJlZENvbmZpZzo6 b3BlbkNvbmZpZygpLT5ncm91cCgiIik7CisgICAgICAgIC8vIHVzZSB0aGUgb2xkIGtleSBuYW1l IGZvciBjb21wYXRpYmlsaXR5CisgICAgICAgIHVzZVZlY3Rvcml6YXRpb24gPSAhY2ZnLnJlYWRF bnRyeSgiYW1kRGlzYWJsZVZlY3Rvcldvcmthcm91bmQiLCBmYWxzZSk7CisgICAgICAgIGRpc2Fi bGVBVlhPcHRpbWl6YXRpb25zID0gY2ZnLnJlYWRFbnRyeSgiZGlzYWJsZUFWWE9wdGltaXphdGlv bnMiLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKCF1c2VWZWN0b3JpemF0aW9uKSB7CisgICAg ICAgIHFXYXJuaW5nKCkgPDwgIldBUk5JTkc6IHZlY3RvciBpbnN0cnVjdGlvbnMgZGlzYWJsZWQg YnkgdGhlIFwnYW1kRGlzYWJsZVZlY3Rvcldvcmthcm91bmRcJyBvcHRpb24hIjsKKyAgICAgICAg cmV0dXJuIEZhY3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8eHNpbWQ6OmdlbmVyaWM+KHBhcmFt KTsKKyAgICB9CisKKyAgICBpZiAoZGlzYWJsZUFWWE9wdGltaXphdGlvbnMKKyAgICAgICAgJiYg KHhzaW1kOjphdng6OnZlcnNpb24oKSA8PSBiZXN0X2FyY2ggfHwgeHNpbWQ6OmF2eDI6OnZlcnNp b24oKSA8PSBiZXN0X2FyY2gpKSB7CisgICAgICAgIHFXYXJuaW5nKCkgPDwgIldBUk5JTkc6IEFW WCBhbmQgQVZYMiBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZCBieSB0aGUgXCdkaXNhYmxlQVZY T3B0aW1pemF0aW9uc1wnIG9wdGlvbiEiOworICAgIH0KKworICAgIC8qKgorICAgICogV2UgdXNl IFNTRTIsIFNTU0UzLCBTU0U0LjEsIEFWWCBhbmQgQVZYMitGTUEuCisgICAgKiBUaGUgcmVzdCBh cmUgaW50ZWdlciBhbmQgc3RyaW5nIGluc3RydWN0aW9ucyBtb3N0bHkuCisgICAgKi8KKyAgICBp ZiAoIWRpc2FibGVBVlhPcHRpbWl6YXRpb25zICYmIHhzaW1kOjpmbWEzPHhzaW1kOjphdngyPjo6 dmVyc2lvbigpIDw9IGJlc3RfYXJjaCkgeworICAgICAgICByZXR1cm4gRmFjdG9yeVR5cGU6OnRl bXBsYXRlIGNyZWF0ZTx4c2ltZDo6Zm1hMzx4c2ltZDo6YXZ4Mj4+KHBhcmFtKTsKKyAgICB9IGVs c2UgaWYgKCFkaXNhYmxlQVZYT3B0aW1pemF0aW9ucyAmJiB4c2ltZDo6YXZ4Ojp2ZXJzaW9uKCkg PD0gYmVzdF9hcmNoKSB7CisgICAgICAgIHJldHVybiBGYWN0b3J5VHlwZTo6dGVtcGxhdGUgY3Jl YXRlPHhzaW1kOjphdng+KHBhcmFtKTsKKyAgICB9IGVsc2UgaWYgKHhzaW1kOjpzc2U0XzE6OnZl cnNpb24oKSA8PSBiZXN0X2FyY2gpIHsKKyAgICAgICAgcmV0dXJuIEZhY3RvcnlUeXBlOjp0ZW1w bGF0ZSBjcmVhdGU8eHNpbWQ6OnNzZTRfMT4ocGFyYW0pOworICAgIH0gZWxzZSBpZiAoeHNpbWQ6 OnNzc2UzOjp2ZXJzaW9uKCkgPD0gYmVzdF9hcmNoKSB7CisgICAgICAgIHJldHVybiBGYWN0b3J5 VHlwZTo6dGVtcGxhdGUgY3JlYXRlPHhzaW1kOjpzc3NlMz4ocGFyYW0pOworICAgIH0gZWxzZSBp ZiAoeHNpbWQ6OnNzZTI6OnZlcnNpb24oKSA8PSBiZXN0X2FyY2gpIHsKKyAgICAgICAgcmV0dXJu IEZhY3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8eHNpbWQ6OnNzZTI+KHBhcmFtKTsKKyAgICB9 CisjZWxpZiBYU0lNRF9XSVRIX05FT042NAorICAgIGlmICh4c2ltZDo6bmVvbjY0Ojp2ZXJzaW9u KCkgPD0gYmVzdF9hcmNoKSB7CisgICAgICAgIHJldHVybiBGYWN0b3J5VHlwZTo6dGVtcGxhdGUg Y3JlYXRlPHhzaW1kOjpuZW9uNjQ+KHBhcmFtKTsKKyAgICB9CisjZWxpZiBYU0lNRF9XSVRIX05F T04KKyAgICBpZiAoeHNpbWQ6Om5lb246OnZlcnNpb24oKSA8PSBiZXN0X2FyY2gpIHsKKyAgICAg ICAgcmV0dXJuIEZhY3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8eHNpbWQ6Om5lb24+KHBhcmFt KTsKKyAgICB9CisjZW5kaWYgLy8gWFNJTURfV0lUSF9TU0UyCisjZW5kaWYgLy8gSEFWRV9YU0lN RAorCisgICAgcmV0dXJuIEZhY3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8eHNpbWQ6OmdlbmVy aWM+KHBhcmFtKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRmFjdG9yeVR5cGU+Cit0eXBlbmFtZSBG YWN0b3J5VHlwZTo6UmV0dXJuVHlwZQorY3JlYXRlT3B0aW1pemVkQ2xhc3ModHlwZW5hbWUgRmFj dG9yeVR5cGU6OlBhcmFtVHlwZSBwYXJhbSwgYm9vbCBmb3JjZVNjYWxhckltcGxlbWV0YXRpb24p Cit7CisgICAgaWYoZm9yY2VTY2FsYXJJbXBsZW1ldGF0aW9uKXsKKyAgICAgICAgcmV0dXJuIEZh Y3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8eHNpbWQ6OmdlbmVyaWM+KHBhcmFtKTsKKyAgICB9 CisgICAgcmV0dXJuIGNyZWF0ZU9wdGltaXplZENsYXNzPEZhY3RvcnlUeXBlPihwYXJhbSk7Cit9 CisKKyNlbmRpZiAvKiBLT19NVUxUSV9BUkNIX0JVSUxEX1NVUFBPUlRfSCAqLwpkaWZmIC0tZ2l0 IGEvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFE YXJrZW4xMjguaCBiL2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3Np dGVPcEFscGhhRGFya2VuMTI4LmgKaW5kZXggOTk0ODUyZTc4NS4uZTcyMzVlMTg5YyAxMDA2NDQK LS0tIGEvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENvbXBvc2l0ZU9wQWxw aGFEYXJrZW4xMjguaAorKysgYi9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1pemVk Q29tcG9zaXRlT3BBbHBoYURhcmtlbjEyOC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIFNQRFgt RmlsZUNvcHlyaWdodFRleHQ6IDIwMTYgVGhvcnN0ZW4gWmFjaG1hbm4gPHphY2htYW5uQGtkZS5v cmc+CisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292aWEgPGFteUBh bXlzcGFyay5tZT4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjAtb3It bGF0ZXIKICAqLwpAQCAtMjYsNyArMjcsNyBAQCBzdHJ1Y3QgQWxwaGFEYXJrZW5Db21wb3NpdG9y MTI4IHsKIAogICAgIC8qKgogICAgICAqIFRoaXMgaXMgYSB2ZWN0b3IgZXF1aXZhbGVudCBvZiBj b21wb3NpdGVPbmVQaXhlbFNjYWxhcigpLiBJdCBpcyBjb25zaWRlcmVkCi0gICAgICogdG8gcHJv Y2VzcyBWYzo6ZmxvYXRfdjo6c2l6ZSgpIHBpeGVscyBpbiBhIHNpbmdsZSBwYXNzLgorICAgICAq IHRvIHByb2Nlc3MgZmxvYXRfdjo6c2l6ZSBwaXhlbHMgaW4gYSBzaW5nbGUgcGFzcy4KICAgICAg KgogICAgICAqIG8gdGhlIFxwIGhhdmVNYXNrIHBhcmFtZXRlciBwb2ludHMgd2hldGhlciB0aGUg cmVhbCAobm9uLW51bGwpIG1hc2sKICAgICAgKiAgIHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRoZSBm dW5jdGlvbi4KQEAgLTM1LDIzICszNiwyNiBAQCBzdHJ1Y3QgQWxwaGFEYXJrZW5Db21wb3NpdG9y MTI4IHsKICAgICAgKiAgIFxwIHNyY19hbGlnbmVkLgogICAgICAqIG8gdGhlIFxwIGRzdCBwb2lu dGVyIG11c3QgYWx3YXlzKCEpIGJlIGFsaWduZWQgdG8gdGhlIGJvdW5kYXJ5CiAgICAgICogICBv ZiBhIHN0cmVhbWluZyB2ZWN0b3IuIFVuYWxpZ25lZCB3cml0ZXMgYXJlIHJlYWxseSBleHBlbnNp dmUuCi0gICAgICogbyBUaGlzIGZ1bmN0aW9uIGlzICpuZXZlciogdXNlZCBpZiBIQVZFX1ZDIGlz IG5vdCBwcmVzZW50CisgICAgICogbyBUaGlzIGZ1bmN0aW9uIGlzICpuZXZlciogdXNlZCBpZiBI QVZFX1hTSU1EIGlzIG5vdCBwcmVzZW50CiAgICAgICovCi0gICAgdGVtcGxhdGU8Ym9vbCBoYXZl TWFzaywgYm9vbCBzcmNfYWxpZ25lZCwgVmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgorICAgIHRl bXBsYXRlPGJvb2wgaGF2ZU1hc2ssIGJvb2wgc3JjX2FsaWduZWQsIHR5cGVuYW1lIF9pbXBsPgog ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgY29tcG9zaXRlVmVjdG9yKGNvbnN0IHF1aW50 OCAqc3JjLCBxdWludDggKmRzdCwgY29uc3QgcXVpbnQ4ICptYXNrLCBmbG9hdCBvcGFjaXR5LCBj b25zdCBQYXJhbXNXcmFwcGVyICZvcGFyYW1zKQogICAgIHsKLSAgICAgICAgVmM6OmZsb2F0X3Yg c3JjX2MxOwotICAgICAgICBWYzo6ZmxvYXRfdiBzcmNfYzI7Ci0gICAgICAgIFZjOjpmbG9hdF92 IHNyY19jMzsKLSAgICAgICAgVmM6OmZsb2F0X3Ygc3JjX2FscGhhOworICAgICAgICB1c2luZyBm bG9hdF92ID0gdHlwZW5hbWUgS29TdHJlYW1lZE1hdGg8X2ltcGw+OjpmbG9hdF92OworICAgICAg ICB1c2luZyBmbG9hdF9tID0gdHlwZW5hbWUgZmxvYXRfdjo6YmF0Y2hfYm9vbF90eXBlOworCisg ICAgICAgIGZsb2F0X3Ygc3JjX2MxOworICAgICAgICBmbG9hdF92IHNyY19jMjsKKyAgICAgICAg ZmxvYXRfdiBzcmNfYzM7CisgICAgICAgIGZsb2F0X3Ygc3JjX2FscGhhOwogCiAgICAgICAgIFBp eGVsV3JhcHBlcjxjaGFubmVsc190eXBlLCBfaW1wbD4gZGF0YVdyYXBwZXI7CiAgICAgICAgIGRh dGFXcmFwcGVyLnJlYWQoY29uc3RfY2FzdDxxdWludDgqPihzcmMpLCBzcmNfYzEsIHNyY19jMiwg c3JjX2MzLCBzcmNfYWxwaGEpOwogCi0gICAgICAgIFZjOjpmbG9hdF92IG1za19ub3JtX2FscGhh OworICAgICAgICBmbG9hdF92IG1za19ub3JtX2FscGhhOwogICAgICAgICBpZiAoaGF2ZU1hc2sp IHsKLSAgICAgICAgICAgIGNvbnN0IFZjOjpmbG9hdF92IHVpbnQ4UmVjMSgxLjBmIC8gMjU1LjBm KTsKLSAgICAgICAgICAgIFZjOjpmbG9hdF92IG1hc2tfdmVjID0gS29TdHJlYW1lZE1hdGg8X2lt cGw+OjpmZXRjaF9tYXNrXzgobWFzayk7CisgICAgICAgICAgICBjb25zdCBmbG9hdF92IHVpbnQ4 UmVjMSgxLjBmIC8gMjU1LjBmKTsKKyAgICAgICAgICAgIGZsb2F0X3YgbWFza192ZWMgPSBLb1N0 cmVhbWVkTWF0aDxfaW1wbD46OmZldGNoX21hc2tfOChtYXNrKTsKICAgICAgICAgICAgIG1za19u b3JtX2FscGhhID0gbWFza192ZWMgKiB1aW50OFJlYzEgKiBzcmNfYWxwaGE7CiAgICAgICAgIH0K ICAgICAgICAgZWxzZSB7CkBAIC02MywzNSArNjcsMzEgQEAgc3RydWN0IEFscGhhRGFya2VuQ29t cG9zaXRvcjEyOCB7CiAKICAgICAgICAgLy8gaW5zdGVhZCB3ZSB1c2UgdmFsdWUgY2FsY3VsYXRl ZCBieSBQYXJhbXNXcmFwcGVyCiAgICAgICAgIG9wYWNpdHkgPSBvcGFyYW1zLm9wYWNpdHk7Ci0g ICAgICAgIFZjOjpmbG9hdF92IG9wYWNpdHlfdmVjKG9wYWNpdHkpOworICAgICAgICBmbG9hdF92 IG9wYWNpdHlfdmVjKG9wYWNpdHkpOwogCiAgICAgICAgIHNyY19hbHBoYSA9IG1za19ub3JtX2Fs cGhhICogb3BhY2l0eV92ZWM7CiAKLSAgICAgICAgY29uc3QgVmM6OmZsb2F0X3YgemVyb1ZhbHVl KHN0YXRpY19jYXN0PGZsb2F0PihLb0NvbG9yU3BhY2VNYXRoc1RyYWl0czxjaGFubmVsc190eXBl Pjo6emVyb1ZhbHVlKSk7CisgICAgICAgIGNvbnN0IGZsb2F0X3YgemVyb1ZhbHVlKHN0YXRpY19j YXN0PGZsb2F0PihLb0NvbG9yU3BhY2VNYXRoc1RyYWl0czxjaGFubmVsc190eXBlPjo6emVyb1Zh bHVlKSk7CiAKLSAgICAgICAgVmM6OmZsb2F0X3YgZHN0X2MxOwotICAgICAgICBWYzo6ZmxvYXRf diBkc3RfYzI7Ci0gICAgICAgIFZjOjpmbG9hdF92IGRzdF9jMzsKLSAgICAgICAgVmM6OmZsb2F0 X3YgZHN0X2FscGhhOworICAgICAgICBmbG9hdF92IGRzdF9jMTsKKyAgICAgICAgZmxvYXRfdiBk c3RfYzI7CisgICAgICAgIGZsb2F0X3YgZHN0X2MzOworICAgICAgICBmbG9hdF92IGRzdF9hbHBo YTsKIAogICAgICAgICBkYXRhV3JhcHBlci5yZWFkKGRzdCwgZHN0X2MxLCBkc3RfYzIsIGRzdF9j MywgZHN0X2FscGhhKTsKIAotICAgICAgICBWYzo6ZmxvYXRfbSBlbXB0eV9kc3RfcGl4ZWxzX21h c2sgPSBkc3RfYWxwaGEgPT0gemVyb1ZhbHVlOworICAgICAgICBmbG9hdF9tIGVtcHR5X2RzdF9w aXhlbHNfbWFzayA9IGRzdF9hbHBoYSA9PSB6ZXJvVmFsdWU7CiAKLSAgICAgICAgaWYgKCFlbXB0 eV9kc3RfcGl4ZWxzX21hc2suaXNGdWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChlbXB0eV9kc3Rf cGl4ZWxzX21hc2suaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgheHNpbWQ6OmFsbChlbXB0eV9k c3RfcGl4ZWxzX21hc2spKSB7CisgICAgICAgICAgICBpZiAoeHNpbWQ6Om5vbmUoZW1wdHlfZHN0 X3BpeGVsc19tYXNrKSkgewogICAgICAgICAgICAgICAgIGRzdF9jMSA9IChzcmNfYzEgLSBkc3Rf YzEpICogc3JjX2FscGhhICsgZHN0X2MxOwogICAgICAgICAgICAgICAgIGRzdF9jMiA9IChzcmNf YzIgLSBkc3RfYzIpICogc3JjX2FscGhhICsgZHN0X2MyOwogICAgICAgICAgICAgICAgIGRzdF9j MyA9IChzcmNfYzMgLSBkc3RfYzMpICogc3JjX2FscGhhICsgZHN0X2MzOwogICAgICAgICAgICAg fQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZHN0X2MxKGVtcHR5X2RzdF9w aXhlbHNfbWFzaykgPSBzcmNfYzE7Ci0gICAgICAgICAgICAgICAgZHN0X2MyKGVtcHR5X2RzdF9w aXhlbHNfbWFzaykgPSBzcmNfYzI7Ci0gICAgICAgICAgICAgICAgZHN0X2MzKGVtcHR5X2RzdF9w aXhlbHNfbWFzaykgPSBzcmNfYzM7Ci0gICAgICAgICAgICAgICAgVmM6OmZsb2F0X20gbm90X2Vt cHR5X2RzdF9waXhlbHNfbWFzayA9ICFlbXB0eV9kc3RfcGl4ZWxzX21hc2s7Ci0gICAgICAgICAg ICAgICAgZHN0X2MxKG5vdF9lbXB0eV9kc3RfcGl4ZWxzX21hc2spID0gKHNyY19jMSAtIGRzdF9j MSkgKiBzcmNfYWxwaGEgKyBkc3RfYzE7Ci0gICAgICAgICAgICAgICAgZHN0X2MyKG5vdF9lbXB0 eV9kc3RfcGl4ZWxzX21hc2spID0gKHNyY19jMiAtIGRzdF9jMikgKiBzcmNfYWxwaGEgKyBkc3Rf YzI7Ci0gICAgICAgICAgICAgICAgZHN0X2MzKG5vdF9lbXB0eV9kc3RfcGl4ZWxzX21hc2spID0g KHNyY19jMyAtIGRzdF9jMykgKiBzcmNfYWxwaGEgKyBkc3RfYzM7CisgICAgICAgICAgICAgICAg ZHN0X2MxID0geHNpbWQ6OnNlbGVjdChlbXB0eV9kc3RfcGl4ZWxzX21hc2ssIHNyY19jMSwgKHNy Y19jMSAtIGRzdF9jMSkgKiBzcmNfYWxwaGEgKyBkc3RfYzEpOworICAgICAgICAgICAgICAgIGRz dF9jMiA9IHhzaW1kOjpzZWxlY3QoZW1wdHlfZHN0X3BpeGVsc19tYXNrLCBzcmNfYzIsIChzcmNf YzIgLSBkc3RfYzIpICogc3JjX2FscGhhICsgZHN0X2MyKTsKKyAgICAgICAgICAgICAgICBkc3Rf YzMgPSB4c2ltZDo6c2VsZWN0KGVtcHR5X2RzdF9waXhlbHNfbWFzaywgc3JjX2MzLCAoc3JjX2Mz IC0gZHN0X2MzKSAqIHNyY19hbHBoYSArIGRzdF9jMyk7CiAgICAgICAgICAgICB9CiAgICAgICAg IH0KICAgICAgICAgZWxzZSB7CkBAIC0xMDAsMjQgKzEwMCwyNCBAQCBzdHJ1Y3QgQWxwaGFEYXJr ZW5Db21wb3NpdG9yMTI4IHsKICAgICAgICAgICAgIGRzdF9jMyA9IHNyY19jMzsKICAgICAgICAg fQogCi0gICAgICAgIFZjOjpmbG9hdF92IGZ1bGxGbG93QWxwaGEoZHN0X2FscGhhKTsKKyAgICAg ICAgZmxvYXRfdiBmdWxsRmxvd0FscGhhKGRzdF9hbHBoYSk7CiAKICAgICAgICAgaWYgKG9wYXJh bXMuYXZlcmFnZU9wYWNpdHkgPiBvcGFjaXR5KSB7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBh dmVyYWdlX29wYWNpdHlfdmVjKG9wYXJhbXMuYXZlcmFnZU9wYWNpdHkpOwotICAgICAgICAgICAg VmM6OmZsb2F0X20gZnVsbEZsb3dBbHBoYV9tYXNrID0gYXZlcmFnZV9vcGFjaXR5X3ZlYyA+IGRz dF9hbHBoYTsKLSAgICAgICAgICAgIGZ1bGxGbG93QWxwaGEoZnVsbEZsb3dBbHBoYV9tYXNrKSA9 IChhdmVyYWdlX29wYWNpdHlfdmVjIC0gc3JjX2FscGhhKSAqIChkc3RfYWxwaGEgLyBhdmVyYWdl X29wYWNpdHlfdmVjKSArIHNyY19hbHBoYTsKKyAgICAgICAgICAgIGZsb2F0X3YgYXZlcmFnZV9v cGFjaXR5X3ZlYyhvcGFyYW1zLmF2ZXJhZ2VPcGFjaXR5KTsKKyAgICAgICAgICAgIGZsb2F0X20g ZnVsbEZsb3dBbHBoYV9tYXNrID0gYXZlcmFnZV9vcGFjaXR5X3ZlYyA+IGRzdF9hbHBoYTsKKyAg ICAgICAgICAgIGZ1bGxGbG93QWxwaGEgPSB4c2ltZDo6c2VsZWN0KGZ1bGxGbG93QWxwaGFfbWFz aywoYXZlcmFnZV9vcGFjaXR5X3ZlYyAtIHNyY19hbHBoYSkgKiAoZHN0X2FscGhhIC8gYXZlcmFn ZV9vcGFjaXR5X3ZlYykgKyBzcmNfYWxwaGEsIGZ1bGxGbG93QWxwaGEpOwogICAgICAgICB9CiAg ICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmM6OmZsb2F0X20gZnVsbEZsb3dBbHBoYV9tYXNr ID0gb3BhY2l0eV92ZWMgPiBkc3RfYWxwaGE7Ci0gICAgICAgICAgICBmdWxsRmxvd0FscGhhKGZ1 bGxGbG93QWxwaGFfbWFzaykgPSAob3BhY2l0eV92ZWMgLSBkc3RfYWxwaGEpICogbXNrX25vcm1f YWxwaGEgKyBkc3RfYWxwaGE7CisgICAgICAgICAgICBmbG9hdF9tIGZ1bGxGbG93QWxwaGFfbWFz ayA9IG9wYWNpdHlfdmVjID4gZHN0X2FscGhhOworICAgICAgICAgICAgZnVsbEZsb3dBbHBoYSA9 IHhzaW1kOjpzZWxlY3QoZnVsbEZsb3dBbHBoYV9tYXNrLCAob3BhY2l0eV92ZWMgLSBkc3RfYWxw aGEpICogbXNrX25vcm1fYWxwaGEgKyBkc3RfYWxwaGEsIGZ1bGxGbG93QWxwaGEpOwogICAgICAg ICB9CiAKICAgICAgICAgaWYgKG9wYXJhbXMuZmxvdyA9PSAxLjApIHsKICAgICAgICAgICAgIGRz dF9hbHBoYSA9IGZ1bGxGbG93QWxwaGE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAg ICAgICAgICBWYzo6ZmxvYXRfdiB6ZXJvRmxvd0FscGhhID0gUGFyYW1zV3JhcHBlcjo6Y2FsY3Vs YXRlWmVyb0Zsb3dBbHBoYShzcmNfYWxwaGEsIGRzdF9hbHBoYSk7Ci0gICAgICAgICAgICBWYzo6 ZmxvYXRfdiBmbG93X25vcm1fdmVjKG9wYXJhbXMuZmxvdyk7CisgICAgICAgICAgICBmbG9hdF92 IHplcm9GbG93QWxwaGEgPSBQYXJhbXNXcmFwcGVyOjpjYWxjdWxhdGVaZXJvRmxvd0FscGhhKHNy Y19hbHBoYSwgZHN0X2FscGhhKTsKKyAgICAgICAgICAgIGZsb2F0X3YgZmxvd19ub3JtX3ZlYyhv cGFyYW1zLmZsb3cpOwogICAgICAgICAgICAgZHN0X2FscGhhID0gKGZ1bGxGbG93QWxwaGEgLSB6 ZXJvRmxvd0FscGhhKSAqIGZsb3dfbm9ybV92ZWMgKyB6ZXJvRmxvd0FscGhhOwogICAgICAgICB9 CiAKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1Y3QgQWxwaGFEYXJrZW5Db21wb3NpdG9yMTI4IHsK ICAgICAvKioKICAgICAgKiBDb21wb3NlcyBvbmUgcGl4ZWwgb2YgdGhlIHNvdXJjZSBpbnRvIHRo ZSBkZXN0aW5hdGlvbgogICAgICAqLwotICAgIHRlbXBsYXRlIDxib29sIGhhdmVNYXNrLCBWYzo6 SW1wbGVtZW50YXRpb24gX2ltcGw+CisgICAgdGVtcGxhdGUgPGJvb2wgaGF2ZU1hc2ssIHR5cGVu YW1lIF9pbXBsPgogICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgY29tcG9zaXRlT25lUGl4 ZWxTY2FsYXIoY29uc3QgcXVpbnQ4ICpzLCBxdWludDggKmQsIGNvbnN0IHF1aW50OCAqbWFzaywg ZmxvYXQgb3BhY2l0eSwgY29uc3QgUGFyYW1zV3JhcHBlciAmb3BhcmFtcykKICAgICB7CiAgICAg ICAgIHVzaW5nIG5hbWVzcGFjZSBBcml0aG1ldGljOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHN0cnVj dCBBbHBoYURhcmtlbkNvbXBvc2l0b3IxMjggewogICogY29sb3JzcGFjZXMgd2l0aCBhbHBoYSBj aGFubmVsIHBsYWNlZCBhdCB0aGUgbGFzdCBieXRlIG9mCiAgKiB0aGUgcGl4ZWw6IEMxX0MyX0Mz X0EuCiAgKi8KLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbCwgdHlwZW5hbWUgUGFy YW1zV3JhcHBlcj4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsLCB0eXBlbmFtZSBQYXJhbXNXcmFw cGVyPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuMTI4SW1wbCA6IHB1 YmxpYyBLb0NvbXBvc2l0ZU9wCiB7CiBwdWJsaWM6CkBAIC0xOTUsNyArMTk1LDcgQEAgcHVibGlj OgogCiAgICAgdXNpbmcgS29Db21wb3NpdGVPcDo6Y29tcG9zaXRlOwogCi0gICAgdmlydHVhbCB2 b2lkIGNvbXBvc2l0ZShjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZvJiBwYXJhbXMp IGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBjb21wb3NpdGUoY29uc3QgS29Db21wb3NpdGVPcDo6 UGFyYW1ldGVySW5mbyYgcGFyYW1zKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYo cGFyYW1zLm1hc2tSb3dTdGFydCkgewogICAgICAgICAgICAgS29TdHJlYW1lZE1hdGg8X2ltcGw+ Ojp0ZW1wbGF0ZSBnZW5lcmljQ29tcG9zaXRlMTI4PHRydWUsIHRydWUsIEFscGhhRGFya2VuQ29t cG9zaXRvcjEyODxmbG9hdCwgUGFyYW1zV3JhcHBlcj4gPihwYXJhbXMpOwpAQCAtMjA1LDcgKzIw NSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50YXRpb24g X2ltcGw+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4KIGNsYXNzIEtvT3B0aW1pemVkQ29tcG9z aXRlT3BBbHBoYURhcmtlbkhhcmQxMjgKICAgICA6IHB1YmxpYyBLb09wdGltaXplZENvbXBvc2l0 ZU9wQWxwaGFEYXJrZW4xMjhJbXBsPF9pbXBsLCBLb0FscGhhRGFya2VuUGFyYW1zV3JhcHBlckhh cmQ+CiB7CkBAIC0yMTQsNyArMjE0LDcgQEAgcHVibGljOgogICAgICAgICA6IEtvT3B0aW1pemVk Q29tcG9zaXRlT3BBbHBoYURhcmtlbjEyOEltcGw8X2ltcGwsIEtvQWxwaGFEYXJrZW5QYXJhbXNX cmFwcGVySGFyZD4oY3MpIHt9CiB9OwogCi10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50YXRpb24gX2lt cGw+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4KIGNsYXNzIEtvT3B0aW1pemVkQ29tcG9zaXRl T3BBbHBoYURhcmtlbkNyZWFteTEyOAogICAgIDogcHVibGljIEtvT3B0aW1pemVkQ29tcG9zaXRl T3BBbHBoYURhcmtlbjEyOEltcGw8X2ltcGwsIEtvQWxwaGFEYXJrZW5QYXJhbXNXcmFwcGVyQ3Jl YW15PgogewpAQCAtMjIzLDcgKzIyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBLb09wdGltaXpl ZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW4xMjhJbXBsPF9pbXBsLCBLb0FscGhhRGFya2VuUGFyYW1z V3JhcHBlckNyZWFteT4oY3MpIHt9CiB9OwogCi10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50YXRpb24g X2ltcGwsIHR5cGVuYW1lIFBhcmFtc1dyYXBwZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbCwg dHlwZW5hbWUgUGFyYW1zV3JhcHBlcj4KIGNsYXNzIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBo YURhcmtlblU2NEltcGwgOiBwdWJsaWMgS29Db21wb3NpdGVPcAogewogcHVibGljOgpAQCAtMjMy LDcgKzIzMiw3IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIEtvQ29tcG9zaXRlT3A6OmNvbXBvc2l0 ZTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoY29uc3QgS29Db21wb3NpdGVPcDo6UGFy YW1ldGVySW5mbyYgcGFyYW1zKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgY29tcG9zaXRlKGNv bnN0IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8mIHBhcmFtcykgY29uc3Qgb3ZlcnJpZGUK ICAgICB7CiAgICAgICAgIGlmKHBhcmFtcy5tYXNrUm93U3RhcnQpIHsKICAgICAgICAgICAgIEtv U3RyZWFtZWRNYXRoPF9pbXBsPjo6dGVtcGxhdGUgZ2VuZXJpY0NvbXBvc2l0ZTY0PHRydWUsIHRy dWUsIEFscGhhRGFya2VuQ29tcG9zaXRvcjEyODxxdWludDE2LCBQYXJhbXNXcmFwcGVyPiA+KHBh cmFtcyk7CkBAIC0yNDIsNyArMjQyLDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXRlbXBsYXRl PFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xh c3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZFU2NAogICAgIDogcHVibGlj IEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlblU2NEltcGw8X2ltcGwsIEtvQWxwaGFE YXJrZW5QYXJhbXNXcmFwcGVySGFyZD4KIHsKQEAgLTI1MSw3ICsyNTEsNyBAQCBwdWJsaWM6CiAg ICAgICAgIDogS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuVTY0SW1wbDxfaW1wbCwg S29BbHBoYURhcmtlblBhcmFtc1dyYXBwZXJIYXJkPihjcykge30KIH07CiAKLXRlbXBsYXRlPFZj OjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3Mg S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15VTY0CiAgICAgOiBwdWJsaWMg S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuVTY0SW1wbDxfaW1wbCwgS29BbHBoYURh cmtlblBhcmFtc1dyYXBwZXJDcmVhbXk+CiB7CmRpZmYgLS1naXQgYS9saWJzL3BpZ21lbnQvY29t cG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbjMyLmggYi9saWJzL3Bp Z21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbjMyLmgK aW5kZXggYTQ1YWMzMDgwNS4uNWQ1N2YwMjQwOSAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50L2Nv bXBvc2l0ZW9wcy9Lb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW4zMi5oCisrKyBiL2xp YnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2Vu MzIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA2 IEN5cmlsbGUgQmVyZ2VyIDxjYmVyZ2VyQGNiZXJnZXIubmV0PgogICogU1BEWC1GaWxlQ29weXJp Z2h0VGV4dDogMjAxMSBTaWx2aW8gSGVpbnJpY2ggPHBsYXNzeUB3ZWIuZGU+CisgKiAgU1BEWC1G aWxlQ29weXJpZ2h0VGV4dDogMjAyMiBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAg KgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4wLW9yLWxhdGVyCiAgKi8KQEAg LTIwLDcgKzIxLDcgQEAgc3RydWN0IEFscGhhRGFya2VuQ29tcG9zaXRvcjMyIHsKIAogICAgIC8q KgogICAgICAqIFRoaXMgaXMgYSB2ZWN0b3IgZXF1aXZhbGVudCBvZiBjb21wb3NpdGVPbmVQaXhl bFNjYWxhcigpLiBJdCBpcyBjb25zaWRlcmVkCi0gICAgICogdG8gcHJvY2VzcyBWYzo6ZmxvYXRf djo6c2l6ZSgpIHBpeGVscyBpbiBhIHNpbmdsZSBwYXNzLgorICAgICAqIHRvIHByb2Nlc3MgZmxv YXRfdjo6c2l6ZSBwaXhlbHMgaW4gYSBzaW5nbGUgcGFzcy4KICAgICAgKgogICAgICAqIG8gdGhl IFxwIGhhdmVNYXNrIHBhcmFtZXRlciBwb2ludHMgd2hldGhlciB0aGUgcmVhbCAobm9uLW51bGwp IG1hc2sKICAgICAgKiAgIHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KQEAgLTI5 LDM2ICszMCwzOSBAQCBzdHJ1Y3QgQWxwaGFEYXJrZW5Db21wb3NpdG9yMzIgewogICAgICAqICAg XHAgc3JjX2FsaWduZWQuCiAgICAgICogbyB0aGUgXHAgZHN0IHBvaW50ZXIgbXVzdCBhbHdheXMo ISkgYmUgYWxpZ25lZCB0byB0aGUgYm91bmRhcnkKICAgICAgKiAgIG9mIGEgc3RyZWFtaW5nIHZl Y3Rvci4gVW5hbGlnbmVkIHdyaXRlcyBhcmUgcmVhbGx5IGV4cGVuc2l2ZS4KLSAgICAgKiBvIFRo aXMgZnVuY3Rpb24gaXMgKm5ldmVyKiB1c2VkIGlmIEhBVkVfVkMgaXMgbm90IHByZXNlbnQKKyAg ICAgKiBvIFRoaXMgZnVuY3Rpb24gaXMgKm5ldmVyKiB1c2VkIGlmIEhBVkVfWFNJTUQgaXMgbm90 IHByZXNlbnQKICAgICAgKi8KLSAgICB0ZW1wbGF0ZTxib29sIGhhdmVNYXNrLCBib29sIHNyY19h bGlnbmVkLCBWYzo6SW1wbGVtZW50YXRpb24gX2ltcGw+CisgICAgdGVtcGxhdGU8Ym9vbCBoYXZl TWFzaywgYm9vbCBzcmNfYWxpZ25lZCwgdHlwZW5hbWUgX2ltcGw+CiAgICAgc3RhdGljIEFMV0FZ U19JTkxJTkUgdm9pZCBjb21wb3NpdGVWZWN0b3IoY29uc3QgcXVpbnQ4ICpzcmMsIHF1aW50OCAq ZHN0LCBjb25zdCBxdWludDggKm1hc2ssIGZsb2F0IG9wYWNpdHksIGNvbnN0IFBhcmFtc1dyYXBw ZXIgJm9wYXJhbXMpCiAgICAgewotICAgICAgICBWYzo6ZmxvYXRfdiBzcmNfYWxwaGE7Ci0gICAg ICAgIFZjOjpmbG9hdF92IGRzdF9hbHBoYTsKKyAgICAgICAgdXNpbmcgZmxvYXRfdiA9IHR5cGVu YW1lIEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6ZmxvYXRfdjsKKyAgICAgICAgdXNpbmcgZmxvYXRf bSA9IHR5cGVuYW1lIGZsb2F0X3Y6OmJhdGNoX2Jvb2xfdHlwZTsKKworICAgICAgICBmbG9hdF92 IHNyY19hbHBoYTsKKyAgICAgICAgZmxvYXRfdiBkc3RfYWxwaGE7CiAKICAgICAgICAgLy8gd2Ug ZG9uJ3QgdXNlIGRpcmVjdGx5IHBhc3NlZCB2YWx1ZQogICAgICAgICBRX1VOVVNFRChvcGFjaXR5 KTsKIAogICAgICAgICAvLyBpbnN0ZWFkIHdlIHVzZSB2YWx1ZSBjYWxjdWxhdGVkIGJ5IFBhcmFt c1dyYXBwZXIKICAgICAgICAgb3BhY2l0eSA9IG9wYXJhbXMub3BhY2l0eTsKLSAgICAgICAgVmM6 OmZsb2F0X3Ygb3BhY2l0eV92ZWMoMjU1LjBmICogb3BhY2l0eSk7CisgICAgICAgIGZsb2F0X3Yg b3BhY2l0eV92ZWMoMjU1LjBmICogb3BhY2l0eSk7CiAKLSAgICAgICAgVmM6OmZsb2F0X3YgYXZl cmFnZV9vcGFjaXR5X3ZlYygyNTUuMCAqIG9wYXJhbXMuYXZlcmFnZU9wYWNpdHkpOwotICAgICAg ICBWYzo6ZmxvYXRfdiBmbG93X25vcm1fdmVjKG9wYXJhbXMuZmxvdyk7CisgICAgICAgIGZsb2F0 X3YgYXZlcmFnZV9vcGFjaXR5X3ZlYygyNTUuMCAqIG9wYXJhbXMuYXZlcmFnZU9wYWNpdHkpOwor ICAgICAgICBmbG9hdF92IGZsb3dfbm9ybV92ZWMob3BhcmFtcy5mbG93KTsKIAogCi0gICAgICAg IFZjOjpmbG9hdF92IHVpbnQ4TWF4UmVjMigxLjBmIC8gKDI1NS4wZiAqIDI1NS4wZikpOwotICAg ICAgICBWYzo6ZmxvYXRfdiB1aW50OE1heFJlYzEoMS4wZiAvIDI1NS4wZik7Ci0gICAgICAgIFZj OjpmbG9hdF92IHVpbnQ4TWF4KDI1NS4wZik7Ci0gICAgICAgIFZjOjpmbG9hdF92IHplcm9WYWx1 ZShWYzo6WmVybyk7CisgICAgICAgIGZsb2F0X3YgdWludDhNYXhSZWMyKDEuMGYgLyAoMjU1LjBm ICogMjU1LjBmKSk7CisgICAgICAgIGZsb2F0X3YgdWludDhNYXhSZWMxKDEuMGYgLyAyNTUuMGYp OworICAgICAgICBmbG9hdF92IHVpbnQ4TWF4KDI1NS4wZik7CisgICAgICAgIGZsb2F0X3YgemVy b1ZhbHVlKDApOwogCiAKLSAgICAgICAgVmM6OmZsb2F0X3YgbXNrX25vcm1fYWxwaGE7CisgICAg ICAgIGZsb2F0X3YgbXNrX25vcm1fYWxwaGE7CiAgICAgICAgIHNyY19hbHBoYSA9IEtvU3RyZWFt ZWRNYXRoPF9pbXBsPjo6dGVtcGxhdGUgZmV0Y2hfYWxwaGFfMzI8c3JjX2FsaWduZWQ+KHNyYyk7 CiAKICAgICAgICAgaWYgKGhhdmVNYXNrKSB7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfdiBtYXNr X3ZlYyA9IEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6ZmV0Y2hfbWFza184KG1hc2spOworICAgICAg ICAgICAgZmxvYXRfdiBtYXNrX3ZlYyA9IEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6ZmV0Y2hfbWFz a184KG1hc2spOwogICAgICAgICAgICAgbXNrX25vcm1fYWxwaGEgPSBzcmNfYWxwaGEgKiBtYXNr X3ZlYyAqIHVpbnQ4TWF4UmVjMjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1za19u b3JtX2FscGhhID0gc3JjX2FscGhhICogdWludDhNYXhSZWMxOwpAQCAtNjcsODggKzcxLDgwIEBA IHN0cnVjdCBBbHBoYURhcmtlbkNvbXBvc2l0b3IzMiB7CiAgICAgICAgIGRzdF9hbHBoYSA9IEtv U3RyZWFtZWRNYXRoPF9pbXBsPjo6dGVtcGxhdGUgZmV0Y2hfYWxwaGFfMzI8dHJ1ZT4oZHN0KTsK ICAgICAgICAgc3JjX2FscGhhID0gbXNrX25vcm1fYWxwaGEgKiBvcGFjaXR5X3ZlYzsKIAotICAg ICAgICBWYzo6ZmxvYXRfbSBlbXB0eV9kc3RfcGl4ZWxzX21hc2sgPSBkc3RfYWxwaGEgPT0gemVy b1ZhbHVlOworICAgICAgICBmbG9hdF9tIGVtcHR5X2RzdF9waXhlbHNfbWFzayA9IGRzdF9hbHBo YSA9PSB6ZXJvVmFsdWU7CiAKLSAgICAgICAgVmM6OmZsb2F0X3Ygc3JjX2MxOwotICAgICAgICBW Yzo6ZmxvYXRfdiBzcmNfYzI7Ci0gICAgICAgIFZjOjpmbG9hdF92IHNyY19jMzsKKyAgICAgICAg ZmxvYXRfdiBzcmNfYzE7CisgICAgICAgIGZsb2F0X3Ygc3JjX2MyOworICAgICAgICBmbG9hdF92 IHNyY19jMzsKIAotICAgICAgICBWYzo6ZmxvYXRfdiBkc3RfYzE7Ci0gICAgICAgIFZjOjpmbG9h dF92IGRzdF9jMjsKLSAgICAgICAgVmM6OmZsb2F0X3YgZHN0X2MzOworICAgICAgICBmbG9hdF92 IGRzdF9jMTsKKyAgICAgICAgZmxvYXRfdiBkc3RfYzI7CisgICAgICAgIGZsb2F0X3YgZHN0X2Mz OwogCiAgICAgICAgIEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6dGVtcGxhdGUgZmV0Y2hfY29sb3Jz XzMyPHNyY19hbGlnbmVkPihzcmMsIHNyY19jMSwgc3JjX2MyLCBzcmNfYzMpOwogCi0gICAgICAg IGJvb2wgc3JjQWxwaGFJc1plcm8gPSAoc3JjX2FscGhhID09IHplcm9WYWx1ZSkuaXNGdWxsKCk7 CisgICAgICAgIGJvb2wgc3JjQWxwaGFJc1plcm8gPSB4c2ltZDo6YWxsKHNyY19hbHBoYSA9PSB6 ZXJvVmFsdWUpOwogICAgICAgICBpZiAoc3JjQWxwaGFJc1plcm8pIHJldHVybjsKIAotICAgICAg ICBib29sIGRzdEFscGhhSXNaZXJvID0gZW1wdHlfZHN0X3BpeGVsc19tYXNrLmlzRnVsbCgpOwor ICAgICAgICBib29sIGRzdEFscGhhSXNaZXJvID0geHNpbWQ6OmFsbChlbXB0eV9kc3RfcGl4ZWxz X21hc2spOwogCi0gICAgICAgIFZjOjpmbG9hdF92IGRzdF9ibGVuZCA9IHNyY19hbHBoYSAqIHVp bnQ4TWF4UmVjMTsKKyAgICAgICAgZmxvYXRfdiBkc3RfYmxlbmQgPSBzcmNfYWxwaGEgKiB1aW50 OE1heFJlYzE7CiAKLSAgICAgICAgYm9vbCBzcmNBbHBoYUlzVW5pdCA9IChzcmNfYWxwaGEgPT0g dWludDhNYXgpLmlzRnVsbCgpOworICAgICAgICBib29sIHNyY0FscGhhSXNVbml0ID0geHNpbWQ6 OmFsbChzcmNfYWxwaGEgPT0gdWludDhNYXgpOwogCiAgICAgICAgIGlmIChkc3RBbHBoYUlzWmVy bykgewogICAgICAgICAgICAgZHN0X2MxID0gc3JjX2MxOwogICAgICAgICAgICAgZHN0X2MyID0g c3JjX2MyOwogICAgICAgICAgICAgZHN0X2MzID0gc3JjX2MzOwogICAgICAgICB9IGVsc2UgaWYg KHNyY0FscGhhSXNVbml0KSB7Ci0gICAgICAgICAgICBib29sIGRzdEFscGhhSXNVbml0ID0gKGRz dF9hbHBoYSA9PSB1aW50OE1heCkuaXNGdWxsKCk7CisgICAgICAgICAgICBib29sIGRzdEFscGhh SXNVbml0ID0geHNpbWQ6OmFsbChkc3RfYWxwaGEgPT0gdWludDhNYXgpOwogICAgICAgICAgICAg aWYgKGRzdEFscGhhSXNVbml0KSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCA0 ICogVmM6OmZsb2F0X3Y6OnNpemUoKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGRzdCwgc3Jj LCA0ICogZmxvYXRfdjo6c2l6ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkc3RfYzEgPSBzcmNfYzE7CiAgICAgICAgICAg ICAgICAgZHN0X2MyID0gc3JjX2MyOwogICAgICAgICAgICAgICAgIGRzdF9jMyA9IHNyY19jMzsK ICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChlbXB0eV9kc3RfcGl4ZWxzX21hc2su aXNFbXB0eSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoeHNpbWQ6Om5vbmUoZW1wdHlfZHN0X3Bp eGVsc19tYXNrKSkgewogICAgICAgICAgICAgS29TdHJlYW1lZE1hdGg8X2ltcGw+Ojp0ZW1wbGF0 ZSBmZXRjaF9jb2xvcnNfMzI8dHJ1ZT4oZHN0LCBkc3RfYzEsIGRzdF9jMiwgZHN0X2MzKTsKICAg ICAgICAgICAgIGRzdF9jMSA9IGRzdF9ibGVuZCAqIChzcmNfYzEgLSBkc3RfYzEpICsgZHN0X2Mx OwogICAgICAgICAgICAgZHN0X2MyID0gZHN0X2JsZW5kICogKHNyY19jMiAtIGRzdF9jMikgKyBk c3RfYzI7CiAgICAgICAgICAgICBkc3RfYzMgPSBkc3RfYmxlbmQgKiAoc3JjX2MzIC0gZHN0X2Mz KSArIGRzdF9jMzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEtvU3RyZWFtZWRNYXRo PF9pbXBsPjo6dGVtcGxhdGUgZmV0Y2hfY29sb3JzXzMyPHRydWU+KGRzdCwgZHN0X2MxLCBkc3Rf YzIsIGRzdF9jMyk7Ci0gICAgICAgICAgICBkc3RfYzEoZW1wdHlfZHN0X3BpeGVsc19tYXNrKSA9 IHNyY19jMTsKLSAgICAgICAgICAgIGRzdF9jMihlbXB0eV9kc3RfcGl4ZWxzX21hc2spID0gc3Jj X2MyOwotICAgICAgICAgICAgZHN0X2MzKGVtcHR5X2RzdF9waXhlbHNfbWFzaykgPSBzcmNfYzM7 Ci0KLSAgICAgICAgICAgIFZjOjpmbG9hdF9tIG5vdF9lbXB0eV9kc3RfcGl4ZWxzX21hc2sgPSAh ZW1wdHlfZHN0X3BpeGVsc19tYXNrOwotCi0gICAgICAgICAgICBkc3RfYzEobm90X2VtcHR5X2Rz dF9waXhlbHNfbWFzaykgPSBkc3RfYmxlbmQgKiAoc3JjX2MxIC0gZHN0X2MxKSArIGRzdF9jMTsK LSAgICAgICAgICAgIGRzdF9jMihub3RfZW1wdHlfZHN0X3BpeGVsc19tYXNrKSA9IGRzdF9ibGVu ZCAqIChzcmNfYzIgLSBkc3RfYzIpICsgZHN0X2MyOwotICAgICAgICAgICAgZHN0X2MzKG5vdF9l bXB0eV9kc3RfcGl4ZWxzX21hc2spID0gZHN0X2JsZW5kICogKHNyY19jMyAtIGRzdF9jMykgKyBk c3RfYzM7CisgICAgICAgICAgICBkc3RfYzEgPSB4c2ltZDo6c2VsZWN0KGVtcHR5X2RzdF9waXhl bHNfbWFzaywgc3JjX2MxLCBkc3RfYmxlbmQgKiAoc3JjX2MxIC0gZHN0X2MxKSArIGRzdF9jMSk7 CisgICAgICAgICAgICBkc3RfYzIgPSB4c2ltZDo6c2VsZWN0KGVtcHR5X2RzdF9waXhlbHNfbWFz aywgc3JjX2MyLCBkc3RfYmxlbmQgKiAoc3JjX2MyIC0gZHN0X2MyKSArIGRzdF9jMik7CisgICAg ICAgICAgICBkc3RfYzMgPSB4c2ltZDo6c2VsZWN0KGVtcHR5X2RzdF9waXhlbHNfbWFzaywgc3Jj X2MzLCBkc3RfYmxlbmQgKiAoc3JjX2MzIC0gZHN0X2MzKSArIGRzdF9jMyk7CiAgICAgICAgIH0K IAotICAgICAgICBWYzo6ZmxvYXRfdiBmdWxsRmxvd0FscGhhOworICAgICAgICBmbG9hdF92IGZ1 bGxGbG93QWxwaGE7CiAKICAgICAgICAgaWYgKG9wYXJhbXMuYXZlcmFnZU9wYWNpdHkgPiBvcGFj aXR5KSB7Ci0gICAgICAgICAgICBWYzo6ZmxvYXRfbSBmdWxsRmxvd0FscGhhX21hc2sgPSBhdmVy YWdlX29wYWNpdHlfdmVjID4gZHN0X2FscGhhOworICAgICAgICAgICAgZmxvYXRfbSBmdWxsRmxv d0FscGhhX21hc2sgPSBhdmVyYWdlX29wYWNpdHlfdmVjID4gZHN0X2FscGhhOwogCi0gICAgICAg ICAgICBpZiAoZnVsbEZsb3dBbHBoYV9tYXNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYg KHhzaW1kOjpub25lKGZ1bGxGbG93QWxwaGFfbWFzaykpIHsKICAgICAgICAgICAgICAgICBmdWxs Rmxvd0FscGhhID0gZHN0X2FscGhhOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICBWYzo6ZmxvYXRfdiByZXZlcnNlX2JsZW5kID0gZHN0X2FscGhhIC8gYXZlcmFnZV9vcGFj aXR5X3ZlYzsKLSAgICAgICAgICAgICAgICBWYzo6ZmxvYXRfdiBvcHQxID0gKGF2ZXJhZ2Vfb3Bh Y2l0eV92ZWMgLSBzcmNfYWxwaGEpICogcmV2ZXJzZV9ibGVuZCArIHNyY19hbHBoYTsKLSAgICAg ICAgICAgICAgICBmdWxsRmxvd0FscGhhKCFmdWxsRmxvd0FscGhhX21hc2spID0gZHN0X2FscGhh OwotICAgICAgICAgICAgICAgIGZ1bGxGbG93QWxwaGEoZnVsbEZsb3dBbHBoYV9tYXNrKSA9IG9w dDE7CisgICAgICAgICAgICAgICAgZmxvYXRfdiByZXZlcnNlX2JsZW5kID0gZHN0X2FscGhhIC8g YXZlcmFnZV9vcGFjaXR5X3ZlYzsKKyAgICAgICAgICAgICAgICBmbG9hdF92IG9wdDEgPSAoYXZl cmFnZV9vcGFjaXR5X3ZlYyAtIHNyY19hbHBoYSkgKiByZXZlcnNlX2JsZW5kICsgc3JjX2FscGhh OworICAgICAgICAgICAgICAgIGZ1bGxGbG93QWxwaGEgPSB4c2ltZDo6c2VsZWN0KGZ1bGxGbG93 QWxwaGFfbWFzaywgb3B0MSwgZHN0X2FscGhhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIFZjOjpmbG9hdF9tIGZ1bGxGbG93QWxwaGFfbWFzayA9IG9wYWNp dHlfdmVjID4gZHN0X2FscGhhOworICAgICAgICAgICAgZmxvYXRfbSBmdWxsRmxvd0FscGhhX21h c2sgPSBvcGFjaXR5X3ZlYyA+IGRzdF9hbHBoYTsKIAotICAgICAgICAgICAgaWYgKGZ1bGxGbG93 QWxwaGFfbWFzay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICh4c2ltZDo6bm9uZShmdWxs Rmxvd0FscGhhX21hc2spKSB7CiAgICAgICAgICAgICAgICAgZnVsbEZsb3dBbHBoYSA9IGRzdF9h bHBoYTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVmM6OmZsb2F0X3Yg b3B0MSA9IChvcGFjaXR5X3ZlYyAtIGRzdF9hbHBoYSkgKiBtc2tfbm9ybV9hbHBoYSArIGRzdF9h bHBoYTsKLSAgICAgICAgICAgICAgICBmdWxsRmxvd0FscGhhKCFmdWxsRmxvd0FscGhhX21hc2sp ID0gZHN0X2FscGhhOwotICAgICAgICAgICAgICAgIGZ1bGxGbG93QWxwaGEoZnVsbEZsb3dBbHBo YV9tYXNrKSA9IG9wdDE7CisgICAgICAgICAgICAgICAgZmxvYXRfdiBvcHQxID0gKG9wYWNpdHlf dmVjIC0gZHN0X2FscGhhKSAqIG1za19ub3JtX2FscGhhICsgZHN0X2FscGhhOworICAgICAgICAg ICAgICAgIGZ1bGxGbG93QWxwaGEgPSB4c2ltZDo6c2VsZWN0KGZ1bGxGbG93QWxwaGFfbWFzaywg b3B0MSwgZHN0X2FscGhhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlm IChvcGFyYW1zLmZsb3cgPT0gMS4wKSB7CiAgICAgICAgICAgICBkc3RfYWxwaGEgPSBmdWxsRmxv d0FscGhhOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmM6OmZsb2F0X3YgemVyb0Zs b3dBbHBoYSA9IFBhcmFtc1dyYXBwZXI6OmNhbGN1bGF0ZVplcm9GbG93QWxwaGEoc3JjX2FscGhh LCBkc3RfYWxwaGEsIHVpbnQ4TWF4UmVjMSk7CisgICAgICAgICAgICBmbG9hdF92IHplcm9GbG93 QWxwaGEgPSBQYXJhbXNXcmFwcGVyOjpjYWxjdWxhdGVaZXJvRmxvd0FscGhhKHNyY19hbHBoYSwg ZHN0X2FscGhhLCB1aW50OE1heFJlYzEpOwogICAgICAgICAgICAgZHN0X2FscGhhID0gKGZ1bGxG bG93QWxwaGEgLSB6ZXJvRmxvd0FscGhhKSAqIGZsb3dfbm9ybV92ZWMgKyB6ZXJvRmxvd0FscGhh OwogICAgICAgICB9CiAKQEAgLTE1OCw3ICsxNTQsNyBAQCBzdHJ1Y3QgQWxwaGFEYXJrZW5Db21w b3NpdG9yMzIgewogICAgIC8qKgogICAgICAqIENvbXBvc2VzIG9uZSBwaXhlbCBvZiB0aGUgc291 cmNlIGludG8gdGhlIGRlc3RpbmF0aW9uCiAgICAgICovCi0gICAgdGVtcGxhdGUgPGJvb2wgaGF2 ZU1hc2ssIFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBoYXZl TWFzaywgdHlwZW5hbWUgX2ltcGw+CiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBjb21w b3NpdGVPbmVQaXhlbFNjYWxhcihjb25zdCBjaGFubmVsc190eXBlICpzcmMsIGNoYW5uZWxzX3R5 cGUgKmRzdCwgY29uc3QgcXVpbnQ4ICptYXNrLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBQYXJhbXNX cmFwcGVyICZvcGFyYW1zKQogICAgIHsKICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEFyaXRobWV0 aWM7CkBAIC0yMjQsNyArMjIwLDcgQEAgc3RydWN0IEFscGhhRGFya2VuQ29tcG9zaXRvcjMyIHsK ICAqIGNvbG9yc3BhY2VzIHdpdGggYWxwaGEgY2hhbm5lbCBwbGFjZWQgYXQgdGhlIGxhc3QgYnl0 ZSBvZgogICogdGhlIHBpeGVsOiBDMV9DMl9DM19BLgogICovCi10ZW1wbGF0ZTxWYzo6SW1wbGVt ZW50YXRpb24gX2ltcGwsIGNsYXNzIFBhcmFtc1dyYXBwZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBf aW1wbCwgY2xhc3MgUGFyYW1zV3JhcHBlcj4KIGNsYXNzIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BB bHBoYURhcmtlbjMySW1wbCA6IHB1YmxpYyBLb0NvbXBvc2l0ZU9wCiB7CiBwdWJsaWM6CkBAIC0y NDMsNyArMjM5LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1l bnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsID0geHNpbWQ6OmN1cnJlbnRf YXJjaD4KIGNsYXNzIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkhhcmQzMiA6CiAg ICAgICAgIHB1YmxpYyBLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW4zMkltcGw8X2lt cGwsIEtvQWxwaGFEYXJrZW5QYXJhbXNXcmFwcGVySGFyZD4KIHsKQEAgLTI1Myw3ICsyNDksNyBA QCBwdWJsaWM6CiAgICAgfQogfTsKIAotdGVtcGxhdGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBs PgordGVtcGxhdGU8dHlwZW5hbWUgX2ltcGwgPSB4c2ltZDo6Y3VycmVudF9hcmNoPgogY2xhc3Mg S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15MzIgOgogICAgICAgICBwdWJs aWMgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuMzJJbXBsPF9pbXBsLCBLb0FscGhh RGFya2VuUGFyYW1zV3JhcHBlckNyZWFteT4KIHsKZGlmZiAtLWdpdCBhL2xpYnMvcGlnbWVudC9j b21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkxMjguaCBiL2xpYnMvcGlnbWVu dC9jb21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkxMjguaAppbmRleCBlODlm NDNmZTgxLi43ZDM3NTkxMzEzIDEwMDY0NAotLS0gYS9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3Bz L0tvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5MTI4LmgKKysrIGIvbGlicy9waWdtZW50L2NvbXBv c2l0ZW9wcy9Lb09wdGltaXplZENvbXBvc2l0ZU9wQ29weTEyOC5oCkBAIC0xLDUgKzEsNiBAQAog LyoKICAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIERtaXRyeSBLYXpha292IDxkaW11 bGE3M0BnbWFpbC5jb20+CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMiBMLiBFLiBT ZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IExHUEwtMi4wLW9yLWxhdGVyCiAgKi8KQEAgLTMxLDU0ICszMiw1NyBAQCBzdHJ1Y3QgQ29weUNv bXBvc2l0b3IxMjggewogICAgICAgICBjaGFubmVsc190eXBlIGFscGhhOwogICAgIH07CiAKLSAg ICB0ZW1wbGF0ZTxib29sIGhhdmVNYXNrLCBib29sIHNyY19hbGlnbmVkLCBWYzo6SW1wbGVtZW50 YXRpb24gX2ltcGw+CisgICAgdGVtcGxhdGU8Ym9vbCBoYXZlTWFzaywgYm9vbCBzcmNfYWxpZ25l ZCwgdHlwZW5hbWUgX2ltcGw+CiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBjb21wb3Np dGVWZWN0b3IoY29uc3QgcXVpbnQ4ICpzcmMsIHF1aW50OCAqZHN0LCBjb25zdCBxdWludDggKm1h c2ssIGZsb2F0IG9wYWNpdHksIGNvbnN0IFBhcmFtc1dyYXBwZXIgJm9wYXJhbXMpCiAgICAgewog ICAgICAgICBRX1VOVVNFRChvcGFyYW1zKTsKIAotICAgICAgICBWYzo6ZmxvYXRfdiBzcmNfYWxw aGE7Ci0gICAgICAgIFZjOjpmbG9hdF92IHNyY19jMTsKLSAgICAgICAgVmM6OmZsb2F0X3Ygc3Jj X2MyOwotICAgICAgICBWYzo6ZmxvYXRfdiBzcmNfYzM7CisgICAgICAgIHVzaW5nIGZsb2F0X3Yg PSB0eXBlbmFtZSBLb1N0cmVhbWVkTWF0aDxfaW1wbD46OmZsb2F0X3Y7CisgICAgICAgIHVzaW5n IGZsb2F0X20gPSB0eXBlbmFtZSBmbG9hdF92OjpiYXRjaF9ib29sX3R5cGU7CisKKyAgICAgICAg ZmxvYXRfdiBzcmNfYWxwaGE7CisgICAgICAgIGZsb2F0X3Ygc3JjX2MxOworICAgICAgICBmbG9h dF92IHNyY19jMjsKKyAgICAgICAgZmxvYXRfdiBzcmNfYzM7CiAKICAgICAgICAgUGl4ZWxXcmFw cGVyPGNoYW5uZWxzX3R5cGUsIF9pbXBsPiBkYXRhV3JhcHBlcjsKICAgICAgICAgZGF0YVdyYXBw ZXIucmVhZChjb25zdF9jYXN0PHF1aW50OCo+KHNyYyksIHNyY19jMSwgc3JjX2MyLCBzcmNfYzMs IHNyY19hbHBoYSk7CiAKLSAgICAgICAgVmM6OmZsb2F0X3Ygb3BhY2l0eV9ub3JtX3ZlYyhvcGFj aXR5KTsKKyAgICAgICAgZmxvYXRfdiBvcGFjaXR5X25vcm1fdmVjKG9wYWNpdHkpOwogCiAgICAg ICAgIGlmIChoYXZlTWFzaykgewotICAgICAgICAgICAgY29uc3QgVmM6OmZsb2F0X3YgdWludDhN YXhSZWMxKDEuMGYgLyAyNTUuMGYpOwotICAgICAgICAgICAgVmM6OmZsb2F0X3YgbWFza192ZWMg PSBLb1N0cmVhbWVkTWF0aDxfaW1wbD46OmZldGNoX21hc2tfOChtYXNrKTsKKyAgICAgICAgICAg IGNvbnN0IGZsb2F0X3YgdWludDhNYXhSZWMxKDEuMGYgLyAyNTUuMGYpOworICAgICAgICAgICAg ZmxvYXRfdiBtYXNrX3ZlYyA9IEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6ZmV0Y2hfbWFza184KG1h c2spOwogICAgICAgICAgICAgb3BhY2l0eV9ub3JtX3ZlYyAqPSBtYXNrX3ZlYyAqIHVpbnQ4TWF4 UmVjMTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IFZjOjpmbG9hdF92IHplcm9WYWx1ZSgw LjBmKTsKLSAgICAgICAgY29uc3QgVmM6OmZsb2F0X3Ygb25lVmFsdWUoMS4wZik7CisgICAgICAg IGNvbnN0IGZsb2F0X3YgemVyb1ZhbHVlKDAuMGYpOworICAgICAgICBjb25zdCBmbG9hdF92IG9u ZVZhbHVlKDEuMGYpOwogCi0gICAgICAgIGNvbnN0IFZjOjpmbG9hdF9tIG9wYWNpdHlfaXNfbnVs bF9tYXNrID0gb3BhY2l0eV9ub3JtX3ZlYyA9PSB6ZXJvVmFsdWU7CisgICAgICAgIGNvbnN0IGZs b2F0X20gb3BhY2l0eV9pc19udWxsX21hc2sgPSBvcGFjaXR5X25vcm1fdmVjID09IHplcm9WYWx1 ZTsKIAogICAgICAgICAvLyBUaGUgc291cmNlIGNhbm5vdCBjaGFuZ2UgdGhlIGNvbG9ycyBpbiB0 aGUgZGVzdGluYXRpb24sCiAgICAgICAgIC8vIHNpbmNlIGl0cyBmdWxseSB0cmFuc3BhcmVudAot ICAgICAgICBpZiAob3BhY2l0eV9pc19udWxsX21hc2suaXNGdWxsKCkpIHsKKyAgICAgICAgaWYg KHhzaW1kOjphbGwob3BhY2l0eV9pc19udWxsX21hc2spKSB7CiAgICAgICAgICAgICAvLyBub29w Ci0gICAgICAgIH0gZWxzZSBpZiAoKG9wYWNpdHlfbm9ybV92ZWMgPT0gb25lVmFsdWUpLmlzRnVs bCgpKSB7Ci0gICAgICAgICAgICBpZiAoKHNyY19hbHBoYSA9PSB6ZXJvVmFsdWUpLmlzRnVsbCgp KSB7CisgICAgICAgIH0gZWxzZSBpZiAoeHNpbWQ6OmFsbChvcGFjaXR5X25vcm1fdmVjID09IG9u ZVZhbHVlKSkgeworICAgICAgICAgICAgaWYgKHhzaW1kOjphbGwoc3JjX2FscGhhID09IHplcm9W YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBkYXRhV3JhcHBlci5jbGVhclBpeGVscyhkc3QpOwog ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkYXRhV3JhcHBlci5jb3B5UGl4 ZWxzKHNyYywgZHN0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgVmM6OmZsb2F0X3YgZHN0X2FscGhhOwotICAgICAgICAgICAgVmM6OmZsb2F0X3YgZHN0 X2MxOwotICAgICAgICAgICAgVmM6OmZsb2F0X3YgZHN0X2MyOwotICAgICAgICAgICAgVmM6OmZs b2F0X3YgZHN0X2MzOworICAgICAgICAgICAgZmxvYXRfdiBkc3RfYWxwaGE7CisgICAgICAgICAg ICBmbG9hdF92IGRzdF9jMTsKKyAgICAgICAgICAgIGZsb2F0X3YgZHN0X2MyOworICAgICAgICAg ICAgZmxvYXRfdiBkc3RfYzM7CiAKICAgICAgICAgICAgIGRhdGFXcmFwcGVyLnJlYWQoZHN0LCBk c3RfYzEsIGRzdF9jMiwgZHN0X2MzLCBkc3RfYWxwaGEpOwogCi0gICAgICAgICAgICBWYzo6Zmxv YXRfdiBuZXdBbHBoYSA9IGRzdF9hbHBoYSArIG9wYWNpdHlfbm9ybV92ZWMgKiAoc3JjX2FscGhh IC0gZHN0X2FscGhhKTsKKyAgICAgICAgICAgIGZsb2F0X3YgbmV3QWxwaGEgPSBkc3RfYWxwaGEg KyBvcGFjaXR5X25vcm1fdmVjICogKHNyY19hbHBoYSAtIGRzdF9hbHBoYSk7CiAKLSAgICAgICAg ICAgIGlmICgobmV3QWxwaGEgPT0gemVyb1ZhbHVlKS5pc0Z1bGwoKSkgeworICAgICAgICAgICAg aWYgKHhzaW1kOjphbGwobmV3QWxwaGEgPT0gemVyb1ZhbHVlKSkgewogICAgICAgICAgICAgICAg IGRhdGFXcmFwcGVyLmNsZWFyUGl4ZWxzKGRzdCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgICAgIFBpeGVsU3RhdGVSZWNvdmVySGVscGVyPGNoYW5uZWxzX3R5cGUsIF9pbXBs PiBwaXhlbFJlY292ZXJIZWxwZXIoZHN0X2MxLCBkc3RfYzIsIGRzdF9jMyk7CkBAIC05NSwxMiAr OTksMTIgQEAgc3RydWN0IENvcHlDb21wb3NpdG9yMTI4IHsKICAgICAgICAgICAgICAgICBkc3Rf YzIgKz0gb3BhY2l0eV9ub3JtX3ZlYyAqIChzcmNfYzIgLSBkc3RfYzIpOwogICAgICAgICAgICAg ICAgIGRzdF9jMyArPSBvcGFjaXR5X25vcm1fdmVjICogKHNyY19jMyAtIGRzdF9jMyk7CiAKLSAg ICAgICAgICAgICAgICBpZiAoIShuZXdBbHBoYSA9PSBvbmVWYWx1ZSkuaXNGdWxsKCkpIHsKKyAg ICAgICAgICAgICAgICBpZiAoIXhzaW1kOjphbGwobmV3QWxwaGEgPT0gb25lVmFsdWUpKSB7CiAg ICAgICAgICAgICAgICAgICAgIC8vLyBUaGlzIGRpdmlzaW9uIGJ5IG5ld0FscGhhIG1heSBiZSB1 bnNhZmUgaW4gY2FzZQogICAgICAgICAgICAgICAgICAgICAvLy8gKipzb21lKiogZWxlbWVudHMg b2YgbmV3QWxwaGEgYXJlIG51bGwuIFdlIGRvbid0CiAgICAgICAgICAgICAgICAgICAgIC8vLyBj YXJlLCBiZWNhdXNlOgogICAgICAgICAgICAgICAgICAgICAvLy8KLSAgICAgICAgICAgICAgICAg ICAgLy8vIDEpIHRoZSB2YWx1ZSB3aWxsIGJlIGNsYW1wZWQgYnkgVmM6Om1pbiBhIGJpdCBsYXRl cjsKKyAgICAgICAgICAgICAgICAgICAgLy8vIDEpIHRoZSB2YWx1ZSB3aWxsIGJlIGNsYW1wZWQg YnkgeHNpbWQ6Om1pbiBhIGJpdCBsYXRlcjsKICAgICAgICAgICAgICAgICAgICAgLy8vCiAgICAg ICAgICAgICAgICAgICAgIC8vLyAyKSBldmVuIGlmIGl0IGRvZXNuJ3QsIHRoZSBuZXcgYWxwaGEg d2lsbCBiZSBudWxsLAogICAgICAgICAgICAgICAgICAgICAvLy8gICAgc28gdGhlIHN0YXRlIG9m IHRoZSBjb2xvciBjaGFubmVscyBpcyB1bmRlZmluZWQKQEAgLTEwOSwxMSArMTEzLDExIEBAIHN0 cnVjdCBDb3B5Q29tcG9zaXRvcjEyOCB7CiAgICAgICAgICAgICAgICAgICAgIGRzdF9jMiAvPSBu ZXdBbHBoYTsKICAgICAgICAgICAgICAgICAgICAgZHN0X2MzIC89IG5ld0FscGhhOwogCi0gICAg ICAgICAgICAgICAgICAgIFZjOjpmbG9hdF92IHVuaXRWYWx1ZShLb0NvbG9yU3BhY2VNYXRoc1Ry YWl0czxjaGFubmVsc190eXBlPjo6dW5pdFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZmxv YXRfdiB1bml0VmFsdWUoS29Db2xvclNwYWNlTWF0aHNUcmFpdHM8Y2hhbm5lbHNfdHlwZT46OnVu aXRWYWx1ZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZHN0X2MxID0gVmM6Om1pbihkc3RfYzEs IHVuaXRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRzdF9jMiA9IFZjOjptaW4oZHN0X2My LCB1bml0VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBkc3RfYzMgPSBWYzo6bWluKGRzdF9j MywgdW5pdFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZHN0X2MxID0geHNpbWQ6Om1pbihk c3RfYzEsIHVuaXRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGRzdF9jMiA9IHhzaW1kOjpt aW4oZHN0X2MyLCB1bml0VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBkc3RfYzMgPSB4c2lt ZDo6bWluKGRzdF9jMywgdW5pdFZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg ICAgICAgICAvKioKQEAgLTEyOSw3ICsxMzMsNyBAQCBzdHJ1Y3QgQ29weUNvbXBvc2l0b3IxMjgg ewogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGJvb2wgaGF2ZU1hc2ssIFZjOjpJ bXBsZW1lbnRhdGlvbiBfaW1wbD4KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBoYXZlTWFzaywgdHlwZW5h bWUgX2ltcGwgPSB4c2ltZDo6Y3VycmVudF9hcmNoPgogICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F IHZvaWQgY29tcG9zaXRlT25lUGl4ZWxTY2FsYXIoY29uc3QgcXVpbnQ4ICpzcmMsIHF1aW50OCAq ZHN0LCBjb25zdCBxdWludDggKm1hc2ssIGZsb2F0IG9wYWNpdHksIGNvbnN0IFBhcmFtc1dyYXBw ZXIgJm9wYXJhbXMpCiAgICAgewogICAgICAgICB1c2luZyBuYW1lc3BhY2UgQXJpdGhtZXRpYzsK QEAgLTI2Nyw3ICsyNzEsNyBAQCBzdHJ1Y3QgQ29weUNvbXBvc2l0b3IxMjggewogICogY29sb3Jz cGFjZXMgd2l0aCBhbHBoYSBjaGFubmVsIHBsYWNlZCBhdCB0aGUgbGFzdCBieXRlIG9mCiAgKiB0 aGUgcGl4ZWw6IEMxX0MyX0MzX0EuCiAgKi8KLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBf aW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3Np dGVPcENvcHkxMjggOiBwdWJsaWMgS29Db21wb3NpdGVPcAogewogcHVibGljOgpAQCAtMjc2LDcg KzI4MCw3IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIEtvQ29tcG9zaXRlT3A6OmNvbXBvc2l0ZTsK IAotICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoY29uc3QgS29Db21wb3NpdGVPcDo6UGFyYW1l dGVySW5mbyYgcGFyYW1zKSBjb25zdAorICAgIHZvaWQgY29tcG9zaXRlKGNvbnN0IEtvQ29tcG9z aXRlT3A6OlBhcmFtZXRlckluZm8mIHBhcmFtcykgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAg ICAgIGlmKHBhcmFtcy5tYXNrUm93U3RhcnQpIHsKICAgICAgICAgICAgIGNvbXBvc2l0ZTx0cnVl PihwYXJhbXMpOwpAQCAtMzExLDcgKzMxNSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi10ZW1w bGF0ZTxWYzo6SW1wbGVtZW50YXRpb24gX2ltcGw+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4K IGNsYXNzIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5VTY0IDogcHVibGljIEtvQ29tcG9zaXRl T3AKIHsKIHB1YmxpYzoKQEAgLTMyMCw3ICszMjQsNyBAQCBwdWJsaWM6CiAKICAgICB1c2luZyBL b0NvbXBvc2l0ZU9wOjpjb21wb3NpdGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGNv bnN0IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8mIHBhcmFtcykgY29uc3QKKyAgICB2b2lk IGNvbXBvc2l0ZShjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZvJiBwYXJhbXMpIGNv bnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZihwYXJhbXMubWFza1Jvd1N0YXJ0KSB7CiAg ICAgICAgICAgICBjb21wb3NpdGU8dHJ1ZT4ocGFyYW1zKTsKQEAgLTM1Niw3ICszNjAsNyBAQCBw dWJsaWM6CiB9OwogCiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3RlbXBs YXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkzMiA6 IHB1YmxpYyBLb0NvbXBvc2l0ZU9wCiB7CiBwdWJsaWM6CkBAIC0zNjUsNyArMzY5LDcgQEAgcHVi bGljOgogCiAgICAgdXNpbmcgS29Db21wb3NpdGVPcDo6Y29tcG9zaXRlOwogCi0gICAgdmlydHVh bCB2b2lkIGNvbXBvc2l0ZShjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZvJiBwYXJh bXMpIGNvbnN0CisgICAgdm9pZCBjb21wb3NpdGUoY29uc3QgS29Db21wb3NpdGVPcDo6UGFyYW1l dGVySW5mbyYgcGFyYW1zKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYocGFyYW1z Lm1hc2tSb3dTdGFydCkgewogICAgICAgICAgICAgY29tcG9zaXRlPHRydWU+KHBhcmFtcyk7CmRp ZmYgLS1naXQgYS9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9zaXRl T3BGYWN0b3J5UGVyQXJjaC5jcHAgYi9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1p emVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaC5jcHAKaW5kZXggYTc0ODExMTg4OS4uMTQ3ZmQ5 ZjAxOCAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENv bXBvc2l0ZU9wRmFjdG9yeVBlckFyY2guY3BwCisrKyBiL2xpYnMvcGlnbWVudC9jb21wb3NpdGVv cHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoLmNwcApAQCAtMSwxMyArMSwx MCBAQAogLyoKICAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDEyIERtaXRyeSBLYXpha292 IDxkaW11bGE3M0BnbWFpbC5jb20+CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMiBM LiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IExHUEwtMi4xLW9yLWxhdGVyCiAgKi8KIAotI2lmICFkZWZpbmVkIF9NU0NfVkVSCi0j cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5kZWYiCi0jZW5kaWYKLQogI2luY2x1 ZGUgIktvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaC5oIgogI2luY2x1ZGUgIktv T3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbjMyLmgiCiAjaW5jbHVkZSAiS29PcHRpbWl6 ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuMTI4LmgiCkBAIC0yMCwxMDQgKzE3LDEwMCBAQAogCiAj aW5jbHVkZSA8S29Db21wb3NpdGVPcFJlZ2lzdHJ5Lmg+CiAKLSNpZiBkZWZpbmVkKF9fY2xhbmdf XykKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdsb2NhbC10eXBlLXRlbXBsYXRl LWFyZ3MiCi0jZW5kaWYKLQogdGVtcGxhdGU8PgogdGVtcGxhdGU8PgogS29PcHRpbWl6ZWRDb21w b3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkhh cmQzMj46OlJldHVyblR5cGUKLUtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxL b09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5IYXJkMzI+OjpjcmVhdGU8VmM6OkN1cnJl bnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihQYXJhbVR5cGUgcGFyYW0pCitLb09wdGltaXpl ZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFy a2VuSGFyZDMyPjo6Y3JlYXRlPHhzaW1kOjpjdXJyZW50X2FyY2g+KFBhcmFtVHlwZSBwYXJhbSkK IHsKLSAgICByZXR1cm4gbmV3IEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkhhcmQz MjxWYzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KHBhcmFtKTsKKyAgICByZXR1 cm4gbmV3IEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkhhcmQzMjx4c2ltZDo6Y3Vy cmVudF9hcmNoPihwYXJhbSk7CiB9CiAKIAogdGVtcGxhdGU8PgogdGVtcGxhdGU8PgogS29PcHRp bWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBo YURhcmtlbkNyZWFteTMyPjo6UmV0dXJuVHlwZQotS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3Rv cnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkNyZWFteTMyPjo6Y3Jl YXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oUGFyYW1UeXBlIHBhcmFt KQorS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9z aXRlT3BBbHBoYURhcmtlbkNyZWFteTMyPjo6Y3JlYXRlPHhzaW1kOjpjdXJyZW50X2FyY2g+KFBh cmFtVHlwZSBwYXJhbSkKIHsKLSAgICByZXR1cm4gbmV3IEtvT3B0aW1pemVkQ29tcG9zaXRlT3BB bHBoYURhcmtlbkNyZWFteTMyPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4o cGFyYW0pOworICAgIHJldHVybiBuZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2Vu Q3JlYW15MzI8eHNpbWQ6OmN1cnJlbnRfYXJjaD4ocGFyYW0pOwogfQogCiB0ZW1wbGF0ZTw+CiB0 ZW1wbGF0ZTw+CiBLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6 ZWRDb21wb3NpdGVPcE92ZXIzMj46OlJldHVyblR5cGUKLUtvT3B0aW1pemVkQ29tcG9zaXRlT3BG YWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlcjMyPjo6Y3JlYXRlPFZjOjpD dXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oUGFyYW1UeXBlIHBhcmFtKQorS29PcHRp bWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BPdmVy MzI+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oUGFyYW1UeXBlIHBhcmFtKQogewotICAg IHJldHVybiBuZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIzMjxWYzo6Q3VycmVudEltcGxl bWVudGF0aW9uOjpjdXJyZW50KCk+KHBhcmFtKTsKKyAgICByZXR1cm4gbmV3IEtvT3B0aW1pemVk Q29tcG9zaXRlT3BPdmVyMzI8eHNpbWQ6OmN1cnJlbnRfYXJjaD4ocGFyYW0pOwogfQogCiB0ZW1w bGF0ZTw+CiB0ZW1wbGF0ZTw+CiBLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8 S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZDEyOD46OlJldHVyblR5cGUKLUtv T3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9w QWxwaGFEYXJrZW5IYXJkMTI4Pjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1 cnJlbnQoKT4oUGFyYW1UeXBlIHBhcmFtKQorS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQ ZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkhhcmQxMjg+OjpjcmVhdGU8 eHNpbWQ6OmN1cnJlbnRfYXJjaD4oUGFyYW1UeXBlIHBhcmFtKQogewotICAgIHJldHVybiBuZXcg S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZDEyODxWYzo6Q3VycmVudEltcGxl bWVudGF0aW9uOjpjdXJyZW50KCk+KHBhcmFtKTsKKyAgICByZXR1cm4gbmV3IEtvT3B0aW1pemVk Q29tcG9zaXRlT3BBbHBoYURhcmtlbkhhcmQxMjg8eHNpbWQ6OmN1cnJlbnRfYXJjaD4ocGFyYW0p OwogfQogCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBLb09wdGltaXplZENvbXBvc2l0ZU9wRmFj dG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15MTI4Pjo6 UmV0dXJuVHlwZQotS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1p emVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkNyZWFteTEyOD46OmNyZWF0ZTxWYzo6Q3VycmVudElt cGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KFBhcmFtVHlwZSBwYXJhbSkKK0tvT3B0aW1pemVkQ29t cG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5D cmVhbXkxMjg+OjpjcmVhdGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oUGFyYW1UeXBlIHBhcmFtKQog ewotICAgIHJldHVybiBuZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15 MTI4PFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4ocGFyYW0pOworICAgIHJl dHVybiBuZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15MTI4PHhzaW1k OjpjdXJyZW50X2FyY2g+KHBhcmFtKTsKIH0KIAogCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBL b09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVP cE92ZXIxMjg+OjpSZXR1cm5UeXBlCi1Lb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFy Y2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIxMjg+OjpjcmVhdGU8VmM6OkN1cnJlbnRJbXBs ZW1lbnRhdGlvbjo6Y3VycmVudCgpPihQYXJhbVR5cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBv c2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIxMjg+OjpjcmVh dGU8eHNpbWQ6OmN1cnJlbnRfYXJjaD4oUGFyYW1UeXBlIHBhcmFtKQogewotICAgIHJldHVybiBu ZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIxMjg8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlv bjo6Y3VycmVudCgpPihwYXJhbSk7CisgICAgcmV0dXJuIG5ldyBLb09wdGltaXplZENvbXBvc2l0 ZU9wT3ZlcjEyODx4c2ltZDo6Y3VycmVudF9hcmNoPihwYXJhbSk7CiB9CiAKIHRlbXBsYXRlPD4K IHRlbXBsYXRlPD4KIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGlt aXplZENvbXBvc2l0ZU9wT3ZlclU2ND46OlJldHVyblR5cGUKLUtvT3B0aW1pemVkQ29tcG9zaXRl T3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlclU2ND46OmNyZWF0ZTxW Yzo6Q3VycmVudEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KFBhcmFtVHlwZSBwYXJhbSkKK0tv T3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9w T3ZlclU2ND46OmNyZWF0ZTx4c2ltZDo6Y3VycmVudF9hcmNoPihQYXJhbVR5cGUgcGFyYW0pCiB7 Ci0gICAgcmV0dXJuIG5ldyBLb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlclU2NDxWYzo6Q3VycmVu dEltcGxlbWVudGF0aW9uOjpjdXJyZW50KCk+KHBhcmFtKTsKKyAgICByZXR1cm4gbmV3IEtvT3B0 aW1pemVkQ29tcG9zaXRlT3BPdmVyVTY0PHhzaW1kOjpjdXJyZW50X2FyY2g+KHBhcmFtKTsKIH0K IAogdGVtcGxhdGU8PgogdGVtcGxhdGU8PgogS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQ ZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5MTI4Pjo6UmV0dXJuVHlwZQotS29PcHRp bWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5 MTI4Pjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4oUGFyYW1U eXBlIHBhcmFtKQorS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1p emVkQ29tcG9zaXRlT3BDb3B5MTI4Pjo6Y3JlYXRlPHhzaW1kOjpjdXJyZW50X2FyY2g+KFBhcmFt VHlwZSBwYXJhbSkKIHsKLSAgICByZXR1cm4gbmV3IEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5 MTI4PFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1cnJlbnQoKT4ocGFyYW0pOworICAgIHJl dHVybiBuZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkxMjg8eHNpbWQ6OmN1cnJlbnRfYXJj aD4ocGFyYW0pOwogfQogCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBLb09wdGltaXplZENvbXBv c2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHlVNjQ+OjpSZXR1 cm5UeXBlCi1Lb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRD b21wb3NpdGVPcENvcHlVNjQ+OjpjcmVhdGU8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3Vy cmVudCgpPihQYXJhbVR5cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBl ckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHlVNjQ+OjpjcmVhdGU8eHNpbWQ6OmN1cnJl bnRfYXJjaD4oUGFyYW1UeXBlIHBhcmFtKQogewotICAgIHJldHVybiBuZXcgS29PcHRpbWl6ZWRD b21wb3NpdGVPcENvcHlVNjQ8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihw YXJhbSk7CisgICAgcmV0dXJuIG5ldyBLb09wdGltaXplZENvbXBvc2l0ZU9wQ29weVU2NDx4c2lt ZDo6Y3VycmVudF9hcmNoPihwYXJhbSk7CiB9CiAKIHRlbXBsYXRlPD4KIHRlbXBsYXRlPD4KIEtv T3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9w Q29weTMyPjo6UmV0dXJuVHlwZQotS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNo PEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5MzI+OjpjcmVhdGU8VmM6OkN1cnJlbnRJbXBsZW1l bnRhdGlvbjo6Y3VycmVudCgpPihQYXJhbVR5cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBvc2l0 ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkzMj46OmNyZWF0ZTx4 c2ltZDo6Y3VycmVudF9hcmNoPihQYXJhbVR5cGUgcGFyYW0pCiB7Ci0gICAgcmV0dXJuIG5ldyBL b09wdGltaXplZENvbXBvc2l0ZU9wQ29weTMyPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1 cnJlbnQoKT4ocGFyYW0pOworICAgIHJldHVybiBuZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcENv cHkzMjx4c2ltZDo6Y3VycmVudF9hcmNoPihwYXJhbSk7CiB9CiAKIHRlbXBsYXRlPD4KIHRlbXBs YXRlPD4KIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENv bXBvc2l0ZU9wQWxwaGFEYXJrZW5IYXJkVTY0Pjo6UmV0dXJuVHlwZQotS29PcHRpbWl6ZWRDb21w b3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkhh cmRVNjQ+OjpjcmVhdGU8VmM6OkN1cnJlbnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihQYXJh bVR5cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRp bWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZFU2ND46OmNyZWF0ZTx4c2ltZDo6Y3VycmVu dF9hcmNoPihQYXJhbVR5cGUgcGFyYW0pCiB7Ci0gICAgcmV0dXJuIG5ldyBLb09wdGltaXplZENv bXBvc2l0ZU9wQWxwaGFEYXJrZW5IYXJkVTY0PFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246OmN1 cnJlbnQoKT4ocGFyYW0pOworICAgIHJldHVybiBuZXcgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFs cGhhRGFya2VuSGFyZFU2NDx4c2ltZDo6Y3VycmVudF9hcmNoPihwYXJhbSk7CiB9CiAKIHRlbXBs YXRlPD4KIHRlbXBsYXRlPD4KIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxL b09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5DcmVhbXlVNjQ+OjpSZXR1cm5UeXBlCi1L b09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVP cEFscGhhRGFya2VuQ3JlYW15VTY0Pjo6Y3JlYXRlPFZjOjpDdXJyZW50SW1wbGVtZW50YXRpb246 OmN1cnJlbnQoKT4oUGFyYW1UeXBlIHBhcmFtKQorS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3Rv cnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkNyZWFteVU2ND46OmNy ZWF0ZTx4c2ltZDo6Y3VycmVudF9hcmNoPihQYXJhbVR5cGUgcGFyYW0pCiB7Ci0gICAgcmV0dXJu IG5ldyBLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5DcmVhbXlVNjQ8VmM6OkN1cnJl bnRJbXBsZW1lbnRhdGlvbjo6Y3VycmVudCgpPihwYXJhbSk7CisgICAgcmV0dXJuIG5ldyBLb09w dGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5DcmVhbXlVNjQ8eHNpbWQ6OmN1cnJlbnRfYXJj aD4ocGFyYW0pOwogfQpkaWZmIC0tZ2l0IGEvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09w dGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2guaCBiL2xpYnMvcGlnbWVudC9jb21wb3Np dGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoLmgKaW5kZXggZmYzNmY0 Nzc4Ni4uMzc5ZWI4OWNmYSAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9L b09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2guaAorKysgYi9saWJzL3BpZ21lbnQv Y29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaC5oCkBAIC0x LDUgKzEsNiBAQAogLyoKICAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDEyIERtaXRyeSBL YXpha292IDxkaW11bGE3M0BnbWFpbC5jb20+CisgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDog MjAyMiBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IExHUEwtMi4xLW9yLWxhdGVyCiAgKi8KQEAgLTgsNTggKzksNTYgQEAKICNk ZWZpbmUgS09PUFRJTUlaRURDT01QT1NJVEVPUEZBQ1RPUllQRVJBUkNIX0gKIAogCi0jaW5jbHVk ZSA8Y29tcG9zaXRlb3BzL0tvVmNNdWx0aUFyY2hCdWlsZFN1cHBvcnQuaD4KKyNpbmNsdWRlIDxj b21wb3NpdGVvcHMvS29NdWx0aUFyY2hCdWlsZFN1cHBvcnQuaD4KIAogCiBjbGFzcyBLb0NvbXBv c2l0ZU9wOwogY2xhc3MgS29Db2xvclNwYWNlOwogCiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRh dGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRD b21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15MzI7CiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRh dGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRD b21wb3NpdGVPcEFscGhhRGFya2VuSGFyZDMyOwogCi10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50YXRp b24gX2ltcGw+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4KIGNsYXNzIEtvT3B0aW1pemVkQ29t cG9zaXRlT3BPdmVyMzI7CiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3Rl bXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhh RGFya2VuSGFyZDEyODsKIAotdGVtcGxhdGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgordGVt cGxhdGU8dHlwZW5hbWUgX2ltcGw+CiBjbGFzcyBLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFE YXJrZW5DcmVhbXkxMjg7CiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3Rl bXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhh RGFya2VuSGFyZFU2NDsKIAotdGVtcGxhdGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgordGVt cGxhdGU8dHlwZW5hbWUgX2ltcGw+CiBjbGFzcyBLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFE YXJrZW5DcmVhbXlVNjQ7CiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3Rl bXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIx Mjg7CiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVu YW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXJVNjQ7CiAKLXRlbXBs YXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgog Y2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkxMjg7CiAKLXRlbXBsYXRlPFZjOjpJbXBs ZW1lbnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRp bWl6ZWRDb21wb3NpdGVPcENvcHlVNjQ7CiAKLXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBf aW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3Np dGVPcENvcHkzMjsKIAotdGVtcGxhdGU8dGVtcGxhdGU8VmM6OkltcGxlbWVudGF0aW9uIEk+IGNs YXNzIENvbXBvc2l0ZU9wPgotc3RydWN0IEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVy QXJjaAotewotICAgIHR5cGVkZWYgY29uc3QgS29Db2xvclNwYWNlKiBQYXJhbVR5cGU7Ci0gICAg dHlwZWRlZiBLb0NvbXBvc2l0ZU9wKiBSZXR1cm5UeXBlOwordGVtcGxhdGU8dGVtcGxhdGU8dHlw ZW5hbWUgST4gY2xhc3MgQ29tcG9zaXRlT3A+CitzdHJ1Y3QgS29PcHRpbWl6ZWRDb21wb3NpdGVP cEZhY3RvcnlQZXJBcmNoIHsKKyAgICB1c2luZyBQYXJhbVR5cGUgPSBjb25zdCBLb0NvbG9yU3Bh Y2UgKjsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gS29Db21wb3NpdGVPcCAqOwogCi0gICAgdGVt cGxhdGU8VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBf aW1wbD4KICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjcmVhdGUoUGFyYW1UeXBlIHBhcmFtKTsKIH07 CiAKLQogI2VuZGlmIC8qIEtPT1BUSU1JWkVEQ09NUE9TSVRFT1BGQUNUT1JZUEVSQVJDSF9IICov CmRpZmYgLS1naXQgYS9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9z aXRlT3BGYWN0b3J5UGVyQXJjaF9TY2FsYXIuY3BwIGIvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9w cy9Lb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2hfU2NhbGFyLmNwcAppbmRleCA3 MTE4YWYxODZiLi40ZDNhZTkwNmI2IDEwMDY0NAotLS0gYS9saWJzL3BpZ21lbnQvY29tcG9zaXRl b3BzL0tvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaF9TY2FsYXIuY3BwCisrKyBi L2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQ ZXJBcmNoX1NjYWxhci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIFNQRFgtRmlsZUNvcHly aWdodFRleHQ6IDIwMTIgRG1pdHJ5IEthemFrb3YgPGRpbXVsYTczQGdtYWlsLmNvbT4KKyAqICBT UERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292aWEgPGFteUBhbXlzcGFyay5t ZT4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEtb3ItbGF0ZXIKICAq LwpAQCAtMTUsNyArMTYsNyBAQAogdGVtcGxhdGU8PgogdGVtcGxhdGU8PgogS29PcHRpbWl6ZWRD b21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtl bkhhcmQzMj46OlJldHVyblR5cGUKLUtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJj aDxLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5IYXJkMzI+OjpjcmVhdGU8VmM6OlNj YWxhckltcGw+KFBhcmFtVHlwZSBwYXJhbSkKK0tvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5 UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5IYXJkMzI+OjpjcmVhdGU8 eHNpbWQ6OmdlbmVyaWM+KFBhcmFtVHlwZSBwYXJhbSkKIHsKICAgICByZXR1cm4gbmV3IEtvQ29t cG9zaXRlT3BBbHBoYURhcmtlbjxLb0JnclU4VHJhaXRzLCBLb0FscGhhRGFya2VuUGFyYW1zV3Jh cHBlckhhcmQ+KHBhcmFtKTsKIH0KQEAgLTIzLDcgKzI0LDcgQEAgS29PcHRpbWl6ZWRDb21wb3Np dGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkhhcmQz Mj46OmMKIHRlbXBsYXRlPD4KIHRlbXBsYXRlPD4KIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0 b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5DcmVhbXkzMj46OlJl dHVyblR5cGUKLUtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXpl ZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5DcmVhbXkzMj46OmNyZWF0ZTxWYzo6U2NhbGFySW1wbD4o UGFyYW1UeXBlIHBhcmFtKQorS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtv T3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkNyZWFteTMyPjo6Y3JlYXRlPHhzaW1kOjpn ZW5lcmljPihQYXJhbVR5cGUgcGFyYW0pCiB7CiAgICAgcmV0dXJuIG5ldyBLb0NvbXBvc2l0ZU9w QWxwaGFEYXJrZW48S29CZ3JVOFRyYWl0cywgS29BbHBoYURhcmtlblBhcmFtc1dyYXBwZXJDcmVh bXk+KHBhcmFtKTsKIH0KQEAgLTMxLDcgKzMyLDcgQEAgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZh Y3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkNyZWFteTMyPjoK IHRlbXBsYXRlPD4KIHRlbXBsYXRlPD4KIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVy QXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlcjMyPjo6UmV0dXJuVHlwZQotS29PcHRpbWl6 ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BPdmVyMzI+ OjpjcmVhdGU8VmM6OlNjYWxhckltcGw+KFBhcmFtVHlwZSBwYXJhbSkKK0tvT3B0aW1pemVkQ29t cG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlcjMyPjo6Y3Jl YXRlPHhzaW1kOjpnZW5lcmljPihQYXJhbVR5cGUgcGFyYW0pCiB7CiAgICAgcmV0dXJuIG5ldyBL b0NvbXBvc2l0ZU9wT3ZlcjxLb0JnclU4VHJhaXRzPihwYXJhbSk7CiB9CkBAIC0zOSw3ICs0MCw3 IEBAIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBv c2l0ZU9wT3ZlcjMyPjo6Y3JlYXRlPFZjOjpTCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBLb09w dGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFs cGhhRGFya2VuSGFyZDEyOD46OlJldHVyblR5cGUKLUtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0 b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5IYXJkMTI4Pjo6Y3Jl YXRlPFZjOjpTY2FsYXJJbXBsPihQYXJhbVR5cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBvc2l0 ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZDEy OD46OmNyZWF0ZTx4c2ltZDo6Z2VuZXJpYz4oUGFyYW1UeXBlIHBhcmFtKQogewogICAgIHJldHVy biBuZXcgS29Db21wb3NpdGVPcEFscGhhRGFya2VuPEtvUmdiRjMyVHJhaXRzLCBLb0FscGhhRGFy a2VuUGFyYW1zV3JhcHBlckhhcmQ+KHBhcmFtKTsKIH0KQEAgLTQ3LDcgKzQ4LDcgQEAgS29PcHRp bWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBo YURhcmtlbkhhcmQxMjg+OjoKIHRlbXBsYXRlPD4KIHRlbXBsYXRlPD4KIEtvT3B0aW1pemVkQ29t cG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5D cmVhbXkxMjg+OjpSZXR1cm5UeXBlCi1Lb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFy Y2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15MTI4Pjo6Y3JlYXRlPFZj OjpTY2FsYXJJbXBsPihQYXJhbVR5cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBvc2l0ZU9wRmFj dG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuQ3JlYW15MTI4Pjo6 Y3JlYXRlPHhzaW1kOjpnZW5lcmljPihQYXJhbVR5cGUgcGFyYW0pCiB7CiAgICAgcmV0dXJuIG5l dyBLb0NvbXBvc2l0ZU9wQWxwaGFEYXJrZW48S29SZ2JGMzJUcmFpdHMsIEtvQWxwaGFEYXJrZW5Q YXJhbXNXcmFwcGVyQ3JlYW15PihwYXJhbSk7CiB9CkBAIC01Niw3ICs1Nyw3IEBAIEtvT3B0aW1p emVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wQWxwaGFE YXJrZW5DcmVhbXkxMjg+CiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBLb09wdGltaXplZENvbXBv c2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIxMjg+OjpSZXR1 cm5UeXBlCi1Lb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRD b21wb3NpdGVPcE92ZXIxMjg+OjpjcmVhdGU8VmM6OlNjYWxhckltcGw+KFBhcmFtVHlwZSBwYXJh bSkKK0tvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBv c2l0ZU9wT3ZlcjEyOD46OmNyZWF0ZTx4c2ltZDo6Z2VuZXJpYz4oUGFyYW1UeXBlIHBhcmFtKQog ewogICAgIHJldHVybiBuZXcgS29Db21wb3NpdGVPcE92ZXI8S29SZ2JGMzJUcmFpdHM+KHBhcmFt KTsKIH0KQEAgLTY0LDcgKzY1LDcgQEAgS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJB cmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BPdmVyMTI4Pjo6Y3JlYXRlPFZjOjoKIHRlbXBsYXRl PD4KIHRlbXBsYXRlPD4KIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09w dGltaXplZENvbXBvc2l0ZU9wT3ZlclU2ND46OlJldHVyblR5cGUKLUtvT3B0aW1pemVkQ29tcG9z aXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlclU2ND46OmNyZWF0 ZTxWYzo6U2NhbGFySW1wbD4oUGFyYW1UeXBlIHBhcmFtKQorS29PcHRpbWl6ZWRDb21wb3NpdGVP cEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BPdmVyVTY0Pjo6Y3JlYXRlPHhz aW1kOjpnZW5lcmljPihQYXJhbVR5cGUgcGFyYW0pCiB7CiAgICAgcmV0dXJuIG5ldyBLb0NvbXBv c2l0ZU9wT3ZlcjxLb0JnclUxNlRyYWl0cz4ocGFyYW0pOwogfQpAQCAtNzIsNyArNzMsNyBAQCBL b09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVP cE92ZXJVNjQ+OjpjcmVhdGU8VmM6OgogdGVtcGxhdGU8PgogdGVtcGxhdGU8PgogS29PcHRpbWl6 ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5MTI4 Pjo6UmV0dXJuVHlwZQotS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0 aW1pemVkQ29tcG9zaXRlT3BDb3B5MTI4Pjo6Y3JlYXRlPFZjOjpTY2FsYXJJbXBsPihQYXJhbVR5 cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6 ZWRDb21wb3NpdGVPcENvcHkxMjg+OjpjcmVhdGU8eHNpbWQ6OmdlbmVyaWM+KFBhcmFtVHlwZSBw YXJhbSkKIHsKICAgICByZXR1cm4gbmV3IEtvQ29tcG9zaXRlT3BDb3B5MjxLb1JnYkYzMlRyYWl0 cz4ocGFyYW0pOwogfQpAQCAtODAsNyArODEsNyBAQCBLb09wdGltaXplZENvbXBvc2l0ZU9wRmFj dG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkxMjg+OjpjcmVhdGU8VmM6Ogog dGVtcGxhdGU8PgogdGVtcGxhdGU8PgogS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJB cmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5VTY0Pjo6UmV0dXJuVHlwZQotS29PcHRpbWl6 ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5VTY0 Pjo6Y3JlYXRlPFZjOjpTY2FsYXJJbXBsPihQYXJhbVR5cGUgcGFyYW0pCitLb09wdGltaXplZENv bXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHlVNjQ+Ojpj cmVhdGU8eHNpbWQ6OmdlbmVyaWM+KFBhcmFtVHlwZSBwYXJhbSkKIHsKICAgICByZXR1cm4gbmV3 IEtvQ29tcG9zaXRlT3BDb3B5MjxLb0JnclUxNlRyYWl0cz4ocGFyYW0pOwogfQpAQCAtODgsNyAr ODksNyBAQCBLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRpbWl6ZWRD b21wb3NpdGVPcENvcHlVNjQ+OjpjcmVhdGU8VmM6OgogdGVtcGxhdGU8PgogdGVtcGxhdGU8Pgog S29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtvT3B0aW1pemVkQ29tcG9zaXRl T3BDb3B5MzI+OjpSZXR1cm5UeXBlCi1Lb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFy Y2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcENvcHkzMj46OmNyZWF0ZTxWYzo6U2NhbGFySW1wbD4o UGFyYW1UeXBlIHBhcmFtKQorS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNoPEtv T3B0aW1pemVkQ29tcG9zaXRlT3BDb3B5MzI+OjpjcmVhdGU8eHNpbWQ6OmdlbmVyaWM+KFBhcmFt VHlwZSBwYXJhbSkKIHsKICAgICByZXR1cm4gbmV3IEtvQ29tcG9zaXRlT3BDb3B5MjxLb0JnclU4 VHJhaXRzPihwYXJhbSk7CiB9CkBAIC05Niw3ICs5Nyw3IEBAIEtvT3B0aW1pemVkQ29tcG9zaXRl T3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0ZU9wQ29weTMyPjo6Y3JlYXRlPFZj OjpTCiB0ZW1wbGF0ZTw+CiB0ZW1wbGF0ZTw+CiBLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9y eVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZFU2ND46OlJldHVy blR5cGUKLUtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENv bXBvc2l0ZU9wQWxwaGFEYXJrZW5IYXJkVTY0Pjo6Y3JlYXRlPFZjOjpTY2FsYXJJbXBsPihQYXJh bVR5cGUgcGFyYW0pCitLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9yeVBlckFyY2g8S29PcHRp bWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZFU2ND46OmNyZWF0ZTx4c2ltZDo6Z2VuZXJp Yz4oUGFyYW1UeXBlIHBhcmFtKQogewogICAgIHJldHVybiBuZXcgS29Db21wb3NpdGVPcEFscGhh RGFya2VuPEtvQmdyVTE2VHJhaXRzLCBLb0FscGhhRGFya2VuUGFyYW1zV3JhcHBlckhhcmQ+KHBh cmFtKTsKIH0KQEAgLTEwNCw3ICsxMDUsNyBAQCBLb09wdGltaXplZENvbXBvc2l0ZU9wRmFjdG9y eVBlckFyY2g8S29PcHRpbWl6ZWRDb21wb3NpdGVPcEFscGhhRGFya2VuSGFyZFU2ND46OgogdGVt cGxhdGU8PgogdGVtcGxhdGU8PgogS29PcHRpbWl6ZWRDb21wb3NpdGVPcEZhY3RvcnlQZXJBcmNo PEtvT3B0aW1pemVkQ29tcG9zaXRlT3BBbHBoYURhcmtlbkNyZWFteVU2ND46OlJldHVyblR5cGUK LUtvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXplZENvbXBvc2l0 ZU9wQWxwaGFEYXJrZW5DcmVhbXlVNjQ+OjpjcmVhdGU8VmM6OlNjYWxhckltcGw+KFBhcmFtVHlw ZSBwYXJhbSkKK0tvT3B0aW1pemVkQ29tcG9zaXRlT3BGYWN0b3J5UGVyQXJjaDxLb09wdGltaXpl ZENvbXBvc2l0ZU9wQWxwaGFEYXJrZW5DcmVhbXlVNjQ+OjpjcmVhdGU8eHNpbWQ6OmdlbmVyaWM+ KFBhcmFtVHlwZSBwYXJhbSkKIHsKICAgICByZXR1cm4gbmV3IEtvQ29tcG9zaXRlT3BBbHBoYURh cmtlbjxLb0JnclUxNlRyYWl0cywgS29BbHBoYURhcmtlblBhcmFtc1dyYXBwZXJDcmVhbXk+KHBh cmFtKTsKIH0KZGlmZiAtLWdpdCBhL2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRpbWl6 ZWRDb21wb3NpdGVPcE92ZXIxMjguaCBiL2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRp bWl6ZWRDb21wb3NpdGVPcE92ZXIxMjguaAppbmRleCA4YzBkNmM4YTA0Li44NDU3NWU0YmM3IDEw MDY0NAotLS0gYS9saWJzL3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvT3B0aW1pemVkQ29tcG9zaXRl T3BPdmVyMTI4LmgKKysrIGIvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENv bXBvc2l0ZU9wT3ZlcjEyOC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIFNQRFgtRmlsZUNvcHly aWdodFRleHQ6IDIwMTUgVGhvcnN0ZW4gWmFjaG1hbm4gPHphY2htYW5uQGtkZS5vcmc+CisgKiBT UERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIyIEwuIEUuIFNlZ292aWEgPGFteUBhbXlzcGFyay5t ZT4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjAtb3ItbGF0ZXIKICAq LwpAQCAtMzQsNyArMzUsNyBAQCBzdHJ1Y3QgT3ZlckNvbXBvc2l0b3IxMjggewogICAgIH07CiAK ICAgICAvLyBcc2VlIGRvY3MgaW4gQWxwaGFEYXJrZW5Db21wb3NpdG9yMzIKLSAgICB0ZW1wbGF0 ZTxib29sIGhhdmVNYXNrLCBib29sIHNyY19hbGlnbmVkLCBWYzo6SW1wbGVtZW50YXRpb24gX2lt cGw+CisgICAgdGVtcGxhdGU8Ym9vbCBoYXZlTWFzaywgYm9vbCBzcmNfYWxpZ25lZCwgdHlwZW5h bWUgX2ltcGw+CiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBjb21wb3NpdGVWZWN0b3Io Y29uc3QgcXVpbnQ4ICpzcmMsIHF1aW50OCAqZHN0LCBjb25zdCBxdWludDggKm1hc2ssIGZsb2F0 IG9wYWNpdHksIGNvbnN0IFBhcmFtc1dyYXBwZXIgJm9wYXJhbXMpCiAgICAgewogI2lmIElORk9f REVCVUcKQEAgLTQ4LDUyICs0OSw1NSBAQCBzdHJ1Y3QgT3ZlckNvbXBvc2l0b3IxMjggewogICAg ICAgICAgICAgcUluZm8oKSA8PCAiY291bnQiIDw8IGNvdW50T25lIDw8IGNvdW50VHdvIDw8IGNv dW50VGhyZWUgPDwgY291bnRGb3VyIDw8IGNvdW50VG90YWwgPDwgb3BhY2l0eTsKICAgICAgICAg fQogI2VuZGlmCisgICAgICAgIHVzaW5nIGZsb2F0X3YgPSB0eXBlbmFtZSBLb1N0cmVhbWVkTWF0 aDxfaW1wbD46OmZsb2F0X3Y7CisgICAgICAgIHVzaW5nIGZsb2F0X20gPSB0eXBlbmFtZSBmbG9h dF92OjpiYXRjaF9ib29sX3R5cGU7CisKICAgICAgICAgUV9VTlVTRUQob3BhcmFtcyk7CiAKLSAg ICAgICAgVmM6OmZsb2F0X3Ygc3JjX2FscGhhOwotICAgICAgICBWYzo6ZmxvYXRfdiBkc3RfYWxw aGE7CisgICAgICAgIGZsb2F0X3Ygc3JjX2FscGhhOworICAgICAgICBmbG9hdF92IGRzdF9hbHBo YTsKIAotICAgICAgICBWYzo6ZmxvYXRfdiBzcmNfYzE7Ci0gICAgICAgIFZjOjpmbG9hdF92IHNy Y19jMjsKLSAgICAgICAgVmM6OmZsb2F0X3Ygc3JjX2MzOworICAgICAgICBmbG9hdF92IHNyY19j MTsKKyAgICAgICAgZmxvYXRfdiBzcmNfYzI7CisgICAgICAgIGZsb2F0X3Ygc3JjX2MzOwogCiAg ICAgICAgIFBpeGVsV3JhcHBlcjxjaGFubmVsc190eXBlLCBfaW1wbD4gZGF0YVdyYXBwZXI7CiAg ICAgICAgIGRhdGFXcmFwcGVyLnJlYWQoY29uc3RfY2FzdDxxdWludDgqPihzcmMpLCBzcmNfYzEs IHNyY19jMiwgc3JjX2MzLCBzcmNfYWxwaGEpOwogCiAgICAgICAgIC8vYm9vbCBoYXZlT3BhY2l0 eSA9IG9wYWNpdHkgIT0gMS4wOwotICAgICAgICBjb25zdCBWYzo6ZmxvYXRfdiBvcGFjaXR5X25v cm1fdmVjKG9wYWNpdHkpOworICAgICAgICBjb25zdCBmbG9hdF92IG9wYWNpdHlfbm9ybV92ZWMo b3BhY2l0eSk7CiAgICAgICAgIHNyY19hbHBoYSAqPSBvcGFjaXR5X25vcm1fdmVjOwogCiAgICAg ICAgIGlmIChoYXZlTWFzaykgewotICAgICAgICAgICAgY29uc3QgVmM6OmZsb2F0X3YgdWludDhN YXhSZWMxKChmbG9hdCkxLjAgLyAyNTUpOwotICAgICAgICAgICAgVmM6OmZsb2F0X3YgbWFza192 ZWMgPSBLb1N0cmVhbWVkTWF0aDxfaW1wbD46OmZldGNoX21hc2tfOChtYXNrKTsKKyAgICAgICAg ICAgIGNvbnN0IGZsb2F0X3YgdWludDhNYXhSZWMxKChmbG9hdCkxLjAgLyAyNTUpOworICAgICAg ICAgICAgZmxvYXRfdiBtYXNrX3ZlYyA9IEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6ZmV0Y2hfbWFz a184KG1hc2spOwogICAgICAgICAgICAgc3JjX2FscGhhICo9IG1hc2tfdmVjICogdWludDhNYXhS ZWMxOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgVmM6OmZsb2F0X3YgemVyb1ZhbHVlKHN0 YXRpY19jYXN0PGZsb2F0PihOQVRJVkVfT1BBQ0lUWV9UUkFOU1BBUkVOVCkpOworICAgICAgICBj b25zdCBmbG9hdF92IHplcm9WYWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4oTkFUSVZFX09QQUNJVFlf VFJBTlNQQVJFTlQpKTsKICAgICAgICAgLy8gVGhlIHNvdXJjZSBjYW5ub3QgY2hhbmdlIHRoZSBj b2xvcnMgaW4gdGhlIGRlc3RpbmF0aW9uLAogICAgICAgICAvLyBzaW5jZSBpdHMgZnVsbHkgdHJh bnNwYXJlbnQKLSAgICAgICAgaWYgKChzcmNfYWxwaGEgPT0gemVyb1ZhbHVlKS5pc0Z1bGwoKSkg eworICAgICAgICBpZiAoeHNpbWQ6OmFsbChzcmNfYWxwaGEgPT0gemVyb1ZhbHVlKSkgewogI2lm IElORk9fREVCVUcKICAgICAgICAgICAgIGNvdW50Rm91cisrOwogI2VuZGlmCiAgICAgICAgICAg ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBWYzo6ZmxvYXRfdiBkc3RfYzE7Ci0gICAg ICAgIFZjOjpmbG9hdF92IGRzdF9jMjsKLSAgICAgICAgVmM6OmZsb2F0X3YgZHN0X2MzOworICAg ICAgICBmbG9hdF92IGRzdF9jMTsKKyAgICAgICAgZmxvYXRfdiBkc3RfYzI7CisgICAgICAgIGZs b2F0X3YgZHN0X2MzOwogCiAgICAgICAgIGRhdGFXcmFwcGVyLnJlYWQoZHN0LCBkc3RfYzEsIGRz dF9jMiwgZHN0X2MzLCBkc3RfYWxwaGEpOwogCi0gICAgICAgIFZjOjpmbG9hdF92IHNyY19ibGVu ZDsKLSAgICAgICAgVmM6OmZsb2F0X3YgbmV3X2FscGhhOworICAgICAgICBmbG9hdF92IHNyY19i bGVuZDsKKyAgICAgICAgZmxvYXRfdiBuZXdfYWxwaGE7CiAKLSAgICAgICAgY29uc3QgVmM6OmZs b2F0X3Ygb25lVmFsdWUoMS4wZik7Ci0gICAgICAgIGlmICgoZHN0X2FscGhhID09IG9uZVZhbHVl KS5pc0Z1bGwoKSkgeworICAgICAgICBjb25zdCBmbG9hdF92IG9uZVZhbHVlKDEuMGYpOworICAg ICAgICBpZiAoeHNpbWQ6OmFsbChkc3RfYWxwaGEgPT0gb25lVmFsdWUpKSB7CiAgICAgICAgICAg ICBuZXdfYWxwaGEgPSBkc3RfYWxwaGE7CiAgICAgICAgICAgICBzcmNfYmxlbmQgPSBzcmNfYWxw aGE7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGRzdF9hbHBoYSA9PSB6ZXJvVmFsdWUpLmlzRnVsbCgp KSB7CisgICAgICAgIH0gZWxzZSBpZiAoeHNpbWQ6OmFsbChkc3RfYWxwaGEgPT0gemVyb1ZhbHVl KSkgewogICAgICAgICAgICAgbmV3X2FscGhhID0gc3JjX2FscGhhOwogICAgICAgICAgICAgc3Jj X2JsZW5kID0gb25lVmFsdWU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDIsMTIgKzEwNiwxMiBA QCBzdHJ1Y3QgT3ZlckNvbXBvc2l0b3IxMjggewogICAgICAgICAgICAgICogd2hpY2ggd2lsbCBy ZXN1bHQgaW4gTmFOIHZhbHVlcyB3aGlsZSBkaXZpc2lvbi4KICAgICAgICAgICAgICAqLwogICAg ICAgICAgICAgbmV3X2FscGhhID0gZHN0X2FscGhhICsgKG9uZVZhbHVlIC0gZHN0X2FscGhhKSAq IHNyY19hbHBoYTsKLSAgICAgICAgICAgIFZjOjpmbG9hdF9tIG1hc2sgPSAobmV3X2FscGhhID09 IHplcm9WYWx1ZSk7CisgICAgICAgICAgICBmbG9hdF9tIG1hc2sgPSAobmV3X2FscGhhID09IHpl cm9WYWx1ZSk7CiAgICAgICAgICAgICBzcmNfYmxlbmQgPSBzcmNfYWxwaGEgLyBuZXdfYWxwaGE7 Ci0gICAgICAgICAgICBzcmNfYmxlbmQuc2V0WmVybyhtYXNrKTsKKyAgICAgICAgICAgIHNyY19i bGVuZCA9IHhzaW1kOjpzZXRfemVybyhzcmNfYmxlbmQsIG1hc2spOwogICAgICAgICB9CiAKLSAg ICAgICAgaWYgKCEoc3JjX2JsZW5kID09IG9uZVZhbHVlKS5pc0Z1bGwoKSkgeworICAgICAgICBp ZiAoIXhzaW1kOjphbGwoc3JjX2JsZW5kID09IG9uZVZhbHVlKSkgewogI2lmIElORk9fREVCVUcK ICAgICAgICAgICAgICsrY291bnRPbmU7CiAjZW5kaWYKQEAgLTEyNSw4ICsxMjksMTIgQEAgc3Ry dWN0IE92ZXJDb21wb3NpdG9yMTI4IHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRl IDxib29sIGhhdmVNYXNrLCBWYzo6SW1wbGVtZW50YXRpb24gX2ltcGw+Ci0gICAgc3RhdGljIEFM V0FZU19JTkxJTkUgdm9pZCBjb21wb3NpdGVPbmVQaXhlbFNjYWxhcihjb25zdCBxdWludDggKnNy YywgcXVpbnQ4ICpkc3QsIGNvbnN0IHF1aW50OCAqbWFzaywgZmxvYXQgb3BhY2l0eSwgY29uc3Qg UGFyYW1zV3JhcHBlciAmb3BhcmFtcykKKyAgICB0ZW1wbGF0ZTxib29sIGhhdmVNYXNrLCB0eXBl bmFtZSBfaW1wbD4KKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGNvbXBvc2l0ZU9uZVBp eGVsU2NhbGFyKGNvbnN0IHF1aW50OCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpbnQ4ICpkc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWludDggKm1hc2ss CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm bG9hdCBvcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUGFyYW1zV3JhcHBlciAmb3BhcmFtcykKICAgICB7CiAgICAgICAg IHVzaW5nIG5hbWVzcGFjZSBBcml0aG1ldGljOwogICAgICAgICBjb25zdCBxaW50MzIgYWxwaGFf cG9zID0gMzsKQEAgLTIyOSw3ICsyMzcsNyBAQCBzdHJ1Y3QgT3ZlckNvbXBvc2l0b3IxMjggewog ICogY29sb3JzcGFjZXMgd2l0aCBhbHBoYSBjaGFubmVsIHBsYWNlZCBhdCB0aGUgbGFzdCBieXRl IG9mCiAgKiB0aGUgcGl4ZWw6IEMxX0MyX0MzX0EuCiAgKi8KLXRlbXBsYXRlPFZjOjpJbXBsZW1l bnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9pbXBsPgogY2xhc3MgS29PcHRpbWl6 ZWRDb21wb3NpdGVPcE92ZXIxMjggOiBwdWJsaWMgS29Db21wb3NpdGVPcAogewogcHVibGljOgpA QCAtMjM4LDcgKzI0Niw3IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIEtvQ29tcG9zaXRlT3A6OmNv bXBvc2l0ZTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoY29uc3QgS29Db21wb3NpdGVP cDo6UGFyYW1ldGVySW5mbyYgcGFyYW1zKSBjb25zdAorICAgIHZvaWQgY29tcG9zaXRlKGNvbnN0 IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8mIHBhcmFtcykgY29uc3Qgb3ZlcnJpZGUKICAg ICB7CiAgICAgICAgIGlmKHBhcmFtcy5tYXNrUm93U3RhcnQpIHsKICAgICAgICAgICAgIGNvbXBv c2l0ZTx0cnVlPihwYXJhbXMpOwpAQCAtMjczLDcgKzI4MSw3IEBAIHB1YmxpYzoKICAgICB9CiB9 OwogCi10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50YXRpb24gX2ltcGw+Cit0ZW1wbGF0ZTx0eXBlbmFt ZSBfaW1wbD4KIGNsYXNzIEtvT3B0aW1pemVkQ29tcG9zaXRlT3BPdmVyVTY0IDogcHVibGljIEtv Q29tcG9zaXRlT3AKIHsKIHB1YmxpYzoKQEAgLTI4Miw3ICsyOTAsNyBAQCBwdWJsaWM6CiAKICAg ICB1c2luZyBLb0NvbXBvc2l0ZU9wOjpjb21wb3NpdGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29t cG9zaXRlKGNvbnN0IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8mIHBhcmFtcykgY29uc3QK KyAgICB2b2lkIGNvbXBvc2l0ZShjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZvJiBw YXJhbXMpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZihwYXJhbXMubWFza1Jvd1N0 YXJ0KSB7CiAgICAgICAgICAgICBjb21wb3NpdGU8dHJ1ZT4ocGFyYW1zKTsKZGlmZiAtLWdpdCBh L2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIzMi5o IGIvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlcjMy LmgKaW5kZXggYmMzOGIzZjhiOS4uNWEyNDMzNTNkMCAxMDA2NDQKLS0tIGEvbGlicy9waWdtZW50 L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlcjMyLmgKKysrIGIvbGlicy9w aWdtZW50L2NvbXBvc2l0ZW9wcy9Lb09wdGltaXplZENvbXBvc2l0ZU9wT3ZlcjMyLmgKQEAgLTEs NiArMSw3IEBACiAvKgogICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAwNiBDeXJpbGxlIEJl cmdlciA8Y2JlcmdlckBjYmVyZ2VyLm5ldD4KICAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIw MTEgU2lsdmlvIEhlaW5yaWNoIDxwbGFzc3lAd2ViLmRlPgorICogU1BEWC1GaWxlQ29weXJpZ2h0 VGV4dDogMjAyMiBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4wLW9yLWxhdGVyCiAgKi8KQEAgLTEzLDM4ICsxNCw2 IEBACiAjaW5jbHVkZSAiS29TdHJlYW1lZE1hdGguaCIKIAogCi10ZW1wbGF0ZTxWYzo6SW1wbGVt ZW50YXRpb24gX2ltcGw+Ci1zdHJ1Y3QgT3B0aURpdiB7Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJ TkUgZmxvYXQgZGl2U2NhbGFyKGNvbnN0IGZsb2F0JiBkaXZpZGVudCwgY29uc3QgZmxvYXQmIGRp dmlzb3IpIHsKLSNpZmRlZiBfX1NTRV9fCi0gICAgICAgIGZsb2F0IHJlc3VsdDsKLQotICAgICAg ICBfX20xMjggeCA9IF9tbV9zZXRfc3MoZGl2aXNvcik7Ci0gICAgICAgIF9fbTEyOCB5ID0gX21t X3NldF9zcyhkaXZpZGVudCk7Ci0gICAgICAgIHggPSBfbW1fcmNwX3NzKHgpOwotICAgICAgICB4 ID0gX21tX211bF9zcyh4LCB5KTsKLQotCi0gICAgICAgIF9tbV9zdG9yZV9zcygmcmVzdWx0LCB4 KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgICAgIHJldHVybiBkaXZpZGVu dCAvIGRpdmlzb3I7Ci0jZW5kaWYKLQotICAgIH0KLQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F IFZjOjpmbG9hdF92IGRpdlZlY3RvcihWYzo6ZmxvYXRfdjo6QXNBcmcgZGl2aWRlbnQsIFZjOjpm bG9hdF92OjpBc0FyZyAgZGl2aXNvcikgewotI2lmZGVmIF9fU1NFX18KLSAgICAgICAgcmV0dXJu IGRpdmlkZW50ICogVmM6OnJlY2lwcm9jYWwoZGl2aXNvcik7Ci0jZWxzZQotICAgICAgICByZXR1 cm4gZGl2aWRlbnQgLyBkaXZpc29yOwotI2VuZGlmCi0KLSAgICB9Ci0KLX07Ci0KLQogdGVtcGxh dGU8dHlwZW5hbWUgY2hhbm5lbHNfdHlwZSwgdHlwZW5hbWUgcGl4ZWxfdHlwZSwgYm9vbCBhbHBo YUxvY2tlZCwgYm9vbCBhbGxDaGFubmVsc0ZsYWc+CiBzdHJ1Y3QgT3ZlckNvbXBvc2l0b3IzMiB7 CiAgICAgc3RydWN0IFBhcmFtc1dyYXBwZXIgewpAQCAtNTYsNTYgKzI1LDU4IEBAIHN0cnVjdCBP dmVyQ29tcG9zaXRvcjMyIHsKICAgICB9OwogCiAgICAgLy8gXHNlZSBkb2NzIGluIEFscGhhRGFy a2VuQ29tcG9zaXRvcjMyCi0gICAgdGVtcGxhdGU8Ym9vbCBoYXZlTWFzaywgYm9vbCBzcmNfYWxp Z25lZCwgVmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgorICAgIHRlbXBsYXRlPGJvb2wgaGF2ZU1h c2ssIGJvb2wgc3JjX2FsaWduZWQsIHR5cGVuYW1lIF9pbXBsPgogICAgIHN0YXRpYyBBTFdBWVNf SU5MSU5FIHZvaWQgY29tcG9zaXRlVmVjdG9yKGNvbnN0IHF1aW50OCAqc3JjLCBxdWludDggKmRz dCwgY29uc3QgcXVpbnQ4ICptYXNrLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBQYXJhbXNXcmFwcGVy ICZvcGFyYW1zKQogICAgIHsKICAgICAgICAgUV9VTlVTRUQob3BhcmFtcyk7CiAKLSAgICAgICAg VmM6OmZsb2F0X3Ygc3JjX2FscGhhOwotICAgICAgICBWYzo6ZmxvYXRfdiBkc3RfYWxwaGE7Cisg ICAgICAgIHVzaW5nIGZsb2F0X3YgPSB0eXBlbmFtZSBLb1N0cmVhbWVkTWF0aDxfaW1wbD46OmZs b2F0X3Y7CisKKyAgICAgICAgZmxvYXRfdiBzcmNfYWxwaGE7CisgICAgICAgIGZsb2F0X3YgZHN0 X2FscGhhOwogCiAgICAgICAgIHNyY19hbHBoYSA9IEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6dGVt cGxhdGUgZmV0Y2hfYWxwaGFfMzI8c3JjX2FsaWduZWQ+KHNyYyk7CiAKICAgICAgICAgYm9vbCBo YXZlT3BhY2l0eSA9IG9wYWNpdHkgIT0gMS4wZjsKLSAgICAgICAgVmM6OmZsb2F0X3Ygb3BhY2l0 eV9ub3JtX3ZlYyhvcGFjaXR5KTsKKyAgICAgICAgZmxvYXRfdiBvcGFjaXR5X25vcm1fdmVjKG9w YWNpdHkpOwogCi0gICAgICAgIFZjOjpmbG9hdF92IHVpbnQ4TWF4KDI1NS4wZik7Ci0gICAgICAg IFZjOjpmbG9hdF92IHVpbnQ4TWF4UmVjMSgxLjBmIC8gMjU1LjBmKTsKLSAgICAgICAgVmM6OmZs b2F0X3YgemVyb1ZhbHVlKFZjOjpaZXJvKTsKLSAgICAgICAgVmM6OmZsb2F0X3Ygb25lVmFsdWUo VmM6Ok9uZSk7CisgICAgICAgIGZsb2F0X3YgdWludDhNYXgoMjU1LjBmKTsKKyAgICAgICAgZmxv YXRfdiB1aW50OE1heFJlYzEoMS4wZiAvIDI1NS4wZik7CisgICAgICAgIGZsb2F0X3YgemVyb1Zh bHVlKDApOworICAgICAgICBmbG9hdF92IG9uZVZhbHVlKDEpOwogCiAgICAgICAgIHNyY19hbHBo YSAqPSBvcGFjaXR5X25vcm1fdmVjOwogCiAgICAgICAgIGlmIChoYXZlTWFzaykgewotICAgICAg ICAgICAgVmM6OmZsb2F0X3YgbWFza192ZWMgPSBLb1N0cmVhbWVkTWF0aDxfaW1wbD46OmZldGNo X21hc2tfOChtYXNrKTsKKyAgICAgICAgICAgIGZsb2F0X3YgbWFza192ZWMgPSBLb1N0cmVhbWVk TWF0aDxfaW1wbD46OmZldGNoX21hc2tfOChtYXNrKTsKICAgICAgICAgICAgIHNyY19hbHBoYSAq PSBtYXNrX3ZlYyAqIHVpbnQ4TWF4UmVjMTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBz b3VyY2UgY2Fubm90IGNoYW5nZSB0aGUgY29sb3JzIGluIHRoZSBkZXN0aW5hdGlvbiwKICAgICAg ICAgLy8gc2luY2UgaXRzIGZ1bGx5IHRyYW5zcGFyZW50Ci0gICAgICAgIGlmICgoc3JjX2FscGhh ID09IHplcm9WYWx1ZSkuaXNGdWxsKCkpIHsKKyAgICAgICAgaWYgKHhzaW1kOjphbGwoc3JjX2Fs cGhhID09IHplcm9WYWx1ZSkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg ICAgICAgIGRzdF9hbHBoYSA9IEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6dGVtcGxhdGUgZmV0Y2hf YWxwaGFfMzI8dHJ1ZT4oZHN0KTsKIAotICAgICAgICBWYzo6ZmxvYXRfdiBzcmNfYzE7Ci0gICAg ICAgIFZjOjpmbG9hdF92IHNyY19jMjsKLSAgICAgICAgVmM6OmZsb2F0X3Ygc3JjX2MzOworICAg ICAgICBmbG9hdF92IHNyY19jMTsKKyAgICAgICAgZmxvYXRfdiBzcmNfYzI7CisgICAgICAgIGZs b2F0X3Ygc3JjX2MzOwogCi0gICAgICAgIFZjOjpmbG9hdF92IGRzdF9jMTsKLSAgICAgICAgVmM6 OmZsb2F0X3YgZHN0X2MyOwotICAgICAgICBWYzo6ZmxvYXRfdiBkc3RfYzM7CisgICAgICAgIGZs b2F0X3YgZHN0X2MxOworICAgICAgICBmbG9hdF92IGRzdF9jMjsKKyAgICAgICAgZmxvYXRfdiBk c3RfYzM7CiAKIAogICAgICAgICBLb1N0cmVhbWVkTWF0aDxfaW1wbD46OnRlbXBsYXRlIGZldGNo X2NvbG9yc18zMjxzcmNfYWxpZ25lZD4oc3JjLCBzcmNfYzEsIHNyY19jMiwgc3JjX2MzKTsKLSAg ICAgICAgVmM6OmZsb2F0X3Ygc3JjX2JsZW5kOwotICAgICAgICBWYzo6ZmxvYXRfdiBuZXdfYWxw aGE7CisgICAgICAgIGZsb2F0X3Ygc3JjX2JsZW5kOworICAgICAgICBmbG9hdF92IG5ld19hbHBo YTsKIAotICAgICAgICBpZiAoKGRzdF9hbHBoYSA9PSB1aW50OE1heCkuaXNGdWxsKCkpIHsKKyAg ICAgICAgaWYgKHhzaW1kOjphbGwoZHN0X2FscGhhID09IHVpbnQ4TWF4KSkgewogICAgICAgICAg ICAgbmV3X2FscGhhID0gZHN0X2FscGhhOwogICAgICAgICAgICAgc3JjX2JsZW5kID0gc3JjX2Fs cGhhICogdWludDhNYXhSZWMxOwotICAgICAgICB9IGVsc2UgaWYgKChkc3RfYWxwaGEgPT0gemVy b1ZhbHVlKS5pc0Z1bGwoKSkgeworICAgICAgICB9IGVsc2UgaWYgKHhzaW1kOjphbGwoZHN0X2Fs cGhhID09IHplcm9WYWx1ZSkpIHsKICAgICAgICAgICAgIG5ld19hbHBoYSA9IHNyY19hbHBoYTsK ICAgICAgICAgICAgIHNyY19ibGVuZCA9IG9uZVZhbHVlOwogICAgICAgICB9IGVsc2UgewpAQCAt MTIzLDcgKzk0LDcgQEAgc3RydWN0IE92ZXJDb21wb3NpdG9yMzIgewogCiAgICAgICAgIH0KIAot ICAgICAgICBpZiAoIShzcmNfYmxlbmQgPT0gb25lVmFsdWUpLmlzRnVsbCgpKSB7CisgICAgICAg IGlmICgheHNpbWQ6OmFsbChzcmNfYmxlbmQgPT0gb25lVmFsdWUpKSB7CiAgICAgICAgICAgICBL b1N0cmVhbWVkTWF0aDxfaW1wbD46OnRlbXBsYXRlIGZldGNoX2NvbG9yc18zMjx0cnVlPihkc3Qs IGRzdF9jMSwgZHN0X2MyLCBkc3RfYzMpOwogCiAgICAgICAgICAgICBkc3RfYzEgPSBzcmNfYmxl bmQgKiAoc3JjX2MxIC0gZHN0X2MxKSArIGRzdF9jMTsKQEAgLTEzMiw3ICsxMDMsNyBAQCBzdHJ1 Y3QgT3ZlckNvbXBvc2l0b3IzMiB7CiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm ICghaGF2ZU1hc2sgJiYgIWhhdmVPcGFjaXR5KSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGRz dCwgc3JjLCA0ICogVmM6OmZsb2F0X3Y6OnNpemUoKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5 KGRzdCwgc3JjLCA0ICogZmxvYXRfdjo6c2l6ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBvcGFjaXR5IGhhcyBjaGFu Z2VkIHRoZSBhbHBoYSBvZiB0aGUgc291cmNlLApAQCAtMTQ2LDcgKzExNyw3IEBAIHN0cnVjdCBP dmVyQ29tcG9zaXRvcjMyIHsKICAgICAgICAgS29TdHJlYW1lZE1hdGg8X2ltcGw+Ojp3cml0ZV9j aGFubmVsc18zMihkc3QsIG5ld19hbHBoYSwgZHN0X2MxLCBkc3RfYzIsIGRzdF9jMyk7CiAgICAg fQogCi0gICAgdGVtcGxhdGUgPGJvb2wgaGF2ZU1hc2ssIFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1w bD4KKyAgICB0ZW1wbGF0ZSA8Ym9vbCBoYXZlTWFzaywgdHlwZW5hbWUgX2ltcGw+CiAgICAgc3Rh dGljIEFMV0FZU19JTkxJTkUgdm9pZCBjb21wb3NpdGVPbmVQaXhlbFNjYWxhcihjb25zdCBjaGFu bmVsc190eXBlICpzcmMsIGNoYW5uZWxzX3R5cGUgKmRzdCwgY29uc3QgcXVpbnQ4ICptYXNrLCBm bG9hdCBvcGFjaXR5LCBjb25zdCBQYXJhbXNXcmFwcGVyICZvcGFyYW1zKQogICAgIHsKICAgICAg ICAgdXNpbmcgbmFtZXNwYWNlIEFyaXRobWV0aWM7CkBAIC0yMjcsNyArMTk4LDcgQEAgc3RydWN0 IE92ZXJDb21wb3NpdG9yMzIgewogICogY29sb3JzcGFjZXMgd2l0aCBhbHBoYSBjaGFubmVsIHBs YWNlZCBhdCB0aGUgbGFzdCBieXRlIG9mCiAgKiB0aGUgcGl4ZWw6IEMxX0MyX0MzX0EuCiAgKi8K LXRlbXBsYXRlPFZjOjpJbXBsZW1lbnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIF9p bXBsPgogY2xhc3MgS29PcHRpbWl6ZWRDb21wb3NpdGVPcE92ZXIzMiA6IHB1YmxpYyBLb0NvbXBv c2l0ZU9wCiB7CiBwdWJsaWM6CkBAIC0yMzYsNyArMjA3LDcgQEAgcHVibGljOgogCiAgICAgdXNp bmcgS29Db21wb3NpdGVPcDo6Y29tcG9zaXRlOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0 ZShjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZvJiBwYXJhbXMpIGNvbnN0CisgICAg dm9pZCBjb21wb3NpdGUoY29uc3QgS29Db21wb3NpdGVPcDo6UGFyYW1ldGVySW5mbyYgcGFyYW1z KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYocGFyYW1zLm1hc2tSb3dTdGFydCkg ewogICAgICAgICAgICAgY29tcG9zaXRlPHRydWU+KHBhcmFtcyk7CmRpZmYgLS1naXQgYS9saWJz L3BpZ21lbnQvY29tcG9zaXRlb3BzL0tvU3RyZWFtZWRNYXRoLmggYi9saWJzL3BpZ21lbnQvY29t cG9zaXRlb3BzL0tvU3RyZWFtZWRNYXRoLmgKaW5kZXggNzk3OTMwMTkxZS4uNTk0OTFjOTlkNCAx MDA2NDQKLS0tIGEvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb1N0cmVhbWVkTWF0aC5oCisr KyBiL2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29TdHJlYW1lZE1hdGguaApAQCAtMSw2ICsx LDcgQEAKIC8qCiAgKiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxMiBEbWl0cnkgS2F6YWtv diA8ZGltdWxhNzNAZ21haWwuY29tPgogICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAg TWF0aGlhcyBXZWluIDxseW54Lm13K2tkZUBnbWFpbC5jb20+CisgKiAgU1BEWC1GaWxlQ29weXJp Z2h0VGV4dDogMjAyMiBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+CiAgKgogICogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xLW9yLWxhdGVyCiAgKi8KQEAgLTgsMzkgKzks MjEgQEAKICNpZm5kZWYgX19LT1NUUkVBTUVEX01BVEhfSAogI2RlZmluZSBfX0tPU1RSRUFNRURf TUFUSF9ICiAKLSNpZiBkZWZpbmVkIF9NU0NfVkVSCi0vLyBMZXRzIHNodXQgdXAgdGhlICJwb3Nz aWJsZSBsb3NzIG9mIGRhdGEiIGFuZCAiZm9yY2luZyB2YWx1ZSB0byBib29sICd0cnVlJyBvciAn ZmFsc2UnCi0jcHJhZ21hIHdhcm5pbmcgKCBwdXNoICkKLSNwcmFnbWEgd2FybmluZyAoIGRpc2Fi bGUgOiA0MTQ2ICkgLy8gYXZ4L2RldGFpbC5oCi0jcHJhZ21hIHdhcm5pbmcgKCBkaXNhYmxlIDog NDI0NCApCi0jcHJhZ21hIHdhcm5pbmcgKCBkaXNhYmxlIDogNDI2NyApIC8vIGludGVybGVhdmVk bWVtb3J5Ci0jcHJhZ21hIHdhcm5pbmcgKCBkaXNhYmxlIDogNDgwMCApCi0jZW5kaWYKLSNpbmNs dWRlIDxWYy9WYz4KLSNpbmNsdWRlIDxWYy9JTz4KLSNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KLSNp ZiBkZWZpbmVkIF9NU0NfVkVSCi0jcHJhZ21hIHdhcm5pbmcgKCBwb3AgKQotI2VuZGlmCi0KICNp bmNsdWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHR5cGVfdHJh aXRzPgorI2luY2x1ZGUgPHhzaW1kX2V4dGVuc2lvbnMveHNpbWQuaHBwPgorCiAjaW5jbHVkZSA8 S29BbHdheXNJbmxpbmUuaD4KLSNpbmNsdWRlIDxLb0NvbXBvc2l0ZU9wLmg+CiAjaW5jbHVkZSA8 S29Db2xvclNwYWNlTWF0aHMuaD4KKyNpbmNsdWRlIDxLb0NvbXBvc2l0ZU9wLmg+CiAKICNkZWZp bmUgQkxPQ0tERUJVRyAwCiAKLSNpZiAhZGVmaW5lZCBfTVNDX1ZFUgotI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBpZ25vcmVkICItV2Nhc3QtYWxpZ24iCi0jZW5kaWYKLQotCi10ZW1wbGF0ZTxWYzo6 SW1wbGVtZW50YXRpb24gX2ltcGw+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4KIHN0cnVjdCBP cHRpUm91bmQgewotICAgIEFMV0FZU19JTkxJTkUKLSAgICBzdGF0aWMgZmxvYXQgcm91bmRTY2Fs YXIoY29uc3QgZmxvYXQmIHZhbHVlKSB7CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgZmxvYXQg cm91bmRTY2FsYXIoY29uc3QgZmxvYXQgJnZhbHVlKQorICAgIHsKICNpZmRlZiBfX1NTRTRfMV9f CiAgICAgICAgIC8vIFNTRS9BVlggaW5zdHJ1Y3Rpb25zIHVzZSByb3VuZC10by1ldmVuIHJvdW5k aW5nIHJ1bGUgc28gd2UKICAgICAgICAgLy8gc2hvdWxkIHJldXNlIGl0IHdoZW4gcG9zc2libGUK QEAgLTU2LDQyNSArMzksNDEyIEBAIHN0cnVjdCBPcHRpUm91bmQgewogI2Vsc2UKICAgICAgICAg cmV0dXJuIHZhbHVlICsgMC41ZjsKICNlbmRpZgotCiAgICAgfQogfTsKIAotdGVtcGxhdGU8VmM6 OkltcGxlbWVudGF0aW9uIF9pbXBsPgotc3RydWN0IEtvU3RyZWFtZWRNYXRoIHsKLQotdXNpbmcg aW50X3YgPSBWYzo6U2ltZEFycmF5PGludCwgVmM6OmZsb2F0X3Y6OnNpemUoKT47Ci11c2luZyB1 aW50X3YgPSBWYzo6U2ltZEFycmF5PHVuc2lnbmVkIGludCwgVmM6OmZsb2F0X3Y6OnNpemUoKT47 Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4KK3N0cnVjdCBPcHRpRGl2IHsKKyAgICB1c2luZyBm bG9hdF92ID0geHNpbWQ6OmJhdGNoPGZsb2F0LCBfaW1wbD47CiAKKyAgICBBTFdBWVNfSU5MSU5F IHN0YXRpYyBmbG9hdCBkaXZTY2FsYXIoY29uc3QgZmxvYXQgJmRpdmlkZW50LCBjb25zdCBmbG9h dCAmZGl2aXNvcikKKyAgICB7CisjaWZkZWYgX19TU0VfXworICAgICAgICBmbG9hdCByZXN1bHQg PSBOQU47CiAKLS8qKgotICogQ29tcG9zZXMgc3JjIGludG8gZHN0IHdpdGhvdXQgdXNpbmcgdmVj dG9yIGluc3RydWN0aW9ucwotICovCi10ZW1wbGF0ZTxib29sIHVzZU1hc2ssIGJvb2wgdXNlRmxv dywgY2xhc3MgQ29tcG9zaXRvciwgaW50IHBpeGVsU2l6ZT4KLSAgICBzdGF0aWMgdm9pZCBnZW5l cmljQ29tcG9zaXRlX25vdmVjdG9yKGNvbnN0IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8m IHBhcmFtcykKLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgQXJpdGhtZXRpYzsKKyAgICAgICAgX19t MTI4IHggPSBfbW1fc2V0X3NzKGRpdmlzb3IpOworICAgICAgICBfX20xMjggeSA9IF9tbV9zZXRf c3MoZGl2aWRlbnQpOworICAgICAgICB4ID0gX21tX3JjcF9zcyh4KTsKKyAgICAgICAgeCA9IF9t bV9tdWxfc3MoeCwgeSk7CiAKLSAgICBjb25zdCBxaW50MzIgbGluZWFySW5jID0gcGl4ZWxTaXpl OwotICAgIHFpbnQzMiBzcmNMaW5lYXJJbmMgPSBwYXJhbXMuc3JjUm93U3RyaWRlID8gcGl4ZWxT aXplIDogMDsKKyAgICAgICAgX21tX3N0b3JlX3NzKCZyZXN1bHQsIHgpOworICAgICAgICByZXR1 cm4gcmVzdWx0OworI2VsaWYgZGVmaW5lZCBfX0FSTV9ORU9OCisgICAgICAgIGF1dG8geCA9IHZk dXBxX25fZjMyKGRpdmlzb3IpOworICAgICAgICBhdXRvIHkgPSB2ZHVwcV9uX2YzMihkaXZpZGVu dCk7CisgICAgICAgIHggPSB2cmVjcGVxX2YzMih4KTsKKyAgICAgICAgeCA9IHZtdWxxX2YzMih4 LCB5KTsKIAotICAgIHF1aW50OCogICAgICAgZHN0Um93U3RhcnQgID0gcGFyYW1zLmRzdFJvd1N0 YXJ0OwotICAgIGNvbnN0IHF1aW50OCogbWFza1Jvd1N0YXJ0ID0gcGFyYW1zLm1hc2tSb3dTdGFy dDsKLSAgICBjb25zdCBxdWludDgqIHNyY1Jvd1N0YXJ0ICA9IHBhcmFtcy5zcmNSb3dTdGFydDsK LSAgICB0eXBlbmFtZSBDb21wb3NpdG9yOjpQYXJhbXNXcmFwcGVyIHBhcmFtc1dyYXBwZXIocGFy YW1zKTsKKyAgICAgICAgcmV0dXJuIHZnZXRxX2xhbmVfZjMyKHgsIDApOworI2Vsc2UKKyAgICAg ICAgcmV0dXJuICgxLmYgLyBkaXZpc29yKSAqIGRpdmlkZW50OworI2VuZGlmCisgICAgfQogCi0g ICAgZm9yKHFpbnQzMiByID0gcGFyYW1zLnJvd3M7IHIgPiAwOyAtLXIpIHsKLSAgICAgICAgY29u c3QgcXVpbnQ4ICptYXNrID0gbWFza1Jvd1N0YXJ0OwotICAgICAgICBjb25zdCBxdWludDggKnNy YyAgPSBzcmNSb3dTdGFydDsKLSAgICAgICAgcXVpbnQ4ICAgICAgICpkc3QgID0gZHN0Um93U3Rh cnQ7CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgZmxvYXRfdiBkaXZWZWN0b3IoY29uc3QgZmxv YXRfdiAmZGl2aWRlbnQsIGNvbnN0IGZsb2F0X3YgJmRpdmlzb3IpCisgICAgeworICAgICAgICBy ZXR1cm4gZGl2aWRlbnQgKiB4c2ltZDo6cmVjaXByb2NhbChkaXZpc29yKTsKKyAgICB9Cit9Owog Ci0gICAgICAgIGludCBibG9ja1Jlc3QgPSBwYXJhbXMuY29sczsKK3RlbXBsYXRlPHR5cGVuYW1l IF9pbXBsPgorc3RydWN0IEtvU3RyZWFtZWRNYXRoIHsKKyAgICB1c2luZyBpbnRfdiA9IHhzaW1k OjpiYXRjaDxpbnQsIF9pbXBsPjsKKyAgICB1c2luZyB1aW50X3YgPSB4c2ltZDo6YmF0Y2g8dW5z aWduZWQgaW50LCBfaW1wbD47CisgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxmbG9h dCwgX2ltcGw+OwogCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBibG9ja1Jlc3Q7IGkrKykg ewotICAgICAgICAgICAgQ29tcG9zaXRvcjo6dGVtcGxhdGUgY29tcG9zaXRlT25lUGl4ZWxTY2Fs YXI8dXNlTWFzaywgX2ltcGw+KHNyYywgZHN0LCBtYXNrLCBwYXJhbXMub3BhY2l0eSwgcGFyYW1z V3JhcHBlcik7Ci0gICAgICAgICAgICBzcmMgKz0gc3JjTGluZWFySW5jOwotICAgICAgICAgICAg ZHN0ICs9IGxpbmVhckluYzsKKyAgICBzdGF0aWNfYXNzZXJ0KGludF92OjpzaXplID09IHVpbnRf djo6c2l6ZSwgInRoZSBzZWxlY3RlZCBhcmNoaXRlY3R1cmUgZG9lcyBub3QgZ3VhcmFudGVlIHZl Y3RvciBzaXplIGVxdWFsaXR5ISIpOworICAgIHN0YXRpY19hc3NlcnQodWludF92OjpzaXplID09 IGZsb2F0X3Y6OnNpemUsICJ0aGUgc2VsZWN0ZWQgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGd1YXJh bnRlZSB2ZWN0b3Igc2l6ZSBlcXVhbGl0eSEiKTsKIAotICAgICAgICAgICAgaWYgKHVzZU1hc2sp IHsKLSAgICAgICAgICAgICAgICBtYXNrKys7CisgICAgLyoqCisgICAgICogQ29tcG9zZXMgc3Jj IGludG8gZHN0IHdpdGhvdXQgdXNpbmcgdmVjdG9yIGluc3RydWN0aW9ucworICAgICAqLworICAg IHRlbXBsYXRlPGJvb2wgdXNlTWFzaywgYm9vbCB1c2VGbG93LCBjbGFzcyBDb21wb3NpdG9yLCBp bnQgcGl4ZWxTaXplPgorICAgIHN0YXRpYyB2b2lkIGdlbmVyaWNDb21wb3NpdGVfbm92ZWN0b3Io Y29uc3QgS29Db21wb3NpdGVPcDo6UGFyYW1ldGVySW5mbyAmcGFyYW1zKQorICAgIHsKKyAgICAg ICAgdXNpbmcgbmFtZXNwYWNlIEFyaXRobWV0aWM7CisKKyAgICAgICAgY29uc3QgcWludDMyIGxp bmVhckluYyA9IHBpeGVsU2l6ZTsKKyAgICAgICAgcWludDMyIHNyY0xpbmVhckluYyA9IHBhcmFt cy5zcmNSb3dTdHJpZGUgPyBwaXhlbFNpemUgOiAwOworCisgICAgICAgIHF1aW50OCAqZHN0Um93 U3RhcnQgPSBwYXJhbXMuZHN0Um93U3RhcnQ7CisgICAgICAgIGNvbnN0IHF1aW50OCAqbWFza1Jv d1N0YXJ0ID0gcGFyYW1zLm1hc2tSb3dTdGFydDsKKyAgICAgICAgY29uc3QgcXVpbnQ4ICpzcmNS b3dTdGFydCA9IHBhcmFtcy5zcmNSb3dTdGFydDsKKyAgICAgICAgdHlwZW5hbWUgQ29tcG9zaXRv cjo6UGFyYW1zV3JhcHBlciBwYXJhbXNXcmFwcGVyKHBhcmFtcyk7CisKKyAgICAgICAgZm9yIChx aW50MzIgciA9IHBhcmFtcy5yb3dzOyByID4gMDsgLS1yKSB7CisgICAgICAgICAgICBjb25zdCBx dWludDggKm1hc2sgPSBtYXNrUm93U3RhcnQ7CisgICAgICAgICAgICBjb25zdCBxdWludDggKnNy YyA9IHNyY1Jvd1N0YXJ0OworICAgICAgICAgICAgcXVpbnQ4ICpkc3QgPSBkc3RSb3dTdGFydDsK KworICAgICAgICAgICAgaW50IGJsb2NrUmVzdCA9IHBhcmFtcy5jb2xzOworCisgICAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrUmVzdDsgaSsrKSB7CisgICAgICAgICAgICAgICAg Q29tcG9zaXRvcjo6dGVtcGxhdGUgY29tcG9zaXRlT25lUGl4ZWxTY2FsYXI8dXNlTWFzaywgX2lt cGw+KHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BhY2l0eSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFyYW1zV3JhcHBlcik7CisgICAgICAgICAgICAgICAgc3JjICs9IHNyY0xpbmVhcklu YzsKKyAgICAgICAgICAgICAgICBkc3QgKz0gbGluZWFySW5jOworCisgICAgICAgICAgICAgICAg aWYgKHVzZU1hc2spIHsKKyAgICAgICAgICAgICAgICAgICAgbWFzaysrOworICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIHNyY1Jvd1N0YXJ0ICAr PSBwYXJhbXMuc3JjUm93U3RyaWRlOwotICAgICAgICBkc3RSb3dTdGFydCAgKz0gcGFyYW1zLmRz dFJvd1N0cmlkZTsKKyAgICAgICAgICAgIHNyY1Jvd1N0YXJ0ICs9IHBhcmFtcy5zcmNSb3dTdHJp ZGU7CisgICAgICAgICAgICBkc3RSb3dTdGFydCArPSBwYXJhbXMuZHN0Um93U3RyaWRlOwogCi0g ICAgICAgIGlmICh1c2VNYXNrKSB7Ci0gICAgICAgICAgICBtYXNrUm93U3RhcnQgKz0gcGFyYW1z Lm1hc2tSb3dTdHJpZGU7CisgICAgICAgICAgICBpZiAodXNlTWFzaykgeworICAgICAgICAgICAg ICAgIG1hc2tSb3dTdGFydCArPSBwYXJhbXMubWFza1Jvd1N0cmlkZTsKKyAgICAgICAgICAgIH0K ICAgICAgICAgfQogICAgIH0KLX0KIAotdGVtcGxhdGU8Ym9vbCB1c2VNYXNrLCBib29sIHVzZUZs b3csIGNsYXNzIENvbXBvc2l0b3I+Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZTMy X25vdmVjdG9yKGNvbnN0IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8mIHBhcmFtcykKLXsK LSAgICBnZW5lcmljQ29tcG9zaXRlX25vdmVjdG9yPHVzZU1hc2ssIHVzZUZsb3csIENvbXBvc2l0 b3IsIDQ+KHBhcmFtcyk7Ci19CisgICAgdGVtcGxhdGU8Ym9vbCB1c2VNYXNrLCBib29sIHVzZUZs b3csIGNsYXNzIENvbXBvc2l0b3I+CisgICAgc3RhdGljIHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZTMy X25vdmVjdG9yKGNvbnN0IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8gJnBhcmFtcykKKyAg ICB7CisgICAgICAgIGdlbmVyaWNDb21wb3NpdGVfbm92ZWN0b3I8dXNlTWFzaywgdXNlRmxvdywg Q29tcG9zaXRvciwgND4ocGFyYW1zKTsKKyAgICB9CiAKLXRlbXBsYXRlPGJvb2wgdXNlTWFzaywg Ym9vbCB1c2VGbG93LCBjbGFzcyBDb21wb3NpdG9yPgotICAgIHN0YXRpYyB2b2lkIGdlbmVyaWND b21wb3NpdGUxMjhfbm92ZWN0b3IoY29uc3QgS29Db21wb3NpdGVPcDo6UGFyYW1ldGVySW5mbyYg cGFyYW1zKQotewotICAgIGdlbmVyaWNDb21wb3NpdGVfbm92ZWN0b3I8dXNlTWFzaywgdXNlRmxv dywgQ29tcG9zaXRvciwgMTY+KHBhcmFtcyk7Ci19CisgICAgdGVtcGxhdGU8Ym9vbCB1c2VNYXNr LCBib29sIHVzZUZsb3csIGNsYXNzIENvbXBvc2l0b3I+CisgICAgc3RhdGljIHZvaWQgZ2VuZXJp Y0NvbXBvc2l0ZTEyOF9ub3ZlY3Rvcihjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZv ICZwYXJhbXMpCisgICAgeworICAgICAgICBnZW5lcmljQ29tcG9zaXRlX25vdmVjdG9yPHVzZU1h c2ssIHVzZUZsb3csIENvbXBvc2l0b3IsIDE2PihwYXJhbXMpOworICAgIH0KIAotdGVtcGxhdGU8 Ym9vbCB1c2VNYXNrLCBib29sIHVzZUZsb3csIGNsYXNzIENvbXBvc2l0b3I+Ci0gICAgc3RhdGlj IHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZTY0X25vdmVjdG9yKGNvbnN0IEtvQ29tcG9zaXRlT3A6OlBh cmFtZXRlckluZm8mIHBhcmFtcykKLXsKLSAgICBnZW5lcmljQ29tcG9zaXRlX25vdmVjdG9yPHVz ZU1hc2ssIHVzZUZsb3csIENvbXBvc2l0b3IsIDg+KHBhcmFtcyk7Ci19CisgICAgdGVtcGxhdGU8 Ym9vbCB1c2VNYXNrLCBib29sIHVzZUZsb3csIGNsYXNzIENvbXBvc2l0b3I+CisgICAgc3RhdGlj IHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZTY0X25vdmVjdG9yKGNvbnN0IEtvQ29tcG9zaXRlT3A6OlBh cmFtZXRlckluZm8gJnBhcmFtcykKKyAgICB7CisgICAgICAgIGdlbmVyaWNDb21wb3NpdGVfbm92 ZWN0b3I8dXNlTWFzaywgdXNlRmxvdywgQ29tcG9zaXRvciwgOD4ocGFyYW1zKTsKKyAgICB9CiAK LXN0YXRpYyBpbmxpbmUgcXVpbnQ4IHJvdW5kX2Zsb2F0X3RvX3U4KGZsb2F0IHgpIHsKLSAgICBy ZXR1cm4gT3B0aVJvdW5kPF9pbXBsPjo6cm91bmRTY2FsYXIoeCk7Ci19CisgICAgc3RhdGljIGlu bGluZSBxdWludDggcm91bmRfZmxvYXRfdG9fdTgoZmxvYXQgeCkKKyAgICB7CisgICAgICAgIHJl dHVybiBPcHRpUm91bmQ8X2ltcGw+Ojpyb3VuZFNjYWxhcih4KTsKKyAgICB9CiAKLXN0YXRpYyBp bmxpbmUgcXVpbnQ4IGxlcnBfbWl4ZWRfdThfZmxvYXQocXVpbnQ4IGEsIHF1aW50OCBiLCBmbG9h dCBhbHBoYSkgewotICAgIHJldHVybiByb3VuZF9mbG9hdF90b191OChxaW50MTYoYiAtIGEpICog YWxwaGEgKyBhKTsKLX0KKyAgICBzdGF0aWMgaW5saW5lIHF1aW50OCBsZXJwX21peGVkX3U4X2Zs b2F0KHF1aW50OCBhLCBxdWludDggYiwgZmxvYXQgYWxwaGEpCisgICAgeworICAgICAgICByZXR1 cm4gcm91bmRfZmxvYXRfdG9fdTgoZmxvYXQoYiAtIGEpICogYWxwaGEgKyBmbG9hdChhKSk7Cisg ICAgfQogCi0vKioKLSAqIFJvdW5kIGEgdmVjdG9yIG9mIGZsb2F0cyB0byB0aGUgbmV4dCBjb3Jy ZXNwb25kaW5nIGludGVnZXJzLgotICovCi1zdGF0aWMgaW5saW5lIGludF92IGlSb3VuZChWYzo6 ZmxvYXRfdjo6QXNBcmcgYSkKLXsKLSNpZiBkZWZpbmVkKFZjX0lNUExfQVZYMikKLSAgICByZXR1 cm4gVmM6OnNpbWRfY2FzdDxpbnRfdj4oVmM6OmludF92KF9tbTI1Nl9jdnRwc19lcGkzMihhLmRh dGEoKSkpKTsKLSNlbGlmIGRlZmluZWQoVmNfSU1QTF9BVlgpCiAgICAgLyoqCi0gICAgICogV0FS TklORzogVmMsIG9uIEFWWCwgc3VwcGxpZXMgMjU2LWJpdCBmbG9hdGluZyBwb2ludCB2ZWN0b3Jz IGJ1dCBzdGF5cwotICAgICAqIGluIFNTRSBsYW5kIGZvciBpbnRlZ2Vycy4gSXQgaXMgbm90IHBv c3NpYmxlIHRvIGNhc3QgYmV0d2VlbiBWYzo6aW50X3YKLSAgICAgKiBhbmQgdWludF92IHdpdGhv dXQgYSBjdXN0b20gU0lNRCB0eXBlLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBsb3NlIHRoZQotICAg ICAqIFhNTTEgcmVnaXN0ZXIuIEJ5IHVzaW5nIHN1Y2ggYSB0eXBlOgotICAgICAqICAgIHVzaW5n IGF2eF9pbnRfdiA9IFZjOjpWZWN0b3I8VmM6OmludF92OjpFbnRyeVR5cGUsIFZjOjpmbG9hdF92 OjphYmk+OwotICAgICAqICAgIHN0YXRpY19hc3NlcnQoaW50X3Y6OnNpemUoKSA9PSBhdnhfaW50 X3Y6OnNpemUoKSwKLSAgICAgKiAgICAgICAgICAgICAgICAgICJ1aW50X3YgbXVzdCBtYXRjaCB0 aGUgQVZYIHBsYWNlaG9sZGVyIik7Ci0gICAgICogYW5kIGNvcHlpbmcgdGhlIGVudHJpZXMgbWFu dWFsbHksIGEgc21hcnQgY29tcGlsZXIgY2FuIGRvIGEgc2luZ2xlIG1vdmUKLSAgICAgKiB0byBt ZW1vcnkgKENsYW5nIDEyKToKLSAgICAgKiAgICBtb3YgICAgIHJheCwgcmRpCi0gICAgICogICAg dmN2dHBzMmRxICAgICAgIHltbTAsIHltbTAKLSAgICAgKiAgICB2bW92YXBkIHltbXdvcmQgcHRy IFtyZGldLCB5bW0wCi0gICAgICogICAgdnplcm91cHBlciAvLyB1c2VsZXNzIHNpbmNlIGl0J3Mg YWxyZWFkeSBzdG9yZWQgaW4gW3JkaV0KLSAgICAgKiAgICByZXQKLSAgICAgKiBHQ0MgNS41IGFu ZCA3LjMsIGFzIHdlbGwgYXMgTVNWQywgZG8gbm90IG9wdGltaXplIHN1Y2ggbWFudWFsIGNvcHlp bmc7Ci0gICAgICogYnV0IGJ5IGhhbmRsaW5nIHRoZSBpbnRlcm5hbCByZWdpc3RlcnMgdGhlbXNl bHZlcyAoYXMgZG9uZSBiZWxvdyksCi0gICAgICogd2UgYWNoaWV2ZSB0aGUgZm9sbG93aW5nIHdo aWxlIHN0aWxsIHByZXNlcnZpbmcgQ2xhbmcgMTIncyBvcHRpbWl6YXRpb246Ci0gICAgICogICAg bW92ICAgICByYXgsIHJkaQotICAgICAqICAgIHZjdnRwczJkcSAgICAgICB5bW0wLCB5bW0wCi0g ICAgICogICAgdmV4dHJhY3RmMTI4ICAgIFhNTVdPUkQgUFRSIFtyZGkrMTZdLCB5bW0wLCAweDEK LSAgICAgKiAgICB2bW92YXBzIFhNTVdPUkQgUFRSIFtyZGldLCB4bW0wIC8vIHZtb3ZkcXUgd2l0 aCBNU1ZDCi0gICAgICogICAgdnplcm91cHBlciAvLyBzYW1lIGFzIGFib3ZlCi0gICAgICogICAg cmV0CisgICAgICogR2V0IGEgdmVjdG9yIGNvbnRhaW5pbmcgZmlyc3QgZmxvYXRfdjo6c2l6ZSB2 YWx1ZXMgb2YgbWFzay4KKyAgICAgKiBFYWNoIHNvdXJjZSBtYXNrIGVsZW1lbnQgaXMgY29uc2lk ZXJlZCB0byBiZSBhIDgtYml0IGludGVnZXIKICAgICAgKi8KKyAgICBzdGF0aWMgaW5saW5lIGZs b2F0X3YgZmV0Y2hfbWFza184KGNvbnN0IHF1aW50OCAqZGF0YSkKKyAgICB7CisgICAgICAgIHJl dHVybiB4c2ltZDo6YmF0Y2hfY2FzdDxmbG9hdD4oeHNpbWQ6OmxvYWRfYW5kX2V4dGVuZDxpbnRf dj4oZGF0YSkpOworICAgIH0KIAotICAgIF9fbTI1NmkgdGVtcChfbW0yNTZfY3Z0cHNfZXBpMzIo YS5kYXRhKCkpKTsKLSAgICBpbnRfdiByZXM7CisgICAgLyoqCisgICAgICogR2V0IGFuIGFscGhh IHZhbHVlcyBmcm9tIGZsb2F0X3Y6OnNpemUgcGl4ZWxzIDMyLWJpdCBlYWNoCisgICAgICogKDQg Y2hhbm5lbHMsIDggYml0IHBlciBjaGFubmVsKS4gIFRoZSBhbHBoYSB2YWx1ZSBpcyBjb25zaWRl cmVkCisgICAgICogdG8gYmUgc3RvcmVkIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgb2Yg dGhlIHBpeGVsCisgICAgICoKKyAgICAgKiBccCBhbGlnbmVkIGNvbnRyb2xzIHdoZXRoZXIgdGhl IFxwIGRhdGEgaXMgZmV0Y2hlZCB1c2luZyBhbGlnbmVkCisgICAgICogICAgICAgICAgICBpbnN0 cnVjdGlvbiBvciBub3QuCisgICAgICogICAgICAgICAgICAxKSBGZXRjaGluZyBhbGlnbmVkIGRh dGEgd2l0aCB1bmFsaWduZWQgaW5zdHJ1Y3Rpb24KKyAgICAgKiAgICAgICAgICAgICAgIGRlZ3Jh ZGVzIHBlcmZvcm1hbmNlLgorICAgICAqICAgICAgICAgICAgMikgRmV0Y2hpbmcgdW5hbGlnbmVk IGRhdGEgd2l0aCBhbGlnbmVkIGluc3RydWN0aW9uCisgICAgICogICAgICAgICAgICAgICBjYXVz ZXMgXCNHUCAoR2VuZXJhbCBQcm90ZWN0aW9uIEV4Y2VwdGlvbikKKyAgICAgKi8KKyAgICB0ZW1w bGF0ZTxib29sIGFsaWduZWQ+CisgICAgc3RhdGljIGlubGluZSBmbG9hdF92IGZldGNoX2FscGhh XzMyKGNvbnN0IHZvaWQgKmRhdGEpCisgICAgeworICAgICAgICB1c2luZyBVID0gdHlwZW5hbWUg c3RkOjpjb25kaXRpb25hbDxhbGlnbmVkLCB4c2ltZDo6YWxpZ25lZF9tb2RlLCB4c2ltZDo6dW5h bGlnbmVkX21vZGU+Ojp0eXBlOworICAgICAgICBjb25zdCBhdXRvIGRhdGFfaSA9IHVpbnRfdjo6 bG9hZChzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSB1aW50X3Y6OnZhbHVlX3R5cGUgKj4oZGF0 YSksIFV7fSk7CisgICAgICAgIHJldHVybiB4c2ltZDo6dG9fZmxvYXQoeHNpbWQ6OmJpdHdpc2Vf Y2FzdDxpbnRfdj4oZGF0YV9pID4+IDI0KSk7CisgICAgfQogCi0gICAgaW50ZXJuYWxfZGF0YShp bnRlcm5hbF9kYXRhMShyZXMpKSA9IFZjXzE6OkFWWDo6aGkxMjgodGVtcCk7Ci0gICAgaW50ZXJu YWxfZGF0YShpbnRlcm5hbF9kYXRhMChyZXMpKSA9IFZjXzE6OkFWWDo6bG8xMjgodGVtcCk7Cisg ICAgLyoqCisgICAgICogR2V0IGNvbG9yIHZhbHVlcyBmcm9tIGZsb2F0X3Y6OnNpemUgcGl4ZWxz IDMyLWJpdCBlYWNoCisgICAgICogKDQgY2hhbm5lbHMsIDggYml0IHBlciBjaGFubmVsKS4gIFRo ZSBjb2xvciBkYXRhIGlzIGNvbnNpZGVyZWQKKyAgICAgKiB0byBiZSBzdG9yZWQgaW4gdGhlIDMg bGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZXMgb2YgdGhlIHBpeGVsLgorICAgICAqCisgICAgICogXHAg YWxpZ25lZCBjb250cm9scyB3aGV0aGVyIHRoZSBccCBkYXRhIGlzIGZldGNoZWQgdXNpbmcgYWxp Z25lZAorICAgICAqICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gb3Igbm90LgorICAgICAqICAgICAg ICAgICAgMSkgRmV0Y2hpbmcgYWxpZ25lZCBkYXRhIHdpdGggdW5hbGlnbmVkIGluc3RydWN0aW9u CisgICAgICogICAgICAgICAgICAgICBkZWdyYWRlcyBwZXJmb3JtYW5jZS4KKyAgICAgKiAgICAg ICAgICAgIDIpIEZldGNoaW5nIHVuYWxpZ25lZCBkYXRhIHdpdGggYWxpZ25lZCBpbnN0cnVjdGlv bgorICAgICAqICAgICAgICAgICAgICAgY2F1c2VzIFwjR1AgKEdlbmVyYWwgUHJvdGVjdGlvbiBF eGNlcHRpb24pCisgICAgICovCisgICAgdGVtcGxhdGU8Ym9vbCBhbGlnbmVkPgorICAgIHN0YXRp YyBpbmxpbmUgdm9pZCBmZXRjaF9jb2xvcnNfMzIoY29uc3Qgdm9pZCAqZGF0YSwgZmxvYXRfdiAm YzEsIGZsb2F0X3YgJmMyLCBmbG9hdF92ICZjMykKKyAgICB7CisgICAgICAgIHVzaW5nIFUgPSB0 eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPGFsaWduZWQsIHhzaW1kOjphbGlnbmVkX21vZGUsIHhz aW1kOjp1bmFsaWduZWRfbW9kZT46OnR5cGU7CiAKLSAgICByZXR1cm4gcmVzOwotI2VsaWYgZGVm aW5lZChWY19JTVBMX1NTRTIpCi0gICAgcmV0dXJuIFZjOjpzaW1kX2Nhc3Q8aW50X3Y+KFZjOjpp bnRfdihfbW1fY3Z0cHNfZXBpMzIoYS5kYXRhKCkpKSk7Ci0jZWxzZQotICAgIHJldHVybiBWYzo6 c2ltZF9jYXN0PGludF92PihWYzo6cm91bmQoYSkpOwotI2VuZGlmCi19CisgICAgICAgIGNvbnN0 IGF1dG8gZGF0YV9pID0gdWludF92Ojpsb2FkKHN0YXRpY19jYXN0PGNvbnN0IHR5cGVuYW1lIHVp bnRfdjo6dmFsdWVfdHlwZSAqPihkYXRhKSwgVXt9KTsKIAotLyoqCi0gKiBHZXQgYSB2ZWN0b3Ig Y29udGFpbmluZyBmaXJzdCBWYzo6ZmxvYXRfdjo6c2l6ZSgpIHZhbHVlcyBvZiBtYXNrLgotICog RWFjaCBzb3VyY2UgbWFzayBlbGVtZW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgYSA4LWJpdCBpbnRl Z2VyCi0gKi8KLXN0YXRpYyBpbmxpbmUgVmM6OmZsb2F0X3YgZmV0Y2hfbWFza184KGNvbnN0IHF1 aW50OCAqZGF0YSkgewotICAgIHVpbnRfdiBkYXRhX2koZGF0YSk7Ci0gICAgcmV0dXJuIFZjOjpz aW1kX2Nhc3Q8VmM6OmZsb2F0X3Y+KGludF92KGRhdGFfaSkpOwotfQorICAgICAgICBjb25zdCB1 aW50X3YgbWFzaygweEZGKTsKIAotLyoqCi0gKiBHZXQgYW4gYWxwaGEgdmFsdWVzIGZyb20gVmM6 OmZsb2F0X3Y6OnNpemUoKSBwaXhlbHMgMzItYml0IGVhY2gKLSAqICg0IGNoYW5uZWxzLCA4IGJp dCBwZXIgY2hhbm5lbCkuICBUaGUgYWxwaGEgdmFsdWUgaXMgY29uc2lkZXJlZAotICogdG8gYmUg c3RvcmVkIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIHBpeGVsCi0gKgotICog XHAgYWxpZ25lZCBjb250cm9scyB3aGV0aGVyIHRoZSBccCBkYXRhIGlzIGZldGNoZWQgdXNpbmcg YWxpZ25lZAotICogICAgICAgICAgICBpbnN0cnVjdGlvbiBvciBub3QuCi0gKiAgICAgICAgICAg IDEpIEZldGNoaW5nIGFsaWduZWQgZGF0YSB3aXRoIHVuYWxpZ25lZCBpbnN0cnVjdGlvbgotICog ICAgICAgICAgICAgICBkZWdyYWRlcyBwZXJmb3JtYW5jZS4KLSAqICAgICAgICAgICAgMikgRmV0 Y2hpbmcgdW5hbGlnbmVkIGRhdGEgd2l0aCBhbGlnbmVkIGluc3RydWN0aW9uCi0gKiAgICAgICAg ICAgICAgIGNhdXNlcyBcI0dQIChHZW5lcmFsIFByb3RlY3Rpb24gRXhjZXB0aW9uKQotICovCi10 ZW1wbGF0ZSA8Ym9vbCBhbGlnbmVkPgotc3RhdGljIGlubGluZSBWYzo6ZmxvYXRfdiBmZXRjaF9h bHBoYV8zMihjb25zdCB2b2lkICpkYXRhKSB7Ci0gICAgdWludF92IGRhdGFfaTsKLSAgICBpZiAo YWxpZ25lZCkgewotICAgICAgICBkYXRhX2kubG9hZChzdGF0aWNfY2FzdDxjb25zdCBxdWludDMy Kj4oZGF0YSksIFZjOjpBbGlnbmVkKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkYXRhX2kubG9h ZChzdGF0aWNfY2FzdDxjb25zdCBxdWludDMyICo+KGRhdGEpLCBWYzo6VW5hbGlnbmVkKTsKKyAg ICAgICAgYzEgPSB4c2ltZDo6dG9fZmxvYXQoeHNpbWQ6OmJpdHdpc2VfY2FzdDxpbnRfdj4oKGRh dGFfaSA+PiAxNikgJiBtYXNrKSk7CisgICAgICAgIGMyID0geHNpbWQ6OnRvX2Zsb2F0KHhzaW1k OjpiaXR3aXNlX2Nhc3Q8aW50X3Y+KChkYXRhX2kgPj4gOCkgJiBtYXNrKSk7CisgICAgICAgIGMz ID0geHNpbWQ6OnRvX2Zsb2F0KHhzaW1kOjpiaXR3aXNlX2Nhc3Q8aW50X3Y+KChkYXRhX2kpICYg bWFzaykpOwogICAgIH0KIAotICAgIHJldHVybiBWYzo6c2ltZF9jYXN0PFZjOjpmbG9hdF92Pihp bnRfdihkYXRhX2kgPj4gMjQpKTsKLX0KKyAgICAvKioKKyAgICAgKiBQYWNrIGNvbG9yIGFuZCBh bHBoYSB2YWx1ZXMgdG8gZmxvYXRfdjo6c2l6ZSBwaXhlbHMgMzItYml0IGVhY2gKKyAgICAgKiAo NCBjaGFubmVscywgOCBiaXQgcGVyIGNoYW5uZWwpLiAgVGhlIGNvbG9yIGRhdGEgaXMgY29uc2lk ZXJlZAorICAgICAqIHRvIGJlIHN0b3JlZCBpbiB0aGUgMyBsZWFzdCBzaWduaWZpY2FudCBieXRl cyBvZiB0aGUgcGl4ZWwsIGFscGhhIC0KKyAgICAgKiBpbiB0aGUgbW9zdCBzaWduaWZpY2FudCBi eXRlCisgICAgICoKKyAgICAgKiBOT1RFOiBccCBkYXRhIG11c3QgYmUgYWxpZ25lZCBwb2ludGVy IQorICAgICAqLworICAgIHN0YXRpYyBpbmxpbmUgdm9pZAorICAgIHdyaXRlX2NoYW5uZWxzXzMy KHZvaWQgKmRhdGEsIGNvbnN0IGZsb2F0X3YgYWxwaGEsIGNvbnN0IGZsb2F0X3YgYzEsIGNvbnN0 IGZsb2F0X3YgYzIsIGNvbnN0IGZsb2F0X3YgYzMpCisgICAgeworICAgICAgICBjb25zdCBpbnRf diBtYXNrKDB4RkYpOwogCi0vKioKLSAqIEdldCBjb2xvciB2YWx1ZXMgZnJvbSBWYzo6ZmxvYXRf djo6c2l6ZSgpIHBpeGVscyAzMi1iaXQgZWFjaAotICogKDQgY2hhbm5lbHMsIDggYml0IHBlciBj aGFubmVsKS4gIFRoZSBjb2xvciBkYXRhIGlzIGNvbnNpZGVyZWQKLSAqIHRvIGJlIHN0b3JlZCBp biB0aGUgMyBsZWFzdCBzaWduaWZpY2FudCBieXRlcyBvZiB0aGUgcGl4ZWwuCi0gKgotICogXHAg YWxpZ25lZCBjb250cm9scyB3aGV0aGVyIHRoZSBccCBkYXRhIGlzIGZldGNoZWQgdXNpbmcgYWxp Z25lZAotICogICAgICAgICAgICBpbnN0cnVjdGlvbiBvciBub3QuCi0gKiAgICAgICAgICAgIDEp IEZldGNoaW5nIGFsaWduZWQgZGF0YSB3aXRoIHVuYWxpZ25lZCBpbnN0cnVjdGlvbgotICogICAg ICAgICAgICAgICBkZWdyYWRlcyBwZXJmb3JtYW5jZS4KLSAqICAgICAgICAgICAgMikgRmV0Y2hp bmcgdW5hbGlnbmVkIGRhdGEgd2l0aCBhbGlnbmVkIGluc3RydWN0aW9uCi0gKiAgICAgICAgICAg ICAgIGNhdXNlcyBcI0dQIChHZW5lcmFsIFByb3RlY3Rpb24gRXhjZXB0aW9uKQotICovCi10ZW1w bGF0ZSA8Ym9vbCBhbGlnbmVkPgotc3RhdGljIGlubGluZSB2b2lkIGZldGNoX2NvbG9yc18zMihj b25zdCB2b2lkICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZjOjpmbG9hdF92 ICZjMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYzo6ZmxvYXRfdiAmYzIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgVmM6OmZsb2F0X3YgJmMzKSB7Ci0gICAgaW50X3YgZGF0 YV9pOwotICAgIGlmIChhbGlnbmVkKSB7Ci0gICAgICAgIGRhdGFfaS5sb2FkKHN0YXRpY19jYXN0 PGNvbnN0IHF1aW50MzIqPihkYXRhKSwgVmM6OkFsaWduZWQpOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIGRhdGFfaS5sb2FkKHN0YXRpY19jYXN0PGNvbnN0IHF1aW50MzIqPihkYXRhKSwgVmM6OlVu YWxpZ25lZCk7Ci0gICAgfQotCi0gICAgY29uc3QgcXVpbnQzMiBsb3dCeXRlTWFzayA9IDB4RkY7 Ci0gICAgdWludF92IG1hc2sobG93Qnl0ZU1hc2spOwotCi0gICAgYzEgPSBWYzo6c2ltZF9jYXN0 PFZjOjpmbG9hdF92PihpbnRfdigoZGF0YV9pID4+IDE2KSAmIG1hc2spKTsKLSAgICBjMiA9IFZj OjpzaW1kX2Nhc3Q8VmM6OmZsb2F0X3Y+KGludF92KChkYXRhX2kgPj4gOCkgICYgbWFzaykpOwot ICAgIGMzID0gVmM6OnNpbWRfY2FzdDxWYzo6ZmxvYXRfdj4oaW50X3YoIGRhdGFfaSAgICAgICAg JiBtYXNrKSk7Ci19CisgICAgICAgIGNvbnN0IGF1dG8gdjEgPSAoeHNpbWQ6Om5lYXJieWludF9h c19pbnQoYWxwaGEpKSA8PCAyNDsKKyAgICAgICAgY29uc3QgYXV0byB2MiA9ICh4c2ltZDo6bmVh cmJ5aW50X2FzX2ludChjMSkgJiBtYXNrKSA8PCAxNjsKKyAgICAgICAgY29uc3QgYXV0byB2MyA9 ICh4c2ltZDo6bmVhcmJ5aW50X2FzX2ludChjMikgJiBtYXNrKSA8PCA4OworICAgICAgICBjb25z dCBhdXRvIHY0ID0gKHhzaW1kOjpuZWFyYnlpbnRfYXNfaW50KGMzKSAmIG1hc2spOworICAgICAg ICB4c2ltZDo6c3RvcmVfYWxpZ25lZChzdGF0aWNfY2FzdDx0eXBlbmFtZSBpbnRfdjo6dmFsdWVf dHlwZSAqPihkYXRhKSwgKHYxIHwgdjIpIHwgKHYzIHwgdjQpKTsKKyAgICB9CiAKLS8qKgotICog UGFjayBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIHRvIFZjOjpmbG9hdF92OjpzaXplKCkgcGl4ZWxz IDMyLWJpdCBlYWNoCi0gKiAoNCBjaGFubmVscywgOCBiaXQgcGVyIGNoYW5uZWwpLiAgVGhlIGNv bG9yIGRhdGEgaXMgY29uc2lkZXJlZAotICogdG8gYmUgc3RvcmVkIGluIHRoZSAzIGxlYXN0IHNp Z25pZmljYW50IGJ5dGVzIG9mIHRoZSBwaXhlbCwgYWxwaGEgLQotICogaW4gdGhlIG1vc3Qgc2ln bmlmaWNhbnQgYnl0ZQotICoKLSAqIE5PVEU6IFxwIGRhdGEgbXVzdCBiZSBhbGlnbmVkIHBvaW50 ZXIhCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jaGFubmVsc18zMih2b2lkICpkYXRh LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZjOjpmbG9hdF92OjpBc0Fy ZyBhbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYzo6ZmxvYXRf djo6QXNBcmcgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmM6OmZs b2F0X3Y6OkFzQXJnIGMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZj OjpmbG9hdF92OjpBc0FyZyBjMykgewotICAgIGNvbnN0IHF1aW50MzIgbG93Qnl0ZU1hc2sgPSAw eEZGOwotCi0gICAgdWludF92IG1hc2sobG93Qnl0ZU1hc2spOwotICAgIHVpbnRfdiB2MSA9IHVp bnRfdihpUm91bmQoYWxwaGEpKSA8PCAyNDsKLSAgICB1aW50X3YgdjIgPSAodWludF92KGlSb3Vu ZChjMSkpICYgbWFzaykgPDwgMTY7Ci0gICAgdWludF92IHYzID0gKHVpbnRfdihpUm91bmQoYzIp KSAmIG1hc2spIDw8ICA4OwotICAgIHVpbnRfdiB2NCA9IHVpbnRfdihpUm91bmQoYzMpKSAmIG1h c2s7Ci0gICAgdjEgPSB2MSB8IHYyOwotICAgIHYzID0gdjMgfCB2NDsKLSAgICAodjEgfCB2Myku c3RvcmUoc3RhdGljX2Nhc3Q8cXVpbnQzMio+KGRhdGEpLCBWYzo6QWxpZ25lZCk7Ci19CisgICAg c3RhdGljIGlubGluZSB2b2lkCisgICAgd3JpdGVfY2hhbm5lbHNfMzJfdW5hbGlnbmVkKHZvaWQg KmRhdGEsIGNvbnN0IGZsb2F0X3YgYWxwaGEsIGNvbnN0IGZsb2F0X3YgYzEsIGNvbnN0IGZsb2F0 X3YgYzIsIGNvbnN0IGZsb2F0X3YgYzMpCisgICAgeworICAgICAgICBjb25zdCBpbnRfdiBtYXNr KDB4RkYpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY2hhbm5lbHNfMzJfdW5hbGlnbmVk KHZvaWQgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZjOjpmbG9hdF92OjpBc0FyZyBhbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVmM6OmZsb2F0X3Y6OkFzQXJnIGMxLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYzo6ZmxvYXRfdjo6QXNBcmcgYzIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZjOjpmbG9h dF92OjpBc0FyZyBjMykgewotICAgIGNvbnN0IHF1aW50MzIgbG93Qnl0ZU1hc2sgPSAweEZGOwot Ci0gICAgdWludF92IG1hc2sobG93Qnl0ZU1hc2spOwotICAgIHVpbnRfdiB2MSA9IHVpbnRfdihp Um91bmQoYWxwaGEpKSA8PCAyNDsKLSAgICB1aW50X3YgdjIgPSAodWludF92KGlSb3VuZChjMSkp ICYgbWFzaykgPDwgMTY7Ci0gICAgdWludF92IHYzID0gKHVpbnRfdihpUm91bmQoYzIpKSAmIG1h c2spIDw8IDg7Ci0gICAgdWludF92IHY0ID0gdWludF92KGlSb3VuZChjMykpICYgbWFzazsKLSAg ICB2MSA9IHYxIHwgdjI7Ci0gICAgdjMgPSB2MyB8IHY0OwotICAgICh2MSB8IHYzKS5zdG9yZShz dGF0aWNfY2FzdDxxdWludDMyKj4oZGF0YSksIFZjOjpVbmFsaWduZWQpOwotfQorICAgICAgICBj b25zdCBhdXRvIHYxID0gKHhzaW1kOjpuZWFyYnlpbnRfYXNfaW50KGFscGhhKSkgPDwgMjQ7Cisg ICAgICAgIGNvbnN0IGF1dG8gdjIgPSAoeHNpbWQ6Om5lYXJieWludF9hc19pbnQoYzEpICYgbWFz aykgPDwgMTY7CisgICAgICAgIGNvbnN0IGF1dG8gdjMgPSAoeHNpbWQ6Om5lYXJieWludF9hc19p bnQoYzIpICYgbWFzaykgPDwgODsKKyAgICAgICAgY29uc3QgYXV0byB2NCA9ICh4c2ltZDo6bmVh cmJ5aW50X2FzX2ludChjMykgJiBtYXNrKTsKKyAgICAgICAgeHNpbWQ6OnN0b3JlX3VuYWxpZ25l ZChzdGF0aWNfY2FzdDx0eXBlbmFtZSBpbnRfdjo6dmFsdWVfdHlwZSAqPihkYXRhKSwgKHYxIHwg djIpIHwgKHYzIHwgdjQpKTsKKyAgICB9CiAKLS8qKgotICogQ29tcG9zZXMgc3JjIHBpeGVscyBp bnRvIGRzdCBwaXhsZXMuIElzIG9wdGltaXplZCBmb3IgMzItYml0LXBlci1waXhlbAotICogY29s b3JzcGFjZXMuIFVzZXMgXHAgQ29tcG9zaXRvciBzdHJhdGVneSBwYXJhbWV0ZXIgZm9yIGRvaW5n IGFjdHVhbAotICogbWF0aCBvZiB0aGUgY29tcG9zaXRpb24KLSAqLwotdGVtcGxhdGU8Ym9vbCB1 c2VNYXNrLCBib29sIHVzZUZsb3csIGNsYXNzIENvbXBvc2l0b3IsIGludCBwaXhlbFNpemU+Ci0g ICAgc3RhdGljIHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZShjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJh bWV0ZXJJbmZvJiBwYXJhbXMpCi17Ci0gICAgdXNpbmcgbmFtZXNwYWNlIEFyaXRobWV0aWM7Ci0K LSAgICBjb25zdCBpbnQgdmVjdG9yU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oVmM6OmZsb2F0X3Y6 OnNpemUoKSk7Ci0gICAgY29uc3QgcWludDMyIHZlY3RvckluYyA9IHBpeGVsU2l6ZSAqIHZlY3Rv clNpemU7Ci0gICAgY29uc3QgcWludDMyIGxpbmVhckluYyA9IHBpeGVsU2l6ZTsKLSAgICBxaW50 MzIgc3JjVmVjdG9ySW5jID0gdmVjdG9ySW5jOwotICAgIHFpbnQzMiBzcmNMaW5lYXJJbmMgPSBw aXhlbFNpemU7Ci0KLSAgICBxdWludDggKmRzdFJvd1N0YXJ0ID0gcGFyYW1zLmRzdFJvd1N0YXJ0 OwotICAgIGNvbnN0IHF1aW50OCAqbWFza1Jvd1N0YXJ0ID0gcGFyYW1zLm1hc2tSb3dTdGFydDsK LSAgICBjb25zdCBxdWludDgqIHNyY1Jvd1N0YXJ0ICA9IHBhcmFtcy5zcmNSb3dTdGFydDsKLSAg ICB0eXBlbmFtZSBDb21wb3NpdG9yOjpQYXJhbXNXcmFwcGVyIHBhcmFtc1dyYXBwZXIocGFyYW1z KTsKLQotICAgIGlmICghcGFyYW1zLnNyY1Jvd1N0cmlkZSkgewotICAgICAgICBpZiAocGl4ZWxT aXplID09IDQpIHsKLSAgICAgICAgICAgIEtvU3RyZWFtZWRNYXRoOjp1aW50X3YgKmJ1ZiA9IHJl aW50ZXJwcmV0X2Nhc3Q8S29TdHJlYW1lZE1hdGg6OnVpbnRfdio+KFZjOjptYWxsb2M8cXVpbnQz MiwgVmM6OkFsaWduT25WZWN0b3I+KHZlY3RvclNpemUpKTsKLSAgICAgICAgICAgICpidWYgPSB1 aW50X3YoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHF1aW50MzIgKj4oc3JjUm93U3RhcnQpKSk7 Ci0gICAgICAgICAgICBzcmNSb3dTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQ4Kj4oYnVm KTsKLSAgICAgICAgICAgIHNyY0xpbmVhckluYyA9IDA7Ci0gICAgICAgICAgICBzcmNWZWN0b3JJ bmMgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcXVpbnQ4ICpidWYgPSBWYzo6 bWFsbG9jPHF1aW50OCwgVmM6OkFsaWduT25WZWN0b3I+KHZlY3RvckluYyk7Ci0gICAgICAgICAg ICBxdWludDggKnB0ciA9IGJ1ZjsKLQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg PCB2ZWN0b3JTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkocHRyLCBwYXJhbXMu c3JjUm93U3RhcnQsIHBpeGVsU2l6ZSk7Ci0gICAgICAgICAgICAgICAgcHRyICs9IHBpeGVsU2l6 ZTsKKyAgICAvKioKKyAgICAgKiBDb21wb3NlcyBzcmMgcGl4ZWxzIGludG8gZHN0IHBpeGxlcy4g SXMgb3B0aW1pemVkIGZvciAzMi1iaXQtcGVyLXBpeGVsCisgICAgICogY29sb3JzcGFjZXMuIFVz ZXMgXHAgQ29tcG9zaXRvciBzdHJhdGVneSBwYXJhbWV0ZXIgZm9yIGRvaW5nIGFjdHVhbAorICAg ICAqIG1hdGggb2YgdGhlIGNvbXBvc2l0aW9uCisgICAgICovCisgICAgdGVtcGxhdGU8Ym9vbCB1 c2VNYXNrLCBib29sIHVzZUZsb3csIGNsYXNzIENvbXBvc2l0b3IsIGludCBwaXhlbFNpemU+Cisg ICAgc3RhdGljIHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZShjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJh bWV0ZXJJbmZvICZwYXJhbXMpCisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgQXJpdGht ZXRpYzsKKworICAgICAgICBjb25zdCBpbnQgdmVjdG9yU2l6ZSA9IHN0YXRpY19jYXN0PGludD4o ZmxvYXRfdjo6c2l6ZSk7CisgICAgICAgIGNvbnN0IHFpbnQzMiB2ZWN0b3JJbmMgPSBwaXhlbFNp emUgKiB2ZWN0b3JTaXplOworICAgICAgICBjb25zdCBxaW50MzIgbGluZWFySW5jID0gcGl4ZWxT aXplOworICAgICAgICBxaW50MzIgc3JjVmVjdG9ySW5jID0gdmVjdG9ySW5jOworICAgICAgICBx aW50MzIgc3JjTGluZWFySW5jID0gcGl4ZWxTaXplOworCisgICAgICAgIHF1aW50OCAqZHN0Um93 U3RhcnQgPSBwYXJhbXMuZHN0Um93U3RhcnQ7CisgICAgICAgIGNvbnN0IHF1aW50OCAqbWFza1Jv d1N0YXJ0ID0gcGFyYW1zLm1hc2tSb3dTdGFydDsKKyAgICAgICAgY29uc3QgcXVpbnQ4ICpzcmNS b3dTdGFydCA9IHBhcmFtcy5zcmNSb3dTdGFydDsKKyAgICAgICAgdHlwZW5hbWUgQ29tcG9zaXRv cjo6UGFyYW1zV3JhcHBlciBwYXJhbXNXcmFwcGVyKHBhcmFtcyk7CisKKyAgICAgICAgaWYgKCFw YXJhbXMuc3JjUm93U3RyaWRlKSB7CisgICAgICAgICAgICBpZiAocGl4ZWxTaXplID09IDQpIHsK KyAgICAgICAgICAgICAgICBhdXRvICpidWYgPSByZWludGVycHJldF9jYXN0PHVpbnRfdiAqPih4 c2ltZDo6dmVjdG9yX2FsaWduZWRfbWFsbG9jPHR5cGVuYW1lIHVpbnRfdjo6dmFsdWVfdHlwZT4o dmVjdG9yU2l6ZSkpOworICAgICAgICAgICAgICAgICpidWYgPSB1aW50X3YoKihyZWludGVycHJl dF9jYXN0PGNvbnN0IHF1aW50MzIgKj4oc3JjUm93U3RhcnQpKSk7CisgICAgICAgICAgICAgICAg c3JjUm93U3RhcnQgPSByZWludGVycHJldF9jYXN0PHF1aW50OCAqPihidWYpOworICAgICAgICAg ICAgICAgIHNyY0xpbmVhckluYyA9IDA7CisgICAgICAgICAgICAgICAgc3JjVmVjdG9ySW5jID0g MDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byAqYnVmID0geHNp bWQ6OnZlY3Rvcl9hbGlnbmVkX21hbGxvYzxxdWludDg+KHZlY3RvckluYyk7CisgICAgICAgICAg ICAgICAgcXVpbnQ4ICpwdHIgPSBidWY7CisKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp ID0gMDsgaSA8IHZlY3RvclNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBtZW1jcHko cHRyLCBwYXJhbXMuc3JjUm93U3RhcnQsIHBpeGVsU2l6ZSk7CisgICAgICAgICAgICAgICAgICAg IHB0ciArPSBwaXhlbFNpemU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg c3JjUm93U3RhcnQgPSBidWY7CisgICAgICAgICAgICAgICAgc3JjTGluZWFySW5jID0gMDsKKyAg ICAgICAgICAgICAgICBzcmNWZWN0b3JJbmMgPSAwOwogICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICBzcmNSb3dTdGFydCA9IGJ1ZjsKLSAgICAgICAgICAgIHNyY0xpbmVhckluYyA9IDA7Ci0g ICAgICAgICAgICBzcmNWZWN0b3JJbmMgPSAwOwogICAgICAgICB9Ci0gICAgfQogI2lmIEJMT0NL REVCVUcKLSAgICBpbnQgdG90YWxCbG9ja0FsaWduID0gMDsKLSAgICBpbnQgdG90YWxCbG9ja0Fs aWduZWRWZWN0b3IgPSAwOwotICAgIGludCB0b3RhbEJsb2NrVW5hbGlnbmVkVmVjdG9yID0gMDsK LSAgICBpbnQgdG90YWxCbG9ja1Jlc3QgPSAwOworICAgICAgICBpbnQgdG90YWxCbG9ja0FsaWdu ID0gMDsKKyAgICAgICAgaW50IHRvdGFsQmxvY2tBbGlnbmVkVmVjdG9yID0gMDsKKyAgICAgICAg aW50IHRvdGFsQmxvY2tVbmFsaWduZWRWZWN0b3IgPSAwOworICAgICAgICBpbnQgdG90YWxCbG9j a1Jlc3QgPSAwOwogI2VuZGlmCiAKLSAgICBmb3IgKHFpbnQzMiByID0gcGFyYW1zLnJvd3M7IHIg PiAwOyAtLXIpIHsKLSAgICAgICAgLy8gSGludDogTWFzayBpcyBhbGxvd2VkIHRvIGJlIHVuYWxp Z25lZAotICAgICAgICBjb25zdCBxdWludDggKm1hc2sgPSBtYXNrUm93U3RhcnQ7Ci0KLSAgICAg ICAgY29uc3QgcXVpbnQ4ICpzcmMgPSBzcmNSb3dTdGFydDsKLSAgICAgICAgcXVpbnQ4ICpkc3Qg PSBkc3RSb3dTdGFydDsKLQotICAgICAgICBjb25zdCBpbnQgcGl4ZWxzQWxpZ25tZW50TWFzayA9 IHZlY3RvclNpemUgKiBzaXplb2YoZmxvYXQpIC0gMTsKLSAgICAgICAgdWludHB0cl90IHNyY1B0 clZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHNyYyk7Ci0gICAgICAgIHVpbnRw dHJfdCBkc3RQdHJWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkc3QpOwotICAg ICAgICB1aW50cHRyX3Qgc3JjQWxpZ25tZW50ID0gc3JjUHRyVmFsdWUgJiBwaXhlbHNBbGlnbm1l bnRNYXNrOwotICAgICAgICB1aW50cHRyX3QgZHN0QWxpZ25tZW50ID0gZHN0UHRyVmFsdWUgJiBw aXhlbHNBbGlnbm1lbnRNYXNrOwotCi0gICAgICAgIC8vIFVuY29tbWVudCBpZiBmYWNpbmcgcHJv YmxlbXMgd2l0aCBhbGlnbm1lbnQ6Ci0gICAgICAgIC8vIFFfQVNTRVJUX1goIShkc3RBbGlnbm1l bnQgJiAzKSwgIkNvbXBvc2l0aW9uaW5nIiwKLSAgICAgICAgLy8gICAgICAgICAgICAiUGl4ZWwg ZGF0YSBtdXN0IGJlIGFsaWduZWQgb24gcGl4ZWxzIGJvcmRlcnMhIik7Ci0KLSAgICAgICAgaW50 IGJsb2NrQWxpZ24gPSBwYXJhbXMuY29sczsKLSAgICAgICAgaW50IGJsb2NrQWxpZ25lZFZlY3Rv ciA9IDA7Ci0gICAgICAgIGludCBibG9ja1VuYWxpZ25lZFZlY3RvciA9IDA7Ci0gICAgICAgIGlu dCBibG9ja1Jlc3QgPSAwOwotCi0gICAgICAgIGludCAqdmVjdG9yQmxvY2sgPQotICAgICAgICAg ICAgc3JjQWxpZ25tZW50ID09IGRzdEFsaWdubWVudCB8fCAhc3JjVmVjdG9ySW5jID8KLSAgICAg ICAgICAgICZibG9ja0FsaWduZWRWZWN0b3IgOiAmYmxvY2tVbmFsaWduZWRWZWN0b3I7Ci0KLSAg ICAgICAgaWYgKCFkc3RBbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGJsb2NrQWxpZ24gPSAwOwot ICAgICAgICAgICAgKnZlY3RvckJsb2NrID0gcGFyYW1zLmNvbHMgLyB2ZWN0b3JTaXplOwotICAg ICAgICAgICAgYmxvY2tSZXN0ID0gcGFyYW1zLmNvbHMgJSB2ZWN0b3JTaXplOwotICAgICAgICB9 IGVsc2UgaWYgKHBhcmFtcy5jb2xzID4gMiAqIHZlY3RvclNpemUpIHsKLSAgICAgICAgICAgIGJs b2NrQWxpZ24gPSAodmVjdG9ySW5jIC0gZHN0QWxpZ25tZW50KSAvIHBpeGVsU2l6ZTsKLSAgICAg ICAgICAgIGNvbnN0IGludCByZXN0Q29scyA9IHBhcmFtcy5jb2xzIC0gYmxvY2tBbGlnbjsKLSAg ICAgICAgICAgIGlmIChyZXN0Q29scyA+IDApIHsKLSAgICAgICAgICAgICAgICAqdmVjdG9yQmxv Y2sgPSByZXN0Q29scyAvIHZlY3RvclNpemU7Ci0gICAgICAgICAgICAgICAgYmxvY2tSZXN0ID0g cmVzdENvbHMgJSB2ZWN0b3JTaXplOworICAgICAgICBmb3IgKHFpbnQzMiByID0gcGFyYW1zLnJv d3M7IHIgPiAwOyAtLXIpIHsKKyAgICAgICAgICAgIC8vIEhpbnQ6IE1hc2sgaXMgYWxsb3dlZCB0 byBiZSB1bmFsaWduZWQKKyAgICAgICAgICAgIGNvbnN0IHF1aW50OCAqbWFzayA9IG1hc2tSb3dT dGFydDsKKworICAgICAgICAgICAgY29uc3QgcXVpbnQ4ICpzcmMgPSBzcmNSb3dTdGFydDsKKyAg ICAgICAgICAgIHF1aW50OCAqZHN0ID0gZHN0Um93U3RhcnQ7CisKKyAgICAgICAgICAgIGNvbnN0 IGludCBwaXhlbHNBbGlnbm1lbnRNYXNrID0gdmVjdG9yU2l6ZSAqIHNpemVvZihmbG9hdCkgLSAx OworICAgICAgICAgICAgYXV0byBzcmNQdHJWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0 cl90PihzcmMpOworICAgICAgICAgICAgYXV0byBkc3RQdHJWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nh c3Q8dWludHB0cl90Pihkc3QpOworICAgICAgICAgICAgdWludHB0cl90IHNyY0FsaWdubWVudCA9 IHNyY1B0clZhbHVlICYgcGl4ZWxzQWxpZ25tZW50TWFzazsKKyAgICAgICAgICAgIHVpbnRwdHJf dCBkc3RBbGlnbm1lbnQgPSBkc3RQdHJWYWx1ZSAmIHBpeGVsc0FsaWdubWVudE1hc2s7CisKKyAg ICAgICAgICAgIC8vIFVuY29tbWVudCBpZiBmYWNpbmcgcHJvYmxlbXMgd2l0aCBhbGlnbm1lbnQ6 CisgICAgICAgICAgICAvLyBRX0FTU0VSVF9YKCEoZHN0QWxpZ25tZW50ICYgMyksICJDb21wb3Np dGlvbmluZyIsCisgICAgICAgICAgICAvLyAgICAgICAgICAgICJQaXhlbCBkYXRhIG11c3QgYmUg YWxpZ25lZCBvbiBwaXhlbHMgYm9yZGVycyEiKTsKKworICAgICAgICAgICAgaW50IGJsb2NrQWxp Z24gPSBwYXJhbXMuY29sczsKKyAgICAgICAgICAgIGludCBibG9ja0FsaWduZWRWZWN0b3IgPSAw OworICAgICAgICAgICAgaW50IGJsb2NrVW5hbGlnbmVkVmVjdG9yID0gMDsKKyAgICAgICAgICAg IGludCBibG9ja1Jlc3QgPSAwOworCisgICAgICAgICAgICBpbnQgKnZlY3RvckJsb2NrID0KKyAg ICAgICAgICAgICAgICBzcmNBbGlnbm1lbnQgPT0gZHN0QWxpZ25tZW50IHx8ICFzcmNWZWN0b3JJ bmMgPyAmYmxvY2tBbGlnbmVkVmVjdG9yIDogJmJsb2NrVW5hbGlnbmVkVmVjdG9yOworCisgICAg ICAgICAgICBpZiAoIWRzdEFsaWdubWVudCkgeworICAgICAgICAgICAgICAgIGJsb2NrQWxpZ24g PSAwOworICAgICAgICAgICAgICAgICp2ZWN0b3JCbG9jayA9IHBhcmFtcy5jb2xzIC8gdmVjdG9y U2l6ZTsKKyAgICAgICAgICAgICAgICBibG9ja1Jlc3QgPSBwYXJhbXMuY29scyAlIHZlY3RvclNp emU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jb2xzID4gMiAqIHZlY3RvclNpemUp IHsKKyAgICAgICAgICAgICAgICBibG9ja0FsaWduID0gKHZlY3RvckluYyAtIGRzdEFsaWdubWVu dCkgLyBwaXhlbFNpemU7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJlc3RDb2xzID0gcGFy YW1zLmNvbHMgLSBibG9ja0FsaWduOworICAgICAgICAgICAgICAgIGlmIChyZXN0Q29scyA+IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgKnZlY3RvckJsb2NrID0gcmVzdENvbHMgLyB2ZWN0b3JT aXplOworICAgICAgICAgICAgICAgICAgICBibG9ja1Jlc3QgPSByZXN0Q29scyAlIHZlY3RvclNp emU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tB bGlnbiA9IHBhcmFtcy5jb2xzOworICAgICAgICAgICAgICAgICAgICAqdmVjdG9yQmxvY2sgPSAw OworICAgICAgICAgICAgICAgICAgICBibG9ja1Jlc3QgPSAwOworICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGJsb2Nr QWxpZ24gPSBwYXJhbXMuY29sczsKLSAgICAgICAgICAgICAgICAqdmVjdG9yQmxvY2sgPSAwOwot ICAgICAgICAgICAgICAgIGJsb2NrUmVzdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K ICNpZiBCTE9DS0RFQlVHCi0gICAgICAgIHRvdGFsQmxvY2tBbGlnbiArPSBibG9ja0FsaWduOwot ICAgICAgICB0b3RhbEJsb2NrQWxpZ25lZFZlY3RvciArPSBibG9ja0FsaWduZWRWZWN0b3I7Ci0g ICAgICAgIHRvdGFsQmxvY2tVbmFsaWduZWRWZWN0b3IgKz0gYmxvY2tVbmFsaWduZWRWZWN0b3I7 Ci0gICAgICAgIHRvdGFsQmxvY2tSZXN0ICs9IGJsb2NrUmVzdDsKKyAgICAgICAgICAgIHRvdGFs QmxvY2tBbGlnbiArPSBibG9ja0FsaWduOworICAgICAgICAgICAgdG90YWxCbG9ja0FsaWduZWRW ZWN0b3IgKz0gYmxvY2tBbGlnbmVkVmVjdG9yOworICAgICAgICAgICAgdG90YWxCbG9ja1VuYWxp Z25lZFZlY3RvciArPSBibG9ja1VuYWxpZ25lZFZlY3RvcjsKKyAgICAgICAgICAgIHRvdGFsQmxv Y2tSZXN0ICs9IGJsb2NrUmVzdDsKICNlbmRpZgogCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkg PCBibG9ja0FsaWduOyBpKyspIHsKLSAgICAgICAgICAgIENvbXBvc2l0b3I6OnRlbXBsYXRlIGNv bXBvc2l0ZU9uZVBpeGVsU2NhbGFyPHVzZU1hc2ssIF9pbXBsPihzcmMsIGRzdCwgbWFzaywgcGFy YW1zLm9wYWNpdHksIHBhcmFtc1dyYXBwZXIpOwotICAgICAgICAgICAgc3JjICs9IHNyY0xpbmVh ckluYzsKLSAgICAgICAgICAgIGRzdCArPSBsaW5lYXJJbmM7Ci0KLSAgICAgICAgICAgIGlmKHVz ZU1hc2spIHsKLSAgICAgICAgICAgICAgICBtYXNrKys7CisgICAgICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IGJsb2NrQWxpZ247IGkrKykgeworICAgICAgICAgICAgICAgIENvbXBvc2l0b3I6 OnRlbXBsYXRlIGNvbXBvc2l0ZU9uZVBpeGVsU2NhbGFyPHVzZU1hc2ssIF9pbXBsPihzcmMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt c1dyYXBwZXIpOworICAgICAgICAgICAgICAgIHNyYyArPSBzcmNMaW5lYXJJbmM7CisgICAgICAg ICAgICAgICAgZHN0ICs9IGxpbmVhckluYzsKKworICAgICAgICAgICAgICAgIGlmICh1c2VNYXNr KSB7CisgICAgICAgICAgICAgICAgICAgIG1hc2srKzsKKyAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2Nr QWxpZ25lZFZlY3RvcjsgaSsrKSB7Ci0gICAgICAgICAgICBDb21wb3NpdG9yOjp0ZW1wbGF0ZSBj b21wb3NpdGVWZWN0b3I8dXNlTWFzaywgdHJ1ZSwgX2ltcGw+KHNyYywgZHN0LCBtYXNrLCBwYXJh bXMub3BhY2l0eSwgcGFyYW1zV3JhcHBlcik7Ci0gICAgICAgICAgICBzcmMgKz0gc3JjVmVjdG9y SW5jOwotICAgICAgICAgICAgZHN0ICs9IHZlY3RvckluYzsKIAotICAgICAgICAgICAgaWYgKHVz ZU1hc2spIHsKLSAgICAgICAgICAgICAgICBtYXNrICs9IHZlY3RvclNpemU7CisgICAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrQWxpZ25lZFZlY3RvcjsgaSsrKSB7CisgICAgICAg ICAgICAgICAgQ29tcG9zaXRvcjo6dGVtcGxhdGUgY29tcG9zaXRlVmVjdG9yPHVzZU1hc2ssIHRy dWUsIF9pbXBsPihzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXJhbXNXcmFwcGVyKTsKKyAgICAgICAgICAgICAgICBzcmMgKz0gc3JjVmVjdG9ySW5j OworICAgICAgICAgICAgICAgIGRzdCArPSB2ZWN0b3JJbmM7CisKKyAgICAgICAgICAgICAgICBp ZiAodXNlTWFzaykgeworICAgICAgICAgICAgICAgICAgICBtYXNrICs9IHZlY3RvclNpemU7Cisg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBibG9ja1VuYWxpZ25lZFZlY3RvcjsgaSsrKSB7Ci0gICAgICAgICAg ICBDb21wb3NpdG9yOjp0ZW1wbGF0ZSBjb21wb3NpdGVWZWN0b3I8dXNlTWFzaywgZmFsc2UsIF9p bXBsPihzcmMsIGRzdCwgbWFzaywgcGFyYW1zLm9wYWNpdHksIHBhcmFtc1dyYXBwZXIpOwotICAg ICAgICAgICAgc3JjICs9IHNyY1ZlY3RvckluYzsKLSAgICAgICAgICAgIGRzdCArPSB2ZWN0b3JJ bmM7CiAKLSAgICAgICAgICAgIGlmICh1c2VNYXNrKSB7Ci0gICAgICAgICAgICAgICAgbWFzayAr PSB2ZWN0b3JTaXplOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja1VuYWxp Z25lZFZlY3RvcjsgaSsrKSB7CisgICAgICAgICAgICAgICAgQ29tcG9zaXRvcjo6dGVtcGxhdGUg Y29tcG9zaXRlVmVjdG9yPHVzZU1hc2ssIGZhbHNlLCBfaW1wbD4oc3JjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhcmFtcy5vcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1dyYXBwZXIpOworICAg ICAgICAgICAgICAgIHNyYyArPSBzcmNWZWN0b3JJbmM7CisgICAgICAgICAgICAgICAgZHN0ICs9 IHZlY3RvckluYzsKKworICAgICAgICAgICAgICAgIGlmICh1c2VNYXNrKSB7CisgICAgICAgICAg ICAgICAgICAgIG1hc2sgKz0gdmVjdG9yU2l6ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICB9Ci0gICAgICAgIH0KIAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9j a1Jlc3Q7IGkrKykgeworICAgICAgICAgICAgICAgIENvbXBvc2l0b3I6OnRlbXBsYXRlIGNvbXBv c2l0ZU9uZVBpeGVsU2NhbGFyPHVzZU1hc2ssIF9pbXBsPihzcmMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGFyYW1zLm9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1dyYXBwZXIpOworICAg ICAgICAgICAgICAgIHNyYyArPSBzcmNMaW5lYXJJbmM7CisgICAgICAgICAgICAgICAgZHN0ICs9 IGxpbmVhckluYzsKKworICAgICAgICAgICAgICAgIGlmICh1c2VNYXNrKSB7CisgICAgICAgICAg ICAgICAgICAgIG1hc2srKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAg ICAgICAgZm9yKGludCBpID0gMDsgaSA8IGJsb2NrUmVzdDsgaSsrKSB7Ci0gICAgICAgICAgICBD b21wb3NpdG9yOjp0ZW1wbGF0ZSBjb21wb3NpdGVPbmVQaXhlbFNjYWxhcjx1c2VNYXNrLCBfaW1w bD4oc3JjLCBkc3QsIG1hc2ssIHBhcmFtcy5vcGFjaXR5LCBwYXJhbXNXcmFwcGVyKTsKLSAgICAg ICAgICAgIHNyYyArPSBzcmNMaW5lYXJJbmM7Ci0gICAgICAgICAgICBkc3QgKz0gbGluZWFySW5j OworICAgICAgICAgICAgc3JjUm93U3RhcnQgKz0gcGFyYW1zLnNyY1Jvd1N0cmlkZTsKKyAgICAg ICAgICAgIGRzdFJvd1N0YXJ0ICs9IHBhcmFtcy5kc3RSb3dTdHJpZGU7CiAKICAgICAgICAgICAg IGlmICh1c2VNYXNrKSB7Ci0gICAgICAgICAgICAgICAgbWFzaysrOworICAgICAgICAgICAgICAg IG1hc2tSb3dTdGFydCArPSBwYXJhbXMubWFza1Jvd1N0cmlkZTsKICAgICAgICAgICAgIH0KICAg ICAgICAgfQogCi0gICAgICAgIHNyY1Jvd1N0YXJ0ICArPSBwYXJhbXMuc3JjUm93U3RyaWRlOwot ICAgICAgICBkc3RSb3dTdGFydCAgKz0gcGFyYW1zLmRzdFJvd1N0cmlkZTsKLQotICAgICAgICBp ZiAodXNlTWFzaykgewotICAgICAgICAgICAgbWFza1Jvd1N0YXJ0ICs9IHBhcmFtcy5tYXNrUm93 U3RyaWRlOwotICAgICAgICB9Ci0gICAgfQotCiAjaWYgQkxPQ0tERUJVRwotICAgIGRiZ1BpZ21l bnQgPDwgIkkiIDw8ICJyb3dzOiIgPDwgcGFyYW1zLnJvd3MKLSAgICAgICAgICAgICA8PCAiXHRw YWQoUyk6IiA8PCB0b3RhbEJsb2NrQWxpZ24KLSAgICAgICAgICAgICA8PCAiXHRiYXYoVik6IiA8 PCB0b3RhbEJsb2NrQWxpZ25lZFZlY3RvcgotICAgICAgICAgICAgIDw8ICJcdGJ1dihWKToiIDw8 IHRvdGFsQmxvY2tVbmFsaWduZWRWZWN0b3IKLSAgICAgICAgICAgICA8PCAiXHRyZXMoUykiIDw8 IHRvdGFsQmxvY2tSZXN0OyAvLyA8PCBzcmNBbGlnbm1lbnQgPDwgZHN0QWxpZ25tZW50OworICAg ICAgICBkYmdQaWdtZW50IDw8ICJJIgorICAgICAgICAgICAgICAgICAgIDw8ICJyb3dzOiIgPDwg cGFyYW1zLnJvd3MgPDwgIlx0cGFkKFMpOiIgPDwgdG90YWxCbG9ja0FsaWduIDw8ICJcdGJhdihW KToiIDw8IHRvdGFsQmxvY2tBbGlnbmVkVmVjdG9yCisgICAgICAgICAgICAgICAgICAgPDwgIlx0 YnV2KFYpOiIgPDwgdG90YWxCbG9ja1VuYWxpZ25lZFZlY3RvciA8PCAiXHRyZXMoUykiCisgICAg ICAgICAgICAgICAgICAgPDwgdG90YWxCbG9ja1Jlc3Q7IC8vIDw8IHNyY0FsaWdubWVudCA8PCBk c3RBbGlnbm1lbnQ7CiAjZW5kaWYKIAotICAgIGlmICghcGFyYW1zLnNyY1Jvd1N0cmlkZSkgewot ICAgICAgICBWYzo6ZnJlZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGNvbnN0X2Nh c3Q8cXVpbnQ4Kj4oc3JjUm93U3RhcnQpKSk7CisgICAgICAgIGlmICghcGFyYW1zLnNyY1Jvd1N0 cmlkZSkgeworICAgICAgICAgICAgeHNpbWQ6OnZlY3Rvcl9hbGlnbmVkX2ZyZWUoc3JjUm93U3Rh cnQpOworICAgICAgICB9CiAgICAgfQotfQotCi10ZW1wbGF0ZTxib29sIHVzZU1hc2ssIGJvb2wg dXNlRmxvdywgY2xhc3MgQ29tcG9zaXRvcj4KLSAgICBzdGF0aWMgdm9pZCBnZW5lcmljQ29tcG9z aXRlMzIoY29uc3QgS29Db21wb3NpdGVPcDo6UGFyYW1ldGVySW5mbyYgcGFyYW1zKQotewotICAg IGdlbmVyaWNDb21wb3NpdGU8dXNlTWFzaywgdXNlRmxvdywgQ29tcG9zaXRvciwgND4ocGFyYW1z KTsKLX0KIAotdGVtcGxhdGU8Ym9vbCB1c2VNYXNrLCBib29sIHVzZUZsb3csIGNsYXNzIENvbXBv c2l0b3I+Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZTEyOChjb25zdCBLb0NvbXBv c2l0ZU9wOjpQYXJhbWV0ZXJJbmZvJiBwYXJhbXMpCi17Ci0gICAgZ2VuZXJpY0NvbXBvc2l0ZTx1 c2VNYXNrLCB1c2VGbG93LCBDb21wb3NpdG9yLCAxNj4ocGFyYW1zKTsKLX0KKyAgICB0ZW1wbGF0 ZTxib29sIHVzZU1hc2ssIGJvb2wgdXNlRmxvdywgY2xhc3MgQ29tcG9zaXRvcj4KKyAgICBzdGF0 aWMgdm9pZCBnZW5lcmljQ29tcG9zaXRlMzIoY29uc3QgS29Db21wb3NpdGVPcDo6UGFyYW1ldGVy SW5mbyAmcGFyYW1zKQorICAgIHsKKyAgICAgICAgZ2VuZXJpY0NvbXBvc2l0ZTx1c2VNYXNrLCB1 c2VGbG93LCBDb21wb3NpdG9yLCA0PihwYXJhbXMpOworICAgIH0KIAotdGVtcGxhdGU8Ym9vbCB1 c2VNYXNrLCBib29sIHVzZUZsb3csIGNsYXNzIENvbXBvc2l0b3I+Ci0gICAgc3RhdGljIHZvaWQg Z2VuZXJpY0NvbXBvc2l0ZTY0KGNvbnN0IEtvQ29tcG9zaXRlT3A6OlBhcmFtZXRlckluZm8mIHBh cmFtcykKLXsKLSAgICBnZW5lcmljQ29tcG9zaXRlPHVzZU1hc2ssIHVzZUZsb3csIENvbXBvc2l0 b3IsIDg+KHBhcmFtcyk7Ci19CisgICAgdGVtcGxhdGU8Ym9vbCB1c2VNYXNrLCBib29sIHVzZUZs b3csIGNsYXNzIENvbXBvc2l0b3I+CisgICAgc3RhdGljIHZvaWQgZ2VuZXJpY0NvbXBvc2l0ZTEy OChjb25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZvICZwYXJhbXMpCisgICAgeworICAg ICAgICBnZW5lcmljQ29tcG9zaXRlPHVzZU1hc2ssIHVzZUZsb3csIENvbXBvc2l0b3IsIDE2Pihw YXJhbXMpOworICAgIH0KIAorICAgIHRlbXBsYXRlPGJvb2wgdXNlTWFzaywgYm9vbCB1c2VGbG93 LCBjbGFzcyBDb21wb3NpdG9yPgorICAgIHN0YXRpYyB2b2lkIGdlbmVyaWNDb21wb3NpdGU2NChj b25zdCBLb0NvbXBvc2l0ZU9wOjpQYXJhbWV0ZXJJbmZvICZwYXJhbXMpCisgICAgeworICAgICAg ICBnZW5lcmljQ29tcG9zaXRlPHVzZU1hc2ssIHVzZUZsb3csIENvbXBvc2l0b3IsIDg+KHBhcmFt cyk7CisgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgY2hhbm5lbHNfdHlwZSwgVmM6Oklt cGxlbWVudGF0aW9uIF9pbXBsPgordGVtcGxhdGU8dHlwZW5hbWUgY2hhbm5lbHNfdHlwZSwgY2xh c3MgX2ltcGw+CiBzdHJ1Y3QgUGl4ZWxTdGF0ZVJlY292ZXJIZWxwZXIgeworICAgIHVzaW5nIGZs b2F0X3YgPSB4c2ltZDo6YmF0Y2g8ZmxvYXQsIF9pbXBsPjsKKyAgICB1c2luZyBmbG9hdF9tID0g dHlwZW5hbWUgZmxvYXRfdjo6YmF0Y2hfYm9vbF90eXBlOworCiAgICAgQUxXQVlTX0lOTElORQot ICAgIFBpeGVsU3RhdGVSZWNvdmVySGVscGVyKGNvbnN0IFZjOjpmbG9hdF92ICZjMSwgY29uc3Qg VmM6OmZsb2F0X3YgJmMyLCBjb25zdCBWYzo6ZmxvYXRfdiAmYzMpCisgICAgUGl4ZWxTdGF0ZVJl Y292ZXJIZWxwZXIoY29uc3QgZmxvYXRfdiAmYzEsIGNvbnN0IGZsb2F0X3YgJmMyLCBjb25zdCBm bG9hdF92ICZjMykKICAgICB7CiAgICAgICAgIFFfVU5VU0VEKGMxKTsKICAgICAgICAgUV9VTlVT RUQoYzIpOwpAQCAtNDgyLDcgKzQ1Miw3IEBAIHN0cnVjdCBQaXhlbFN0YXRlUmVjb3ZlckhlbHBl ciB7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORQotICAgIHZvaWQgcmVjb3ZlclBpeGVscyhj b25zdCBWYzo6ZmxvYXRfbSAmbWFzaywgVmM6OmZsb2F0X3YgJmMxLCBWYzo6ZmxvYXRfdiAmYzIs IFZjOjpmbG9hdF92ICZjMykgY29uc3QgeworICAgIHZvaWQgcmVjb3ZlclBpeGVscyhjb25zdCBm bG9hdF9tICZtYXNrLCBmbG9hdF92ICZjMSwgZmxvYXRfdiAmYzIsIGZsb2F0X3YgJmMzKSBjb25z dCB7CiAgICAgICAgIFFfVU5VU0VEKG1hc2spOwogICAgICAgICBRX1VOVVNFRChjMSk7CiAgICAg ICAgIFFfVU5VU0VEKGMyKTsKQEAgLTQ5MCwxMCArNDYwLDEzIEBAIHN0cnVjdCBQaXhlbFN0YXRl UmVjb3ZlckhlbHBlciB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8VmM6OkltcGxlbWVudGF0aW9u IF9pbXBsPgordGVtcGxhdGU8Y2xhc3MgX2ltcGw+CiBzdHJ1Y3QgUGl4ZWxTdGF0ZVJlY292ZXJI ZWxwZXI8ZmxvYXQsIF9pbXBsPiB7CisgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxm bG9hdCwgX2ltcGw+OworICAgIHVzaW5nIGZsb2F0X20gPSB0eXBlbmFtZSBmbG9hdF92OjpiYXRj aF9ib29sX3R5cGU7CisKICAgICBBTFdBWVNfSU5MSU5FCi0gICAgUGl4ZWxTdGF0ZVJlY292ZXJI ZWxwZXIoY29uc3QgVmM6OmZsb2F0X3YgJmMxLCBjb25zdCBWYzo6ZmxvYXRfdiAmYzIsIGNvbnN0 IFZjOjpmbG9hdF92ICZjMykKKyAgICBQaXhlbFN0YXRlUmVjb3ZlckhlbHBlcihjb25zdCBmbG9h dF92ICZjMSwgY29uc3QgZmxvYXRfdiAmYzIsIGNvbnN0IGZsb2F0X3YgJmMzKQogICAgICAgICA6 IG1fb3JpZ19jMShjMSksCiAgICAgICAgICAgbV9vcmlnX2MyKGMyKSwKICAgICAgICAgICBtX29y aWdfYzMoYzMpCkBAIC01MDEsMzAgKzQ3NCwzMyBAQCBzdHJ1Y3QgUGl4ZWxTdGF0ZVJlY292ZXJI ZWxwZXI8ZmxvYXQsIF9pbXBsPiB7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORQotICAgIHZv aWQgcmVjb3ZlclBpeGVscyhjb25zdCBWYzo6ZmxvYXRfbSAmbWFzaywgVmM6OmZsb2F0X3YgJmMx LCBWYzo6ZmxvYXRfdiAmYzIsIFZjOjpmbG9hdF92ICZjMykgY29uc3QgewotICAgICAgICBpZiAo IW1hc2suaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjMShtYXNrKSA9IG1fb3JpZ19jMTsKLSAg ICAgICAgICAgIGMyKG1hc2spID0gbV9vcmlnX2MyOwotICAgICAgICAgICAgYzMobWFzaykgPSBt X29yaWdfYzM7CisgICAgdm9pZCByZWNvdmVyUGl4ZWxzKGNvbnN0IGZsb2F0X20gJm1hc2ssIGZs b2F0X3YgJmMxLCBmbG9hdF92ICZjMiwgZmxvYXRfdiAmYzMpIGNvbnN0IHsKKyAgICAgICAgaWYg KHhzaW1kOjphbnkobWFzaykpIHsKKyAgICAgICAgICAgIGMxID0geHNpbWQ6OnNlbGVjdChtYXNr LCBtX29yaWdfYzEsIGMxKTsKKyAgICAgICAgICAgIGMyID0geHNpbWQ6OnNlbGVjdChtYXNrLCBt X29yaWdfYzIsIGMyKTsKKyAgICAgICAgICAgIGMzID0geHNpbWQ6OnNlbGVjdChtYXNrLCBtX29y aWdfYzMsIGMzKTsKICAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBWYzo6 ZmxvYXRfdiBtX29yaWdfYzE7Ci0gICAgY29uc3QgVmM6OmZsb2F0X3YgbV9vcmlnX2MyOwotICAg IGNvbnN0IFZjOjpmbG9hdF92IG1fb3JpZ19jMzsKKyAgICBjb25zdCBmbG9hdF92IG1fb3JpZ19j MTsKKyAgICBjb25zdCBmbG9hdF92IG1fb3JpZ19jMjsKKyAgICBjb25zdCBmbG9hdF92IG1fb3Jp Z19jMzsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIGNoYW5uZWxzX3R5cGUsIFZjOjpJbXBsZW1l bnRhdGlvbiBfaW1wbD4KK3RlbXBsYXRlPHR5cGVuYW1lIGNoYW5uZWxzX3R5cGUsIGNsYXNzIF9p bXBsPgogc3RydWN0IFBpeGVsV3JhcHBlcgogewogfTsKIAotdGVtcGxhdGU8VmM6OkltcGxlbWVu dGF0aW9uIF9pbXBsPgotc3RydWN0IFBpeGVsV3JhcHBlcjxxdWludDE2LCBfaW1wbD4KLXsKLSAg ICB1c2luZyBpbnRfdiA9IFZjOjpTaW1kQXJyYXk8aW50LCBWYzo6ZmxvYXRfdjo6c2l6ZSgpPjsK LSAgICB1c2luZyB1aW50X3YgPSBWYzo6U2ltZEFycmF5PHVuc2lnbmVkIGludCwgVmM6OmZsb2F0 X3Y6OnNpemUoKT47Cit0ZW1wbGF0ZTxjbGFzcyBfaW1wbD4KK3N0cnVjdCBQaXhlbFdyYXBwZXI8 cXVpbnQxNiwgX2ltcGw+IHsKKyAgICB1c2luZyBpbnRfdiA9IHhzaW1kOjpiYXRjaDxpbnQsIF9p bXBsPjsKKyAgICB1c2luZyB1aW50X3YgPSB4c2ltZDo6YmF0Y2g8dW5zaWduZWQgaW50LCBfaW1w bD47CisgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxmbG9hdCwgX2ltcGw+OworCisg ICAgc3RhdGljX2Fzc2VydChpbnRfdjo6c2l6ZSA9PSB1aW50X3Y6OnNpemUsICJ0aGUgc2VsZWN0 ZWQgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGd1YXJhbnRlZSB2ZWN0b3Igc2l6ZSBlcXVhbGl0eSEi KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHVpbnRfdjo6c2l6ZSA9PSBmbG9hdF92OjpzaXplLCAidGhl IHNlbGVjdGVkIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBndWFyYW50ZWUgdmVjdG9yIHNpemUgZXF1 YWxpdHkhIik7CiAKICAgICBBTFdBWVNfSU5MSU5FCiAgICAgc3RhdGljIHF1aW50MTYgbGVycE1p eGVkVWludEZsb2F0KHF1aW50MTYgYSwgcXVpbnQxNiBiLCBmbG9hdCBhbHBoYSkKQEAgLTUzMywx NTQgKzUwOSwxNzkgQEAgc3RydWN0IFBpeGVsV3JhcHBlcjxxdWludDE2LCBfaW1wbD4KICAgICB9 CiAKICAgICBBTFdBWVNfSU5MSU5FCi0gICAgc3RhdGljIHF1aW50MTYgcm91bmRGbG9hdFRvVWlu dChmbG9hdCB4KSB7CisgICAgc3RhdGljIHF1aW50MTYgcm91bmRGbG9hdFRvVWludChmbG9hdCB4 KQorICAgIHsKICAgICAgICAgcmV0dXJuIE9wdGlSb3VuZDxfaW1wbD46OnJvdW5kU2NhbGFyKHgp OwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUKLSAgICBzdGF0aWMgdm9pZCBub3JtYWxpemVB bHBoYShmbG9hdCAmYWxwaGEpIHsKKyAgICBzdGF0aWMgdm9pZCBub3JtYWxpemVBbHBoYShmbG9h dCAmYWxwaGEpCisgICAgewogICAgICAgICBjb25zdCBmbG9hdCB1aW50MTZSZWMxID0gMS4wZiAv IDY1NTM1LjBmOwogICAgICAgICBhbHBoYSAqPSB1aW50MTZSZWMxOwogICAgIH0KIAogICAgIEFM V0FZU19JTkxJTkUKLSAgICBzdGF0aWMgdm9pZCBkZW5vcm1hbGl6ZUFscGhhKGZsb2F0ICZhbHBo YSkgeworICAgIHN0YXRpYyB2b2lkIGRlbm9ybWFsaXplQWxwaGEoZmxvYXQgJmFscGhhKQorICAg IHsKICAgICAgICAgY29uc3QgZmxvYXQgdWludDE2TWF4ID0gNjU1MzUuMGY7CiAgICAgICAgIGFs cGhhICo9IHVpbnQxNk1heDsKICAgICB9CiAKICAgICBQaXhlbFdyYXBwZXIoKQotICAgICAgICA6 IG1hc2socXVpbnQzMigweEZGRkYpKSwKLSAgICAgICAgICB1aW50MTZNYXgoNjU1MzUuMGYpLAot ICAgICAgICAgIHVpbnQxNlJlYzEoMS4wZiAvIDY1NTM1LjBmKQorICAgICAgICA6IG1hc2soMHhG RkZGKQorICAgICAgICAsIHVpbnQxNk1heCg2NTUzNS4wZikKKyAgICAgICAgLCB1aW50MTZSZWMx KDEuMGYgLyA2NTUzNS4wZikKICAgICB7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORQotICAg IHZvaWQgcmVhZChxdWludDggKmRhdGFEc3QsIFZjOjpmbG9hdF92ICZkc3RfYzEsIFZjOjpmbG9h dF92ICZkc3RfYzIsIFZjOjpmbG9hdF92ICZkc3RfYzMsIFZjOjpmbG9hdF92ICZkc3RfYWxwaGEp CisgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtZWFzaWx5LXN3YXBwYWJsZS1wYXJhbWV0 ZXJzKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWFkKGNvbnN0IHZvaWQgKnNyYywgZmxvYXRf diAmZHN0X2MxLCBmbG9hdF92ICZkc3RfYzIsIGZsb2F0X3YgJmRzdF9jMywgZmxvYXRfdiAmZHN0 X2FscGhhKQogICAgIHsKLSAgICAgICAgc3RydWN0IFBhY2tlZFBpeGVsIHsKLSAgICAgICAgICAg IGZsb2F0IHJyZ2c7Ci0gICAgICAgICAgICBmbG9hdCBiYmFhOwotICAgICAgICB9OwotCi0gICAg ICAgIFZjOjpJbnRlcmxlYXZlZE1lbW9yeVdyYXBwZXI8UGFja2VkUGl4ZWwsIFZjOjpmbG9hdF92 PiBkYXRhV3JhcHBlcigoUGFja2VkUGl4ZWwqKShkYXRhRHN0KSk7Ci0gICAgICAgIFZjOjpmbG9h dF92IHYxLCB2MjsKLSAgICAgICAgVmM6OnRpZSh2MSwgdjIpID0gZGF0YVdyYXBwZXJbc2l6ZV90 KDApXTsKLSAgICAgICAgdWludF92IHBpeGVsc0MxQzIgPSB1aW50X3YoVmM6OnJlaW50ZXJwcmV0 X2NvbXBvbmVudHNfY2FzdDxpbnRfdj4odjEpKTsKLSAgICAgICAgdWludF92IHBpeGVsc0MzQWxw aGEgPSB1aW50X3YoVmM6OnJlaW50ZXJwcmV0X2NvbXBvbmVudHNfY2FzdDxpbnRfdj4odjIpKTsK LQotICAgICAgICBkc3RfYzEgPSBWYzo6c2ltZF9jYXN0PFZjOjpmbG9hdF92PihwaXhlbHNDMUMy ICYgbWFzayk7Ci0gICAgICAgIGRzdF9jMiA9IFZjOjpzaW1kX2Nhc3Q8VmM6OmZsb2F0X3Y+KChw aXhlbHNDMUMyID4+IDE2KSAmIG1hc2spOwotICAgICAgICBkc3RfYzMgPSBWYzo6c2ltZF9jYXN0 PFZjOjpmbG9hdF92PihwaXhlbHNDM0FscGhhICYgbWFzayk7Ci0gICAgICAgIGRzdF9hbHBoYSA9 IFZjOjpzaW1kX2Nhc3Q8VmM6OmZsb2F0X3Y+KChwaXhlbHNDM0FscGhhID4+IDE2KSAmIG1hc2sp OworICAgICAgICBjb25zdCBhdXRvICpzcmNQdHIgPSBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFt ZSB1aW50X3Y6OnZhbHVlX3R5cGUqPihzcmMpOworICAgICAgICAvLyBzdHJ1Y3QgUGFja2VkUGl4 ZWwgeworICAgICAgICAvLyAgICBmbG9hdCBycmdnOworICAgICAgICAvLyAgICBmbG9hdCBiYmFh OworICAgICAgICAvLyB9CisgICAgICAgIGNvbnN0IGF1dG8gaWR4MSA9IHhzaW1kOjpkZXRhaWw6 Om1ha2Vfc2VxdWVuY2VfYXNfYmF0Y2g8aW50X3Y+KCkgKiAyOyAvLyBzdHJpZGUgPT0gMgorICAg ICAgICBjb25zdCBhdXRvIGlkeDIgPSBpZHgxICsgMTsgLy8gb2Zmc2V0IDEgPT0gMm5kIG1lbWJl cnMKKworICAgICAgICBjb25zdCBhdXRvIHBpeGVsc0MxQzIgPSB1aW50X3Y6OmdhdGhlcihzcmNQ dHIsIGlkeDEpOworICAgICAgICBjb25zdCBhdXRvIHBpeGVsc0MzQWxwaGEgPSB1aW50X3Y6Omdh dGhlcihzcmNQdHIsIGlkeDIpOworCisgICAgICAgIGRzdF9jMSA9IHhzaW1kOjp0b19mbG9hdCh4 c2ltZDo6Yml0d2lzZV9jYXN0PGludF92PihwaXhlbHNDMUMyICYgbWFzaykpOyAvLyByCisgICAg ICAgIGRzdF9jMiA9IHhzaW1kOjp0b19mbG9hdCh4c2ltZDo6Yml0d2lzZV9jYXN0PGludF92Pigo cGl4ZWxzQzFDMiA+PiAxNikgJiBtYXNrKSk7IC8vIGcKKyAgICAgICAgZHN0X2MzID0geHNpbWQ6 OnRvX2Zsb2F0KHhzaW1kOjpiaXR3aXNlX2Nhc3Q8aW50X3Y+KChwaXhlbHNDM0FscGhhICYgbWFz aykpKTsgLy8gYgorICAgICAgICBkc3RfYWxwaGEgPSB4c2ltZDo6dG9fZmxvYXQoeHNpbWQ6OmJp dHdpc2VfY2FzdDxpbnRfdj4oKHBpeGVsc0MzQWxwaGEgPj4gMTYpICYgbWFzaykpOyAvLyBhCiAK ICAgICAgICAgZHN0X2FscGhhICo9IHVpbnQxNlJlYzE7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO TElORQotICAgIHZvaWQgd3JpdGUocXVpbnQ4ICpkYXRhRHN0LCBWYzo6ZmxvYXRfdjo6QXNBcmcg YzEsIFZjOjpmbG9hdF92OjpBc0FyZyBjMiwgVmM6OmZsb2F0X3Y6OkFzQXJnIGMzLCBWYzo6Zmxv YXRfdiAmYWxwaGEpCisgICAgQUxXQVlTX0lOTElORSB2b2lkCisgICAgLy8gTk9MSU5UTkVYVExJ TkUoYnVncHJvbmUtZWFzaWx5LXN3YXBwYWJsZS1wYXJhbWV0ZXJzKQorICAgIHdyaXRlKHZvaWQg KmRzdCwgY29uc3QgZmxvYXRfdiAmYzEsIGNvbnN0IGZsb2F0X3YgJmMyLCBjb25zdCBmbG9hdF92 ICZjMywgY29uc3QgZmxvYXRfdiAmYSkKICAgICB7Ci0gICAgICAgIGFscGhhICo9IHVpbnQxNk1h eDsKKyAgICAgICAgYXV0byBkc3RQdHIgPSByZWludGVycHJldF9jYXN0PHR5cGVuYW1lIGludF92 Ojp2YWx1ZV90eXBlICo+KGRzdCk7CisKKyAgICAgICAgY29uc3QgYXV0byBhbHBoYSA9IGEgKiB1 aW50MTZNYXg7CiAKLSAgICAgICAgdWludF92IHYxID0gdWludF92KGludF92KFZjOjpyb3VuZChj MSkpKTsKLSAgICAgICAgdWludF92IHYyID0gdWludF92KGludF92KFZjOjpyb3VuZChjMikpKTsK LSAgICAgICAgdWludF92IHYzID0gdWludF92KGludF92KFZjOjpyb3VuZChjMykpKTsKLSAgICAg ICAgdWludF92IHY0ID0gdWludF92KGludF92KFZjOjpyb3VuZChhbHBoYSkpKTsKLSAgICAgICAg dWludF92IGMxYzIgPSAoKHYyICYgbWFzaykgPDwgMTYpIHwgKHYxICYgbWFzayk7Ci0gICAgICAg IHVpbnRfdiBjM2NhID0gKCh2NCAmIG1hc2spIDw8IDE2KSB8ICh2MyAmIG1hc2spOwotICAgICAg ICBzdGQ6OnBhaXI8aW50X3YsIGludF92PiBvdXQgPSBWYzo6aW50ZXJsZWF2ZShjMWMyLCBjM2Nh KTsKLSAgICAgICAgb3V0LmZpcnN0LnN0b3JlKHJlaW50ZXJwcmV0X2Nhc3Q8VmM6OnVpbnQzMl90 Kj4oZGF0YURzdCksIFZjOjpBbGlnbmVkKTsKLSAgICAgICAgb3V0LnNlY29uZC5zdG9yZShyZWlu dGVycHJldF9jYXN0PFZjOjp1aW50MzJfdCo+KGRhdGFEc3QpICsgb3V0LmZpcnN0LnNpemUoKSwg VmM6OkFsaWduZWQpOworICAgICAgICBjb25zdCBhdXRvIHYxID0geHNpbWQ6OmJpdHdpc2VfY2Fz dDx1aW50X3Y+KHhzaW1kOjpuZWFyYnlpbnRfYXNfaW50KGMxKSk7CisgICAgICAgIGNvbnN0IGF1 dG8gdjIgPSB4c2ltZDo6Yml0d2lzZV9jYXN0PHVpbnRfdj4oeHNpbWQ6Om5lYXJieWludF9hc19p bnQoYzIpKTsKKyAgICAgICAgY29uc3QgYXV0byB2MyA9IHhzaW1kOjpiaXR3aXNlX2Nhc3Q8dWlu dF92Pih4c2ltZDo6bmVhcmJ5aW50X2FzX2ludChjMykpOworICAgICAgICBjb25zdCBhdXRvIHY0 ID0geHNpbWQ6OmJpdHdpc2VfY2FzdDx1aW50X3Y+KHhzaW1kOjpuZWFyYnlpbnRfYXNfaW50KGFs cGhhKSk7CisKKyAgICAgICAgY29uc3QgYXV0byBjMWMyID0gKCh2MiAmIG1hc2spIDw8IDE2KSB8 ICh2MSAmIG1hc2spOworICAgICAgICBjb25zdCBhdXRvIGMzY2EgPSAoKHY0ICYgbWFzaykgPDwg MTYpIHwgKHYzICYgbWFzayk7CisKKyAgICAgICAgY29uc3QgYXV0byBpZHgxID0geHNpbWQ6OmRl dGFpbDo6bWFrZV9zZXF1ZW5jZV9hc19iYXRjaDxpbnRfdj4oKSAqIDI7CisgICAgICAgIGNvbnN0 IGF1dG8gaWR4MiA9IGlkeDEgKyAxOworCisgICAgICAgIGMxYzIuc2NhdHRlcihkc3RQdHIsIGlk eDEpOworICAgICAgICBjM2NhLnNjYXR0ZXIoZHN0UHRyLCBpZHgyKTsKICAgICB9CiAKICAgICBB TFdBWVNfSU5MSU5FCi0gICAgdm9pZCBjbGVhclBpeGVscyhxdWludDggKmRhdGFEc3QpIHsKLSAg ICAgICAgbWVtc2V0KGRhdGFEc3QsIDAsIFZjOjpmbG9hdF92OjpzaXplKCkgKiBzaXplb2YocXVp bnQxNikgKiA0KTsKKyAgICB2b2lkIGNsZWFyUGl4ZWxzKHF1aW50OCAqZGF0YURzdCkKKyAgICB7 CisgICAgICAgIG1lbXNldChkYXRhRHN0LCAwLCBmbG9hdF92OjpzaXplICogc2l6ZW9mKHF1aW50 MTYpICogNCk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORQotICAgIHZvaWQgY29weVBpeGVs cyhjb25zdCBxdWludDggKmRhdGFTcmMsIHF1aW50OCAqZGF0YURzdCkgewotICAgICAgICBtZW1j cHkoZGF0YURzdCwgZGF0YVNyYywgVmM6OmZsb2F0X3Y6OnNpemUoKSAqIHNpemVvZihxdWludDE2 KSAqIDQpOworICAgIHZvaWQgY29weVBpeGVscyhjb25zdCBxdWludDggKmRhdGFTcmMsIHF1aW50 OCAqZGF0YURzdCkKKyAgICB7CisgICAgICAgIG1lbWNweShkYXRhRHN0LCBkYXRhU3JjLCBmbG9h dF92OjpzaXplICogc2l6ZW9mKHF1aW50MTYpICogNCk7CiAgICAgfQogCi0KICAgICBjb25zdCB1 aW50X3YgbWFzazsKLSAgICBjb25zdCBWYzo6ZmxvYXRfdiB1aW50MTZNYXg7Ci0gICAgY29uc3Qg VmM6OmZsb2F0X3YgdWludDE2UmVjMTsKKyAgICBjb25zdCBmbG9hdF92IHVpbnQxNk1heDsKKyAg ICBjb25zdCBmbG9hdF92IHVpbnQxNlJlYzE7CiB9OwogCi10ZW1wbGF0ZTxWYzo6SW1wbGVtZW50 YXRpb24gX2ltcGw+Ci1zdHJ1Y3QgUGl4ZWxXcmFwcGVyPHF1aW50OCwgX2ltcGw+Ci17Ci0gICAg dXNpbmcgaW50X3YgPSBWYzo6U2ltZEFycmF5PGludCwgVmM6OmZsb2F0X3Y6OnNpemUoKT47Ci0g ICAgdXNpbmcgdWludF92ID0gVmM6OlNpbWRBcnJheTx1bnNpZ25lZCBpbnQsIFZjOjpmbG9hdF92 OjpzaXplKCk+OwordGVtcGxhdGU8dHlwZW5hbWUgX2ltcGw+CitzdHJ1Y3QgUGl4ZWxXcmFwcGVy PHF1aW50OCwgX2ltcGw+IHsKKyAgICB1c2luZyBpbnRfdiA9IHhzaW1kOjpiYXRjaDxpbnQsIF9p bXBsPjsKKyAgICB1c2luZyB1aW50X3YgPSB4c2ltZDo6YmF0Y2g8dW5zaWduZWQgaW50LCBfaW1w bD47CisgICAgdXNpbmcgZmxvYXRfdiA9IHhzaW1kOjpiYXRjaDxmbG9hdCwgX2ltcGw+OworCisg ICAgc3RhdGljX2Fzc2VydChpbnRfdjo6c2l6ZSA9PSB1aW50X3Y6OnNpemUsICJ0aGUgc2VsZWN0 ZWQgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGd1YXJhbnRlZSB2ZWN0b3Igc2l6ZSBlcXVhbGl0eSEi KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHVpbnRfdjo6c2l6ZSA9PSBmbG9hdF92OjpzaXplLCAidGhl IHNlbGVjdGVkIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBndWFyYW50ZWUgdmVjdG9yIHNpemUgZXF1 YWxpdHkhIik7CiAKICAgICBBTFdBWVNfSU5MSU5FCi0gICAgc3RhdGljIHF1aW50OCBsZXJwTWl4 ZWRVaW50RmxvYXQocXVpbnQ4IGEsIHF1aW50OCBiLCBmbG9hdCBhbHBoYSkgeworICAgIHN0YXRp YyBxdWludDggbGVycE1peGVkVWludEZsb2F0KHF1aW50OCBhLCBxdWludDggYiwgZmxvYXQgYWxw aGEpCisgICAgewogICAgICAgICByZXR1cm4gS29TdHJlYW1lZE1hdGg8X2ltcGw+OjpsZXJwX21p eGVkX3U4X2Zsb2F0KGEsIGIsIGFscGhhKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FCi0g ICAgc3RhdGljIHF1aW50OCByb3VuZEZsb2F0VG9VaW50KGZsb2F0IHgpIHsKKyAgICBzdGF0aWMg cXVpbnQ4IHJvdW5kRmxvYXRUb1VpbnQoZmxvYXQgeCkKKyAgICB7CiAgICAgICAgIHJldHVybiBL b1N0cmVhbWVkTWF0aDxfaW1wbD46OnJvdW5kX2Zsb2F0X3RvX3U4KHgpOwogICAgIH0KIAogICAg IEFMV0FZU19JTkxJTkUKLSAgICBzdGF0aWMgdm9pZCBub3JtYWxpemVBbHBoYShmbG9hdCAmYWxw aGEpIHsKKyAgICBzdGF0aWMgdm9pZCBub3JtYWxpemVBbHBoYShmbG9hdCAmYWxwaGEpCisgICAg ewogICAgICAgICBjb25zdCBmbG9hdCB1aW50OFJlYzEgPSAxLjBmIC8gMjU1LjBmOwogICAgICAg ICBhbHBoYSAqPSB1aW50OFJlYzE7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORQotICAgIHN0 YXRpYyB2b2lkIGRlbm9ybWFsaXplQWxwaGEoZmxvYXQgJmFscGhhKSB7CisgICAgc3RhdGljIHZv aWQgZGVub3JtYWxpemVBbHBoYShmbG9hdCAmYWxwaGEpCisgICAgewogICAgICAgICBjb25zdCBm bG9hdCB1aW50OE1heCA9IDI1NS4wZjsKICAgICAgICAgYWxwaGEgKj0gdWludDhNYXg7CiAgICAg fQogCiAgICAgUGl4ZWxXcmFwcGVyKCkKLSAgICAgICAgOiBtYXNrKHF1aW50MzIoMHhGRikpLAot ICAgICAgICAgIHVpbnQ4TWF4KDI1NS4wZiksCi0gICAgICAgICAgdWludDhSZWMxKDEuMGYgLyAy NTUuMGYpCisgICAgICAgIDogbWFzayhxdWludDMyKDB4RkYpKQorICAgICAgICAsIHVpbnQ4TWF4 KDI1NS4wZikKKyAgICAgICAgLCB1aW50OFJlYzEoMS4wZiAvIDI1NS4wZikKICAgICB7CiAgICAg fQogCi0gICAgQUxXQVlTX0lOTElORQotICAgIHZvaWQgcmVhZChxdWludDggKmRhdGFEc3QsIFZj OjpmbG9hdF92ICZkc3RfYzEsIFZjOjpmbG9hdF92ICZkc3RfYzIsIFZjOjpmbG9hdF92ICZkc3Rf YzMsIFZjOjpmbG9hdF92ICZkc3RfYWxwaGEpCisgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJv bmUtZWFzaWx5LXN3YXBwYWJsZS1wYXJhbWV0ZXJzKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBy ZWFkKGNvbnN0IHZvaWQgKnNyYywgZmxvYXRfdiAmZHN0X2MxLCBmbG9hdF92ICZkc3RfYzIsIGZs b2F0X3YgJmRzdF9jMywgZmxvYXRfdiAmZHN0X2FscGhhKQogICAgIHsKLSAgICAgICAgZHN0X2Fs cGhhID0gS29TdHJlYW1lZE1hdGg8X2ltcGw+Ojp0ZW1wbGF0ZSBmZXRjaF9hbHBoYV8zMjxmYWxz ZT4oZGF0YURzdCk7Ci0gICAgICAgIEtvU3RyZWFtZWRNYXRoPF9pbXBsPjo6dGVtcGxhdGUgZmV0 Y2hfY29sb3JzXzMyPGZhbHNlPihkYXRhRHN0LCBkc3RfYzEsIGRzdF9jMiwgZHN0X2MzKTsKKyAg ICAgICAgZHN0X2FscGhhID0gS29TdHJlYW1lZE1hdGg8X2ltcGw+Ojp0ZW1wbGF0ZSBmZXRjaF9h bHBoYV8zMjxmYWxzZT4oc3JjKTsKKyAgICAgICAgS29TdHJlYW1lZE1hdGg8X2ltcGw+Ojp0ZW1w bGF0ZSBmZXRjaF9jb2xvcnNfMzI8ZmFsc2U+KHNyYywgZHN0X2MxLCBkc3RfYzIsIGRzdF9jMyk7 CiAKICAgICAgICAgZHN0X2FscGhhICo9IHVpbnQ4UmVjMTsKICAgICB9CiAKICAgICBBTFdBWVNf SU5MSU5FCi0gICAgdm9pZCB3cml0ZShxdWludDggKmRhdGFEc3QsIFZjOjpmbG9hdF92OjpBc0Fy ZyBjMSwgVmM6OmZsb2F0X3Y6OkFzQXJnIGMyLCBWYzo6ZmxvYXRfdjo6QXNBcmcgYzMsIFZjOjpm bG9hdF92ICZhbHBoYSkKKyAgICB2b2lkIHdyaXRlKHF1aW50OCAqZGF0YURzdCwgY29uc3QgZmxv YXRfdiAmYzEsIGNvbnN0IGZsb2F0X3YgJmMyLCBjb25zdCBmbG9hdF92ICZjMywgY29uc3QgZmxv YXRfdiAmYSkKICAgICB7Ci0gICAgICAgIGFscGhhICo9IHVpbnQ4TWF4OworICAgICAgICBjb25z dCBhdXRvIGFscGhhID0gYSAqIHVpbnQ4TWF4OwogCiAgICAgICAgIEtvU3RyZWFtZWRNYXRoPF9p bXBsPjo6d3JpdGVfY2hhbm5lbHNfMzJfdW5hbGlnbmVkKGRhdGFEc3QsIGFscGhhLCBjMSwgYzIs IGMzKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FCi0gICAgdm9pZCBjbGVhclBpeGVscyhx dWludDggKmRhdGFEc3QpIHsKLSAgICAgICAgbWVtc2V0KGRhdGFEc3QsIDAsIFZjOjpmbG9hdF92 OjpzaXplKCkgKiBzaXplb2YocXVpbnQ4KSAqIDQpOworICAgIHZvaWQgY2xlYXJQaXhlbHMocXVp bnQ4ICpkYXRhRHN0KQorICAgIHsKKyAgICAgICAgbWVtc2V0KGRhdGFEc3QsIDAsIGZsb2F0X3Y6 OnNpemUgKiBzaXplb2YocXVpbnQ4KSAqIDQpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUK LSAgICB2b2lkIGNvcHlQaXhlbHMoY29uc3QgcXVpbnQ4ICpkYXRhU3JjLCBxdWludDggKmRhdGFE c3QpIHsKLSAgICAgICAgbWVtY3B5KGRhdGFEc3QsIGRhdGFTcmMsIFZjOjpmbG9hdF92OjpzaXpl KCkgKiBzaXplb2YocXVpbnQ4KSAqIDQpOworICAgIHZvaWQgY29weVBpeGVscyhjb25zdCBxdWlu dDggKmRhdGFTcmMsIHF1aW50OCAqZGF0YURzdCkKKyAgICB7CisgICAgICAgIG1lbWNweShkYXRh RHN0LCBkYXRhU3JjLCBmbG9hdF92OjpzaXplICogc2l6ZW9mKHF1aW50OCkgKiA0KTsKICAgICB9 CiAKLQogICAgIGNvbnN0IHVpbnRfdiBtYXNrOwotICAgIGNvbnN0IFZjOjpmbG9hdF92IHVpbnQ4 TWF4OwotICAgIGNvbnN0IFZjOjpmbG9hdF92IHVpbnQ4UmVjMTsKKyAgICBjb25zdCBmbG9hdF92 IHVpbnQ4TWF4OworICAgIGNvbnN0IGZsb2F0X3YgdWludDhSZWMxOwogfTsKIAotdGVtcGxhdGU8 VmM6OkltcGxlbWVudGF0aW9uIF9pbXBsPgotc3RydWN0IFBpeGVsV3JhcHBlcjxmbG9hdCwgX2lt cGw+Ci17Cit0ZW1wbGF0ZTx0eXBlbmFtZSBfaW1wbD4KK3N0cnVjdCBQaXhlbFdyYXBwZXI8Zmxv YXQsIF9pbXBsPiB7CisgICAgdXNpbmcgaW50X3YgPSB4c2ltZDo6YmF0Y2g8aW50LCBfaW1wbD47 CisgICAgdXNpbmcgdWludF92ID0geHNpbWQ6OmJhdGNoPHVuc2lnbmVkIGludCwgX2ltcGw+Owor ICAgIHVzaW5nIGZsb2F0X3YgPSB4c2ltZDo6YmF0Y2g8ZmxvYXQsIF9pbXBsPjsKKworICAgIHN0 YXRpY19hc3NlcnQoaW50X3Y6OnNpemUgPT0gdWludF92OjpzaXplLCAidGhlIHNlbGVjdGVkIGFy Y2hpdGVjdHVyZSBkb2VzIG5vdCBndWFyYW50ZWUgdmVjdG9yIHNpemUgZXF1YWxpdHkhIik7Cisg ICAgc3RhdGljX2Fzc2VydCh1aW50X3Y6OnNpemUgPT0gZmxvYXRfdjo6c2l6ZSwgInRoZSBzZWxl Y3RlZCBhcmNoaXRlY3R1cmUgZG9lcyBub3QgZ3VhcmFudGVlIHZlY3RvciBzaXplIGVxdWFsaXR5 ISIpOworCiAgICAgc3RydWN0IFBpeGVsIHsKICAgICAgICAgZmxvYXQgcmVkOwogICAgICAgICBm bG9hdCBncmVlbjsKQEAgLTY4OSwxMTIgKzY5MCw4OSBAQCBzdHJ1Y3QgUGl4ZWxXcmFwcGVyPGZs b2F0LCBfaW1wbD4KICAgICB9OwogCiAgICAgQUxXQVlTX0lOTElORQotICAgIHN0YXRpYyBmbG9h dCBsZXJwTWl4ZWRVaW50RmxvYXQoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYWxwaGEpIHsKKyAg ICBzdGF0aWMgZmxvYXQgbGVycE1peGVkVWludEZsb2F0KGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0 IGFscGhhKQorICAgIHsKICAgICAgICAgcmV0dXJuIEFyaXRobWV0aWM6OmxlcnAoYSxiLGFscGhh KTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FCi0gICAgc3RhdGljIGZsb2F0IHJvdW5kRmxv YXRUb1VpbnQoZmxvYXQgeCkgeworICAgIHN0YXRpYyBmbG9hdCByb3VuZEZsb2F0VG9VaW50KGZs b2F0IHgpCisgICAgewogICAgICAgICByZXR1cm4geDsKICAgICB9CiAKICAgICBBTFdBWVNfSU5M SU5FCi0gICAgc3RhdGljIHZvaWQgbm9ybWFsaXplQWxwaGEoZmxvYXQgJmFscGhhKSB7CisgICAg c3RhdGljIHZvaWQgbm9ybWFsaXplQWxwaGEoZmxvYXQgJmFscGhhKQorICAgIHsKICAgICAgICAg UV9VTlVTRUQoYWxwaGEpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUKLSAgICBzdGF0aWMg dm9pZCBkZW5vcm1hbGl6ZUFscGhhKGZsb2F0ICZhbHBoYSkgeworICAgIHN0YXRpYyB2b2lkIGRl bm9ybWFsaXplQWxwaGEoZmxvYXQgJmFscGhhKQorICAgIHsKICAgICAgICAgUV9VTlVTRUQoYWxw aGEpOwogICAgIH0KIAotICAgIFBpeGVsV3JhcHBlcigpCi0gICAgICAgIDogaW5kZXhlcyhWYzo6 SW5kZXhlc0Zyb21aZXJvKQotICAgIHsKLSAgICB9CisgICAgUGl4ZWxXcmFwcGVyKCkgPSBkZWZh dWx0OwogCi0gICAgQUxXQVlTX0lOTElORQotICAgIHZvaWQgcmVhZChxdWludDggKmRzdFB0ciwg VmM6OmZsb2F0X3YgJmRzdF9jMSwgVmM6OmZsb2F0X3YgJmRzdF9jMiwgVmM6OmZsb2F0X3YgJmRz dF9jMywgVmM6OmZsb2F0X3YgJmRzdF9hbHBoYSkKKyAgICAvLyBOT0xJTlRORVhUTElORShidWdw cm9uZS1lYXNpbHktc3dhcHBhYmxlLXBhcmFtZXRlcnMpCisgICAgQUxXQVlTX0lOTElORSB2b2lk IHJlYWQoY29uc3Qgdm9pZCAqc3JjLCBmbG9hdF92ICZkc3RfYzEsIGZsb2F0X3YgJmRzdF9jMiwg ZmxvYXRfdiAmZHN0X2MzLCBmbG9hdF92ICZkc3RfYWxwaGEpCiAgICAgewotICAgICAgICBWYzo6 SW50ZXJsZWF2ZWRNZW1vcnlXcmFwcGVyPFBpeGVsLCBWYzo6ZmxvYXRfdj4gZGF0YURzdChyZWlu dGVycHJldF9jYXN0PFBpeGVsKj4oZHN0UHRyKSk7Ci0gICAgICAgIHRpZShkc3RfYzEsIGRzdF9j MiwgZHN0X2MzLCBkc3RfYWxwaGEpID0gZGF0YURzdFtpbmRleGVzXTsKKyAgICAgICAgY29uc3Qg YXV0byBzcmNQdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHR5cGVuYW1lIGZsb2F0X3Y6OnZh bHVlX3R5cGUgKj4oc3JjKTsKKyAgICAgICAgY29uc3QgYXV0byBpZHgxID0geHNpbWQ6OmRldGFp bDo6bWFrZV9zZXF1ZW5jZV9hc19iYXRjaDxpbnRfdj4oKSAqIDQ7IC8vIHN0cmlkZSA9PSA0Cisg ICAgICAgIGNvbnN0IGF1dG8gaWR4MiA9IGlkeDEgKyAxOworICAgICAgICBjb25zdCBhdXRvIGlk eDMgPSBpZHgxICsgMjsKKyAgICAgICAgY29uc3QgYXV0byBpZHg0ID0gaWR4MSArIDM7CiAKKyAg ICAgICAgZHN0X2MxID0gZmxvYXRfdjo6Z2F0aGVyKHNyY1B0ciwgaWR4MSk7CisgICAgICAgIGRz dF9jMiA9IGZsb2F0X3Y6OmdhdGhlcihzcmNQdHIsIGlkeDIpOworICAgICAgICBkc3RfYzMgPSBm bG9hdF92OjpnYXRoZXIoc3JjUHRyLCBpZHgzKTsKKyAgICAgICAgZHN0X2FscGhhID0gZmxvYXRf djo6Z2F0aGVyKHNyY1B0ciwgaWR4NCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORQotICAg IHZvaWQgd3JpdGUocXVpbnQ4ICpkc3RQdHIsIFZjOjpmbG9hdF92ICZkc3RfYzEsIFZjOjpmbG9h dF92ICZkc3RfYzIsIFZjOjpmbG9hdF92ICZkc3RfYzMsIFZjOjpmbG9hdF92ICZkc3RfYWxwaGEp CisgICAgQUxXQVlTX0lOTElORSB2b2lkCisgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUt ZWFzaWx5LXN3YXBwYWJsZS1wYXJhbWV0ZXJzKQorICAgIHdyaXRlKHZvaWQgKmRzdCwgY29uc3Qg ZmxvYXRfdiAmc3JjX2MxLCBjb25zdCBmbG9hdF92ICZzcmNfYzIsIGNvbnN0IGZsb2F0X3YgJnNy Y19jMywgY29uc3QgZmxvYXRfdiAmc3JjX2FscGhhKQogICAgIHsKLSAgICAgICAgVmM6OkludGVy bGVhdmVkTWVtb3J5V3JhcHBlcjxQaXhlbCwgVmM6OmZsb2F0X3Y+IGRhdGFEc3QocmVpbnRlcnBy ZXRfY2FzdDxQaXhlbCo+KGRzdFB0cikpOwotICAgICAgICBkYXRhRHN0W2luZGV4ZXNdID0gdGll KGRzdF9jMSwgZHN0X2MyLCBkc3RfYzMsIGRzdF9hbHBoYSk7CisgICAgICAgIGF1dG8gZHN0UHRy ID0gcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBmbG9hdF92Ojp2YWx1ZV90eXBlICo+KGRzdCk7 CisKKyAgICAgICAgY29uc3QgYXV0byBpZHgxID0geHNpbWQ6OmRldGFpbDo6bWFrZV9zZXF1ZW5j ZV9hc19iYXRjaDxpbnRfdj4oKSAqIDQ7IC8vIHN0cmlkZSA9PSA0CisgICAgICAgIGNvbnN0IGF1 dG8gaWR4MiA9IGlkeDEgKyAxOworICAgICAgICBjb25zdCBhdXRvIGlkeDMgPSBpZHgxICsgMjsK KyAgICAgICAgY29uc3QgYXV0byBpZHg0ID0gaWR4MSArIDM7CisKKyAgICAgICAgc3JjX2MxLnNj YXR0ZXIoZHN0UHRyLCBpZHgxKTsKKyAgICAgICAgc3JjX2MyLnNjYXR0ZXIoZHN0UHRyLCBpZHgy KTsKKyAgICAgICAgc3JjX2MzLnNjYXR0ZXIoZHN0UHRyLCBpZHgzKTsKKyAgICAgICAgc3JjX2Fs cGhhLnNjYXR0ZXIoZHN0UHRyLCBpZHg0KTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FCi0g ICAgdm9pZCBjbGVhclBpeGVscyhxdWludDggKmRhdGFEc3QpIHsKLSAgICAgICAgbWVtc2V0KGRh dGFEc3QsIDAsIFZjOjpmbG9hdF92OjpzaXplKCkgKiBzaXplb2YoZmxvYXQpICogNCk7CisgICAg dm9pZCBjbGVhclBpeGVscyhxdWludDggKmRhdGFEc3QpCisgICAgeworICAgICAgICBtZW1zZXQo ZGF0YURzdCwgMCwgZmxvYXRfdjo6c2l6ZSAqIHNpemVvZihmbG9hdCkgKiA0KTsKICAgICB9CiAK ICAgICBBTFdBWVNfSU5MSU5FCi0gICAgdm9pZCBjb3B5UGl4ZWxzKGNvbnN0IHF1aW50OCAqZGF0 YVNyYywgcXVpbnQ4ICpkYXRhRHN0KSB7Ci0gICAgICAgIG1lbWNweShkYXRhRHN0LCBkYXRhU3Jj LCBWYzo6ZmxvYXRfdjo6c2l6ZSgpICogc2l6ZW9mKGZsb2F0KSAqIDQpOworICAgIHZvaWQgY29w eVBpeGVscyhjb25zdCBxdWludDggKmRhdGFTcmMsIHF1aW50OCAqZGF0YURzdCkKKyAgICB7Cisg ICAgICAgIG1lbWNweShkYXRhRHN0LCBkYXRhU3JjLCBmbG9hdF92OjpzaXplICogc2l6ZW9mKGZs b2F0KSAqIDQpOwogICAgIH0KLQotICAgIGNvbnN0IFZjOjpmbG9hdF92OjpJbmRleFR5cGUgaW5k ZXhlczsKIH07CiAKLW5hbWVzcGFjZSBLb1N0cmVhbWVkTWF0aEZ1bmN0aW9ucyB7Ci0KLXRlbXBs YXRlPGludCBwaXhlbFNpemU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXJQaXhlbChxdWludDgq IGRzdCk7Ci0KLXRlbXBsYXRlPD4KLUFMV0FZU19JTkxJTkUgdm9pZCBjbGVhclBpeGVsPDQ+KHF1 aW50OCogZHN0KQotewotICAgIHF1aW50MzIgKmQgPSByZWludGVycHJldF9jYXN0PHF1aW50MzIq Pihkc3QpOwotICAgICpkID0gMDsKLX0KLQotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElORSB2b2lk IGNsZWFyUGl4ZWw8OD4ocXVpbnQ4KiBkc3QpCituYW1lc3BhY2UgS29TdHJlYW1lZE1hdGhGdW5j dGlvbnMKIHsKLSAgICBxdWludDY0ICpkID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDY0Kj4oZHN0 KTsKLSAgICBkWzBdID0gMDsKLX0KLQotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElORSB2b2lkIGNs ZWFyUGl4ZWw8MTY+KHF1aW50OCogZHN0KQotewotICAgIHF1aW50NjQgKmQgPSByZWludGVycHJl dF9jYXN0PHF1aW50NjQqPihkc3QpOwotICAgIGRbMF0gPSAwOwotICAgIGRbMV0gPSAwOwotfQot CiB0ZW1wbGF0ZTxpbnQgcGl4ZWxTaXplPgotQUxXQVlTX0lOTElORSB2b2lkIGNvcHlQaXhlbChj b25zdCBxdWludDggKnNyYywgcXVpbnQ4KiBkc3QpOwotCi10ZW1wbGF0ZTw+Ci1BTFdBWVNfSU5M SU5FIHZvaWQgY29weVBpeGVsPDQ+KGNvbnN0IHF1aW50OCAqc3JjLCBxdWludDgqIGRzdCkKK0FM V0FZU19JTkxJTkUgdm9pZCBjbGVhclBpeGVsKHF1aW50OCAqZHN0KQogewotICAgIGNvbnN0IHF1 aW50MzIgKnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHF1aW50MzIqPihzcmMpOwotICAgIHF1 aW50MzIgKmQgPSByZWludGVycHJldF9jYXN0PHF1aW50MzIqPihkc3QpOwotICAgICpkID0gKnM7 CisgICAgc3RkOjptZW1zZXQoZHN0LCAwLCBwaXhlbFNpemUpOwogfQogCi10ZW1wbGF0ZTw+Ci1B TFdBWVNfSU5MSU5FIHZvaWQgY29weVBpeGVsPDg+KGNvbnN0IHF1aW50OCAqc3JjLCBxdWludDgq IGRzdCkKLXsKLSAgICBjb25zdCBxdWludDY0ICpzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBx dWludDY0Kj4oc3JjKTsKLSAgICBxdWludDY0ICpkID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDY0 Kj4oZHN0KTsKLSAgICBkWzBdID0gc1swXTsKLX0KLQotdGVtcGxhdGU8PgotQUxXQVlTX0lOTElO RSB2b2lkIGNvcHlQaXhlbDwxNj4oY29uc3QgcXVpbnQ4ICpzcmMsIHF1aW50OCogZHN0KQordGVt cGxhdGU8aW50IHBpeGVsU2l6ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBjb3B5UGl4ZWwoY29uc3Qg cXVpbnQ4ICpzcmMsIHF1aW50OCAqZHN0KQogewotICAgIGNvbnN0IHF1aW50NjQgKnMgPSByZWlu dGVycHJldF9jYXN0PGNvbnN0IHF1aW50NjQqPihzcmMpOwotICAgIHF1aW50NjQgKmQgPSByZWlu dGVycHJldF9jYXN0PHF1aW50NjQqPihkc3QpOwotICAgIGRbMF0gPSBzWzBdOwotICAgIGRbMV0g PSBzWzFdOwotfQorICAgIHN0ZDo6bWVtY3B5KGRzdCwgc3JjLCBwaXhlbFNpemUpOwogfQorfSAv LyBuYW1lc3BhY2UgS29TdHJlYW1lZE1hdGhGdW5jdGlvbnMKIAogI2VuZGlmIC8qIF9fS09TVFJF QU1FRF9NQVRIX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvcGlnbWVudC9jb21wb3NpdGVvcHMvS29W Y011bHRpQXJjaEJ1aWxkU3VwcG9ydC5oIGIvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb1Zj TXVsdGlBcmNoQnVpbGRTdXBwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5 NzY1MDg1ZjkuLjAwMDAwMDAwMDAKLS0tIGEvbGlicy9waWdtZW50L2NvbXBvc2l0ZW9wcy9Lb1Zj TXVsdGlBcmNoQnVpbGRTdXBwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAot LyoKLSAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDEyIERtaXRyeSBLYXpha292IDxkaW11 bGE3M0BnbWFpbC5jb20+Ci0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4x LW9yLWxhdGVyCi0gKi8KLQotI2lmbmRlZiBfX0tPVkNNVUxUSUFSQ0hCVUlMRFNVUFBPUlRfSAot I2RlZmluZSBfX0tPVkNNVUxUSUFSQ0hCVUlMRFNVUFBPUlRfSAotCi0jaW5jbHVkZSAiY29uZmln LXZjLmgiCi0KLSNpZmRlZiBIQVZFX1ZDCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLQotI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2xvY2FsLXR5cGUtdGVtcGxhdGUtYXJncyIK LSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfTVNDX1ZFUgotLy8gTGV0cyBzaHV0IHVwIHRoZSAicG9z c2libGUgbG9zcyBvZiBkYXRhIiBhbmQgImZvcmNpbmcgdmFsdWUgdG8gYm9vbCAndHJ1ZScgb3Ig J2ZhbHNlJwotI3ByYWdtYSB3YXJuaW5nICggcHVzaCApCi0jcHJhZ21hIHdhcm5pbmcgKCBkaXNh YmxlIDogNDE0NiApIC8vIGF2eC9kZXRhaWwuaAotI3ByYWdtYSB3YXJuaW5nICggZGlzYWJsZSA6 IDQyNDQgKQotI3ByYWdtYSB3YXJuaW5nICggZGlzYWJsZSA6IDQyNjcgKSAvLyBpbnRlcmxlYXZl ZG1lbW9yeQotI3ByYWdtYSB3YXJuaW5nICggZGlzYWJsZSA6IDQ4MDAgKQotI2VuZGlmCi0jaW5j bHVkZSA8VmMvZ2xvYmFsLmg+Ci0jaW5jbHVkZSA8VmMvVmM+Ci0jaW5jbHVkZSA8VmMvc3VwcG9y dC5oPgotI2lmIGRlZmluZWQgX01TQ19WRVIKLSNwcmFnbWEgd2FybmluZyAoIHBvcCApCi0jZW5k aWYKLQotI2Vsc2UgLyogSEFWRV9WQyAqLwotCi1uYW1lc3BhY2UgVmMgewotICAgIGVudW0gSW1w bGVtZW50YXRpb24gLyo6IHN0ZDo6dWludF9sZWFzdDMyX3QqLyB7Ci0gICAgICAgICAgICBTY2Fs YXJJbXBsLAotICAgIH07Ci0gICAgY2xhc3MgQ3VycmVudEltcGxlbWVudGF0aW9uIHsKLSAgICAg ICAgcHVibGljOgotICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBJbXBsZW1lbnRhdGlvbiBj dXJyZW50KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh c3Q8SW1wbGVtZW50YXRpb24+KFNjYWxhckltcGwpOwotICAgICAgICAgICAgfQotICAgIH07Ci19 Ci0KLQotI2VuZGlmIC8qIEhBVkVfVkMgKi8KLQotCi0jaW5jbHVkZSA8UURlYnVnPgotI2luY2x1 ZGUgPGtzaGFyZWRjb25maWcuaD4KLSNpbmNsdWRlIDxrY29uZmlnLmg+Ci0jaW5jbHVkZSA8a2Nv bmZpZ2dyb3VwLmg+Ci0KLXRlbXBsYXRlPGNsYXNzIEZhY3RvcnlUeXBlPgotdHlwZW5hbWUgRmFj dG9yeVR5cGU6OlJldHVyblR5cGUKLWNyZWF0ZU9wdGltaXplZENsYXNzKHR5cGVuYW1lIEZhY3Rv cnlUeXBlOjpQYXJhbVR5cGUgcGFyYW0pCi17Ci0gICAgc3RhdGljIGJvb2wgaXNDb25maWdJbml0 aWFsaXplZCA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIHVzZVZlY3Rvcml6YXRpb24gPSB0cnVl OwotICAgIHN0YXRpYyBib29sIGRpc2FibGVBVlhPcHRpbWl6YXRpb25zID0gZmFsc2U7Ci0KLSAg ICBpZiAoIWlzQ29uZmlnSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgS0NvbmZpZ0dyb3VwIGNmZyA9 IEtTaGFyZWRDb25maWc6Om9wZW5Db25maWcoKS0+Z3JvdXAoIiIpOwotICAgICAgICAvLyB1c2Ug dGhlIG9sZCBrZXkgbmFtZSBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICB1c2VWZWN0b3JpemF0 aW9uID0gIWNmZy5yZWFkRW50cnkoImFtZERpc2FibGVWZWN0b3JXb3JrYXJvdW5kIiwgZmFsc2Up OwotICAgICAgICBkaXNhYmxlQVZYT3B0aW1pemF0aW9ucyA9IGNmZy5yZWFkRW50cnkoImRpc2Fi bGVBVlhPcHRpbWl6YXRpb25zIiwgZmFsc2UpOwotICAgICAgICBpc0NvbmZpZ0luaXRpYWxpemVk ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXVzZVZlY3Rvcml6YXRpb24pIHsKLSAgICAgICAg cVdhcm5pbmcoKSA8PCAiV0FSTklORzogdmVjdG9yIGluc3RydWN0aW9ucyBkaXNhYmxlZCBieSB0 aGUgXCdhbWREaXNhYmxlVmVjdG9yV29ya2Fyb3VuZFwnIG9wdGlvbiEiOwotICAgICAgICByZXR1 cm4gRmFjdG9yeVR5cGU6OnRlbXBsYXRlIGNyZWF0ZTxWYzo6U2NhbGFySW1wbD4ocGFyYW0pOwot ICAgIH0KLQotI2lmZGVmIEhBVkVfVkMKLSAgICBpZiAoZGlzYWJsZUFWWE9wdGltaXphdGlvbnMg JiYKLSAgICAgICAgKFZjOjppc0ltcGxlbWVudGF0aW9uU3VwcG9ydGVkKFZjOjpBVlhJbXBsKSB8 fAotICAgICAgICAgVmM6OmlzSW1wbGVtZW50YXRpb25TdXBwb3J0ZWQoVmM6OkFWWDJJbXBsKSkp IHsKLSAgICAgICAgcVdhcm5pbmcoKSA8PCAiV0FSTklORzogQVZYIGFuZCBBVlgyIG9wdGltaXph dGlvbnMgYXJlIGRpc2FibGVkIGJ5IHRoZSBcJ2Rpc2FibGVBVlhPcHRpbWl6YXRpb25zXCcgb3B0 aW9uISI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2UgdXNlIFNTRTIsIFNTU0UzLCBTU0U0 LjEsIEFWWCBhbmQgQVZYMi4KLSAgICAgKiBUaGUgcmVzdCBhcmUgaW50ZWdlciBhbmQgc3RyaW5n IGluc3RydWN0aW9ucyBtb3N0bHkuCi0gICAgICoKLSAgICAgKiBUT0RPOiBBZGQgRk1BMy80IHdo ZW4gaXQgaXMgYWRvcHRlZCBieSBWYwotICAgICAqLwotICAgIGlmICghZGlzYWJsZUFWWE9wdGlt aXphdGlvbnMgJiYgVmM6OmlzSW1wbGVtZW50YXRpb25TdXBwb3J0ZWQoVmM6OkFWWDJJbXBsKSkg ewotICAgICAgICByZXR1cm4gRmFjdG9yeVR5cGU6OnRlbXBsYXRlIGNyZWF0ZTxWYzo6QVZYMklt cGw+KHBhcmFtKTsKLSAgICB9IGVsc2UgaWYgKCFkaXNhYmxlQVZYT3B0aW1pemF0aW9ucyAmJiBW Yzo6aXNJbXBsZW1lbnRhdGlvblN1cHBvcnRlZChWYzo6QVZYSW1wbCkpIHsKLSAgICAgICAgcmV0 dXJuIEZhY3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8VmM6OkFWWEltcGw+KHBhcmFtKTsKLSAg ICB9IGVsc2UgaWYgKFZjOjppc0ltcGxlbWVudGF0aW9uU3VwcG9ydGVkKFZjOjpTU0U0MUltcGwp KSB7Ci0gICAgICAgIHJldHVybiBGYWN0b3J5VHlwZTo6dGVtcGxhdGUgY3JlYXRlPFZjOjpTU0U0 MUltcGw+KHBhcmFtKTsKLSAgICB9IGVsc2UgaWYgKFZjOjppc0ltcGxlbWVudGF0aW9uU3VwcG9y dGVkKFZjOjpTU1NFM0ltcGwpKSB7Ci0gICAgICAgIHJldHVybiBGYWN0b3J5VHlwZTo6dGVtcGxh dGUgY3JlYXRlPFZjOjpTU1NFM0ltcGw+KHBhcmFtKTsKLSAgICB9IGVsc2UgaWYgKFZjOjppc0lt cGxlbWVudGF0aW9uU3VwcG9ydGVkKFZjOjpTU0UySW1wbCkpIHsKLSAgICAgICAgcmV0dXJuIEZh Y3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8VmM6OlNTRTJJbXBsPihwYXJhbSk7Ci0gICAgfSBl bHNlIHsKLSNlbmRpZgotICAgICAgICAodm9pZClkaXNhYmxlQVZYT3B0aW1pemF0aW9uczsKLSAg ICAgICAgcmV0dXJuIEZhY3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8VmM6OlNjYWxhckltcGw+ KHBhcmFtKTsKLSNpZmRlZiBIQVZFX1ZDCi0gICAgfQotI2VuZGlmCi0KLX0KLQotdGVtcGxhdGU8 Y2xhc3MgRmFjdG9yeVR5cGU+Ci10eXBlbmFtZSBGYWN0b3J5VHlwZTo6UmV0dXJuVHlwZQotY3Jl YXRlT3B0aW1pemVkQ2xhc3ModHlwZW5hbWUgRmFjdG9yeVR5cGU6OlBhcmFtVHlwZSBwYXJhbSwg Ym9vbCBmb3JjZVNjYWxhckltcGxlbWV0YXRpb24pCi17Ci0gICAgaWYoZm9yY2VTY2FsYXJJbXBs ZW1ldGF0aW9uKXsKLSAgICAgICAgcmV0dXJuIEZhY3RvcnlUeXBlOjp0ZW1wbGF0ZSBjcmVhdGU8 VmM6OlNjYWxhckltcGw+KHBhcmFtKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZU9wdGltaXpl ZENsYXNzPEZhY3RvcnlUeXBlPihwYXJhbSk7Ci19Ci0KLSNlbmRpZiAvKiBfX0tPVkNNVUxUSUFS Q0hCVUlMRFNVUFBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9waWdtZW50L3Rlc3RzL0tvUmdi VThDb2xvclNwYWNlVGVzdGVyLmNwcCBiL2xpYnMvcGlnbWVudC90ZXN0cy9Lb1JnYlU4Q29sb3JT cGFjZVRlc3Rlci5jcHAKaW5kZXggYjY1NzZjMjMxMi4uOGJkMDViODc4NiAxMDA2NDQKLS0tIGEv bGlicy9waWdtZW50L3Rlc3RzL0tvUmdiVThDb2xvclNwYWNlVGVzdGVyLmNwcAorKysgYi9saWJz L3BpZ21lbnQvdGVzdHMvS29SZ2JVOENvbG9yU3BhY2VUZXN0ZXIuY3BwCkBAIC0yOTYsNyArMjk2 LDcgQEAgdm9pZCBLb1JnYlU4Q29sb3JTcGFjZVRlc3Rlcjo6dGVzdENvbXBvc2l0ZU9wc1dpdGhD aGFubmVsRmxhZ3MoKQogCiAvLyBmb3IgcG9zaXhfbWVtYWxpZ24oKQogI2luY2x1ZGUgPHN0ZGxp Yi5oPgotI2luY2x1ZGUgPGNvbmZpZy12Yy5oPgorI2luY2x1ZGUgPGNvbmZpZy14c2ltZC5oPgog CiAjaWYgZGVmaW5lZCBRX09TX1dJTgogI2RlZmluZSBNRU1BTElHTl9BTExPQyhwLCBhLCBzKSAo KCoocCkpID0gX2FsaWduZWRfbWFsbG9jKChzKSwgKGEpKSwgKihwKSA/IDAgOiBlcnJubykKQEAg LTM2MiwxMCArMzYyLDEwIEBAIHZvaWQgS29SZ2JVOENvbG9yU3BhY2VUZXN0ZXI6OnRlc3RDb21w b3NpdGVDb3B5RGl2aXNpb25CeVplcm8oKQogICAgICAgICAgICAgcURlYnVnKCkgPDwgIm9yaUQi IDw8IGJhZERzdFswXSA8PCBiYWREc3RbMV0gPDwgYmFkRHN0WzJdIDw8IGJhZERzdFszXTsKICAg ICAgICAgICAgIHFEZWJ1ZygpIDw8ICJleHBEIiA8PCBleHBlY3RlZERzdFswXSA8PCBleHBlY3Rl ZERzdFsxXSA8PCBleHBlY3RlZERzdFsyXSA8PCBleHBlY3RlZERzdFszXTsKICAgICAgICAgICAg IHFEZWJ1ZygpIDw8ICJkc3QxIiA8PCBiYWRQaXhlbERzdFB0clswXSA8PCBiYWRQaXhlbERzdFB0 clsxXSA8PCBiYWRQaXhlbERzdFB0clsyXSA8PCBiYWRQaXhlbERzdFB0clszXTsKLSNpZiBIQVZF X1ZDCisjaWYgSEFWRV9YU0lNRAogICAgICAgICAgICAgUUZBSUwoIkZhaWxlZCB0byBjb21wb3Nl IHBpeGVscyIpOwogI2Vsc2UKLSAgICAgICAgICAgIHFXYXJuaW5nKCkgPDwgIlNraXBwaW5nIGZh aWxlZCB0ZXN0IHdoZW4gVmMgbGlicmFyeSBpcyBub3QgdXNlZCI7CisgICAgICAgICAgICBxV2Fy bmluZygpIDw8ICJTa2lwcGluZyBmYWlsZWQgdGVzdCB3aGVuIHhzaW1kIGxpYnJhcnkgaXMgbm90 IHVzZWQiOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9OwoK