From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (qmail 29714 invoked from network); 18 Jun 2022 07:17:40 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 18 Jun 2022 07:17:40 -0000 Content-Type: multipart/mixed; boundary="===============4326402664092844980==" MIME-Version: 1.0 Subject: =?utf8?q?Re=3A_=5BPR_PATCH=5D_=5BUpdated=5D_New_package=3A_libdpp-10=2E0=2E10?= To: ml@inbox.vuxu.org From: JuniorSuperTux Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Sat, 18 Jun 2022 09:17:40 +0200 List-Id: Message-ID: <20220618071740.XqG_4YhdgB6ycziyhtXwmhef5tbjkGMaGdVazOjoISE@z> GitHub notification mails are now in MIME to allow UTF8. --===============4326402664092844980== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgSnVuaW9yU3VwZXJUdXggYWdhaW5z dCBtYXN0ZXIgb24gdGhlIHZvaWQtcGFja2FnZXMgcmVwb3NpdG9yeQoKaHR0cHM6Ly9naXRodWIu Y29tL0p1bmlvclN1cGVyVHV4L3ZvaWQtcGFja2FnZXMgbGliZHBwLTEwLjAuMTAKaHR0cHM6Ly9n aXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzM3NTU0CgpOZXcgcGFja2Fn ZTogbGliZHBwLTEwLjAuMTAKPCEtLSBVbmNvbW1lbnQgcmVsZXZhbnQgc2VjdGlvbnMgYW5kIGRl bGV0ZSBvcHRpb25zIHdoaWNoIGFyZSBub3QgYXBwbGljYWJsZSAtLT4NCg0KIyMjIyBUZXN0aW5n IHRoZSBjaGFuZ2VzDQotIEkgdGVzdGVkIHRoZSBjaGFuZ2VzIGluIHRoaXMgUFI6ICoqWUVTKioN Cg0KPCEtLQ0KIyMjIyBOZXcgcGFja2FnZQ0KLSBUaGlzIG5ldyBwYWNrYWdlIGNvbmZvcm1zIHRv IHRoZSBbcXVhbGl0eSByZXF1aXJlbWVudHNdKGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4 L3ZvaWQtcGFja2FnZXMvYmxvYi9tYXN0ZXIvTWFudWFsLm1kI3F1YWxpdHktcmVxdWlyZW1lbnRz KTogKipZRVMqKnwqKk5PKioNCi0tPg0KDQo8IS0tIE5vdGU6IElmIHRoZSBidWlsZCBpcyBsaWtl bHkgdG8gdGFrZSBtb3JlIHRoYW4gMiBob3VycywgcGxlYXNlIGFkZCBjaSBza2lwIHRhZyBhcyBk ZXNjcmliZWQgaW4NCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQtcGFja2FnZXMv YmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kI2NvbnRpbnVvdXMtaW50ZWdyYXRpb24NCmFuZCB0 ZXN0IGF0IGxlYXN0IG9uZSBuYXRpdmUgYnVpbGQgYW5kLCBpZiBzdXBwb3J0ZWQsIGF0IGxlYXN0 IG9uZSBjcm9zcyBidWlsZC4NCklnbm9yZSB0aGlzIHNlY3Rpb24gaWYgdGhpcyBQUiBpcyBub3Qg c2tpcHBpbmcgQ0kuDQotLT4NCjwhLS0NCiMjIyMgTG9jYWwgYnVpbGQgdGVzdGluZw0KLSBJIGJ1 aWx0IHRoaXMgUFIgbG9jYWxseSBmb3IgbXkgbmF0aXZlIGFyY2hpdGVjdHVyZSwgKEFSQ0gtTElC QykNCi0gSSBidWlsdCB0aGlzIFBSIGxvY2FsbHkgZm9yIHRoZXNlIGFyY2hpdGVjdHVyZXMgKGlm IHN1cHBvcnRlZC4gbWFyayBjcm9zc2J1aWxkcyk6DQogIC0gYWFyY2g2NC1tdXNsDQogIC0gYXJt djdsDQogIC0gYXJtdjZsLW11c2wNCi0tPg0KCgpBIHBhdGNoIGZpbGUgZnJvbSBodHRwczovL2dp dGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMzc1NTQucGF0Y2ggaXMgYXR0 YWNoZWQ= --===============4326402664092844980== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-libdpp-10.0.10-37554.patch" RnJvbSA3YWNkNDcwM2RhZDMwZmUxMzMxYmM4OTdjZDUyOThiN2I1ZWNmNjk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCby1SdSBKdSA8c2Nob29sLnNoc3BzQGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAxMyBKdW4gMjAyMiAxODoyOTozNSArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIE5ldyBw YWNrYWdlOiBsaWJkcHAtMTAuMC4xMAoKLS0tCiBzcmNwa2dzL2xpYmRwcC1kZXZlbCAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAgMSArCiAuLi4vbGliZHBwL2ZpbGVzL2ZpeC1oZWFkZXJz LWFuZC1jbWFrZWZpbGVzICAgfCAzODc3MiArKysrKysrKysrKysrKysrCiBzcmNwa2dzL2xpYmRw cC9maWxlcy9maXgtaW5zdGFsbGVkLWNtYWtlZmlsZXMgfCAgICA4NiArCiBzcmNwa2dzL2xpYmRw cC90ZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzNyArCiA0IGZpbGVzIGNoYW5n ZWQsIDM4ODk2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEyMDAwMCBzcmNwa2dzL2xpYmRw cC1kZXZlbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvbGliZHBwL2ZpbGVzL2ZpeC1oZWFk ZXJzLWFuZC1jbWFrZWZpbGVzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy9saWJkcHAvZmls ZXMvZml4LWluc3RhbGxlZC1jbWFrZWZpbGVzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy9s aWJkcHAvdGVtcGxhdGUKCmRpZmYgLS1naXQgYS9zcmNwa2dzL2xpYmRwcC1kZXZlbCBiL3NyY3Br Z3MvbGliZHBwLWRldmVsCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMC4u OTE3NmQ3YTg1MGJlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtncy9saWJkcHAtZGV2ZWwKQEAg LTAsMCArMSBAQAorbGliZHBwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0 IGEvc3JjcGtncy9saWJkcHAvZmlsZXMvZml4LWhlYWRlcnMtYW5kLWNtYWtlZmlsZXMgYi9zcmNw a2dzL2xpYmRwcC9maWxlcy9maXgtaGVhZGVycy1hbmQtY21ha2VmaWxlcwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY2M2RmNTMxM2U5NgotLS0gL2Rldi9udWxsCisr KyBiL3NyY3BrZ3MvbGliZHBwL2ZpbGVzL2ZpeC1oZWFkZXJzLWFuZC1jbWFrZWZpbGVzCkBAIC0w LDAgKzEsMzg3NzIgQEAKK2RpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMu dHh0CitpbmRleCBiYmNjNGIzLi41MjRhM2NhIDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQK KysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtNDMsNyArNDMsNyBAQCBtYXRoKEVYUFIgRFBQX1ZF UlNJT05fUEFUQ0ggJHtDTUFLRV9NQVRDSF8zfSkKKyAKKyBzdHJpbmcoQ09OQ0FUIERQUF9WRVJT SU9OICR7RFBQX1ZFUlNJT05fTUFKT1J9LiR7RFBQX1ZFUlNJT05fTUlOT1J9LiR7RFBQX1ZFUlNJ T05fUEFUQ0h9KQorIAorLXByb2plY3QobGliZHBwIFZFUlNJT04gJHtEUFBfVkVSU0lPTn0gTEFO R1VBR0VTIENYWCkKKytwcm9qZWN0KGRwcCBWRVJTSU9OICR7RFBQX1ZFUlNJT059IExBTkdVQUdF UyBDWFgpCisgCisgY2hlY2tfY3h4X3N5bWJvbF9leGlzdHMocHJjdGwgInN5cy9wcmN0bC5oIiBI QVZFX1BSQ1RMKQorIGNoZWNrX2N4eF9zeW1ib2xfZXhpc3RzKHB0aHJlYWRfc2V0bmFtZV9ucCAi cHRocmVhZC5oIiBIQVZFX1BUSFJFQURfU0VUTkFNRV9OUCkKK0BAIC0yNDAsOCArMjQwLDggQEAg Zm9yZWFjaCAoZnVsbG1vZG5hbWUgJHtzdWJkaXJsaXN0fSkKKyAJdGFyZ2V0X3ByZWNvbXBpbGVf aGVhZGVycygKKyAJCSR7bW9kbmFtZX0KKyAJCVBSSVZBVEUKKy0JCSIke1BST0pFQ1RfU09VUkNF X0RJUn0vaW5jbHVkZS9kcHAvbmxvaG1hbm4vanNvbi5ocHAiCistCQkiJHtQUk9KRUNUX1NPVVJD RV9ESVJ9L2luY2x1ZGUvZHBwL25sb2htYW5uL2pzb25fZndkLmhwcCIKKysJCTxubG9obWFubi9q c29uLmhwcD4KKysJCTxubG9obWFubi9qc29uX2Z3ZC5ocHA+CisgCSkKKyAKKyAJaWYgKFdJTjMy IEFORCBOT1QgTUlOR1cpCitAQCAtMzI1LDE0ICszMjUsMTYgQEAgaWYoTk9UIFdJTjMyKQorIAkj IEluc3RhbGxhdGlvbgorIAorIAlpbmNsdWRlKEdOVUluc3RhbGxEaXJzKQorLQlpbnN0YWxsKFRB UkdFVFMgZHBwIExJQlJBUlkgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0pCisr CWluc3RhbGwoVEFSR0VUUyBkcHAgRVhQT1JUIGRwcC10YXJnZXRzIExJQlJBUlkgREVTVElOQVRJ T04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0pCisraW5zdGFsbChFWFBPUlQgZHBwLXRhcmdldHMg REVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0pCisgCWluc3RhbGwoRElSRUNUT1JZ IGluY2x1ZGUvIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfSkKKyAJaW5z dGFsbChDT0RFICJleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1EUlVO X0xEQ09ORklHPSR7UlVOX0xEQ09ORklHfSAtRExEQ09ORklHX0VYRUNVVEFCTEU9JHtMRENPTkZJ R19FWEVDVVRBQkxFfSAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY21ha2UvUG9zdElu c3RhbGwuY21ha2UpIikKKyAKKyAJY29uZmlndXJlX2ZpbGUoIiR7Q01BS0VfQ1VSUkVOVF9TT1VS Q0VfRElSfS9kcHAucGMuaW4iICIke0NNQUtFX0JJTkFSWV9ESVJ9L2RwcC5wYyIgQE9OTFkpCisg CWluc3RhbGwoRklMRVMgIiR7Q01BS0VfQklOQVJZX0RJUn0vZHBwLnBjIiBERVNUSU5BVElPTiAi JHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vcGtnY29uZmlnIikKKyBlbHNlaWYoTUlOR1cpCistCWlu c3RhbGwoVEFSR0VUUyBkcHAgTElCUkFSWSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfUFJF RklYfS9saWIpCisrCWluc3RhbGwoVEFSR0VUUyBkcHAgRVhQT1JUIGRwcC10YXJnZXRzIExJQlJB UlkgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliKQorK2luc3RhbGwoRVhQ T1JUIGRwcC10YXJnZXRzIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYikK KyAJaW5zdGFsbChESVJFQ1RPUlkgaW5jbHVkZS8gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxM X1BSRUZJWH0vaW5jbHVkZSkKKyBlbmRpZigpCisgCitkaWZmIC0tZ2l0IGEvY21ha2UvQ1BhY2tT ZXR1cC5jbWFrZSBiL2NtYWtlL0NQYWNrU2V0dXAuY21ha2UKK2luZGV4IGE2YmNmNTkuLjczYWJl N2UgMTAwNjQ0CistLS0gYS9jbWFrZS9DUGFja1NldHVwLmNtYWtlCisrKysgYi9jbWFrZS9DUGFj a1NldHVwLmNtYWtlCitAQCAtMjQsNyArMjQsNyBAQCB3cml0ZV9iYXNpY19wYWNrYWdlX3ZlcnNp b25fZmlsZSgke0RQUF9WRVJTSU9OX0ZJTEV9CisgaW5zdGFsbChESVJFQ1RPUlkgaW5jbHVkZS8g REVTVElOQVRJT04gJHtEUFBfSU5TVEFMTF9JTkNMVURFX0RJUn0pCisgCisgIyMgSW5jbHVkZSB0 aGUgZmlsZSB3aGljaCBhbGxvd3MgYGZpbmRfcGFja2FnZShsaWJkcHApYCB0byBmdW5jdGlvbi4K Ky1pbnN0YWxsKEZJTEVTIGNtYWtlL2xpYmRwcC1jb25maWcuY21ha2UgJHtEUFBfVkVSU0lPTl9G SUxFfSBERVNUSU5BVElPTiAke0RQUF9JTlNUQUxMX0xJQlJBUllfRElSfSkKKytpbnN0YWxsKEZJ TEVTIGNtYWtlL2RwcC1jb25maWcuY21ha2UgJHtEUFBfVkVSU0lPTl9GSUxFfSBERVNUSU5BVElP TiAke0RQUF9JTlNUQUxMX0xJQlJBUllfRElSfSkKKyAKKyAjIyBFeHBvcnQgdGhlIHRhcmdldHMg dG8gYWxsb3cgb3RoZXIgcHJvamVjdHMgdG8gZWFzaWx5IGluY2x1ZGUgdGhpcyBwcm9qZWN0Cisg aW5zdGFsbChFWFBPUlQgJHtEUFBfRVhQT1JUX05BTUV9IERFU1RJTkFUSU9OICR7RFBQX0lOU1RB TExfTElCUkFSWV9ESVJ9IE5BTUVTUEFDRSBkcHA6OikKK2RpZmYgLS1naXQgYS9jbWFrZS9saWJk cHAtY29uZmlnLmNtYWtlIGIvY21ha2UvbGliZHBwLWNvbmZpZy5jbWFrZQorZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CitpbmRleCBkNmRkNWJkLi4wMDAwMDAwCistLS0gYS9jbWFrZS9saWJkcHAt Y29uZmlnLmNtYWtlCisrKysgL2Rldi9udWxsCitAQCAtMSwyMSArMCwwIEBACistIyBsaWJkcHAt Y29uZmlnLmNtYWtlIC0gcGFja2FnZSBjb25maWd1cmF0aW9uIGZpbGUKKy0KKy0jIyBHZXQgY3Vy cmVudCBmaWxlc3lzdGVtIHBhdGggKHdpbGwgYSBwcmVmaXhlZCBieSB3aGVyZSB0aGlzIHBhY2th Z2Ugd2FzIGluc3RhbGxlZCkKKy1nZXRfZmlsZW5hbWVfY29tcG9uZW50KFNFTEZfRElSICIke0NN QUtFX0NVUlJFTlRfTElTVF9GSUxFfSIgUEFUSCkKKy0KKy0jIyBVc2UgdGhpcyBkaXJlY3Rvcnkg dG8gaW5jbHVkZSBsaWJkcHAgd2hpY2ggaGFzIHRoZSByZXN0IG9mIHRoZSBwcm9qZWN0IHRhcmdl dHMKKy1pbmNsdWRlKCR7U0VMRl9ESVJ9L2xpYmRwcC5jbWFrZSkKKy0KKy0jIyBTZXQgT3BlblNT bCBkaXJlY3RvcnkgZm9yIG1hY29zLiBJdCBpcyBhbHNvIGluIG91ciBtYWluIENNYWtlTGlzdHMu dHh0LCBidXQgdGhpcyBmaWxlIGlzIGluZGVwZW5kZW50IGZyb20gdGhhdC4KKy1pZihBUFBMRSkK Ky0JaWYoQ01BS0VfQVBQTEVfU0lMSUNPTl9QUk9DRVNTT1IpCistCQlzZXQoT1BFTlNTTF9ST09U X0RJUiAiL29wdC9ob21lYnJldy9vcHQvb3BlbnNzbCIpCistCWVsc2UoKQorLQkJc2V0KE9QRU5T U0xfUk9PVF9ESVIgIi91c3IvbG9jYWwvb3B0L29wZW5zc2wiKQorLQllbmRpZigpCistCWZpbmRf cGFja2FnZShPcGVuU1NMIFJFUVVJUkVEKQorLWVuZGlmKCkKKy0KKy0jIFNlYXJjaCBmb3IgbGli ZHBwIGRlcGVuZGVuY2llcworLWluY2x1ZGUoQ01ha2VGaW5kRGVwZW5kZW5jeU1hY3JvKQorLWZp bmRfZGVwZW5kZW5jeShPcGVuU1NMIFJFUVVJUkVEKQorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBw L2FwcGNvbW1hbmQuaCBiL2luY2x1ZGUvZHBwL2FwcGNvbW1hbmQuaAoraW5kZXggNDI0ODIzYy4u MzZmOGY4MiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHBwL2FwcGNvbW1hbmQuaAorKysrIGIvaW5j bHVkZS9kcHAvYXBwY29tbWFuZC5oCitAQCAtMjcsNyArMjcsNyBAQAorICNpbmNsdWRlIDxkcHAv cm9sZS5oPgorICNpbmNsdWRlIDxkcHAvdXNlci5oPgorICNpbmNsdWRlIDx2YXJpYW50PgorLSNp bmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9q c29uX2Z3ZC5ocHA+CisgI2luY2x1ZGUgPGRwcC9qc29uX2ludGVyZmFjZS5oPgorIAorIG5hbWVz cGFjZSBkcHAgeworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL2FwcGxpY2F0aW9uLmggYi9pbmNs dWRlL2RwcC9hcHBsaWNhdGlvbi5oCitpbmRleCA3ZTlkODBkLi4xOWZhZDgzIDEwMDY0NAorLS0t IGEvaW5jbHVkZS9kcHAvYXBwbGljYXRpb24uaAorKysrIGIvaW5jbHVkZS9kcHAvYXBwbGljYXRp b24uaAorQEAgLTI2LDcgKzI2LDcgQEAKKyAjaW5jbHVkZSA8ZHBwL3V0aWxpdHkuaD4KKyAjaW5j bHVkZSA8ZHBwL3VzZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL3Blcm1pc3Npb25zLmg+CistI2luY2x1 ZGUgPGRwcC9ubG9obWFubi9qc29uX2Z3ZC5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb25f ZndkLmhwcD4KKyAjaW5jbHVkZSA8ZHBwL2pzb25faW50ZXJmYWNlLmg+CisgCisgbmFtZXNwYWNl IGRwcCB7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvYXVkaXRsb2cuaCBiL2luY2x1ZGUvZHBw L2F1ZGl0bG9nLmgKK2luZGV4IDM0Njk2MzAuLmNhODc4ZGEgMTAwNjQ0CistLS0gYS9pbmNsdWRl L2RwcC9hdWRpdGxvZy5oCisrKysgYi9pbmNsdWRlL2RwcC9hdWRpdGxvZy5oCitAQCAtMjIsNyAr MjIsNyBAQAorICNwcmFnbWEgb25jZQorICNpbmNsdWRlIDxkcHAvZXhwb3J0Lmg+CisgI2luY2x1 ZGUgPGRwcC9zbm93Zmxha2UuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndkLmhw cD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbl9md2QuaHBwPgorICNpbmNsdWRlIDxvcHRpb25h bD4KKyAjaW5jbHVkZSA8ZHBwL2pzb25faW50ZXJmYWNlLmg+CisgCitkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcHAvYmFuLmggYi9pbmNsdWRlL2RwcC9iYW4uaAoraW5kZXggNmJiY2RkMi4uOGFkODhk NiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHBwL2Jhbi5oCisrKysgYi9pbmNsdWRlL2RwcC9iYW4u aAorQEAgLTIyLDcgKzIyLDcgQEAKKyAjcHJhZ21hIG9uY2UKKyAjaW5jbHVkZSA8ZHBwL2V4cG9y dC5oPgorICNpbmNsdWRlIDxkcHAvc25vd2ZsYWtlLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFu bi9qc29uX2Z3ZC5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb25fZndkLmhwcD4KKyAjaW5j bHVkZSA8ZHBwL2pzb25faW50ZXJmYWNlLmg+CisgI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Cisg CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvY2hhbm5lbC5oIGIvaW5jbHVkZS9kcHAvY2hhbm5l bC5oCitpbmRleCA3MzM1YjI4Li5iMmZjYzMzIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kcHAvY2hh bm5lbC5oCisrKysgYi9pbmNsdWRlL2RwcC9jaGFubmVsLmgKK0BAIC0yNSw3ICsyNSw3IEBACisg I2luY2x1ZGUgPGRwcC9tYW5hZ2VkLmg+CisgI2luY2x1ZGUgPGRwcC91dGlsaXR5Lmg+CisgI2lu Y2x1ZGUgPGRwcC92b2ljZXN0YXRlLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uX2Z3 ZC5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb25fZndkLmhwcD4KKyAjaW5jbHVkZSA8ZHBw L3Blcm1pc3Npb25zLmg+CisgI2luY2x1ZGUgPGRwcC9qc29uX2ludGVyZmFjZS5oPgorICNpbmNs dWRlIDx1bm9yZGVyZWRfbWFwPgorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL2NsdXN0ZXIuaCBi L2luY2x1ZGUvZHBwL2NsdXN0ZXIuaAoraW5kZXggNTQwMDY5NS4uNmU3YjQxYiAxMDA2NDQKKy0t LSBhL2luY2x1ZGUvZHBwL2NsdXN0ZXIuaAorKysrIGIvaW5jbHVkZS9kcHAvY2x1c3Rlci5oCitA QCAtMjksNyArMjksNyBAQAorICNpbmNsdWRlIDxkcHAvZGlzcGF0Y2hlci5oPgorICNpbmNsdWRl IDxkcHAvbWlzYy1lbnVtLmg+CisgI2luY2x1ZGUgPGRwcC90aW1lci5oPgorLSNpbmNsdWRlIDxk cHAvbmxvaG1hbm4vanNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3ZC5o cHA+CisgI2luY2x1ZGUgPGRwcC9kaXNjb3JkY2xpZW50Lmg+CisgI2luY2x1ZGUgPGRwcC92b2lj ZXJlZ2lvbi5oPgorICNpbmNsdWRlIDxkcHAvZHRlbXBsYXRlLmg+CitkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcHAvY29tbWFuZGhhbmRsZXIuaCBiL2luY2x1ZGUvZHBwL2NvbW1hbmRoYW5kbGVyLmgK K2luZGV4IDI5ZGE0NzMuLjBiMTU0MTcgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2RwcC9jb21tYW5k aGFuZGxlci5oCisrKysgYi9pbmNsdWRlL2RwcC9jb21tYW5kaGFuZGxlci5oCitAQCAtMjksNyAr MjksNyBAQAorICNpbmNsdWRlIDxkcHAvYXBwY29tbWFuZC5oPgorICNpbmNsdWRlIDxkcHAvZGlz cGF0Y2hlci5oPgorICNpbmNsdWRlIDxkcHAvdXRpbGl0eS5oPgorLSNpbmNsdWRlIDxkcHAvbmxv aG1hbm4vanNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3ZC5ocHA+Cisg I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisgI2luY2x1ZGUgPHZlY3Rvcj4KKyAjaW5jbHVkZSA8 ZnVuY3Rpb25hbD4KK2RpZmYgLS1naXQgYS9pbmNsdWRlL2RwcC9kaXNjb3JkY2xpZW50LmggYi9p bmNsdWRlL2RwcC9kaXNjb3JkY2xpZW50LmgKK2luZGV4IDFlYjg3NWEuLjEwZjAxMGUgMTAwNjQ0 CistLS0gYS9pbmNsdWRlL2RwcC9kaXNjb3JkY2xpZW50LmgKKysrKyBiL2luY2x1ZGUvZHBwL2Rp c2NvcmRjbGllbnQuaAorQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nPgorICNp bmNsdWRlIDxtYXA+CisgI2luY2x1ZGUgPHZlY3Rvcj4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5u L2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbl9md2QuaHBwPgorICNpbmNs dWRlIDxkcHAvd3NjbGllbnQuaD4KKyAjaW5jbHVkZSA8ZHBwL2Rpc3BhdGNoZXIuaD4KKyAjaW5j bHVkZSA8ZHBwL2NsdXN0ZXIuaD4KK2RpZmYgLS1naXQgYS9pbmNsdWRlL2RwcC9kaXNjb3JkZXZl bnRzLmggYi9pbmNsdWRlL2RwcC9kaXNjb3JkZXZlbnRzLmgKK2luZGV4IGM2NDc0YTQuLjFhNzBi MTggMTAwNjQ0CistLS0gYS9pbmNsdWRlL2RwcC9kaXNjb3JkZXZlbnRzLmgKKysrKyBiL2luY2x1 ZGUvZHBwL2Rpc2NvcmRldmVudHMuaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjcHJhZ21hIG9uY2UK KyAKKyAjaW5jbHVkZSA8ZHBwL2V4cG9ydC5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNv bl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3ZC5ocHA+CisgCisgbmFtZXNw YWNlIGRwcCB7CisgCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvZGlzY29yZHZvaWNlY2xpZW50 LmggYi9pbmNsdWRlL2RwcC9kaXNjb3Jkdm9pY2VjbGllbnQuaAoraW5kZXggZTExZDY1My4uNjY5 MmU1NCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHBwL2Rpc2NvcmR2b2ljZWNsaWVudC5oCisrKysg Yi9pbmNsdWRlL2RwcC9kaXNjb3Jkdm9pY2VjbGllbnQuaAorQEAgLTMyLDcgKzMyLDcgQEAKKyAj aW5jbHVkZSA8c3RyaW5nPgorICNpbmNsdWRlIDxtYXA+CisgI2luY2x1ZGUgPHZlY3Rvcj4KKy0j aW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4v anNvbl9md2QuaHBwPgorICNpbmNsdWRlIDxkcHAvd3NjbGllbnQuaD4KKyAjaW5jbHVkZSA8ZHBw L2Rpc3BhdGNoZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KK2RpZmYgLS1naXQgYS9p bmNsdWRlL2RwcC9kdGVtcGxhdGUuaCBiL2luY2x1ZGUvZHBwL2R0ZW1wbGF0ZS5oCitpbmRleCA5 NDhiMjVkLi41ZmJlMTdlIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kcHAvZHRlbXBsYXRlLmgKKysr KyBiL2luY2x1ZGUvZHBwL2R0ZW1wbGF0ZS5oCitAQCAtMjEsNyArMjEsNyBAQAorICNwcmFnbWEg b25jZQorICNpbmNsdWRlIDxkcHAvZXhwb3J0Lmg+CisgI2luY2x1ZGUgPGRwcC9zbm93Zmxha2Uu aD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxv aG1hbm4vanNvbl9md2QuaHBwPgorICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorICNpbmNsdWRl IDxkcHAvanNvbl9pbnRlcmZhY2UuaD4KKyAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2RwcC9lbW9q aS5oIGIvaW5jbHVkZS9kcHAvZW1vamkuaAoraW5kZXggYTczZTU4YS4uOWFiOWMxZSAxMDA2NDQK Ky0tLSBhL2luY2x1ZGUvZHBwL2Vtb2ppLmgKKysrKyBiL2luY2x1ZGUvZHBwL2Vtb2ppLmgKK0BA IC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGRwcC9zbm93Zmxha2UuaD4KKyAjaW5jbHVkZSA8 ZHBwL21pc2MtZW51bS5oPgorICNpbmNsdWRlIDxkcHAvbWFuYWdlZC5oPgorLSNpbmNsdWRlIDxk cHAvbmxvaG1hbm4vanNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3ZC5o cHA+CisgI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisgI2luY2x1ZGUgPGRwcC9qc29uX2ludGVy ZmFjZS5oPgorIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL2V0Zi5oIGIvaW5jbHVkZS9kcHAv ZXRmLmgKK2luZGV4IDFjOThlNmEuLjFhY2Q2M2IgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2RwcC9l dGYuaAorKysrIGIvaW5jbHVkZS9kcHAvZXRmLmgKK0BAIC0zNCw3ICszNCw3IEBACisgI3ByYWdt YSBvbmNlCisgI2luY2x1ZGUgPGRwcC9leHBvcnQuaD4KKyAjaW5jbHVkZSA8ZHBwL3Nub3dmbGFr ZS5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2ht YW5uL2pzb24uaHBwPgorIAorIG5hbWVzcGFjZSBkcHAgeworIAorZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZHBwL2V2ZW50LmggYi9pbmNsdWRlL2RwcC9ldmVudC5oCitpbmRleCBjZDk0NWY1Li4zODhh MGQ2IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kcHAvZXZlbnQuaAorKysrIGIvaW5jbHVkZS9kcHAv ZXZlbnQuaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjcHJhZ21hIG9uY2UKKyAjaW5jbHVkZSA8ZHBw L2V4cG9ydC5oPgorICNpbmNsdWRlIDxkcHAvc25vd2ZsYWtlLmg+CistI2luY2x1ZGUgPGRwcC9u bG9obWFubi9qc29uX2Z3ZC5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb25fZndkLmhwcD4K KyAKKyAjZGVmaW5lIGV2ZW50X2RlY2woeCx3c3R5cGUpIC8qKiBAYnJpZWYgSW50ZXJuYWwgZXZl bnQgaGFuZGxlciBmb3Igd3N0eXBlIHdlYnNvY2tldCBldmVudHMuIENhbGxlZCBmb3IgZWFjaCB3 ZWJzb2NrZXQgbWVzc2FnZSBvZiB0aGlzIHR5cGUuIEBpbnRlcm5hbCAqLyBcCisgCWNsYXNzIHgg OiBwdWJsaWMgZXZlbnQgeyBwdWJsaWM6IHZpcnR1YWwgdm9pZCBoYW5kbGUoZHBwOjpkaXNjb3Jk X2NsaWVudCogY2xpZW50LCBubG9obWFubjo6anNvbiAmaiwgY29uc3Qgc3RkOjpzdHJpbmcgJnJh dyk7IH07CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvZm10LW1pbmltYWwuaCBiL2luY2x1ZGUv ZHBwL2ZtdC1taW5pbWFsLmgKK2luZGV4IGE1ZTdhNWQuLjg4ZjFlMzggMTAwNjQ0CistLS0gYS9p bmNsdWRlL2RwcC9mbXQtbWluaW1hbC5oCisrKysgYi9pbmNsdWRlL2RwcC9mbXQtbWluaW1hbC5o CitAQCAtMSwzICsxLDMgQEAKKyAjcHJhZ21hIG9uY2UKKy0jaW5jbHVkZSA8ZHBwL2ZtdC9jb3Jl Lmg+CisrI2luY2x1ZGUgPGZtdC9jb3JlLmg+CisgI2RlZmluZSBGTVRfU1RSSU5HKHMpIHMKK2Rp ZmYgLS1naXQgYS9pbmNsdWRlL2RwcC9mbXQvYXJncy5oIGIvaW5jbHVkZS9kcHAvZm10L2FyZ3Mu aAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA5YThlNGVkLi4wMDAwMDAwCistLS0g YS9pbmNsdWRlL2RwcC9mbXQvYXJncy5oCisrKysgL2Rldi9udWxsCitAQCAtMSwyMzQgKzAsMCBA QAorLS8vIEZvcm1hdHRpbmcgbGlicmFyeSBmb3IgQysrIC0gZHluYW1pYyBmb3JtYXQgYXJndW1l bnRzCistLy8KKy0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgLSBwcmVzZW50LCBWaWN0b3IgWnZlcm92 aWNoCistLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0vLworLS8vIEZvciB0aGUgbGljZW5zZSBp bmZvcm1hdGlvbiByZWZlciB0byBmb3JtYXQuaC4KKy0KKy0jaWZuZGVmIEZNVF9BUkdTX0hfCist I2RlZmluZSBGTVRfQVJHU19IXworLQorLSNpbmNsdWRlIDxmdW5jdGlvbmFsPiAgLy8gc3RkOjpy ZWZlcmVuY2Vfd3JhcHBlcgorLSNpbmNsdWRlIDxtZW1vcnk+ICAgICAgLy8gc3RkOjp1bmlxdWVf cHRyCistI2luY2x1ZGUgPHZlY3Rvcj4KKy0KKy0jaW5jbHVkZSAiY29yZS5oIgorLQorLUZNVF9C RUdJTl9OQU1FU1BBQ0UKKy0KKy1uYW1lc3BhY2UgZGV0YWlsIHsKKy0KKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gc3RydWN0IGlzX3JlZmVyZW5jZV93cmFwcGVyIDogc3RkOjpmYWxzZV90eXBlIHt9 OworLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXN0cnVjdCBpc19yZWZlcmVuY2Vfd3JhcHBlcjxz dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+PiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OworLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBUPiBjb25zdCBUJiB1bndyYXAoY29uc3QgVCYgdikgeyByZXR1cm4gdjsg fQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjb25zdCBUJiB1bndyYXAoY29uc3Qgc3RkOjpyZWZl cmVuY2Vfd3JhcHBlcjxUPiYgdikgeworLSAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFQmPih2 KTsKKy19CistCistY2xhc3MgZHluYW1pY19hcmdfbGlzdCB7CistICAvLyBXb3JrYXJvdW5kIGZv ciBjbGFuZydzIC1Xd2Vhay12dGFibGVzLiBVbmxpa2UgZm9yIHJlZ3VsYXIgY2xhc3NlcywgZm9y CistICAvLyB0ZW1wbGF0ZXMgaXQgZG9lc24ndCBjb21wbGFpbiBhYm91dCBpbmFiaWxpdHkgdG8g ZGVkdWNlIHNpbmdsZSB0cmFuc2xhdGlvbgorLSAgLy8gdW5pdCBmb3IgcGxhY2luZyB2dGFibGUu IFNvIHN0b3JhZ2Vfbm9kZV9iYXNlIGlzIG1hZGUgYSBmYWtlIHRlbXBsYXRlLgorLSAgdGVtcGxh dGUgPHR5cGVuYW1lID0gdm9pZD4gc3RydWN0IG5vZGUgeworLSAgICB2aXJ0dWFsIH5ub2RlKCkg PSBkZWZhdWx0OworLSAgICBzdGQ6OnVuaXF1ZV9wdHI8bm9kZTw+PiBuZXh0OworLSAgfTsKKy0K Ky0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgdHlwZWRfbm9kZSA6IG5vZGU8PiB7Cist ICAgIFQgdmFsdWU7CistCistICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmc+CistICAgIEZNVF9D T05TVEVYUFIgdHlwZWRfbm9kZShjb25zdCBBcmcmIGFyZykgOiB2YWx1ZShhcmcpIHt9CistCist ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLSAgICBGTVRfQ09OU1RFWFBSIHR5cGVkX25v ZGUoY29uc3QgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4mIGFyZykKKy0gICAgICAgIDogdmFsdWUo YXJnLmRhdGEoKSwgYXJnLnNpemUoKSkge30KKy0gIH07CistCistICBzdGQ6OnVuaXF1ZV9wdHI8 bm9kZTw+PiBoZWFkXzsKKy0KKy0gcHVibGljOgorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5 cGVuYW1lIEFyZz4gY29uc3QgVCYgcHVzaChjb25zdCBBcmcmIGFyZykgeworLSAgICBhdXRvIG5l d19ub2RlID0gc3RkOjp1bmlxdWVfcHRyPHR5cGVkX25vZGU8VD4+KG5ldyB0eXBlZF9ub2RlPFQ+ KGFyZykpOworLSAgICBhdXRvJiB2YWx1ZSA9IG5ld19ub2RlLT52YWx1ZTsKKy0gICAgbmV3X25v ZGUtPm5leHQgPSBzdGQ6Om1vdmUoaGVhZF8pOworLSAgICBoZWFkXyA9IHN0ZDo6bW92ZShuZXdf bm9kZSk7CistICAgIHJldHVybiB2YWx1ZTsKKy0gIH0KKy19OworLX0gIC8vIG5hbWVzcGFjZSBk ZXRhaWwKKy0KKy0vKioKKy0gIFxyc3QKKy0gIEEgZHluYW1pYyB2ZXJzaW9uIG9mIGBmbXQ6OmZv cm1hdF9hcmdfc3RvcmVgLgorLSAgSXQncyBlcXVpcHBlZCB3aXRoIGEgc3RvcmFnZSB0byBwb3Rl bnRpYWxseSB0ZW1wb3Jhcnkgb2JqZWN0cyB3aGljaCBsaWZldGltZXMKKy0gIGNvdWxkIGJlIHNo b3J0ZXIgdGhhbiB0aGUgZm9ybWF0IGFyZ3VtZW50cyBvYmplY3QuCistCistICBJdCBjYW4gYmUg aW1wbGljaXRseSBjb252ZXJ0ZWQgaW50byBgfmZtdDo6YmFzaWNfZm9ybWF0X2FyZ3NgIGZvciBw YXNzaW5nCistICBpbnRvIHR5cGUtZXJhc2VkIGZvcm1hdHRpbmcgZnVuY3Rpb25zIHN1Y2ggYXMg YH5mbXQ6OnZmb3JtYXRgLgorLSAgXGVuZHJzdAorLSAqLworLXRlbXBsYXRlIDx0eXBlbmFtZSBD b250ZXh0PgorLWNsYXNzIGR5bmFtaWNfZm9ybWF0X2FyZ19zdG9yZQorLSNpZiBGTVRfR0NDX1ZF UlNJT04gJiYgRk1UX0dDQ19WRVJTSU9OIDwgNDA5CistICAgIC8vIFdvcmthcm91bmQgYSBHQ0Mg dGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW9uIGJ1Zy4KKy0gICAgOiBwdWJsaWMgYmFzaWNf Zm9ybWF0X2FyZ3M8Q29udGV4dD4KKy0jZW5kaWYKKy17CistIHByaXZhdGU6CistICB1c2luZyBj aGFyX3R5cGUgPSB0eXBlbmFtZSBDb250ZXh0OjpjaGFyX3R5cGU7CistCistICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4gc3RydWN0IG5lZWRfY29weSB7CistICAgIHN0YXRpYyBjb25zdGV4cHIgZGV0 YWlsOjp0eXBlIG1hcHBlZF90eXBlID0KKy0gICAgICAgIGRldGFpbDo6bWFwcGVkX3R5cGVfY29u c3RhbnQ8VCwgQ29udGV4dD46OnZhbHVlOworLQorLSAgICBlbnVtIHsKKy0gICAgICB2YWx1ZSA9 ICEoZGV0YWlsOjppc19yZWZlcmVuY2Vfd3JhcHBlcjxUPjo6dmFsdWUgfHwKKy0gICAgICAgICAg ICAgICAgc3RkOjppc19zYW1lPFQsIGJhc2ljX3N0cmluZ192aWV3PGNoYXJfdHlwZT4+Ojp2YWx1 ZSB8fAorLSAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VCwgZGV0YWlsOjpzdGRfc3RyaW5n X3ZpZXc8Y2hhcl90eXBlPj46OnZhbHVlIHx8CistICAgICAgICAgICAgICAgIChtYXBwZWRfdHlw ZSAhPSBkZXRhaWw6OnR5cGU6OmNzdHJpbmdfdHlwZSAmJgorLSAgICAgICAgICAgICAgICAgbWFw cGVkX3R5cGUgIT0gZGV0YWlsOjp0eXBlOjpzdHJpbmdfdHlwZSAmJgorLSAgICAgICAgICAgICAg ICAgbWFwcGVkX3R5cGUgIT0gZGV0YWlsOjp0eXBlOjpjdXN0b21fdHlwZSkpCistICAgIH07Cist ICB9OworLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICB1c2luZyBzdG9yZWRfdHlwZSA9 IGNvbmRpdGlvbmFsX3Q8ZGV0YWlsOjppc19zdHJpbmc8VD46OnZhbHVlICYmCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoYXNfZm9ybWF0dGVyPFQsIENvbnRleHQ+ Ojp2YWx1ZSAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGV0 YWlsOjppc19yZWZlcmVuY2Vfd3JhcHBlcjxUPjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcl90eXBlPiwgVD47CistCist ICAvLyBTdG9yYWdlIG9mIGJhc2ljX2Zvcm1hdF9hcmcgbXVzdCBiZSBjb250aWd1b3VzLgorLSAg c3RkOjp2ZWN0b3I8YmFzaWNfZm9ybWF0X2FyZzxDb250ZXh0Pj4gZGF0YV87CistICBzdGQ6OnZl Y3RvcjxkZXRhaWw6Om5hbWVkX2FyZ19pbmZvPGNoYXJfdHlwZT4+IG5hbWVkX2luZm9fOworLQor LSAgLy8gU3RvcmFnZSBvZiBhcmd1bWVudHMgbm90IGZpdHRpbmcgaW50byBiYXNpY19mb3JtYXRf YXJnIG11c3QgZ3JvdworLSAgLy8gd2l0aG91dCByZWxvY2F0aW9uIGJlY2F1c2UgaXRlbXMgaW4g ZGF0YV8gcmVmZXIgdG8gaXQuCistICBkZXRhaWw6OmR5bmFtaWNfYXJnX2xpc3QgZHluYW1pY19h cmdzXzsKKy0KKy0gIGZyaWVuZCBjbGFzcyBiYXNpY19mb3JtYXRfYXJnczxDb250ZXh0PjsKKy0K Ky0gIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdHlwZXMoKSBjb25zdCB7CistICAgIHJldHVybiBk ZXRhaWw6OmlzX3VucGFja2VkX2JpdCB8IGRhdGFfLnNpemUoKSB8CistICAgICAgICAgICAobmFt ZWRfaW5mb18uZW1wdHkoKQorLSAgICAgICAgICAgICAgICA/IDBVTEwKKy0gICAgICAgICAgICAg ICAgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGRldGFpbDo6aGFzX25hbWVkX2Fy Z3NfYml0KSk7CistICB9CistCistICBjb25zdCBiYXNpY19mb3JtYXRfYXJnPENvbnRleHQ+KiBk YXRhKCkgY29uc3QgeworLSAgICByZXR1cm4gbmFtZWRfaW5mb18uZW1wdHkoKSA/IGRhdGFfLmRh dGEoKSA6IGRhdGFfLmRhdGEoKSArIDE7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gdm9pZCBlbXBsYWNlX2FyZyhjb25zdCBUJiBhcmcpIHsKKy0gICAgZGF0YV8uZW1wbGFjZV9i YWNrKGRldGFpbDo6bWFrZV9hcmc8Q29udGV4dD4oYXJnKSk7CistICB9CistCistICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KKy0gIHZvaWQgZW1wbGFjZV9hcmcoY29uc3QgZGV0YWlsOjpuYW1lZF9h cmc8Y2hhcl90eXBlLCBUPiYgYXJnKSB7CistICAgIGlmIChuYW1lZF9pbmZvXy5lbXB0eSgpKSB7 CistICAgICAgY29uc3RleHByIGNvbnN0IGRldGFpbDo6bmFtZWRfYXJnX2luZm88Y2hhcl90eXBl PiogemVyb19wdHJ7bnVsbHB0cn07CistICAgICAgZGF0YV8uaW5zZXJ0KGRhdGFfLmJlZ2luKCks IHt6ZXJvX3B0ciwgMH0pOworLSAgICB9CistICAgIGRhdGFfLmVtcGxhY2VfYmFjayhkZXRhaWw6 Om1ha2VfYXJnPENvbnRleHQ+KGRldGFpbDo6dW53cmFwKGFyZy52YWx1ZSkpKTsKKy0gICAgYXV0 byBwb3Bfb25lID0gW10oc3RkOjp2ZWN0b3I8YmFzaWNfZm9ybWF0X2FyZzxDb250ZXh0Pj4qIGRh dGEpIHsKKy0gICAgICBkYXRhLT5wb3BfYmFjaygpOworLSAgICB9OworLSAgICBzdGQ6OnVuaXF1 ZV9wdHI8c3RkOjp2ZWN0b3I8YmFzaWNfZm9ybWF0X2FyZzxDb250ZXh0Pj4sIGRlY2x0eXBlKHBv cF9vbmUpPgorLSAgICAgICAgZ3VhcmR7JmRhdGFfLCBwb3Bfb25lfTsKKy0gICAgbmFtZWRfaW5m b18ucHVzaF9iYWNrKHthcmcubmFtZSwgc3RhdGljX2Nhc3Q8aW50PihkYXRhXy5zaXplKCkgLSAy dSl9KTsKKy0gICAgZGF0YV9bMF0udmFsdWVfLm5hbWVkX2FyZ3MgPSB7bmFtZWRfaW5mb18uZGF0 YSgpLCBuYW1lZF9pbmZvXy5zaXplKCl9OworLSAgICBndWFyZC5yZWxlYXNlKCk7CistICB9Cist CistIHB1YmxpYzoKKy0gIGNvbnN0ZXhwciBkeW5hbWljX2Zvcm1hdF9hcmdfc3RvcmUoKSA9IGRl ZmF1bHQ7CistCistICAvKioKKy0gICAgXHJzdAorLSAgICBBZGRzIGFuIGFyZ3VtZW50IGludG8g dGhlIGR5bmFtaWMgc3RvcmUgZm9yIGxhdGVyIHBhc3NpbmcgdG8gYSBmb3JtYXR0aW5nCistICAg IGZ1bmN0aW9uLgorLQorLSAgICBOb3RlIHRoYXQgY3VzdG9tIHR5cGVzIGFuZCBzdHJpbmcgdHlw ZXMgKGJ1dCBub3Qgc3RyaW5nIHZpZXdzKSBhcmUgY29waWVkCistICAgIGludG8gdGhlIHN0b3Jl IGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgbWVtb3J5IGlmIG5lY2Vzc2FyeS4KKy0KKy0gICAgKipF eGFtcGxlKio6OgorLQorLSAgICAgIGZtdDo6ZHluYW1pY19mb3JtYXRfYXJnX3N0b3JlPGZtdDo6 Zm9ybWF0X2NvbnRleHQ+IHN0b3JlOworLSAgICAgIHN0b3JlLnB1c2hfYmFjayg0Mik7CistICAg ICAgc3RvcmUucHVzaF9iYWNrKCJhYmMiKTsKKy0gICAgICBzdG9yZS5wdXNoX2JhY2soMS41Zik7 CistICAgICAgc3RkOjpzdHJpbmcgcmVzdWx0ID0gZm10Ojp2Zm9ybWF0KCJ7fSBhbmQge30gYW5k IHt9Iiwgc3RvcmUpOworLSAgICBcZW5kcnN0CistICAqLworLSAgdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IHZvaWQgcHVzaF9iYWNrKGNvbnN0IFQmIGFyZykgeworLSAgICBpZiAoZGV0YWlsOjpjb25z dF9jaGVjayhuZWVkX2NvcHk8VD46OnZhbHVlKSkKKy0gICAgICBlbXBsYWNlX2FyZyhkeW5hbWlj X2FyZ3NfLnB1c2g8c3RvcmVkX3R5cGU8VD4+KGFyZykpOworLSAgICBlbHNlCistICAgICAgZW1w bGFjZV9hcmcoZGV0YWlsOjp1bndyYXAoYXJnKSk7CistICB9CistCistICAvKioKKy0gICAgXHJz dAorLSAgICBBZGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBkeW5hbWlj IHN0b3JlIGZvciBsYXRlciBwYXNzaW5nIHRvCistICAgIGEgZm9ybWF0dGluZyBmdW5jdGlvbi4K Ky0KKy0gICAgKipFeGFtcGxlKio6OgorLQorLSAgICAgIGZtdDo6ZHluYW1pY19mb3JtYXRfYXJn X3N0b3JlPGZtdDo6Zm9ybWF0X2NvbnRleHQ+IHN0b3JlOworLSAgICAgIGNoYXIgYmFuZFtdID0g IlJvbGxpbmcgU3RvbmVzIjsKKy0gICAgICBzdG9yZS5wdXNoX2JhY2soc3RkOjpjcmVmKGJhbmQp KTsKKy0gICAgICBiYW5kWzldID0gJ2MnOyAvLyBDaGFuZ2luZyBzdHIgYWZmZWN0cyB0aGUgb3V0 cHV0LgorLSAgICAgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IGZtdDo6dmZvcm1hdCgie30iLCBzdG9y ZSk7CistICAgICAgLy8gcmVzdWx0ID09ICJSb2xsaW5nIFNjb25lcyIKKy0gICAgXGVuZHJzdAor LSAgKi8KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIHB1c2hfYmFjayhzdGQ6OnJlZmVy ZW5jZV93cmFwcGVyPFQ+IGFyZykgeworLSAgICBzdGF0aWNfYXNzZXJ0KAorLSAgICAgICAgbmVl ZF9jb3B5PFQ+Ojp2YWx1ZSwKKy0gICAgICAgICJvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzIGFu ZCBzdHJpbmcgdmlld3MgYXJlIGFsd2F5cyBjb3BpZWQiKTsKKy0gICAgZW1wbGFjZV9hcmcoYXJn LmdldCgpKTsKKy0gIH0KKy0KKy0gIC8qKgorLSAgICBBZGRzIG5hbWVkIGFyZ3VtZW50IGludG8g dGhlIGR5bmFtaWMgc3RvcmUgZm9yIGxhdGVyIHBhc3NpbmcgdG8gYSBmb3JtYXR0aW5nCistICAg IGZ1bmN0aW9uLiBgYHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXJgYCBpcyBzdXBwb3J0ZWQgdG8gYXZv aWQgY29weWluZyBvZiB0aGUKKy0gICAgYXJndW1lbnQuIFRoZSBuYW1lIGlzIGFsd2F5cyBjb3Bp ZWQgaW50byB0aGUgc3RvcmUuCistICAqLworLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICB2 b2lkIHB1c2hfYmFjayhjb25zdCBkZXRhaWw6Om5hbWVkX2FyZzxjaGFyX3R5cGUsIFQ+JiBhcmcp IHsKKy0gICAgY29uc3QgY2hhcl90eXBlKiBhcmdfbmFtZSA9CistICAgICAgICBkeW5hbWljX2Fy Z3NfLnB1c2g8c3RkOjpiYXNpY19zdHJpbmc8Y2hhcl90eXBlPj4oYXJnLm5hbWUpLmNfc3RyKCk7 CistICAgIGlmIChkZXRhaWw6OmNvbnN0X2NoZWNrKG5lZWRfY29weTxUPjo6dmFsdWUpKSB7Cist ICAgICAgZW1wbGFjZV9hcmcoCistICAgICAgICAgIGZtdDo6YXJnKGFyZ19uYW1lLCBkeW5hbWlj X2FyZ3NfLnB1c2g8c3RvcmVkX3R5cGU8VD4+KGFyZy52YWx1ZSkpKTsKKy0gICAgfSBlbHNlIHsK Ky0gICAgICBlbXBsYWNlX2FyZyhmbXQ6OmFyZyhhcmdfbmFtZSwgYXJnLnZhbHVlKSk7CistICAg IH0KKy0gIH0KKy0KKy0gIC8qKiBFcmFzZSBhbGwgZWxlbWVudHMgZnJvbSB0aGUgc3RvcmUgKi8K Ky0gIHZvaWQgY2xlYXIoKSB7CistICAgIGRhdGFfLmNsZWFyKCk7CistICAgIG5hbWVkX2luZm9f LmNsZWFyKCk7CistICAgIGR5bmFtaWNfYXJnc18gPSBkZXRhaWw6OmR5bmFtaWNfYXJnX2xpc3Qo KTsKKy0gIH0KKy0KKy0gIC8qKgorLSAgICBccnN0CistICAgIFJlc2VydmVzIHNwYWNlIHRvIHN0 b3JlIGF0IGxlYXN0ICpuZXdfY2FwKiBhcmd1bWVudHMgaW5jbHVkaW5nCistICAgICpuZXdfY2Fw X25hbWVkKiBuYW1lZCBhcmd1bWVudHMuCistICAgIFxlbmRyc3QKKy0gICovCistICB2b2lkIHJl c2VydmUoc2l6ZV90IG5ld19jYXAsIHNpemVfdCBuZXdfY2FwX25hbWVkKSB7CistICAgIEZNVF9B U1NFUlQobmV3X2NhcCA+PSBuZXdfY2FwX25hbWVkLAorLSAgICAgICAgICAgICAgICJTZXQgb2Yg YXJndW1lbnRzIGluY2x1ZGVzIHNldCBvZiBuYW1lZCBhcmd1bWVudHMiKTsKKy0gICAgZGF0YV8u cmVzZXJ2ZShuZXdfY2FwKTsKKy0gICAgbmFtZWRfaW5mb18ucmVzZXJ2ZShuZXdfY2FwX25hbWVk KTsKKy0gIH0KKy19OworLQorLUZNVF9FTkRfTkFNRVNQQUNFCistCistI2VuZGlmICAvLyBGTVRf QVJHU19IXworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL2ZtdC9jaHJvbm8uaCBiL2luY2x1ZGUv ZHBwL2ZtdC9jaHJvbm8uaAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA2ODJlZmQ4 Li4wMDAwMDAwCistLS0gYS9pbmNsdWRlL2RwcC9mbXQvY2hyb25vLmgKKysrKyAvZGV2L251bGwK K0BAIC0xLDIwNjcgKzAsMCBAQAorLS8vIEZvcm1hdHRpbmcgbGlicmFyeSBmb3IgQysrIC0gY2hy b25vIHN1cHBvcnQKKy0vLworLS8vIENvcHlyaWdodCAoYykgMjAxMiAtIHByZXNlbnQsIFZpY3Rv ciBadmVyb3ZpY2gKKy0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLS8vCistLy8gRm9yIHRoZSBs aWNlbnNlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGZvcm1hdC5oLgorLQorLSNpZm5kZWYgRk1UX0NI Uk9OT19IXworLSNkZWZpbmUgRk1UX0NIUk9OT19IXworLQorLSNpbmNsdWRlIDxhbGdvcml0aG0+ CistI2luY2x1ZGUgPGNocm9ubz4KKy0jaW5jbHVkZSA8Y3RpbWU+CistI2luY2x1ZGUgPGl0ZXJh dG9yPgorLSNpbmNsdWRlIDxsb2NhbGU+CistI2luY2x1ZGUgPG9zdHJlYW0+CistI2luY2x1ZGUg PHR5cGVfdHJhaXRzPgorLQorLSNpbmNsdWRlICJmb3JtYXQuaCIKKy0KKy1GTVRfQkVHSU5fTkFN RVNQQUNFCistCistLy8gRW5hYmxlIHR6c2V0LgorLSNpZm5kZWYgRk1UX1VTRV9UWlNFVAorLS8v IFVXUCBkb2Vzbid0IHByb3ZpZGUgX3R6c2V0LgorLSMgIGlmIEZNVF9IQVNfSU5DTFVERSgid2lu YXBpZmFtaWx5LmgiKQorLSMgICAgaW5jbHVkZSA8d2luYXBpZmFtaWx5Lmg+CistIyAgZW5kaWYK Ky0jICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgKCFkZWZpbmVkKFdJTkFQSV9GQU1JTFkpIHx8IFwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgIChXSU5BUElfRkFNSUxZID09IFdJTkFQSV9GQU1J TFlfREVTS1RPUF9BUFApKQorLSMgICAgZGVmaW5lIEZNVF9VU0VfVFpTRVQgMQorLSMgIGVsc2UK Ky0jICAgIGRlZmluZSBGTVRfVVNFX1RaU0VUIDAKKy0jICBlbmRpZgorLSNlbmRpZgorLQorLS8v IEVuYWJsZSBzYWZlIGNocm9ubyBkdXJhdGlvbnMsIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVk LgorLSNpZm5kZWYgRk1UX1NBRkVfRFVSQVRJT05fQ0FTVAorLSMgIGRlZmluZSBGTVRfU0FGRV9E VVJBVElPTl9DQVNUIDEKKy0jZW5kaWYKKy0jaWYgRk1UX1NBRkVfRFVSQVRJT05fQ0FTVAorLQor LS8vIEZvciBjb252ZXJzaW9uIGJldHdlZW4gc3RkOjpjaHJvbm86OmR1cmF0aW9ucyB3aXRob3V0 IHVuZGVmaW5lZAorLS8vIGJlaGF2aW91ciBvciBlcnJvbmVvdXMgcmVzdWx0cy4KKy0vLyBUaGlz IGlzIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIGR1cmF0aW9uX2Nhc3QsIGZvciBpbmNsdXNp b24gaW4gZm10LgorLS8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGF1bGRyZWlrL3NhZmVfZHVy YXRpb25fY2FzdAorLS8vCistLy8gQ29weXJpZ2h0IFBhdWwgRHJlaWsgMjAxOQorLW5hbWVzcGFj ZSBzYWZlX2R1cmF0aW9uX2Nhc3QgeworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUbywgdHlwZW5h bWUgRnJvbSwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRighc3RkOjppc19zYW1lPEZyb20sIFRv Pjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRz PEZyb20+Ojppc19zaWduZWQgPT0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpu dW1lcmljX2xpbWl0czxUbz46OmlzX3NpZ25lZCk+CistRk1UX0NPTlNURVhQUiBUbyBsb3NzbGVz c19pbnRlZ3JhbF9jb252ZXJzaW9uKGNvbnN0IEZyb20gZnJvbSwgaW50JiBlYykgeworLSAgZWMg PSAwOworLSAgdXNpbmcgRiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8RnJvbT47CistICB1c2luZyBU ID0gc3RkOjpudW1lcmljX2xpbWl0czxUbz47CistICBzdGF0aWNfYXNzZXJ0KEY6OmlzX2ludGVn ZXIsICJGcm9tIG11c3QgYmUgaW50ZWdyYWwiKTsKKy0gIHN0YXRpY19hc3NlcnQoVDo6aXNfaW50 ZWdlciwgIlRvIG11c3QgYmUgaW50ZWdyYWwiKTsKKy0KKy0gIC8vIEEgYW5kIEIgYXJlIGJvdGgg c2lnbmVkLCBvciBib3RoIHVuc2lnbmVkLgorLSAgaWYgKGRldGFpbDo6Y29uc3RfY2hlY2soRjo6 ZGlnaXRzIDw9IFQ6OmRpZ2l0cykpIHsKKy0gICAgLy8gRnJvbSBmaXRzIGluIFRvIHdpdGhvdXQg YW55IHByb2JsZW0uCistICB9IGVsc2UgeworLSAgICAvLyBGcm9tIGRvZXMgbm90IGFsd2F5cyBm aXQgaW4gVG8sIHJlc29ydCB0byBhIGR5bmFtaWMgY2hlY2suCistICAgIGlmIChmcm9tIDwgKFQ6 Om1pbikoKSB8fCBmcm9tID4gKFQ6Om1heCkoKSkgeworLSAgICAgIC8vIG91dHNpZGUgcmFuZ2Uu CistICAgICAgZWMgPSAxOworLSAgICAgIHJldHVybiB7fTsKKy0gICAgfQorLSAgfQorLSAgcmV0 dXJuIHN0YXRpY19jYXN0PFRvPihmcm9tKTsKKy19CistCistLyoqCistICogY29udmVydHMgRnJv bSB0byBUbywgd2l0aG91dCBsb3NzLiBJZiB0aGUgZHluYW1pYyB2YWx1ZSBvZiBmcm9tCistICog Y2FuJ3QgYmUgY29udmVydGVkIHRvIFRvIHdpdGhvdXQgbG9zcywgZWMgaXMgc2V0LgorLSAqLwor LXRlbXBsYXRlIDx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbSwKKy0gICAgICAgICAgRk1UX0VO QUJMRV9JRighc3RkOjppc19zYW1lPEZyb20sIFRvPjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAg ICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPEZyb20+Ojppc19zaWduZWQgIT0KKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxUbz46OmlzX3NpZ25l ZCk+CistRk1UX0NPTlNURVhQUiBUbyBsb3NzbGVzc19pbnRlZ3JhbF9jb252ZXJzaW9uKGNvbnN0 IEZyb20gZnJvbSwgaW50JiBlYykgeworLSAgZWMgPSAwOworLSAgdXNpbmcgRiA9IHN0ZDo6bnVt ZXJpY19saW1pdHM8RnJvbT47CistICB1c2luZyBUID0gc3RkOjpudW1lcmljX2xpbWl0czxUbz47 CistICBzdGF0aWNfYXNzZXJ0KEY6OmlzX2ludGVnZXIsICJGcm9tIG11c3QgYmUgaW50ZWdyYWwi KTsKKy0gIHN0YXRpY19hc3NlcnQoVDo6aXNfaW50ZWdlciwgIlRvIG11c3QgYmUgaW50ZWdyYWwi KTsKKy0KKy0gIGlmIChkZXRhaWw6OmNvbnN0X2NoZWNrKEY6OmlzX3NpZ25lZCAmJiAhVDo6aXNf c2lnbmVkKSkgeworLSAgICAvLyBGcm9tIG1heSBiZSBuZWdhdGl2ZSwgbm90IGFsbG93ZWQhCist ICAgIGlmIChmbXQ6OmRldGFpbDo6aXNfbmVnYXRpdmUoZnJvbSkpIHsKKy0gICAgICBlYyA9IDE7 CistICAgICAgcmV0dXJuIHt9OworLSAgICB9CistICAgIC8vIEZyb20gaXMgcG9zaXRpdmUuIENh biBpdCBhbHdheXMgZml0IGluIFRvPworLSAgICBpZiAoZGV0YWlsOjpjb25zdF9jaGVjayhGOjpk aWdpdHMgPiBUOjpkaWdpdHMpICYmCistICAgICAgICBmcm9tID4gc3RhdGljX2Nhc3Q8RnJvbT4o ZGV0YWlsOjptYXhfdmFsdWU8VG8+KCkpKSB7CistICAgICAgZWMgPSAxOworLSAgICAgIHJldHVy biB7fTsKKy0gICAgfQorLSAgfQorLQorLSAgaWYgKGRldGFpbDo6Y29uc3RfY2hlY2soIUY6Omlz X3NpZ25lZCAmJiBUOjppc19zaWduZWQgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIEY6 OmRpZ2l0cyA+PSBUOjpkaWdpdHMpICYmCistICAgICAgZnJvbSA+IHN0YXRpY19jYXN0PEZyb20+ KGRldGFpbDo6bWF4X3ZhbHVlPFRvPigpKSkgeworLSAgICBlYyA9IDE7CistICAgIHJldHVybiB7 fTsKKy0gIH0KKy0gIHJldHVybiBzdGF0aWNfY2FzdDxUbz4oZnJvbSk7ICAvLyBMb3NzbGVzcyBj b252ZXJzaW9uLgorLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20s CistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoc3RkOjppc19zYW1lPEZyb20sIFRvPjo6dmFsdWUp PgorLUZNVF9DT05TVEVYUFIgVG8gbG9zc2xlc3NfaW50ZWdyYWxfY29udmVyc2lvbihjb25zdCBG cm9tIGZyb20sIGludCYgZWMpIHsKKy0gIGVjID0gMDsKKy0gIHJldHVybiBmcm9tOworLX0gIC8v IGZ1bmN0aW9uCistCistLy8gY2xhbmctZm9ybWF0IG9mZgorLS8qKgorLSAqIGNvbnZlcnRzIEZy b20gdG8gVG8gaWYgcG9zc2libGUsIG90aGVyd2lzZSBlYyBpcyBzZXQuCistICoKKy0gKiBpbnB1 dCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIG91dHB1dAorLSAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0KKy0gKiBOYU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IE5hTgorLSAqIEluZiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgSW5mCistICogbm9ybWFsLCBmaXRzIGluIG91dHB1dCAgICAgICAgICAgfCBjb252 ZXJ0ZWQgKHBvc3NpYmx5IGxvc3N5KQorLSAqIG5vcm1hbCwgZG9lcyBub3QgZml0IGluIG91dHB1 dCAgIHwgZWMgaXMgc2V0CistICogc3Vibm9ybWFsICAgICAgICAgICAgICAgICAgICAgICAgfCBi ZXN0IGVmZm9ydAorLSAqIC1JbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLUluZgor LSAqLworLS8vIGNsYW5nLWZvcm1hdCBvbgorLXRlbXBsYXRlIDx0eXBlbmFtZSBUbywgdHlwZW5h bWUgRnJvbSwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRighc3RkOjppc19zYW1lPEZyb20sIFRv Pjo6dmFsdWUpPgorLUZNVF9DT05TVEVYUFIgVG8gc2FmZV9mbG9hdF9jb252ZXJzaW9uKGNvbnN0 IEZyb20gZnJvbSwgaW50JiBlYykgeworLSAgZWMgPSAwOworLSAgdXNpbmcgVCA9IHN0ZDo6bnVt ZXJpY19saW1pdHM8VG8+OworLSAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50 PEZyb20+Ojp2YWx1ZSwgIkZyb20gbXVzdCBiZSBmbG9hdGluZyIpOworLSAgc3RhdGljX2Fzc2Vy dChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFRvPjo6dmFsdWUsICJUbyBtdXN0IGJlIGZsb2F0aW5n Iik7CistCistICAvLyBjYXRjaCB0aGUgb25seSBoYXBweSBjYXNlCistICBpZiAoc3RkOjppc2Zp bml0ZShmcm9tKSkgeworLSAgICBpZiAoZnJvbSA+PSBUOjpsb3dlc3QoKSAmJiBmcm9tIDw9IChU OjptYXgpKCkpIHsKKy0gICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+KGZyb20pOworLSAgICB9 CistICAgIC8vIG5vdCB3aXRoaW4gcmFuZ2UuCistICAgIGVjID0gMTsKKy0gICAgcmV0dXJuIHt9 OworLSAgfQorLQorLSAgLy8gbmFuIGFuZCBpbmYgd2lsbCBiZSBwcmVzZXJ2ZWQKKy0gIHJldHVy biBzdGF0aWNfY2FzdDxUbz4oZnJvbSk7CistfSAgLy8gZnVuY3Rpb24KKy0KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20sCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoc3Rk Ojppc19zYW1lPEZyb20sIFRvPjo6dmFsdWUpPgorLUZNVF9DT05TVEVYUFIgVG8gc2FmZV9mbG9h dF9jb252ZXJzaW9uKGNvbnN0IEZyb20gZnJvbSwgaW50JiBlYykgeworLSAgZWMgPSAwOworLSAg c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PEZyb20+Ojp2YWx1ZSwgIkZyb20g bXVzdCBiZSBmbG9hdGluZyIpOworLSAgcmV0dXJuIGZyb207CistfQorLQorLS8qKgorLSAqIHNh ZmUgZHVyYXRpb24gY2FzdCBiZXR3ZWVuIGludGVncmFsIGR1cmF0aW9ucworLSAqLworLXRlbXBs YXRlIDx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbVJlcCwgdHlwZW5hbWUgRnJvbVBlcmlvZCwK Ky0gICAgICAgICAgRk1UX0VOQUJMRV9JRihzdGQ6OmlzX2ludGVncmFsPEZyb21SZXA+Ojp2YWx1 ZSksCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoc3RkOjppc19pbnRlZ3JhbDx0eXBlbmFtZSBU bzo6cmVwPjo6dmFsdWUpPgorLVRvIHNhZmVfZHVyYXRpb25fY2FzdChzdGQ6OmNocm9ubzo6ZHVy YXRpb248RnJvbVJlcCwgRnJvbVBlcmlvZD4gZnJvbSwKKy0gICAgICAgICAgICAgICAgICAgICAg aW50JiBlYykgeworLSAgdXNpbmcgRnJvbSA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxGcm9tUmVw LCBGcm9tUGVyaW9kPjsKKy0gIGVjID0gMDsKKy0gIC8vIHRoZSBiYXNpYyBpZGVhIGlzIHRoYXQg d2UgbmVlZCB0byBjb252ZXJ0IGZyb20gY291bnQoKSBpbiB0aGUgZnJvbSB0eXBlCistICAvLyB0 byBjb3VudCgpIGluIHRoZSBUbyB0eXBlLCBieSBtdWx0aXBseWluZyBpdCB3aXRoIHRoaXM6Cist ICBzdHJ1Y3QgRmFjdG9yCistICAgICAgOiBzdGQ6OnJhdGlvX2RpdmlkZTx0eXBlbmFtZSBGcm9t OjpwZXJpb2QsIHR5cGVuYW1lIFRvOjpwZXJpb2Q+IHt9OworLQorLSAgc3RhdGljX2Fzc2VydChG YWN0b3I6Om51bSA+IDAsICJudW0gbXVzdCBiZSBwb3NpdGl2ZSIpOworLSAgc3RhdGljX2Fzc2Vy dChGYWN0b3I6OmRlbiA+IDAsICJkZW4gbXVzdCBiZSBwb3NpdGl2ZSIpOworLQorLSAgLy8gdGhl IGNvbnZlcnNpb24gaXMgbGlrZSB0aGlzOiBtdWx0aXBseSBmcm9tLmNvdW50KCkgd2l0aCBGYWN0 b3I6Om51bQorLSAgLy8gL0ZhY3Rvcjo6ZGVuIGFuZCBjb252ZXJ0IGl0IHRvIFRvOjpyZXAsIGFs bCB0aGlzIHdpdGhvdXQKKy0gIC8vIG92ZXJmbG93L3VuZGVyZmxvdy4gbGV0J3Mgc3RhcnQgYnkg ZmluZGluZyBhIHN1aXRhYmxlIHR5cGUgdGhhdCBjYW4gaG9sZAorLSAgLy8gYm90aCBUbywgRnJv bSBhbmQgRmFjdG9yOjpudW0KKy0gIHVzaW5nIEludGVybWVkaWF0ZVJlcCA9CistICAgICAgdHlw ZW5hbWUgc3RkOjpjb21tb25fdHlwZTx0eXBlbmFtZSBGcm9tOjpyZXAsIHR5cGVuYW1lIFRvOjpy ZXAsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShGYWN0b3I6Om51 bSk+Ojp0eXBlOworLQorLSAgLy8gc2FmZSBjb252ZXJzaW9uIHRvIEludGVybWVkaWF0ZVJlcAor LSAgSW50ZXJtZWRpYXRlUmVwIGNvdW50ID0KKy0gICAgICBsb3NzbGVzc19pbnRlZ3JhbF9jb252 ZXJzaW9uPEludGVybWVkaWF0ZVJlcD4oZnJvbS5jb3VudCgpLCBlYyk7CistICBpZiAoZWMpIHJl dHVybiB7fTsKKy0gIC8vIG11bHRpcGx5IHdpdGggRmFjdG9yOjpudW0gd2l0aG91dCBvdmVyZmxv dyBvciB1bmRlcmZsb3cKKy0gIGlmIChkZXRhaWw6OmNvbnN0X2NoZWNrKEZhY3Rvcjo6bnVtICE9 IDEpKSB7CistICAgIGNvbnN0IGF1dG8gbWF4MSA9IGRldGFpbDo6bWF4X3ZhbHVlPEludGVybWVk aWF0ZVJlcD4oKSAvIEZhY3Rvcjo6bnVtOworLSAgICBpZiAoY291bnQgPiBtYXgxKSB7CistICAg ICAgZWMgPSAxOworLSAgICAgIHJldHVybiB7fTsKKy0gICAgfQorLSAgICBjb25zdCBhdXRvIG1p bjEgPQorLSAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8SW50ZXJtZWRpYXRlUmVwPjo6bWlu KSgpIC8gRmFjdG9yOjpudW07CistICAgIGlmIChjb3VudCA8IG1pbjEpIHsKKy0gICAgICBlYyA9 IDE7CistICAgICAgcmV0dXJuIHt9OworLSAgICB9CistICAgIGNvdW50ICo9IEZhY3Rvcjo6bnVt OworLSAgfQorLQorLSAgaWYgKGRldGFpbDo6Y29uc3RfY2hlY2soRmFjdG9yOjpkZW4gIT0gMSkp IGNvdW50IC89IEZhY3Rvcjo6ZGVuOworLSAgYXV0byB0b2NvdW50ID0gbG9zc2xlc3NfaW50ZWdy YWxfY29udmVyc2lvbjx0eXBlbmFtZSBUbzo6cmVwPihjb3VudCwgZWMpOworLSAgcmV0dXJuIGVj ID8gVG8oKSA6IFRvKHRvY291bnQpOworLX0KKy0KKy0vKioKKy0gKiBzYWZlIGR1cmF0aW9uX2Nh c3QgYmV0d2VlbiBmbG9hdGluZyBwb2ludCBkdXJhdGlvbnMKKy0gKi8KKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVG8sIHR5cGVuYW1lIEZyb21SZXAsIHR5cGVuYW1lIEZyb21QZXJpb2QsCistICAgICAg ICAgIEZNVF9FTkFCTEVfSUYoc3RkOjppc19mbG9hdGluZ19wb2ludDxGcm9tUmVwPjo6dmFsdWUp LAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8dHlwZW5h bWUgVG86OnJlcD46OnZhbHVlKT4KKy1UbyBzYWZlX2R1cmF0aW9uX2Nhc3Qoc3RkOjpjaHJvbm86 OmR1cmF0aW9uPEZyb21SZXAsIEZyb21QZXJpb2Q+IGZyb20sCistICAgICAgICAgICAgICAgICAg ICAgIGludCYgZWMpIHsKKy0gIHVzaW5nIEZyb20gPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248RnJv bVJlcCwgRnJvbVBlcmlvZD47CistICBlYyA9IDA7CistICBpZiAoc3RkOjppc25hbihmcm9tLmNv dW50KCkpKSB7CistICAgIC8vIG5hbiBpbiwgZ2l2ZXMgbmFuIG91dC4gZWFzeS4KKy0gICAgcmV0 dXJuIFRve3N0ZDo6bnVtZXJpY19saW1pdHM8dHlwZW5hbWUgVG86OnJlcD46OnF1aWV0X05hTigp fTsKKy0gIH0KKy0gIC8vIG1heWJlIHdlIHNob3VsZCBhbHNvIGNoZWNrIGlmIGZyb20gaXMgZGVu b3JtYWwsIGFuZCBkZWNpZGUgd2hhdCB0byBkbyBhYm91dAorLSAgLy8gaXQuCistCistICAvLyAr LWluZiBzaG91bGQgYmUgcHJlc2VydmVkLgorLSAgaWYgKHN0ZDo6aXNpbmYoZnJvbS5jb3VudCgp KSkgeworLSAgICByZXR1cm4gVG97ZnJvbS5jb3VudCgpfTsKKy0gIH0KKy0KKy0gIC8vIHRoZSBi YXNpYyBpZGVhIGlzIHRoYXQgd2UgbmVlZCB0byBjb252ZXJ0IGZyb20gY291bnQoKSBpbiB0aGUg ZnJvbSB0eXBlCistICAvLyB0byBjb3VudCgpIGluIHRoZSBUbyB0eXBlLCBieSBtdWx0aXBseWlu ZyBpdCB3aXRoIHRoaXM6CistICBzdHJ1Y3QgRmFjdG9yCistICAgICAgOiBzdGQ6OnJhdGlvX2Rp dmlkZTx0eXBlbmFtZSBGcm9tOjpwZXJpb2QsIHR5cGVuYW1lIFRvOjpwZXJpb2Q+IHt9OworLQor LSAgc3RhdGljX2Fzc2VydChGYWN0b3I6Om51bSA+IDAsICJudW0gbXVzdCBiZSBwb3NpdGl2ZSIp OworLSAgc3RhdGljX2Fzc2VydChGYWN0b3I6OmRlbiA+IDAsICJkZW4gbXVzdCBiZSBwb3NpdGl2 ZSIpOworLQorLSAgLy8gdGhlIGNvbnZlcnNpb24gaXMgbGlrZSB0aGlzOiBtdWx0aXBseSBmcm9t LmNvdW50KCkgd2l0aCBGYWN0b3I6Om51bQorLSAgLy8gL0ZhY3Rvcjo6ZGVuIGFuZCBjb252ZXJ0 IGl0IHRvIFRvOjpyZXAsIGFsbCB0aGlzIHdpdGhvdXQKKy0gIC8vIG92ZXJmbG93L3VuZGVyZmxv dy4gbGV0J3Mgc3RhcnQgYnkgZmluZGluZyBhIHN1aXRhYmxlIHR5cGUgdGhhdCBjYW4gaG9sZAor LSAgLy8gYm90aCBUbywgRnJvbSBhbmQgRmFjdG9yOjpudW0KKy0gIHVzaW5nIEludGVybWVkaWF0 ZVJlcCA9CistICAgICAgdHlwZW5hbWUgc3RkOjpjb21tb25fdHlwZTx0eXBlbmFtZSBGcm9tOjpy ZXAsIHR5cGVuYW1lIFRvOjpyZXAsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWNsdHlwZShGYWN0b3I6Om51bSk+Ojp0eXBlOworLQorLSAgLy8gZm9yY2UgY29udmVyc2lvbiBv ZiBGcm9tOjpyZXAgLT4gSW50ZXJtZWRpYXRlUmVwIHRvIGJlIHNhZmUsCistICAvLyBldmVuIGlm IGl0IHdpbGwgbmV2ZXIgaGFwcGVuIGJlIG5hcnJvd2luZyBpbiB0aGlzIGNvbnRleHQuCistICBJ bnRlcm1lZGlhdGVSZXAgY291bnQgPQorLSAgICAgIHNhZmVfZmxvYXRfY29udmVyc2lvbjxJbnRl cm1lZGlhdGVSZXA+KGZyb20uY291bnQoKSwgZWMpOworLSAgaWYgKGVjKSB7CistICAgIHJldHVy biB7fTsKKy0gIH0KKy0KKy0gIC8vIG11bHRpcGx5IHdpdGggRmFjdG9yOjpudW0gd2l0aG91dCBv dmVyZmxvdyBvciB1bmRlcmZsb3cKKy0gIGlmIChkZXRhaWw6OmNvbnN0X2NoZWNrKEZhY3Rvcjo6 bnVtICE9IDEpKSB7CistICAgIGNvbnN0ZXhwciBhdXRvIG1heDEgPSBkZXRhaWw6Om1heF92YWx1 ZTxJbnRlcm1lZGlhdGVSZXA+KCkgLworLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj X2Nhc3Q8SW50ZXJtZWRpYXRlUmVwPihGYWN0b3I6Om51bSk7CistICAgIGlmIChjb3VudCA+IG1h eDEpIHsKKy0gICAgICBlYyA9IDE7CistICAgICAgcmV0dXJuIHt9OworLSAgICB9CistICAgIGNv bnN0ZXhwciBhdXRvIG1pbjEgPSBzdGQ6Om51bWVyaWNfbGltaXRzPEludGVybWVkaWF0ZVJlcD46 Omxvd2VzdCgpIC8KKy0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEludGVy bWVkaWF0ZVJlcD4oRmFjdG9yOjpudW0pOworLSAgICBpZiAoY291bnQgPCBtaW4xKSB7CistICAg ICAgZWMgPSAxOworLSAgICAgIHJldHVybiB7fTsKKy0gICAgfQorLSAgICBjb3VudCAqPSBzdGF0 aWNfY2FzdDxJbnRlcm1lZGlhdGVSZXA+KEZhY3Rvcjo6bnVtKTsKKy0gIH0KKy0KKy0gIC8vIHRo aXMgY2FuJ3QgZ28gd3JvbmcsIHJpZ2h0PyBkZW4+MCBpcyBjaGVja2VkIGVhcmxpZXIuCistICBp ZiAoZGV0YWlsOjpjb25zdF9jaGVjayhGYWN0b3I6OmRlbiAhPSAxKSkgeworLSAgICB1c2luZyBj b21tb25fdCA9IHR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8SW50ZXJtZWRpYXRlUmVwLCBpbnRt YXhfdD46OnR5cGU7CistICAgIGNvdW50IC89IHN0YXRpY19jYXN0PGNvbW1vbl90PihGYWN0b3I6 OmRlbik7CistICB9CistCistICAvLyBjb252ZXJ0IHRvIHRoZSB0byB0eXBlLCBzYWZlbHkKKy0g IHVzaW5nIFRvUmVwID0gdHlwZW5hbWUgVG86OnJlcDsKKy0KKy0gIGNvbnN0IFRvUmVwIHRvY291 bnQgPSBzYWZlX2Zsb2F0X2NvbnZlcnNpb248VG9SZXA+KGNvdW50LCBlYyk7CistICBpZiAoZWMp IHsKKy0gICAgcmV0dXJuIHt9OworLSAgfQorLSAgcmV0dXJuIFRve3RvY291bnR9OworLX0KKy19 ICAvLyBuYW1lc3BhY2Ugc2FmZV9kdXJhdGlvbl9jYXN0CistI2VuZGlmCistCistLy8gUHJldmVu dHMgZXhwYW5zaW9uIG9mIGEgcHJlY2VkaW5nIHRva2VuIGFzIGEgZnVuY3Rpb24tc3R5bGUgbWFj cm8uCistLy8gVXNhZ2U6IGYgRk1UX05PTUFDUk8oKQorLSNkZWZpbmUgRk1UX05PTUFDUk8KKy0K Ky1uYW1lc3BhY2UgZGV0YWlsIHsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IHZvaWQ+IHN0cnVj dCBudWxsIHt9OworLWlubGluZSBudWxsPD4gbG9jYWx0aW1lX3IgRk1UX05PTUFDUk8oLi4uKSB7 IHJldHVybiBudWxsPD4oKTsgfQorLWlubGluZSBudWxsPD4gbG9jYWx0aW1lX3MoLi4uKSB7IHJl dHVybiBudWxsPD4oKTsgfQorLWlubGluZSBudWxsPD4gZ210aW1lX3IoLi4uKSB7IHJldHVybiBu dWxsPD4oKTsgfQorLWlubGluZSBudWxsPD4gZ210aW1lX3MoLi4uKSB7IHJldHVybiBudWxsPD4o KTsgfQorLQorLWlubGluZSBjb25zdCBzdGQ6OmxvY2FsZSYgZ2V0X2NsYXNzaWNfbG9jYWxlKCkg eworLSAgc3RhdGljIGNvbnN0IGF1dG8mIGxvY2FsZSA9IHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCk7 CistICByZXR1cm4gbG9jYWxlOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZVVuaXQ+ IHN0cnVjdCBjb2RlY3Z0X3Jlc3VsdCB7CistICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHNpemVf dCBtYXhfc2l6ZSA9IDMyOworLSAgQ29kZVVuaXQgYnVmW21heF9zaXplXTsKKy0gIENvZGVVbml0 KiBlbmQ7CistfTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZVVuaXQ+CistY29uc3RleHByIGNv bnN0IHNpemVfdCBjb2RlY3Z0X3Jlc3VsdDxDb2RlVW5pdD46Om1heF9zaXplOworLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBDb2RlVW5pdD4KKy12b2lkIHdyaXRlX2NvZGVjdnQoY29kZWN2dF9yZXN1 bHQ8Q29kZVVuaXQ+JiBvdXQsIHN0cmluZ192aWV3IGluX2J1ZiwKKy0gICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RkOjpsb2NhbGUmIGxvYykgeworLSAgdXNpbmcgY29kZWN2dCA9IHN0ZDo6Y29k ZWN2dDxDb2RlVW5pdCwgY2hhciwgc3RkOjptYnN0YXRlX3Q+OworLSNpZiBGTVRfQ0xBTkdfVkVS U0lPTgorLSMgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKy0jICBwcmFnbWEgY2xhbmcg ZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQiCistICBhdXRvJiBmID0gc3RkOjp1c2Vf ZmFjZXQ8Y29kZWN2dD4obG9jKTsKKy0jICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKy0j ZWxzZQorLSAgYXV0byYgZiA9IHN0ZDo6dXNlX2ZhY2V0PGNvZGVjdnQ+KGxvYyk7CistI2VuZGlm CistICBhdXRvIG1iID0gc3RkOjptYnN0YXRlX3QoKTsKKy0gIGNvbnN0IGNoYXIqIGZyb21fbmV4 dCA9IG51bGxwdHI7CistICBhdXRvIHJlc3VsdCA9IGYuaW4obWIsIGluX2J1Zi5iZWdpbigpLCBp bl9idWYuZW5kKCksIGZyb21fbmV4dCwKKy0gICAgICAgICAgICAgICAgICAgICBzdGQ6OmJlZ2lu KG91dC5idWYpLCBzdGQ6OmVuZChvdXQuYnVmKSwgb3V0LmVuZCk7CistICBpZiAocmVzdWx0ICE9 IHN0ZDo6Y29kZWN2dF9iYXNlOjpvaykKKy0gICAgRk1UX1RIUk9XKGZvcm1hdF9lcnJvcigiZmFp bGVkIHRvIGZvcm1hdCB0aW1lIikpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0 SXQ+CistYXV0byB3cml0ZV9lbmNvZGVkX3RtX3N0cihPdXRwdXRJdCBvdXQsIHN0cmluZ192aWV3 IGluLCBjb25zdCBzdGQ6OmxvY2FsZSYgbG9jKQorLSAgICAtPiBPdXRwdXRJdCB7CistICBpZiAo ZGV0YWlsOjppc191dGY4KCkgJiYgbG9jICE9IGdldF9jbGFzc2ljX2xvY2FsZSgpKSB7CistICAg IC8vIGNoYXIxNl90IGFuZCBjaGFyMzJfdCBjb2RlY3Z0cyBhcmUgYnJva2VuIGluIE1TVkMgKGxp bmthZ2UgZXJyb3JzKSBhbmQKKy0gICAgLy8gZ2NjLTQuCistI2lmIEZNVF9NU0NfVkVSICE9IDAg fHwgXAorLSAgICAoZGVmaW5lZChfX0dMSUJDWFhfXykgJiYgIWRlZmluZWQoX0dMSUJDWFhfVVNF X0RVQUxfQUJJKSkKKy0gICAgLy8gVGhlIF9HTElCQ1hYX1VTRV9EVUFMX0FCSSBtYWNybyBpcyBh bHdheXMgZGVmaW5lZCBpbiBsaWJzdGRjKysgZnJvbSBnY2MtNQorLSAgICAvLyBhbmQgbmV3ZXIu CistICAgIHVzaW5nIGNvZGVfdW5pdCA9IHdjaGFyX3Q7CistI2Vsc2UKKy0gICAgdXNpbmcgY29k ZV91bml0ID0gY2hhcjMyX3Q7CistI2VuZGlmCistCistICAgIHVzaW5nIHVuaXRfdCA9IGNvZGVj dnRfcmVzdWx0PGNvZGVfdW5pdD47CistICAgIHVuaXRfdCB1bml0OworLSAgICB3cml0ZV9jb2Rl Y3Z0KHVuaXQsIGluLCBsb2MpOworLSAgICAvLyBJbiBVVEYtOCBpcyB1c2VkIG9uZSB0byBmb3Vy IG9uZS1ieXRlIGNvZGUgdW5pdHMuCistICAgIGF1dG8mJiBidWYgPSBiYXNpY19tZW1vcnlfYnVm ZmVyPGNoYXIsIHVuaXRfdDo6bWF4X3NpemUgKiA0PigpOworLSAgICBmb3IgKGNvZGVfdW5pdCog cCA9IHVuaXQuYnVmOyBwICE9IHVuaXQuZW5kOyArK3ApIHsKKy0gICAgICB1aW50MzJfdCBjID0g c3RhdGljX2Nhc3Q8dWludDMyX3Q+KCpwKTsKKy0gICAgICBpZiAoc2l6ZW9mKGNvZGVfdW5pdCkg PT0gMiAmJiBjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGZmZikgeworLSAgICAgICAgLy8gc3Vycm9n YXRlIHBhaXIKKy0gICAgICAgICsrcDsKKy0gICAgICAgIGlmIChwID09IHVuaXQuZW5kIHx8IChj ICYgMHhmYzAwKSAhPSAweGQ4MDAgfHwKKy0gICAgICAgICAgICAoKnAgJiAweGZjMDApICE9IDB4 ZGMwMCkgeworLSAgICAgICAgICBGTVRfVEhST1coZm9ybWF0X2Vycm9yKCJmYWlsZWQgdG8gZm9y bWF0IHRpbWUiKSk7CistICAgICAgICB9CistICAgICAgICBjID0gKGMgPDwgMTApICsgc3RhdGlj X2Nhc3Q8dWludDMyX3Q+KCpwKSAtIDB4MzVmZGMwMDsKKy0gICAgICB9CistICAgICAgaWYgKGMg PCAweDgwKSB7CistICAgICAgICBidWYucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsK Ky0gICAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCkgeworLSAgICAgICAgYnVmLnB1c2hfYmFjayhz dGF0aWNfY2FzdDxjaGFyPigweGMwIHwgKGMgPj4gNikpKTsKKy0gICAgICAgIGJ1Zi5wdXNoX2Jh Y2soc3RhdGljX2Nhc3Q8Y2hhcj4oMHg4MCB8IChjICYgMHgzZikpKTsKKy0gICAgICB9IGVsc2Ug aWYgKChjID49IDB4ODAwICYmIGMgPD0gMHhkN2ZmKSB8fCAoYyA+PSAweGUwMDAgJiYgYyA8PSAw eGZmZmYpKSB7CistICAgICAgICBidWYucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KDB4ZTAg fCAoYyA+PiAxMikpKTsKKy0gICAgICAgIGJ1Zi5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4o MHg4MCB8ICgoYyAmIDB4ZmZmKSA+PiA2KSkpOworLSAgICAgICAgYnVmLnB1c2hfYmFjayhzdGF0 aWNfY2FzdDxjaGFyPigweDgwIHwgKGMgJiAweDNmKSkpOworLSAgICAgIH0gZWxzZSBpZiAoYyA+ PSAweDEwMDAwICYmIGMgPD0gMHgxMGZmZmYpIHsKKy0gICAgICAgIGJ1Zi5wdXNoX2JhY2soc3Rh dGljX2Nhc3Q8Y2hhcj4oMHhmMCB8IChjID4+IDE4KSkpOworLSAgICAgICAgYnVmLnB1c2hfYmFj ayhzdGF0aWNfY2FzdDxjaGFyPigweDgwIHwgKChjICYgMHgzZmZmZikgPj4gMTIpKSk7CistICAg ICAgICBidWYucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KDB4ODAgfCAoKGMgJiAweGZmZikg Pj4gNikpKTsKKy0gICAgICAgIGJ1Zi5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oMHg4MCB8 IChjICYgMHgzZikpKTsKKy0gICAgICB9IGVsc2UgeworLSAgICAgICAgRk1UX1RIUk9XKGZvcm1h dF9lcnJvcigiZmFpbGVkIHRvIGZvcm1hdCB0aW1lIikpOworLSAgICAgIH0KKy0gICAgfQorLSAg ICByZXR1cm4gY29weV9zdHI8Y2hhcj4oYnVmLmRhdGEoKSwgYnVmLmRhdGEoKSArIGJ1Zi5zaXpl KCksIG91dCk7CistICB9CistICByZXR1cm4gY29weV9zdHI8Y2hhcj4oaW4uZGF0YSgpLCBpbi5k YXRhKCkgKyBpbi5zaXplKCksIG91dCk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy LCB0eXBlbmFtZSBPdXRwdXRJdCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRighc3RkOjppc19z YW1lPENoYXIsIGNoYXI+Ojp2YWx1ZSk+CistYXV0byB3cml0ZV90bV9zdHIoT3V0cHV0SXQgb3V0 LCBzdHJpbmdfdmlldyBzdiwgY29uc3Qgc3RkOjpsb2NhbGUmIGxvYykKKy0gICAgLT4gT3V0cHV0 SXQgeworLSAgY29kZWN2dF9yZXN1bHQ8Q2hhcj4gdW5pdDsKKy0gIHdyaXRlX2NvZGVjdnQodW5p dCwgc3YsIGxvYyk7CistICByZXR1cm4gY29weV9zdHI8Q2hhcj4odW5pdC5idWYsIHVuaXQuZW5k LCBvdXQpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgT3V0cHV0 SXQsCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoc3RkOjppc19zYW1lPENoYXIsIGNoYXI+Ojp2 YWx1ZSk+CistYXV0byB3cml0ZV90bV9zdHIoT3V0cHV0SXQgb3V0LCBzdHJpbmdfdmlldyBzdiwg Y29uc3Qgc3RkOjpsb2NhbGUmIGxvYykKKy0gICAgLT4gT3V0cHV0SXQgeworLSAgcmV0dXJuIHdy aXRlX2VuY29kZWRfdG1fc3RyKG91dCwgc3YsIGxvYyk7CistfQorLQorLXRlbXBsYXRlIDx0eXBl bmFtZSBDaGFyPgorLWlubGluZSB2b2lkIGRvX3dyaXRlKGJ1ZmZlcjxDaGFyPiYgYnVmLCBjb25z dCBzdGQ6OnRtJiB0aW1lLAorLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6bG9jYWxl JiBsb2MsIGNoYXIgZm9ybWF0LCBjaGFyIG1vZGlmaWVyKSB7CistICBhdXRvJiYgZm9ybWF0X2J1 ZiA9IGZvcm1hdGJ1ZjxzdGQ6OmJhc2ljX3N0cmVhbWJ1ZjxDaGFyPj4oYnVmKTsKKy0gIGF1dG8m JiBvcyA9IHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyPigmZm9ybWF0X2J1Zik7CistICBvcy5pbWJ1 ZShsb2MpOworLSAgdXNpbmcgaXRlcmF0b3IgPSBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8Q2hh cj47CistICBjb25zdCBhdXRvJiBmYWNldCA9IHN0ZDo6dXNlX2ZhY2V0PHN0ZDo6dGltZV9wdXQ8 Q2hhciwgaXRlcmF0b3I+Pihsb2MpOworLSAgYXV0byBlbmQgPSBmYWNldC5wdXQob3MsIG9zLCBD aGFyKCcgJyksICZ0aW1lLCBmb3JtYXQsIG1vZGlmaWVyKTsKKy0gIGlmIChlbmQuZmFpbGVkKCkp IEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoImZhaWxlZCB0byBmb3JtYXQgdGltZSIpKTsKKy19Cist CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0LAorLSAgICAgICAg ICBGTVRfRU5BQkxFX0lGKCFzdGQ6OmlzX3NhbWU8Q2hhciwgY2hhcj46OnZhbHVlKT4KKy1hdXRv IHdyaXRlKE91dHB1dEl0IG91dCwgY29uc3Qgc3RkOjp0bSYgdGltZSwgY29uc3Qgc3RkOjpsb2Nh bGUmIGxvYywKKy0gICAgICAgICAgIGNoYXIgZm9ybWF0LCBjaGFyIG1vZGlmaWVyID0gMCkgLT4g T3V0cHV0SXQgeworLSAgYXV0byYmIGJ1ZiA9IGdldF9idWZmZXI8Q2hhcj4ob3V0KTsKKy0gIGRv X3dyaXRlPENoYXI+KGJ1ZiwgdGltZSwgbG9jLCBmb3JtYXQsIG1vZGlmaWVyKTsKKy0gIHJldHVy biBidWYub3V0KCk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBP dXRwdXRJdCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRihzdGQ6OmlzX3NhbWU8Q2hhciwgY2hh cj46OnZhbHVlKT4KKy1hdXRvIHdyaXRlKE91dHB1dEl0IG91dCwgY29uc3Qgc3RkOjp0bSYgdGlt ZSwgY29uc3Qgc3RkOjpsb2NhbGUmIGxvYywKKy0gICAgICAgICAgIGNoYXIgZm9ybWF0LCBjaGFy IG1vZGlmaWVyID0gMCkgLT4gT3V0cHV0SXQgeworLSAgYXV0byYmIGJ1ZiA9IGJhc2ljX21lbW9y eV9idWZmZXI8Q2hhcj4oKTsKKy0gIGRvX3dyaXRlPGNoYXI+KGJ1ZiwgdGltZSwgbG9jLCBmb3Jt YXQsIG1vZGlmaWVyKTsKKy0gIHJldHVybiB3cml0ZV9lbmNvZGVkX3RtX3N0cihvdXQsIHN0cmlu Z192aWV3KGJ1Zi5kYXRhKCksIGJ1Zi5zaXplKCkpLCBsb2MpOworLX0KKy0KKy19ICAvLyBuYW1l c3BhY2UgZGV0YWlsCistCistRk1UX01PRFVMRV9FWFBPUlRfQkVHSU4KKy0KKy0vKioKKy0gIENv bnZlcnRzIGdpdmVuIHRpbWUgc2luY2UgZXBvY2ggYXMgYGBzdGQ6OnRpbWVfdGBgIHZhbHVlIGlu dG8gY2FsZW5kYXIgdGltZSwKKy0gIGV4cHJlc3NlZCBpbiBsb2NhbCB0aW1lLiBVbmxpa2UgYGBz dGQ6OmxvY2FsdGltZWBgLCB0aGlzIGZ1bmN0aW9uIGlzCistICB0aHJlYWQtc2FmZSBvbiBtb3N0 IHBsYXRmb3Jtcy4KKy0gKi8KKy1pbmxpbmUgc3RkOjp0bSBsb2NhbHRpbWUoc3RkOjp0aW1lX3Qg dGltZSkgeworLSAgc3RydWN0IGRpc3BhdGNoZXIgeworLSAgICBzdGQ6OnRpbWVfdCB0aW1lXzsK Ky0gICAgc3RkOjp0bSB0bV87CistCistICAgIGRpc3BhdGNoZXIoc3RkOjp0aW1lX3QgdCkgOiB0 aW1lXyh0KSB7fQorLQorLSAgICBib29sIHJ1bigpIHsKKy0gICAgICB1c2luZyBuYW1lc3BhY2Ug Zm10OjpkZXRhaWw7CistICAgICAgcmV0dXJuIGhhbmRsZShsb2NhbHRpbWVfcigmdGltZV8sICZ0 bV8pKTsKKy0gICAgfQorLQorLSAgICBib29sIGhhbmRsZShzdGQ6OnRtKiB0bSkgeyByZXR1cm4g dG0gIT0gbnVsbHB0cjsgfQorLQorLSAgICBib29sIGhhbmRsZShkZXRhaWw6Om51bGw8Pikgewor LSAgICAgIHVzaW5nIG5hbWVzcGFjZSBmbXQ6OmRldGFpbDsKKy0gICAgICByZXR1cm4gZmFsbGJh Y2sobG9jYWx0aW1lX3MoJnRtXywgJnRpbWVfKSk7CistICAgIH0KKy0KKy0gICAgYm9vbCBmYWxs YmFjayhpbnQgcmVzKSB7IHJldHVybiByZXMgPT0gMDsgfQorLQorLSNpZiAhRk1UX01TQ19WRVIK Ky0gICAgYm9vbCBmYWxsYmFjayhkZXRhaWw6Om51bGw8PikgeworLSAgICAgIHVzaW5nIG5hbWVz cGFjZSBmbXQ6OmRldGFpbDsKKy0gICAgICBzdGQ6OnRtKiB0bSA9IHN0ZDo6bG9jYWx0aW1lKCZ0 aW1lXyk7CistICAgICAgaWYgKHRtKSB0bV8gPSAqdG07CistICAgICAgcmV0dXJuIHRtICE9IG51 bGxwdHI7CistICAgIH0KKy0jZW5kaWYKKy0gIH07CistICBkaXNwYXRjaGVyIGx0KHRpbWUpOwor LSAgLy8gVG9vIGJpZyB0aW1lIHZhbHVlcyBtYXkgYmUgdW5zdXBwb3J0ZWQuCistICBpZiAoIWx0 LnJ1bigpKSBGTVRfVEhST1coZm9ybWF0X2Vycm9yKCJ0aW1lX3QgdmFsdWUgb3V0IG9mIHJhbmdl IikpOworLSAgcmV0dXJuIGx0LnRtXzsKKy19CistCistaW5saW5lIHN0ZDo6dG0gbG9jYWx0aW1l KAorLSAgICBzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr PiB0aW1lX3BvaW50KSB7CistICByZXR1cm4gbG9jYWx0aW1lKHN0ZDo6Y2hyb25vOjpzeXN0ZW1f Y2xvY2s6OnRvX3RpbWVfdCh0aW1lX3BvaW50KSk7CistfQorLQorLS8qKgorLSAgQ29udmVydHMg Z2l2ZW4gdGltZSBzaW5jZSBlcG9jaCBhcyBgYHN0ZDo6dGltZV90YGAgdmFsdWUgaW50byBjYWxl bmRhciB0aW1lLAorLSAgZXhwcmVzc2VkIGluIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIChV VEMpLiBVbmxpa2UgYGBzdGQ6OmdtdGltZWBgLCB0aGlzCistICBmdW5jdGlvbiBpcyB0aHJlYWQt c2FmZSBvbiBtb3N0IHBsYXRmb3Jtcy4KKy0gKi8KKy1pbmxpbmUgc3RkOjp0bSBnbXRpbWUoc3Rk Ojp0aW1lX3QgdGltZSkgeworLSAgc3RydWN0IGRpc3BhdGNoZXIgeworLSAgICBzdGQ6OnRpbWVf dCB0aW1lXzsKKy0gICAgc3RkOjp0bSB0bV87CistCistICAgIGRpc3BhdGNoZXIoc3RkOjp0aW1l X3QgdCkgOiB0aW1lXyh0KSB7fQorLQorLSAgICBib29sIHJ1bigpIHsKKy0gICAgICB1c2luZyBu YW1lc3BhY2UgZm10OjpkZXRhaWw7CistICAgICAgcmV0dXJuIGhhbmRsZShnbXRpbWVfcigmdGlt ZV8sICZ0bV8pKTsKKy0gICAgfQorLQorLSAgICBib29sIGhhbmRsZShzdGQ6OnRtKiB0bSkgeyBy ZXR1cm4gdG0gIT0gbnVsbHB0cjsgfQorLQorLSAgICBib29sIGhhbmRsZShkZXRhaWw6Om51bGw8 PikgeworLSAgICAgIHVzaW5nIG5hbWVzcGFjZSBmbXQ6OmRldGFpbDsKKy0gICAgICByZXR1cm4g ZmFsbGJhY2soZ210aW1lX3MoJnRtXywgJnRpbWVfKSk7CistICAgIH0KKy0KKy0gICAgYm9vbCBm YWxsYmFjayhpbnQgcmVzKSB7IHJldHVybiByZXMgPT0gMDsgfQorLQorLSNpZiAhRk1UX01TQ19W RVIKKy0gICAgYm9vbCBmYWxsYmFjayhkZXRhaWw6Om51bGw8PikgeworLSAgICAgIHN0ZDo6dG0q IHRtID0gc3RkOjpnbXRpbWUoJnRpbWVfKTsKKy0gICAgICBpZiAodG0pIHRtXyA9ICp0bTsKKy0g ICAgICByZXR1cm4gdG0gIT0gbnVsbHB0cjsKKy0gICAgfQorLSNlbmRpZgorLSAgfTsKKy0gIGRp c3BhdGNoZXIgZ3QodGltZSk7CistICAvLyBUb28gYmlnIHRpbWUgdmFsdWVzIG1heSBiZSB1bnN1 cHBvcnRlZC4KKy0gIGlmICghZ3QucnVuKCkpIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoInRpbWVf dCB2YWx1ZSBvdXQgb2YgcmFuZ2UiKSk7CistICByZXR1cm4gZ3QudG1fOworLX0KKy0KKy1pbmxp bmUgc3RkOjp0bSBnbXRpbWUoCistICAgIHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PHN0ZDo6Y2hy b25vOjpzeXN0ZW1fY2xvY2s+IHRpbWVfcG9pbnQpIHsKKy0gIHJldHVybiBnbXRpbWUoc3RkOjpj aHJvbm86OnN5c3RlbV9jbG9jazo6dG9fdGltZV90KHRpbWVfcG9pbnQpKTsKKy19CistCistRk1U X0JFR0lOX0RFVEFJTF9OQU1FU1BBQ0UKKy0KKy0vLyBXcml0ZXMgdHdvLWRpZ2l0IG51bWJlcnMg YSwgYiBhbmQgYyBzZXBhcmF0ZWQgYnkgc2VwIHRvIGJ1Zi4KKy0vLyBUaGUgbWV0aG9kIGJ5IFBh dmVsIE5vdmlrb3YgYmFzZWQgb24KKy0vLyBodHRwczovL2pvaG5ueWxlZS1zZGUuZ2l0aHViLmlv L0Zhc3QtdW5zaWduZWQtaW50ZWdlci10by10aW1lLXN0cmluZy8uCistaW5saW5lIHZvaWQgd3Jp dGVfZGlnaXQyX3NlcGFyYXRlZChjaGFyKiBidWYsIHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjLCBjaGFyIHNlcCkg eworLSAgdW5zaWduZWQgbG9uZyBsb25nIGRpZ2l0cyA9CistICAgICAgYSB8IChiIDw8IDI0KSB8 IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGMpIDw8IDQ4KTsKKy0gIC8vIENvbnZl cnQgZWFjaCB2YWx1ZSB0byBCQ0QuCistICAvLyBXZSBoYXZlIHggPSBhICogMTAgKyBiIGFuZCB3 ZSB3YW50IHRvIGNvbnZlcnQgaXQgdG8gQkNEIHkgPSBhICogMTYgKyBiLgorLSAgLy8gVGhlIGRp ZmZlcmVuY2UgaXMKKy0gIC8vICAgeSAtIHggPSBhICogNgorLSAgLy8gYSBjYW4gYmUgZm91bmQg ZnJvbSB4OgorLSAgLy8gICBhID0gZmxvb3IoeCAvIDEwKQorLSAgLy8gdGhlbgorLSAgLy8gICB5 ID0geCArIGEgKiA2ID0geCArIGZsb29yKHggLyAxMCkgKiA2CistICAvLyBmbG9vcih4IC8gMTAp IGlzICh4ICogMjA1KSA+PiAxMSAobmVlZHMgMTYgYml0cykuCistICBkaWdpdHMgKz0gKCgoZGln aXRzICogMjA1KSA+PiAxMSkgJiAweDAwMGYwMDAwMGYwMDAwMGYpICogNjsKKy0gIC8vIFB1dCBs b3cgbmliYmxlcyB0byBoaWdoIGJ5dGVzIGFuZCBoaWdoIG5pYmJsZXMgdG8gbG93IGJ5dGVzLgor LSAgZGlnaXRzID0gKChkaWdpdHMgJiAweDAwZjAwMDAwZjAwMDAwZjApID4+IDQpIHwKKy0gICAg ICAgICAgICgoZGlnaXRzICYgMHgwMDBmMDAwMDBmMDAwMDBmKSA8PCA4KTsKKy0gIGF1dG8gdXNl cCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2VwKTsKKy0gIC8vIEFkZCBBU0NJ SSAnMCcgdG8gZWFjaCBkaWdpdCBieXRlIGFuZCBpbnNlcnQgc2VwYXJhdG9ycy4KKy0gIGRpZ2l0 cyB8PSAweDMwMzAwMDMwMzAwMDMwMzAgfCAodXNlcCA8PCAxNikgfCAodXNlcCA8PCA0MCk7Cist CistICBjb25zdGV4cHIgY29uc3Qgc2l6ZV90IGxlbiA9IDg7CistICBpZiAoY29uc3RfY2hlY2so aXNfYmlnX2VuZGlhbigpKSkgeworLSAgICBjaGFyIHRtcFtsZW5dOworLSAgICBtZW1jcHkodG1w LCAmZGlnaXRzLCBsZW4pOworLSAgICBzdGQ6OnJldmVyc2VfY29weSh0bXAsIHRtcCArIGxlbiwg YnVmKTsKKy0gIH0gZWxzZSB7CistICAgIG1lbWNweShidWYsICZkaWdpdHMsIGxlbik7CistICB9 CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBQZXJpb2Q+IEZNVF9DT05TVEVYUFIgaW5saW5l IGNvbnN0IGNoYXIqIGdldF91bml0cygpIHsKKy0gIGlmIChzdGQ6OmlzX3NhbWU8UGVyaW9kLCBz dGQ6OmF0dG8+Ojp2YWx1ZSkgcmV0dXJuICJhcyI7CistICBpZiAoc3RkOjppc19zYW1lPFBlcmlv ZCwgc3RkOjpmZW10bz46OnZhbHVlKSByZXR1cm4gImZzIjsKKy0gIGlmIChzdGQ6OmlzX3NhbWU8 UGVyaW9kLCBzdGQ6OnBpY28+Ojp2YWx1ZSkgcmV0dXJuICJwcyI7CistICBpZiAoc3RkOjppc19z YW1lPFBlcmlvZCwgc3RkOjpuYW5vPjo6dmFsdWUpIHJldHVybiAibnMiOworLSAgaWYgKHN0ZDo6 aXNfc2FtZTxQZXJpb2QsIHN0ZDo6bWljcm8+Ojp2YWx1ZSkgcmV0dXJuICLCtXMiOworLSAgaWYg KHN0ZDo6aXNfc2FtZTxQZXJpb2QsIHN0ZDo6bWlsbGk+Ojp2YWx1ZSkgcmV0dXJuICJtcyI7Cist ICBpZiAoc3RkOjppc19zYW1lPFBlcmlvZCwgc3RkOjpjZW50aT46OnZhbHVlKSByZXR1cm4gImNz IjsKKy0gIGlmIChzdGQ6OmlzX3NhbWU8UGVyaW9kLCBzdGQ6OmRlY2k+Ojp2YWx1ZSkgcmV0dXJu ICJkcyI7CistICBpZiAoc3RkOjppc19zYW1lPFBlcmlvZCwgc3RkOjpyYXRpbzwxPj46OnZhbHVl KSByZXR1cm4gInMiOworLSAgaWYgKHN0ZDo6aXNfc2FtZTxQZXJpb2QsIHN0ZDo6ZGVjYT46OnZh bHVlKSByZXR1cm4gImRhcyI7CistICBpZiAoc3RkOjppc19zYW1lPFBlcmlvZCwgc3RkOjpoZWN0 bz46OnZhbHVlKSByZXR1cm4gImhzIjsKKy0gIGlmIChzdGQ6OmlzX3NhbWU8UGVyaW9kLCBzdGQ6 OmtpbG8+Ojp2YWx1ZSkgcmV0dXJuICJrcyI7CistICBpZiAoc3RkOjppc19zYW1lPFBlcmlvZCwg c3RkOjptZWdhPjo6dmFsdWUpIHJldHVybiAiTXMiOworLSAgaWYgKHN0ZDo6aXNfc2FtZTxQZXJp b2QsIHN0ZDo6Z2lnYT46OnZhbHVlKSByZXR1cm4gIkdzIjsKKy0gIGlmIChzdGQ6OmlzX3NhbWU8 UGVyaW9kLCBzdGQ6OnRlcmE+Ojp2YWx1ZSkgcmV0dXJuICJUcyI7CistICBpZiAoc3RkOjppc19z YW1lPFBlcmlvZCwgc3RkOjpwZXRhPjo6dmFsdWUpIHJldHVybiAiUHMiOworLSAgaWYgKHN0ZDo6 aXNfc2FtZTxQZXJpb2QsIHN0ZDo6ZXhhPjo6dmFsdWUpIHJldHVybiAiRXMiOworLSAgaWYgKHN0 ZDo6aXNfc2FtZTxQZXJpb2QsIHN0ZDo6cmF0aW88NjA+Pjo6dmFsdWUpIHJldHVybiAibSI7Cist ICBpZiAoc3RkOjppc19zYW1lPFBlcmlvZCwgc3RkOjpyYXRpbzwzNjAwPj46OnZhbHVlKSByZXR1 cm4gImgiOworLSAgcmV0dXJuIG51bGxwdHI7CistfQorLQorLWVudW0gY2xhc3MgbnVtZXJpY19z eXN0ZW0geworLSAgc3RhbmRhcmQsCistICAvLyBBbHRlcm5hdGl2ZSBudW1lcmljIHN5c3RlbSwg ZS5nLiDljYHkuowgaW5zdGVhZCBvZiAxMiBpbiBqYV9KUCBsb2NhbGUuCistICBhbHRlcm5hdGl2 ZQorLX07CistCistLy8gUGFyc2VzIGEgcHV0X3RpbWUtbGlrZSBmb3JtYXQgc3RyaW5nIGFuZCBp bnZva2VzIGhhbmRsZXIgYWN0aW9ucy4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5h bWUgSGFuZGxlcj4KKy1GTVRfQ09OU1RFWFBSIGNvbnN0IENoYXIqIHBhcnNlX2Nocm9ub19mb3Jt YXQoY29uc3QgQ2hhciogYmVnaW4sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IENoYXIqIGVuZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSGFuZGxlciYmIGhhbmRsZXIpIHsKKy0gIGF1dG8gcHRyID0g YmVnaW47CistICB3aGlsZSAocHRyICE9IGVuZCkgeworLSAgICBhdXRvIGMgPSAqcHRyOworLSAg ICBpZiAoYyA9PSAnfScpIGJyZWFrOworLSAgICBpZiAoYyAhPSAnJScpIHsKKy0gICAgICArK3B0 cjsKKy0gICAgICBjb250aW51ZTsKKy0gICAgfQorLSAgICBpZiAoYmVnaW4gIT0gcHRyKSBoYW5k bGVyLm9uX3RleHQoYmVnaW4sIHB0cik7CistICAgICsrcHRyOyAgLy8gY29uc3VtZSAnJScKKy0g ICAgaWYgKHB0ciA9PSBlbmQpIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoImludmFsaWQgZm9ybWF0 IikpOworLSAgICBjID0gKnB0cisrOworLSAgICBzd2l0Y2ggKGMpIHsKKy0gICAgY2FzZSAnJSc6 CistICAgICAgaGFuZGxlci5vbl90ZXh0KHB0ciAtIDEsIHB0cik7CistICAgICAgYnJlYWs7Cist ICAgIGNhc2UgJ24nOiB7CistICAgICAgY29uc3QgQ2hhciBuZXdsaW5lW10gPSB7J1xuJ307Cist ICAgICAgaGFuZGxlci5vbl90ZXh0KG5ld2xpbmUsIG5ld2xpbmUgKyAxKTsKKy0gICAgICBicmVh azsKKy0gICAgfQorLSAgICBjYXNlICd0JzogeworLSAgICAgIGNvbnN0IENoYXIgdGFiW10gPSB7 J1x0J307CistICAgICAgaGFuZGxlci5vbl90ZXh0KHRhYiwgdGFiICsgMSk7CistICAgICAgYnJl YWs7CistICAgIH0KKy0gICAgLy8gWWVhcjoKKy0gICAgY2FzZSAnWSc6CistICAgICAgaGFuZGxl ci5vbl95ZWFyKG51bWVyaWNfc3lzdGVtOjpzdGFuZGFyZCk7CistICAgICAgYnJlYWs7CistICAg IGNhc2UgJ3knOgorLSAgICAgIGhhbmRsZXIub25fc2hvcnRfeWVhcihudW1lcmljX3N5c3RlbTo6 c3RhbmRhcmQpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlICdDJzoKKy0gICAgICBoYW5kbGVy Lm9uX2NlbnR1cnkobnVtZXJpY19zeXN0ZW06OnN0YW5kYXJkKTsKKy0gICAgICBicmVhazsKKy0g ICAgY2FzZSAnRyc6CistICAgICAgaGFuZGxlci5vbl9pc29fd2Vla19iYXNlZF95ZWFyKCk7Cist ICAgICAgYnJlYWs7CistICAgIGNhc2UgJ2cnOgorLSAgICAgIGhhbmRsZXIub25faXNvX3dlZWtf YmFzZWRfc2hvcnRfeWVhcigpOworLSAgICAgIGJyZWFrOworLSAgICAvLyBEYXkgb2YgdGhlIHdl ZWs6CistICAgIGNhc2UgJ2EnOgorLSAgICAgIGhhbmRsZXIub25fYWJicl93ZWVrZGF5KCk7Cist ICAgICAgYnJlYWs7CistICAgIGNhc2UgJ0EnOgorLSAgICAgIGhhbmRsZXIub25fZnVsbF93ZWVr ZGF5KCk7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgJ3cnOgorLSAgICAgIGhhbmRsZXIub25f ZGVjMF93ZWVrZGF5KG51bWVyaWNfc3lzdGVtOjpzdGFuZGFyZCk7CistICAgICAgYnJlYWs7Cist ICAgIGNhc2UgJ3UnOgorLSAgICAgIGhhbmRsZXIub25fZGVjMV93ZWVrZGF5KG51bWVyaWNfc3lz dGVtOjpzdGFuZGFyZCk7CistICAgICAgYnJlYWs7CistICAgIC8vIE1vbnRoOgorLSAgICBjYXNl ICdiJzoKKy0gICAgY2FzZSAnaCc6CistICAgICAgaGFuZGxlci5vbl9hYmJyX21vbnRoKCk7Cist ICAgICAgYnJlYWs7CistICAgIGNhc2UgJ0InOgorLSAgICAgIGhhbmRsZXIub25fZnVsbF9tb250 aCgpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlICdtJzoKKy0gICAgICBoYW5kbGVyLm9uX2Rl Y19tb250aChudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpOworLSAgICAgIGJyZWFrOworLSAgICAv LyBEYXkgb2YgdGhlIHllYXIvbW9udGg6CistICAgIGNhc2UgJ1UnOgorLSAgICAgIGhhbmRsZXIu b25fZGVjMF93ZWVrX29mX3llYXIobnVtZXJpY19zeXN0ZW06OnN0YW5kYXJkKTsKKy0gICAgICBi cmVhazsKKy0gICAgY2FzZSAnVyc6CistICAgICAgaGFuZGxlci5vbl9kZWMxX3dlZWtfb2ZfeWVh cihudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlICdW JzoKKy0gICAgICBoYW5kbGVyLm9uX2lzb193ZWVrX29mX3llYXIobnVtZXJpY19zeXN0ZW06OnN0 YW5kYXJkKTsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAnaic6CistICAgICAgaGFuZGxlci5v bl9kYXlfb2ZfeWVhcigpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlICdkJzoKKy0gICAgICBo YW5kbGVyLm9uX2RheV9vZl9tb250aChudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpOworLSAgICAg IGJyZWFrOworLSAgICBjYXNlICdlJzoKKy0gICAgICBoYW5kbGVyLm9uX2RheV9vZl9tb250aF9z cGFjZShudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpOworLSAgICAgIGJyZWFrOworLSAgICAvLyBI b3VyLCBtaW51dGUsIHNlY29uZDoKKy0gICAgY2FzZSAnSCc6CistICAgICAgaGFuZGxlci5vbl8y NF9ob3VyKG51bWVyaWNfc3lzdGVtOjpzdGFuZGFyZCk7CistICAgICAgYnJlYWs7CistICAgIGNh c2UgJ0knOgorLSAgICAgIGhhbmRsZXIub25fMTJfaG91cihudW1lcmljX3N5c3RlbTo6c3RhbmRh cmQpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlICdNJzoKKy0gICAgICBoYW5kbGVyLm9uX21p bnV0ZShudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNl ICdTJzoKKy0gICAgICBoYW5kbGVyLm9uX3NlY29uZChudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQp OworLSAgICAgIGJyZWFrOworLSAgICAvLyBPdGhlcjoKKy0gICAgY2FzZSAnYyc6CistICAgICAg aGFuZGxlci5vbl9kYXRldGltZShudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpOworLSAgICAgIGJy ZWFrOworLSAgICBjYXNlICd4JzoKKy0gICAgICBoYW5kbGVyLm9uX2xvY19kYXRlKG51bWVyaWNf c3lzdGVtOjpzdGFuZGFyZCk7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgJ1gnOgorLSAgICAg IGhhbmRsZXIub25fbG9jX3RpbWUobnVtZXJpY19zeXN0ZW06OnN0YW5kYXJkKTsKKy0gICAgICBi cmVhazsKKy0gICAgY2FzZSAnRCc6CistICAgICAgaGFuZGxlci5vbl91c19kYXRlKCk7CistICAg ICAgYnJlYWs7CistICAgIGNhc2UgJ0YnOgorLSAgICAgIGhhbmRsZXIub25faXNvX2RhdGUoKTsK Ky0gICAgICBicmVhazsKKy0gICAgY2FzZSAncic6CistICAgICAgaGFuZGxlci5vbl8xMl9ob3Vy X3RpbWUoKTsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAnUic6CistICAgICAgaGFuZGxlci5v bl8yNF9ob3VyX3RpbWUoKTsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAnVCc6CistICAgICAg aGFuZGxlci5vbl9pc29fdGltZSgpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlICdwJzoKKy0g ICAgICBoYW5kbGVyLm9uX2FtX3BtKCk7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgJ1EnOgor LSAgICAgIGhhbmRsZXIub25fZHVyYXRpb25fdmFsdWUoKTsKKy0gICAgICBicmVhazsKKy0gICAg Y2FzZSAncSc6CistICAgICAgaGFuZGxlci5vbl9kdXJhdGlvbl91bml0KCk7CistICAgICAgYnJl YWs7CistICAgIGNhc2UgJ3onOgorLSAgICAgIGhhbmRsZXIub25fdXRjX29mZnNldCgpOworLSAg ICAgIGJyZWFrOworLSAgICBjYXNlICdaJzoKKy0gICAgICBoYW5kbGVyLm9uX3R6X25hbWUoKTsK Ky0gICAgICBicmVhazsKKy0gICAgLy8gQWx0ZXJuYXRpdmUgcmVwcmVzZW50YXRpb246CistICAg IGNhc2UgJ0UnOiB7CistICAgICAgaWYgKHB0ciA9PSBlbmQpIEZNVF9USFJPVyhmb3JtYXRfZXJy b3IoImludmFsaWQgZm9ybWF0IikpOworLSAgICAgIGMgPSAqcHRyKys7CistICAgICAgc3dpdGNo IChjKSB7CistICAgICAgY2FzZSAnWSc6CistICAgICAgICBoYW5kbGVyLm9uX3llYXIobnVtZXJp Y19zeXN0ZW06OmFsdGVybmF0aXZlKTsKKy0gICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgJ3kn OgorLSAgICAgICAgaGFuZGxlci5vbl9vZmZzZXRfeWVhcigpOworLSAgICAgICAgYnJlYWs7Cist ICAgICAgY2FzZSAnQyc6CistICAgICAgICBoYW5kbGVyLm9uX2NlbnR1cnkobnVtZXJpY19zeXN0 ZW06OmFsdGVybmF0aXZlKTsKKy0gICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgJ2MnOgorLSAg ICAgICAgaGFuZGxlci5vbl9kYXRldGltZShudW1lcmljX3N5c3RlbTo6YWx0ZXJuYXRpdmUpOwor LSAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAneCc6CistICAgICAgICBoYW5kbGVyLm9uX2xv Y19kYXRlKG51bWVyaWNfc3lzdGVtOjphbHRlcm5hdGl2ZSk7CistICAgICAgICBicmVhazsKKy0g ICAgICBjYXNlICdYJzoKKy0gICAgICAgIGhhbmRsZXIub25fbG9jX3RpbWUobnVtZXJpY19zeXN0 ZW06OmFsdGVybmF0aXZlKTsKKy0gICAgICAgIGJyZWFrOworLSAgICAgIGRlZmF1bHQ6CistICAg ICAgICBGTVRfVEhST1coZm9ybWF0X2Vycm9yKCJpbnZhbGlkIGZvcm1hdCIpKTsKKy0gICAgICB9 CistICAgICAgYnJlYWs7CistICAgIH0KKy0gICAgY2FzZSAnTyc6CistICAgICAgaWYgKHB0ciA9 PSBlbmQpIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoImludmFsaWQgZm9ybWF0IikpOworLSAgICAg IGMgPSAqcHRyKys7CistICAgICAgc3dpdGNoIChjKSB7CistICAgICAgY2FzZSAneSc6CistICAg ICAgICBoYW5kbGVyLm9uX3Nob3J0X3llYXIobnVtZXJpY19zeXN0ZW06OmFsdGVybmF0aXZlKTsK Ky0gICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgJ20nOgorLSAgICAgICAgaGFuZGxlci5vbl9k ZWNfbW9udGgobnVtZXJpY19zeXN0ZW06OmFsdGVybmF0aXZlKTsKKy0gICAgICAgIGJyZWFrOwor LSAgICAgIGNhc2UgJ1UnOgorLSAgICAgICAgaGFuZGxlci5vbl9kZWMwX3dlZWtfb2ZfeWVhcihu dW1lcmljX3N5c3RlbTo6YWx0ZXJuYXRpdmUpOworLSAgICAgICAgYnJlYWs7CistICAgICAgY2Fz ZSAnVyc6CistICAgICAgICBoYW5kbGVyLm9uX2RlYzFfd2Vla19vZl95ZWFyKG51bWVyaWNfc3lz dGVtOjphbHRlcm5hdGl2ZSk7CistICAgICAgICBicmVhazsKKy0gICAgICBjYXNlICdWJzoKKy0g ICAgICAgIGhhbmRsZXIub25faXNvX3dlZWtfb2ZfeWVhcihudW1lcmljX3N5c3RlbTo6YWx0ZXJu YXRpdmUpOworLSAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAnZCc6CistICAgICAgICBoYW5k bGVyLm9uX2RheV9vZl9tb250aChudW1lcmljX3N5c3RlbTo6YWx0ZXJuYXRpdmUpOworLSAgICAg ICAgYnJlYWs7CistICAgICAgY2FzZSAnZSc6CistICAgICAgICBoYW5kbGVyLm9uX2RheV9vZl9t b250aF9zcGFjZShudW1lcmljX3N5c3RlbTo6YWx0ZXJuYXRpdmUpOworLSAgICAgICAgYnJlYWs7 CistICAgICAgY2FzZSAndyc6CistICAgICAgICBoYW5kbGVyLm9uX2RlYzBfd2Vla2RheShudW1l cmljX3N5c3RlbTo6YWx0ZXJuYXRpdmUpOworLSAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAn dSc6CistICAgICAgICBoYW5kbGVyLm9uX2RlYzFfd2Vla2RheShudW1lcmljX3N5c3RlbTo6YWx0 ZXJuYXRpdmUpOworLSAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAnSCc6CistICAgICAgICBo YW5kbGVyLm9uXzI0X2hvdXIobnVtZXJpY19zeXN0ZW06OmFsdGVybmF0aXZlKTsKKy0gICAgICAg IGJyZWFrOworLSAgICAgIGNhc2UgJ0knOgorLSAgICAgICAgaGFuZGxlci5vbl8xMl9ob3VyKG51 bWVyaWNfc3lzdGVtOjphbHRlcm5hdGl2ZSk7CistICAgICAgICBicmVhazsKKy0gICAgICBjYXNl ICdNJzoKKy0gICAgICAgIGhhbmRsZXIub25fbWludXRlKG51bWVyaWNfc3lzdGVtOjphbHRlcm5h dGl2ZSk7CistICAgICAgICBicmVhazsKKy0gICAgICBjYXNlICdTJzoKKy0gICAgICAgIGhhbmRs ZXIub25fc2Vjb25kKG51bWVyaWNfc3lzdGVtOjphbHRlcm5hdGl2ZSk7CistICAgICAgICBicmVh azsKKy0gICAgICBkZWZhdWx0OgorLSAgICAgICAgRk1UX1RIUk9XKGZvcm1hdF9lcnJvcigiaW52 YWxpZCBmb3JtYXQiKSk7CistICAgICAgfQorLSAgICAgIGJyZWFrOworLSAgICBkZWZhdWx0Ogor LSAgICAgIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoImludmFsaWQgZm9ybWF0IikpOworLSAgICB9 CistICAgIGJlZ2luID0gcHRyOworLSAgfQorLSAgaWYgKGJlZ2luICE9IHB0cikgaGFuZGxlci5v bl90ZXh0KGJlZ2luLCBwdHIpOworLSAgcmV0dXJuIHB0cjsKKy19CistCistdGVtcGxhdGUgPHR5 cGVuYW1lIERlcml2ZWQ+IHN0cnVjdCBudWxsX2Nocm9ub19zcGVjX2hhbmRsZXIgeworLSAgRk1U X0NPTlNURVhQUiB2b2lkIHVuc3VwcG9ydGVkKCkgeworLSAgICBzdGF0aWNfY2FzdDxEZXJpdmVk Kj4odGhpcyktPnVuc3VwcG9ydGVkKCk7CistICB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25f eWVhcihudW1lcmljX3N5c3RlbSkgeyB1bnN1cHBvcnRlZCgpOyB9CistICBGTVRfQ09OU1RFWFBS IHZvaWQgb25fc2hvcnRfeWVhcihudW1lcmljX3N5c3RlbSkgeyB1bnN1cHBvcnRlZCgpOyB9Cist ICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fb2Zmc2V0X3llYXIoKSB7IHVuc3VwcG9ydGVkKCk7IH0K Ky0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9jZW50dXJ5KG51bWVyaWNfc3lzdGVtKSB7IHVuc3Vw cG9ydGVkKCk7IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9pc29fd2Vla19iYXNlZF95ZWFy KCkgeyB1bnN1cHBvcnRlZCgpOyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25faXNvX3dlZWtf YmFzZWRfc2hvcnRfeWVhcigpIHsgdW5zdXBwb3J0ZWQoKTsgfQorLSAgRk1UX0NPTlNURVhQUiB2 b2lkIG9uX2FiYnJfd2Vla2RheSgpIHsgdW5zdXBwb3J0ZWQoKTsgfQorLSAgRk1UX0NPTlNURVhQ UiB2b2lkIG9uX2Z1bGxfd2Vla2RheSgpIHsgdW5zdXBwb3J0ZWQoKTsgfQorLSAgRk1UX0NPTlNU RVhQUiB2b2lkIG9uX2RlYzBfd2Vla2RheShudW1lcmljX3N5c3RlbSkgeyB1bnN1cHBvcnRlZCgp OyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZGVjMV93ZWVrZGF5KG51bWVyaWNfc3lzdGVt KSB7IHVuc3VwcG9ydGVkKCk7IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9hYmJyX21vbnRo KCkgeyB1bnN1cHBvcnRlZCgpOyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZnVsbF9tb250 aCgpIHsgdW5zdXBwb3J0ZWQoKTsgfQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2RlY19tb250 aChudW1lcmljX3N5c3RlbSkgeyB1bnN1cHBvcnRlZCgpOyB9CistICBGTVRfQ09OU1RFWFBSIHZv aWQgb25fZGVjMF93ZWVrX29mX3llYXIobnVtZXJpY19zeXN0ZW0pIHsgdW5zdXBwb3J0ZWQoKTsg fQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2RlYzFfd2Vla19vZl95ZWFyKG51bWVyaWNfc3lz dGVtKSB7IHVuc3VwcG9ydGVkKCk7IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9pc29fd2Vl a19vZl95ZWFyKG51bWVyaWNfc3lzdGVtKSB7IHVuc3VwcG9ydGVkKCk7IH0KKy0gIEZNVF9DT05T VEVYUFIgdm9pZCBvbl9kYXlfb2ZfeWVhcigpIHsgdW5zdXBwb3J0ZWQoKTsgfQorLSAgRk1UX0NP TlNURVhQUiB2b2lkIG9uX2RheV9vZl9tb250aChudW1lcmljX3N5c3RlbSkgeyB1bnN1cHBvcnRl ZCgpOyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZGF5X29mX21vbnRoX3NwYWNlKG51bWVy aWNfc3lzdGVtKSB7IHVuc3VwcG9ydGVkKCk7IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl8y NF9ob3VyKG51bWVyaWNfc3lzdGVtKSB7IHVuc3VwcG9ydGVkKCk7IH0KKy0gIEZNVF9DT05TVEVY UFIgdm9pZCBvbl8xMl9ob3VyKG51bWVyaWNfc3lzdGVtKSB7IHVuc3VwcG9ydGVkKCk7IH0KKy0g IEZNVF9DT05TVEVYUFIgdm9pZCBvbl9taW51dGUobnVtZXJpY19zeXN0ZW0pIHsgdW5zdXBwb3J0 ZWQoKTsgfQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3NlY29uZChudW1lcmljX3N5c3RlbSkg eyB1bnN1cHBvcnRlZCgpOyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZGF0ZXRpbWUobnVt ZXJpY19zeXN0ZW0pIHsgdW5zdXBwb3J0ZWQoKTsgfQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9u X2xvY19kYXRlKG51bWVyaWNfc3lzdGVtKSB7IHVuc3VwcG9ydGVkKCk7IH0KKy0gIEZNVF9DT05T VEVYUFIgdm9pZCBvbl9sb2NfdGltZShudW1lcmljX3N5c3RlbSkgeyB1bnN1cHBvcnRlZCgpOyB9 CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fdXNfZGF0ZSgpIHsgdW5zdXBwb3J0ZWQoKTsgfQor LSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2lzb19kYXRlKCkgeyB1bnN1cHBvcnRlZCgpOyB9Cist ICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fMTJfaG91cl90aW1lKCkgeyB1bnN1cHBvcnRlZCgpOyB9 CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fMjRfaG91cl90aW1lKCkgeyB1bnN1cHBvcnRlZCgp OyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25faXNvX3RpbWUoKSB7IHVuc3VwcG9ydGVkKCk7 IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9hbV9wbSgpIHsgdW5zdXBwb3J0ZWQoKTsgfQor LSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2R1cmF0aW9uX3ZhbHVlKCkgeyB1bnN1cHBvcnRlZCgp OyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZHVyYXRpb25fdW5pdCgpIHsgdW5zdXBwb3J0 ZWQoKTsgfQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3V0Y19vZmZzZXQoKSB7IHVuc3VwcG9y dGVkKCk7IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl90el9uYW1lKCkgeyB1bnN1cHBvcnRl ZCgpOyB9CistfTsKKy0KKy1zdHJ1Y3QgdG1fZm9ybWF0X2NoZWNrZXIgOiBudWxsX2Nocm9ub19z cGVjX2hhbmRsZXI8dG1fZm9ybWF0X2NoZWNrZXI+IHsKKy0gIEZNVF9OT1JFVFVSTiB2b2lkIHVu c3VwcG9ydGVkKCkgeyBGTVRfVEhST1coZm9ybWF0X2Vycm9yKCJubyBmb3JtYXQiKSk7IH0KKy0K Ky0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3Rl eHQoY29uc3QgQ2hhciosIGNvbnN0IENoYXIqKSB7fQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9u X3llYXIobnVtZXJpY19zeXN0ZW0pIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fc2hvcnRf eWVhcihudW1lcmljX3N5c3RlbSkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9vZmZzZXRf eWVhcigpIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fY2VudHVyeShudW1lcmljX3N5c3Rl bSkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9pc29fd2Vla19iYXNlZF95ZWFyKCkge30K Ky0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9pc29fd2Vla19iYXNlZF9zaG9ydF95ZWFyKCkge30K Ky0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9hYmJyX3dlZWtkYXkoKSB7fQorLSAgRk1UX0NPTlNU RVhQUiB2b2lkIG9uX2Z1bGxfd2Vla2RheSgpIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25f ZGVjMF93ZWVrZGF5KG51bWVyaWNfc3lzdGVtKSB7fQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9u X2RlYzFfd2Vla2RheShudW1lcmljX3N5c3RlbSkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBv bl9hYmJyX21vbnRoKCkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9mdWxsX21vbnRoKCkg e30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9kZWNfbW9udGgobnVtZXJpY19zeXN0ZW0pIHt9 CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZGVjMF93ZWVrX29mX3llYXIobnVtZXJpY19zeXN0 ZW0pIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZGVjMV93ZWVrX29mX3llYXIobnVtZXJp Y19zeXN0ZW0pIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25faXNvX3dlZWtfb2ZfeWVhcihu dW1lcmljX3N5c3RlbSkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9kYXlfb2ZfeWVhcigp IHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZGF5X29mX21vbnRoKG51bWVyaWNfc3lzdGVt KSB7fQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2RheV9vZl9tb250aF9zcGFjZShudW1lcmlj X3N5c3RlbSkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl8yNF9ob3VyKG51bWVyaWNfc3lz dGVtKSB7fQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uXzEyX2hvdXIobnVtZXJpY19zeXN0ZW0p IHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fbWludXRlKG51bWVyaWNfc3lzdGVtKSB7fQor LSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3NlY29uZChudW1lcmljX3N5c3RlbSkge30KKy0gIEZN VF9DT05TVEVYUFIgdm9pZCBvbl9kYXRldGltZShudW1lcmljX3N5c3RlbSkge30KKy0gIEZNVF9D T05TVEVYUFIgdm9pZCBvbl9sb2NfZGF0ZShudW1lcmljX3N5c3RlbSkge30KKy0gIEZNVF9DT05T VEVYUFIgdm9pZCBvbl9sb2NfdGltZShudW1lcmljX3N5c3RlbSkge30KKy0gIEZNVF9DT05TVEVY UFIgdm9pZCBvbl91c19kYXRlKCkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9pc29fZGF0 ZSgpIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fMTJfaG91cl90aW1lKCkge30KKy0gIEZN VF9DT05TVEVYUFIgdm9pZCBvbl8yNF9ob3VyX3RpbWUoKSB7fQorLSAgRk1UX0NPTlNURVhQUiB2 b2lkIG9uX2lzb190aW1lKCkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9hbV9wbSgpIHt9 CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fdXRjX29mZnNldCgpIHt9CistICBGTVRfQ09OU1RF WFBSIHZvaWQgb25fdHpfbmFtZSgpIHt9CistfTsKKy0KKy1pbmxpbmUgY29uc3QgY2hhciogdG1f d2RheV9mdWxsX25hbWUoaW50IHdkYXkpIHsKKy0gIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hh ciogZnVsbF9uYW1lX2xpc3RbXSA9IHsKKy0gICAgICAiU3VuZGF5IiwgICAiTW9uZGF5IiwgIlR1 ZXNkYXkiLCAiV2VkbmVzZGF5IiwKKy0gICAgICAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVy ZGF5In07CistICByZXR1cm4gd2RheSA+PSAwICYmIHdkYXkgPD0gNiA/IGZ1bGxfbmFtZV9saXN0 W3dkYXldIDogIj8iOworLX0KKy1pbmxpbmUgY29uc3QgY2hhciogdG1fd2RheV9zaG9ydF9uYW1l KGludCB3ZGF5KSB7CistICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHNob3J0X25hbWVf bGlzdFtdID0geyJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGh1IiwgIkZyaSIsICJTYXQifTsK Ky0gIHJldHVybiB3ZGF5ID49IDAgJiYgd2RheSA8PSA2ID8gc2hvcnRfbmFtZV9saXN0W3dkYXld IDogIj8/PyI7CistfQorLQorLWlubGluZSBjb25zdCBjaGFyKiB0bV9tb25fZnVsbF9uYW1lKGlu dCBtb24pIHsKKy0gIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogZnVsbF9uYW1lX2xpc3Rb XSA9IHsKKy0gICAgICAiSmFudWFyeSIsICJGZWJydWFyeSIsICJNYXJjaCIsICAgICAiQXByaWwi LCAgICJNYXkiLCAgICAgICJKdW5lIiwKKy0gICAgICAiSnVseSIsICAgICJBdWd1c3QiLCAgICJT ZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciJ9OworLSAgcmV0dXJu IG1vbiA+PSAwICYmIG1vbiA8PSAxMSA/IGZ1bGxfbmFtZV9saXN0W21vbl0gOiAiPyI7CistfQor LWlubGluZSBjb25zdCBjaGFyKiB0bV9tb25fc2hvcnRfbmFtZShpbnQgbW9uKSB7CistICBzdGF0 aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHNob3J0X25hbWVfbGlzdFtdID0geworLSAgICAgICJK YW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCistICAgICAgIkp1bCIsICJB dWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiwKKy0gIH07CistICByZXR1cm4gbW9uID49 IDAgJiYgbW9uIDw9IDExID8gc2hvcnRfbmFtZV9saXN0W21vbl0gOiAiPz8/IjsKKy19CistCist dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZD4KKy1zdHJ1Y3QgaGFzX21lbWJl cl9kYXRhX3RtX2dtdG9mZiA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKKy10ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy1zdHJ1Y3QgaGFzX21lbWJlcl9kYXRhX3RtX2dtdG9mZjxULCB2b2lkX3Q8ZGVjbHR5 cGUoVDo6dG1fZ210b2ZmKT4+CistICAgIDogc3RkOjp0cnVlX3R5cGUge307CistCistdGVtcGxh dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZD4KKy1zdHJ1Y3QgaGFzX21lbWJlcl9kYXRh X3RtX3pvbmUgOiBzdGQ6OmZhbHNlX3R5cGUge307CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cist c3RydWN0IGhhc19tZW1iZXJfZGF0YV90bV96b25lPFQsIHZvaWRfdDxkZWNsdHlwZShUOjp0bV96 b25lKT4+CistICAgIDogc3RkOjp0cnVlX3R5cGUge307CistCistI2lmIEZNVF9VU0VfVFpTRVQK Ky1pbmxpbmUgdm9pZCB0enNldF9vbmNlKCkgeworLSAgc3RhdGljIGJvb2wgaW5pdCA9IFtdKCkg LT4gYm9vbCB7CistICAgIF90enNldCgpOworLSAgICByZXR1cm4gdHJ1ZTsKKy0gIH0oKTsKKy0g IGlnbm9yZV91bnVzZWQoaW5pdCk7CistfQorLSNlbmRpZgorLQorLXRlbXBsYXRlIDx0eXBlbmFt ZSBPdXRwdXRJdCwgdHlwZW5hbWUgQ2hhcj4gY2xhc3MgdG1fd3JpdGVyIHsKKy0gcHJpdmF0ZToK Ky0gIHN0YXRpYyBjb25zdGV4cHIgaW50IGRheXNfcGVyX3dlZWsgPSA3OworLQorLSAgY29uc3Qg c3RkOjpsb2NhbGUmIGxvY187CistICBjb25zdCBib29sIGlzX2NsYXNzaWNfOworLSAgT3V0cHV0 SXQgb3V0XzsKKy0gIGNvbnN0IHN0ZDo6dG0mIHRtXzsKKy0KKy0gIGF1dG8gdG1fc2VjKCkgY29u c3Qgbm9leGNlcHQgLT4gaW50IHsKKy0gICAgRk1UX0FTU0VSVCh0bV8udG1fc2VjID49IDAgJiYg dG1fLnRtX3NlYyA8PSA2MSwgIiIpOworLSAgICByZXR1cm4gdG1fLnRtX3NlYzsKKy0gIH0KKy0g IGF1dG8gdG1fbWluKCkgY29uc3Qgbm9leGNlcHQgLT4gaW50IHsKKy0gICAgRk1UX0FTU0VSVCh0 bV8udG1fbWluID49IDAgJiYgdG1fLnRtX21pbiA8PSA1OSwgIiIpOworLSAgICByZXR1cm4gdG1f LnRtX21pbjsKKy0gIH0KKy0gIGF1dG8gdG1faG91cigpIGNvbnN0IG5vZXhjZXB0IC0+IGludCB7 CistICAgIEZNVF9BU1NFUlQodG1fLnRtX2hvdXIgPj0gMCAmJiB0bV8udG1faG91ciA8PSAyMywg IiIpOworLSAgICByZXR1cm4gdG1fLnRtX2hvdXI7CistICB9CistICBhdXRvIHRtX21kYXkoKSBj b25zdCBub2V4Y2VwdCAtPiBpbnQgeworLSAgICBGTVRfQVNTRVJUKHRtXy50bV9tZGF5ID49IDEg JiYgdG1fLnRtX21kYXkgPD0gMzEsICIiKTsKKy0gICAgcmV0dXJuIHRtXy50bV9tZGF5OworLSAg fQorLSAgYXV0byB0bV9tb24oKSBjb25zdCBub2V4Y2VwdCAtPiBpbnQgeworLSAgICBGTVRfQVNT RVJUKHRtXy50bV9tb24gPj0gMCAmJiB0bV8udG1fbW9uIDw9IDExLCAiIik7CistICAgIHJldHVy biB0bV8udG1fbW9uOworLSAgfQorLSAgYXV0byB0bV95ZWFyKCkgY29uc3Qgbm9leGNlcHQgLT4g bG9uZyBsb25nIHsgcmV0dXJuIDE5MDBsbCArIHRtXy50bV95ZWFyOyB9CistICBhdXRvIHRtX3dk YXkoKSBjb25zdCBub2V4Y2VwdCAtPiBpbnQgeworLSAgICBGTVRfQVNTRVJUKHRtXy50bV93ZGF5 ID49IDAgJiYgdG1fLnRtX3dkYXkgPD0gNiwgIiIpOworLSAgICByZXR1cm4gdG1fLnRtX3dkYXk7 CistICB9CistICBhdXRvIHRtX3lkYXkoKSBjb25zdCBub2V4Y2VwdCAtPiBpbnQgeworLSAgICBG TVRfQVNTRVJUKHRtXy50bV95ZGF5ID49IDAgJiYgdG1fLnRtX3lkYXkgPD0gMzY1LCAiIik7Cist ICAgIHJldHVybiB0bV8udG1feWRheTsKKy0gIH0KKy0KKy0gIGF1dG8gdG1faG91cjEyKCkgY29u c3Qgbm9leGNlcHQgLT4gaW50IHsKKy0gICAgY29uc3QgYXV0byBoID0gdG1faG91cigpOworLSAg ICBjb25zdCBhdXRvIHogPSBoIDwgMTIgPyBoIDogaCAtIDEyOworLSAgICByZXR1cm4geiA9PSAw ID8gMTIgOiB6OworLSAgfQorLQorLSAgLy8gUE9TSVggYW5kIHRoZSBDIFN0YW5kYXJkIGFyZSB1 bmNsZWFyIG9yIGluY29uc2lzdGVudCBhYm91dCB3aGF0ICVDIGFuZCAleQorLSAgLy8gZG8gaWYg dGhlIHllYXIgaXMgbmVnYXRpdmUgb3IgZXhjZWVkcyA5OTk5LiBVc2UgdGhlIGNvbnZlbnRpb24g dGhhdCAlQworLSAgLy8gY29uY2F0ZW5hdGVkIHdpdGggJXkgeWllbGRzIHRoZSBzYW1lIG91dHB1 dCBhcyAlWSwgYW5kIHRoYXQgJVkgY29udGFpbnMgYXQKKy0gIC8vIGxlYXN0IDQgY2hhcmFjdGVy cywgd2l0aCBtb3JlIG9ubHkgaWYgbmVjZXNzYXJ5LgorLSAgYXV0byBzcGxpdF95ZWFyX2xvd2Vy KGxvbmcgbG9uZyB5ZWFyKSBjb25zdCBub2V4Y2VwdCAtPiBpbnQgeworLSAgICBhdXRvIGwgPSB5 ZWFyICUgMTAwOworLSAgICBpZiAobCA8IDApIGwgPSAtbDsgIC8vIGwgaW4gWzAsIDk5XQorLSAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihsKTsKKy0gIH0KKy0KKy0gIC8vIEFsZ29yaXRobToK Ky0gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3Vs YXRpbmdfdGhlX3dlZWtfbnVtYmVyX2Zyb21fYV9tb250aF9hbmRfZGF5X29mX3RoZV9tb250aF9v cl9vcmRpbmFsX2RhdGUKKy0gIGF1dG8gaXNvX3llYXJfd2Vla3MobG9uZyBsb25nIGN1cnJfeWVh cikgY29uc3Qgbm9leGNlcHQgLT4gaW50IHsKKy0gICAgY29uc3QgYXV0byBwcmV2X3llYXIgPSBj dXJyX3llYXIgLSAxOworLSAgICBjb25zdCBhdXRvIGN1cnJfcCA9CistICAgICAgICAoY3Vycl95 ZWFyICsgY3Vycl95ZWFyIC8gNCAtIGN1cnJfeWVhciAvIDEwMCArIGN1cnJfeWVhciAvIDQwMCkg JQorLSAgICAgICAgZGF5c19wZXJfd2VlazsKKy0gICAgY29uc3QgYXV0byBwcmV2X3AgPQorLSAg ICAgICAgKHByZXZfeWVhciArIHByZXZfeWVhciAvIDQgLSBwcmV2X3llYXIgLyAxMDAgKyBwcmV2 X3llYXIgLyA0MDApICUKKy0gICAgICAgIGRheXNfcGVyX3dlZWs7CistICAgIHJldHVybiA1MiAr ICgoY3Vycl9wID09IDQgfHwgcHJldl9wID09IDMpID8gMSA6IDApOworLSAgfQorLSAgYXV0byBp c29fd2Vla19udW0oaW50IHRtX3lkYXksIGludCB0bV93ZGF5KSBjb25zdCBub2V4Y2VwdCAtPiBp bnQgeworLSAgICByZXR1cm4gKHRtX3lkYXkgKyAxMSAtICh0bV93ZGF5ID09IDAgPyBkYXlzX3Bl cl93ZWVrIDogdG1fd2RheSkpIC8KKy0gICAgICAgICAgIGRheXNfcGVyX3dlZWs7CistICB9Cist ICBhdXRvIHRtX2lzb193ZWVrX3llYXIoKSBjb25zdCBub2V4Y2VwdCAtPiBsb25nIGxvbmcgewor LSAgICBjb25zdCBhdXRvIHllYXIgPSB0bV95ZWFyKCk7CistICAgIGNvbnN0IGF1dG8gdyA9IGlz b193ZWVrX251bSh0bV95ZGF5KCksIHRtX3dkYXkoKSk7CistICAgIGlmICh3IDwgMSkgcmV0dXJu IHllYXIgLSAxOworLSAgICBpZiAodyA+IGlzb195ZWFyX3dlZWtzKHllYXIpKSByZXR1cm4geWVh ciArIDE7CistICAgIHJldHVybiB5ZWFyOworLSAgfQorLSAgYXV0byB0bV9pc29fd2Vla19vZl95 ZWFyKCkgY29uc3Qgbm9leGNlcHQgLT4gaW50IHsKKy0gICAgY29uc3QgYXV0byB5ZWFyID0gdG1f eWVhcigpOworLSAgICBjb25zdCBhdXRvIHcgPSBpc29fd2Vla19udW0odG1feWRheSgpLCB0bV93 ZGF5KCkpOworLSAgICBpZiAodyA8IDEpIHJldHVybiBpc29feWVhcl93ZWVrcyh5ZWFyIC0gMSk7 CistICAgIGlmICh3ID4gaXNvX3llYXJfd2Vla3MoeWVhcikpIHJldHVybiAxOworLSAgICByZXR1 cm4gdzsKKy0gIH0KKy0KKy0gIHZvaWQgd3JpdGUxKGludCB2YWx1ZSkgeworLSAgICAqb3V0Xysr ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgdG9fdW5zaWduZWQodmFsdWUpICUgMTApOworLSAg fQorLSAgdm9pZCB3cml0ZTIoaW50IHZhbHVlKSB7CistICAgIGNvbnN0IGNoYXIqIGQgPSBkaWdp dHMyKHRvX3Vuc2lnbmVkKHZhbHVlKSAlIDEwMCk7CistICAgICpvdXRfKysgPSAqZCsrOworLSAg ICAqb3V0XysrID0gKmQ7CistICB9CistCistICB2b2lkIHdyaXRlX3llYXJfZXh0ZW5kZWQobG9u ZyBsb25nIHllYXIpIHsKKy0gICAgLy8gQXQgbGVhc3QgNCBjaGFyYWN0ZXJzLgorLSAgICBpbnQg d2lkdGggPSA0OworLSAgICBpZiAoeWVhciA8IDApIHsKKy0gICAgICAqb3V0XysrID0gJy0nOwor LSAgICAgIHllYXIgPSAwIC0geWVhcjsKKy0gICAgICAtLXdpZHRoOworLSAgICB9CistICAgIHVp bnQzMl9vcl82NF9vcl8xMjhfdDxsb25nIGxvbmc+IG4gPSB0b191bnNpZ25lZCh5ZWFyKTsKKy0g ICAgY29uc3QgaW50IG51bV9kaWdpdHMgPSBjb3VudF9kaWdpdHMobik7CistICAgIGlmICh3aWR0 aCA+IG51bV9kaWdpdHMpIG91dF8gPSBzdGQ6OmZpbGxfbihvdXRfLCB3aWR0aCAtIG51bV9kaWdp dHMsICcwJyk7CistICAgIG91dF8gPSBmb3JtYXRfZGVjaW1hbDxDaGFyPihvdXRfLCBuLCBudW1f ZGlnaXRzKS5lbmQ7CistICB9CistICB2b2lkIHdyaXRlX3llYXIobG9uZyBsb25nIHllYXIpIHsK Ky0gICAgaWYgKHllYXIgPj0gMCAmJiB5ZWFyIDwgMTAwMDApIHsKKy0gICAgICB3cml0ZTIoc3Rh dGljX2Nhc3Q8aW50Pih5ZWFyIC8gMTAwKSk7CistICAgICAgd3JpdGUyKHN0YXRpY19jYXN0PGlu dD4oeWVhciAlIDEwMCkpOworLSAgICB9IGVsc2UgeworLSAgICAgIHdyaXRlX3llYXJfZXh0ZW5k ZWQoeWVhcik7CistICAgIH0KKy0gIH0KKy0KKy0gIHZvaWQgd3JpdGVfdXRjX29mZnNldChsb25n IG9mZnNldCkgeworLSAgICBpZiAob2Zmc2V0IDwgMCkgeworLSAgICAgICpvdXRfKysgPSAnLSc7 CistICAgICAgb2Zmc2V0ID0gLW9mZnNldDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAqb3V0Xysr ID0gJysnOworLSAgICB9CistICAgIG9mZnNldCAvPSA2MDsKKy0gICAgd3JpdGUyKHN0YXRpY19j YXN0PGludD4ob2Zmc2V0IC8gNjApKTsKKy0gICAgd3JpdGUyKHN0YXRpY19jYXN0PGludD4ob2Zm c2V0ICUgNjApKTsKKy0gIH0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lG KGhhc19tZW1iZXJfZGF0YV90bV9nbXRvZmY8VD46OnZhbHVlKT4KKy0gIHZvaWQgZm9ybWF0X3V0 Y19vZmZzZXRfaW1wbChjb25zdCBUJiB0bSkgeworLSAgICB3cml0ZV91dGNfb2Zmc2V0KHRtLnRt X2dtdG9mZik7CistICB9CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9JRigh aGFzX21lbWJlcl9kYXRhX3RtX2dtdG9mZjxUPjo6dmFsdWUpPgorLSAgdm9pZCBmb3JtYXRfdXRj X29mZnNldF9pbXBsKGNvbnN0IFQmIHRtKSB7CistI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZp bmVkKF9VQ1JUKQorLSMgIGlmIEZNVF9VU0VfVFpTRVQKKy0gICAgdHpzZXRfb25jZSgpOworLSMg IGVuZGlmCistICAgIGxvbmcgb2Zmc2V0ID0gMDsKKy0gICAgX2dldF90aW1lem9uZSgmb2Zmc2V0 KTsKKy0gICAgaWYgKHRtLnRtX2lzZHN0KSB7CistICAgICAgbG9uZyBkc3RiaWFzID0gMDsKKy0g ICAgICBfZ2V0X2RzdGJpYXMoJmRzdGJpYXMpOworLSAgICAgIG9mZnNldCArPSBkc3RiaWFzOwor LSAgICB9CistICAgIHdyaXRlX3V0Y19vZmZzZXQoLW9mZnNldCk7CistI2Vsc2UKKy0gICAgaWdu b3JlX3VudXNlZCh0bSk7CistICAgIGZvcm1hdF9sb2NhbGl6ZWQoJ3onKTsKKy0jZW5kaWYKKy0g IH0KKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKGhhc19tZW1iZXJf ZGF0YV90bV96b25lPFQ+Ojp2YWx1ZSk+CistICB2b2lkIGZvcm1hdF90el9uYW1lX2ltcGwoY29u c3QgVCYgdG0pIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfKQorLSAgICAgIG91dF8gPSB3cml0ZV90 bV9zdHI8Q2hhcj4ob3V0XywgdG0udG1fem9uZSwgbG9jXyk7CistICAgIGVsc2UKKy0gICAgICBm b3JtYXRfbG9jYWxpemVkKCdaJyk7CistICB9CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1U X0VOQUJMRV9JRighaGFzX21lbWJlcl9kYXRhX3RtX3pvbmU8VD46OnZhbHVlKT4KKy0gIHZvaWQg Zm9ybWF0X3R6X25hbWVfaW1wbChjb25zdCBUJikgeworLSAgICBmb3JtYXRfbG9jYWxpemVkKCda Jyk7CistICB9CistCistICB2b2lkIGZvcm1hdF9sb2NhbGl6ZWQoY2hhciBmb3JtYXQsIGNoYXIg bW9kaWZpZXIgPSAwKSB7CistICAgIG91dF8gPSB3cml0ZTxDaGFyPihvdXRfLCB0bV8sIGxvY18s IGZvcm1hdCwgbW9kaWZpZXIpOworLSAgfQorLQorLSBwdWJsaWM6CistICB0bV93cml0ZXIoY29u c3Qgc3RkOjpsb2NhbGUmIGxvYywgT3V0cHV0SXQgb3V0LCBjb25zdCBzdGQ6OnRtJiB0bSkKKy0g ICAgICA6IGxvY18obG9jKSwKKy0gICAgICAgIGlzX2NsYXNzaWNfKGxvY18gPT0gZ2V0X2NsYXNz aWNfbG9jYWxlKCkpLAorLSAgICAgICAgb3V0XyhvdXQpLAorLSAgICAgICAgdG1fKHRtKSB7fQor LQorLSAgT3V0cHV0SXQgb3V0KCkgY29uc3QgeyByZXR1cm4gb3V0XzsgfQorLQorLSAgRk1UX0NP TlNURVhQUiB2b2lkIG9uX3RleHQoY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0IENoYXIqIGVuZCkg eworLSAgICBvdXRfID0gY29weV9zdHI8Q2hhcj4oYmVnaW4sIGVuZCwgb3V0Xyk7CistICB9Cist CistICB2b2lkIG9uX2FiYnJfd2Vla2RheSgpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfKQorLSAg ICAgIG91dF8gPSB3cml0ZShvdXRfLCB0bV93ZGF5X3Nob3J0X25hbWUodG1fd2RheSgpKSk7Cist ICAgIGVsc2UKKy0gICAgICBmb3JtYXRfbG9jYWxpemVkKCdhJyk7CistICB9CistICB2b2lkIG9u X2Z1bGxfd2Vla2RheSgpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfKQorLSAgICAgIG91dF8gPSB3 cml0ZShvdXRfLCB0bV93ZGF5X2Z1bGxfbmFtZSh0bV93ZGF5KCkpKTsKKy0gICAgZWxzZQorLSAg ICAgIGZvcm1hdF9sb2NhbGl6ZWQoJ0EnKTsKKy0gIH0KKy0gIHZvaWQgb25fZGVjMF93ZWVrZGF5 KG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAgIGlmIChpc19jbGFzc2ljXyB8fCBucyA9PSBudW1l cmljX3N5c3RlbTo6c3RhbmRhcmQpIHJldHVybiB3cml0ZTEodG1fd2RheSgpKTsKKy0gICAgZm9y bWF0X2xvY2FsaXplZCgndycsICdPJyk7CistICB9CistICB2b2lkIG9uX2RlYzFfd2Vla2RheShu dW1lcmljX3N5c3RlbSBucykgeworLSAgICBpZiAoaXNfY2xhc3NpY18gfHwgbnMgPT0gbnVtZXJp Y19zeXN0ZW06OnN0YW5kYXJkKSB7CistICAgICAgYXV0byB3ZGF5ID0gdG1fd2RheSgpOworLSAg ICAgIHdyaXRlMSh3ZGF5ID09IDAgPyBkYXlzX3Blcl93ZWVrIDogd2RheSk7CistICAgIH0gZWxz ZSB7CistICAgICAgZm9ybWF0X2xvY2FsaXplZCgndScsICdPJyk7CistICAgIH0KKy0gIH0KKy0K Ky0gIHZvaWQgb25fYWJicl9tb250aCgpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfKQorLSAgICAg IG91dF8gPSB3cml0ZShvdXRfLCB0bV9tb25fc2hvcnRfbmFtZSh0bV9tb24oKSkpOworLSAgICBl bHNlCistICAgICAgZm9ybWF0X2xvY2FsaXplZCgnYicpOworLSAgfQorLSAgdm9pZCBvbl9mdWxs X21vbnRoKCkgeworLSAgICBpZiAoaXNfY2xhc3NpY18pCistICAgICAgb3V0XyA9IHdyaXRlKG91 dF8sIHRtX21vbl9mdWxsX25hbWUodG1fbW9uKCkpKTsKKy0gICAgZWxzZQorLSAgICAgIGZvcm1h dF9sb2NhbGl6ZWQoJ0InKTsKKy0gIH0KKy0KKy0gIHZvaWQgb25fZGF0ZXRpbWUobnVtZXJpY19z eXN0ZW0gbnMpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfKSB7CistICAgICAgb25fYWJicl93ZWVr ZGF5KCk7CistICAgICAgKm91dF8rKyA9ICcgJzsKKy0gICAgICBvbl9hYmJyX21vbnRoKCk7Cist ICAgICAgKm91dF8rKyA9ICcgJzsKKy0gICAgICBvbl9kYXlfb2ZfbW9udGhfc3BhY2UobnVtZXJp Y19zeXN0ZW06OnN0YW5kYXJkKTsKKy0gICAgICAqb3V0XysrID0gJyAnOworLSAgICAgIG9uX2lz b190aW1lKCk7CistICAgICAgKm91dF8rKyA9ICcgJzsKKy0gICAgICBvbl95ZWFyKG51bWVyaWNf c3lzdGVtOjpzdGFuZGFyZCk7CistICAgIH0gZWxzZSB7CistICAgICAgZm9ybWF0X2xvY2FsaXpl ZCgnYycsIG5zID09IG51bWVyaWNfc3lzdGVtOjpzdGFuZGFyZCA/ICdcMCcgOiAnRScpOworLSAg ICB9CistICB9CistICB2b2lkIG9uX2xvY19kYXRlKG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAg IGlmIChpc19jbGFzc2ljXykKKy0gICAgICBvbl91c19kYXRlKCk7CistICAgIGVsc2UKKy0gICAg ICBmb3JtYXRfbG9jYWxpemVkKCd4JywgbnMgPT0gbnVtZXJpY19zeXN0ZW06OnN0YW5kYXJkID8g J1wwJyA6ICdFJyk7CistICB9CistICB2b2lkIG9uX2xvY190aW1lKG51bWVyaWNfc3lzdGVtIG5z KSB7CistICAgIGlmIChpc19jbGFzc2ljXykKKy0gICAgICBvbl9pc29fdGltZSgpOworLSAgICBl bHNlCistICAgICAgZm9ybWF0X2xvY2FsaXplZCgnWCcsIG5zID09IG51bWVyaWNfc3lzdGVtOjpz dGFuZGFyZCA/ICdcMCcgOiAnRScpOworLSAgfQorLSAgdm9pZCBvbl91c19kYXRlKCkgeworLSAg ICBjaGFyIGJ1Zls4XTsKKy0gICAgd3JpdGVfZGlnaXQyX3NlcGFyYXRlZChidWYsIHRvX3Vuc2ln bmVkKHRtX21vbigpICsgMSksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fdW5zaWdu ZWQodG1fbWRheSgpKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b191bnNpZ25lZChz cGxpdF95ZWFyX2xvd2VyKHRtX3llYXIoKSkpLCAnLycpOworLSAgICBvdXRfID0gY29weV9zdHI8 Q2hhcj4oc3RkOjpiZWdpbihidWYpLCBzdGQ6OmVuZChidWYpLCBvdXRfKTsKKy0gIH0KKy0gIHZv aWQgb25faXNvX2RhdGUoKSB7CistICAgIGF1dG8geWVhciA9IHRtX3llYXIoKTsKKy0gICAgY2hh ciBidWZbMTBdOworLSAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKy0gICAgaWYgKHllYXIgPj0gMCAm JiB5ZWFyIDwgMTAwMDApIHsKKy0gICAgICBjb3B5MihidWYsIGRpZ2l0czIodG9fdW5zaWduZWQo eWVhciAvIDEwMCkpKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICBvZmZzZXQgPSA0OworLSAgICAg IHdyaXRlX3llYXJfZXh0ZW5kZWQoeWVhcik7CistICAgICAgeWVhciA9IDA7CistICAgIH0KKy0g ICAgd3JpdGVfZGlnaXQyX3NlcGFyYXRlZChidWYgKyAyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o eWVhciAlIDEwMCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fdW5zaWduZWQodG1f bW9uKCkgKyAxKSwgdG9fdW5zaWduZWQodG1fbWRheSgpKSwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAnLScpOworLSAgICBvdXRfID0gY29weV9zdHI8Q2hhcj4oc3RkOjpiZWdpbihidWYp ICsgb2Zmc2V0LCBzdGQ6OmVuZChidWYpLCBvdXRfKTsKKy0gIH0KKy0KKy0gIHZvaWQgb25fdXRj X29mZnNldCgpIHsgZm9ybWF0X3V0Y19vZmZzZXRfaW1wbCh0bV8pOyB9CistICB2b2lkIG9uX3R6 X25hbWUoKSB7IGZvcm1hdF90el9uYW1lX2ltcGwodG1fKTsgfQorLQorLSAgdm9pZCBvbl95ZWFy KG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAgIGlmIChpc19jbGFzc2ljXyB8fCBucyA9PSBudW1l cmljX3N5c3RlbTo6c3RhbmRhcmQpCistICAgICAgcmV0dXJuIHdyaXRlX3llYXIodG1feWVhcigp KTsKKy0gICAgZm9ybWF0X2xvY2FsaXplZCgnWScsICdFJyk7CistICB9CistICB2b2lkIG9uX3No b3J0X3llYXIobnVtZXJpY19zeXN0ZW0gbnMpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfIHx8IG5z ID09IG51bWVyaWNfc3lzdGVtOjpzdGFuZGFyZCkKKy0gICAgICByZXR1cm4gd3JpdGUyKHNwbGl0 X3llYXJfbG93ZXIodG1feWVhcigpKSk7CistICAgIGZvcm1hdF9sb2NhbGl6ZWQoJ3knLCAnTycp OworLSAgfQorLSAgdm9pZCBvbl9vZmZzZXRfeWVhcigpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNf KSByZXR1cm4gd3JpdGUyKHNwbGl0X3llYXJfbG93ZXIodG1feWVhcigpKSk7CistICAgIGZvcm1h dF9sb2NhbGl6ZWQoJ3knLCAnRScpOworLSAgfQorLQorLSAgdm9pZCBvbl9jZW50dXJ5KG51bWVy aWNfc3lzdGVtIG5zKSB7CistICAgIGlmIChpc19jbGFzc2ljXyB8fCBucyA9PSBudW1lcmljX3N5 c3RlbTo6c3RhbmRhcmQpIHsKKy0gICAgICBhdXRvIHllYXIgPSB0bV95ZWFyKCk7CistICAgICAg YXV0byB1cHBlciA9IHllYXIgLyAxMDA7CistICAgICAgaWYgKHllYXIgPj0gLTk5ICYmIHllYXIg PCAwKSB7CistICAgICAgICAvLyBaZXJvIHVwcGVyIG9uIG5lZ2F0aXZlIHllYXIuCistICAgICAg ICAqb3V0XysrID0gJy0nOworLSAgICAgICAgKm91dF8rKyA9ICcwJzsKKy0gICAgICB9IGVsc2Ug aWYgKHVwcGVyID49IDAgJiYgdXBwZXIgPCAxMDApIHsKKy0gICAgICAgIHdyaXRlMihzdGF0aWNf Y2FzdDxpbnQ+KHVwcGVyKSk7CistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIG91dF8gPSB3cml0 ZTxDaGFyPihvdXRfLCB1cHBlcik7CistICAgICAgfQorLSAgICB9IGVsc2UgeworLSAgICAgIGZv cm1hdF9sb2NhbGl6ZWQoJ0MnLCAnRScpOworLSAgICB9CistICB9CistCistICB2b2lkIG9uX2Rl Y19tb250aChudW1lcmljX3N5c3RlbSBucykgeworLSAgICBpZiAoaXNfY2xhc3NpY18gfHwgbnMg PT0gbnVtZXJpY19zeXN0ZW06OnN0YW5kYXJkKQorLSAgICAgIHJldHVybiB3cml0ZTIodG1fbW9u KCkgKyAxKTsKKy0gICAgZm9ybWF0X2xvY2FsaXplZCgnbScsICdPJyk7CistICB9CistCistICB2 b2lkIG9uX2RlYzBfd2Vla19vZl95ZWFyKG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAgIGlmIChp c19jbGFzc2ljXyB8fCBucyA9PSBudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpCistICAgICAgcmV0 dXJuIHdyaXRlMigodG1feWRheSgpICsgZGF5c19wZXJfd2VlayAtIHRtX3dkYXkoKSkgLyBkYXlz X3Blcl93ZWVrKTsKKy0gICAgZm9ybWF0X2xvY2FsaXplZCgnVScsICdPJyk7CistICB9CistICB2 b2lkIG9uX2RlYzFfd2Vla19vZl95ZWFyKG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAgIGlmIChp c19jbGFzc2ljXyB8fCBucyA9PSBudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpIHsKKy0gICAgICBh dXRvIHdkYXkgPSB0bV93ZGF5KCk7CistICAgICAgd3JpdGUyKCh0bV95ZGF5KCkgKyBkYXlzX3Bl cl93ZWVrIC0KKy0gICAgICAgICAgICAgICh3ZGF5ID09IDAgPyAoZGF5c19wZXJfd2VlayAtIDEp IDogKHdkYXkgLSAxKSkpIC8KKy0gICAgICAgICAgICAgZGF5c19wZXJfd2Vlayk7CistICAgIH0g ZWxzZSB7CistICAgICAgZm9ybWF0X2xvY2FsaXplZCgnVycsICdPJyk7CistICAgIH0KKy0gIH0K Ky0gIHZvaWQgb25faXNvX3dlZWtfb2ZfeWVhcihudW1lcmljX3N5c3RlbSBucykgeworLSAgICBp ZiAoaXNfY2xhc3NpY18gfHwgbnMgPT0gbnVtZXJpY19zeXN0ZW06OnN0YW5kYXJkKQorLSAgICAg IHJldHVybiB3cml0ZTIodG1faXNvX3dlZWtfb2ZfeWVhcigpKTsKKy0gICAgZm9ybWF0X2xvY2Fs aXplZCgnVicsICdPJyk7CistICB9CistCistICB2b2lkIG9uX2lzb193ZWVrX2Jhc2VkX3llYXIo KSB7IHdyaXRlX3llYXIodG1faXNvX3dlZWtfeWVhcigpKTsgfQorLSAgdm9pZCBvbl9pc29fd2Vl a19iYXNlZF9zaG9ydF95ZWFyKCkgeworLSAgICB3cml0ZTIoc3BsaXRfeWVhcl9sb3dlcih0bV9p c29fd2Vla195ZWFyKCkpKTsKKy0gIH0KKy0KKy0gIHZvaWQgb25fZGF5X29mX3llYXIoKSB7Cist ICAgIGF1dG8geWRheSA9IHRtX3lkYXkoKSArIDE7CistICAgIHdyaXRlMSh5ZGF5IC8gMTAwKTsK Ky0gICAgd3JpdGUyKHlkYXkgJSAxMDApOworLSAgfQorLSAgdm9pZCBvbl9kYXlfb2ZfbW9udGgo bnVtZXJpY19zeXN0ZW0gbnMpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfIHx8IG5zID09IG51bWVy aWNfc3lzdGVtOjpzdGFuZGFyZCkgcmV0dXJuIHdyaXRlMih0bV9tZGF5KCkpOworLSAgICBmb3Jt YXRfbG9jYWxpemVkKCdkJywgJ08nKTsKKy0gIH0KKy0gIHZvaWQgb25fZGF5X29mX21vbnRoX3Nw YWNlKG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAgIGlmIChpc19jbGFzc2ljXyB8fCBucyA9PSBu dW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpIHsKKy0gICAgICBhdXRvIG1kYXkgPSB0b191bnNpZ25l ZCh0bV9tZGF5KCkpICUgMTAwOworLSAgICAgIGNvbnN0IGNoYXIqIGQyID0gZGlnaXRzMihtZGF5 KTsKKy0gICAgICAqb3V0XysrID0gbWRheSA8IDEwID8gJyAnIDogZDJbMF07CistICAgICAgKm91 dF8rKyA9IGQyWzFdOworLSAgICB9IGVsc2UgeworLSAgICAgIGZvcm1hdF9sb2NhbGl6ZWQoJ2Un LCAnTycpOworLSAgICB9CistICB9CistCistICB2b2lkIG9uXzI0X2hvdXIobnVtZXJpY19zeXN0 ZW0gbnMpIHsKKy0gICAgaWYgKGlzX2NsYXNzaWNfIHx8IG5zID09IG51bWVyaWNfc3lzdGVtOjpz dGFuZGFyZCkgcmV0dXJuIHdyaXRlMih0bV9ob3VyKCkpOworLSAgICBmb3JtYXRfbG9jYWxpemVk KCdIJywgJ08nKTsKKy0gIH0KKy0gIHZvaWQgb25fMTJfaG91cihudW1lcmljX3N5c3RlbSBucykg eworLSAgICBpZiAoaXNfY2xhc3NpY18gfHwgbnMgPT0gbnVtZXJpY19zeXN0ZW06OnN0YW5kYXJk KQorLSAgICAgIHJldHVybiB3cml0ZTIodG1faG91cjEyKCkpOworLSAgICBmb3JtYXRfbG9jYWxp emVkKCdJJywgJ08nKTsKKy0gIH0KKy0gIHZvaWQgb25fbWludXRlKG51bWVyaWNfc3lzdGVtIG5z KSB7CistICAgIGlmIChpc19jbGFzc2ljXyB8fCBucyA9PSBudW1lcmljX3N5c3RlbTo6c3RhbmRh cmQpIHJldHVybiB3cml0ZTIodG1fbWluKCkpOworLSAgICBmb3JtYXRfbG9jYWxpemVkKCdNJywg J08nKTsKKy0gIH0KKy0gIHZvaWQgb25fc2Vjb25kKG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAg IGlmIChpc19jbGFzc2ljXyB8fCBucyA9PSBudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpIHJldHVy biB3cml0ZTIodG1fc2VjKCkpOworLSAgICBmb3JtYXRfbG9jYWxpemVkKCdTJywgJ08nKTsKKy0g IH0KKy0KKy0gIHZvaWQgb25fMTJfaG91cl90aW1lKCkgeworLSAgICBpZiAoaXNfY2xhc3NpY18p IHsKKy0gICAgICBjaGFyIGJ1Zls4XTsKKy0gICAgICB3cml0ZV9kaWdpdDJfc2VwYXJhdGVkKGJ1 ZiwgdG9fdW5zaWduZWQodG1faG91cjEyKCkpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdG9fdW5zaWduZWQodG1fbWluKCkpLCB0b191bnNpZ25lZCh0bV9zZWMoKSksICc6Jyk7Cist ICAgICAgb3V0XyA9IGNvcHlfc3RyPENoYXI+KHN0ZDo6YmVnaW4oYnVmKSwgc3RkOjplbmQoYnVm KSwgb3V0Xyk7CistICAgICAgKm91dF8rKyA9ICcgJzsKKy0gICAgICBvbl9hbV9wbSgpOworLSAg ICB9IGVsc2UgeworLSAgICAgIGZvcm1hdF9sb2NhbGl6ZWQoJ3InKTsKKy0gICAgfQorLSAgfQor LSAgdm9pZCBvbl8yNF9ob3VyX3RpbWUoKSB7CistICAgIHdyaXRlMih0bV9ob3VyKCkpOworLSAg ICAqb3V0XysrID0gJzonOworLSAgICB3cml0ZTIodG1fbWluKCkpOworLSAgfQorLSAgdm9pZCBv bl9pc29fdGltZSgpIHsKKy0gICAgY2hhciBidWZbOF07CistICAgIHdyaXRlX2RpZ2l0Ml9zZXBh cmF0ZWQoYnVmLCB0b191bnNpZ25lZCh0bV9ob3VyKCkpLCB0b191bnNpZ25lZCh0bV9taW4oKSks CistICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fdW5zaWduZWQodG1fc2VjKCkpLCAnOicp OworLSAgICBvdXRfID0gY29weV9zdHI8Q2hhcj4oc3RkOjpiZWdpbihidWYpLCBzdGQ6OmVuZChi dWYpLCBvdXRfKTsKKy0gIH0KKy0KKy0gIHZvaWQgb25fYW1fcG0oKSB7CistICAgIGlmIChpc19j bGFzc2ljXykgeworLSAgICAgICpvdXRfKysgPSB0bV9ob3VyKCkgPCAxMiA/ICdBJyA6ICdQJzsK Ky0gICAgICAqb3V0XysrID0gJ00nOworLSAgICB9IGVsc2UgeworLSAgICAgIGZvcm1hdF9sb2Nh bGl6ZWQoJ3AnKTsKKy0gICAgfQorLSAgfQorLQorLSAgLy8gVGhlc2UgYXBwbHkgdG8gY2hyb25v IGR1cmF0aW9ucyBidXQgbm90IHRtLgorLSAgdm9pZCBvbl9kdXJhdGlvbl92YWx1ZSgpIHt9Cist ICB2b2lkIG9uX2R1cmF0aW9uX3VuaXQoKSB7fQorLX07CistCistc3RydWN0IGNocm9ub19mb3Jt YXRfY2hlY2tlciA6IG51bGxfY2hyb25vX3NwZWNfaGFuZGxlcjxjaHJvbm9fZm9ybWF0X2NoZWNr ZXI+IHsKKy0gIEZNVF9OT1JFVFVSTiB2b2lkIHVuc3VwcG9ydGVkKCkgeyBGTVRfVEhST1coZm9y bWF0X2Vycm9yKCJubyBkYXRlIikpOyB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4K Ky0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl90ZXh0KGNvbnN0IENoYXIqLCBjb25zdCBDaGFyKikg e30KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl8yNF9ob3VyKG51bWVyaWNfc3lzdGVtKSB7fQor LSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uXzEyX2hvdXIobnVtZXJpY19zeXN0ZW0pIHt9CistICBG TVRfQ09OU1RFWFBSIHZvaWQgb25fbWludXRlKG51bWVyaWNfc3lzdGVtKSB7fQorLSAgRk1UX0NP TlNURVhQUiB2b2lkIG9uX3NlY29uZChudW1lcmljX3N5c3RlbSkge30KKy0gIEZNVF9DT05TVEVY UFIgdm9pZCBvbl8xMl9ob3VyX3RpbWUoKSB7fQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uXzI0 X2hvdXJfdGltZSgpIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25faXNvX3RpbWUoKSB7fQor LSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2FtX3BtKCkge30KKy0gIEZNVF9DT05TVEVYUFIgdm9p ZCBvbl9kdXJhdGlvbl92YWx1ZSgpIHt9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZHVyYXRp b25fdW5pdCgpIHt9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9J RihzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSk+CistaW5saW5lIGJvb2wgaXNuYW4oVCkgewor LSAgcmV0dXJuIGZhbHNlOworLX0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9J RihzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Ojp2YWx1ZSk+CistaW5saW5lIGJvb2wgaXNuYW4o VCB2YWx1ZSkgeworLSAgcmV0dXJuIHN0ZDo6aXNuYW4odmFsdWUpOworLX0KKy0KKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9JRihzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSk+ CistaW5saW5lIGJvb2wgaXNmaW5pdGUoVCkgeworLSAgcmV0dXJuIHRydWU7CistfQorLQorLS8v IENvbnZlcnRzIHZhbHVlIHRvIEludCBhbmQgY2hlY2tzIHRoYXQgaXQncyBpbiB0aGUgcmFuZ2Ug WzAsIHVwcGVyKS4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSW50LCBGTVRfRU5B QkxFX0lGKHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlKT4KKy1pbmxpbmUgSW50IHRvX25vbm5l Z2F0aXZlX2ludChUIHZhbHVlLCBJbnQgdXBwZXIpIHsKKy0gIEZNVF9BU1NFUlQodmFsdWUgPj0g MCAmJiB0b191bnNpZ25lZCh2YWx1ZSkgPD0gdG9fdW5zaWduZWQodXBwZXIpLAorLSAgICAgICAg ICAgICAiaW52YWxpZCB2YWx1ZSIpOworLSAgKHZvaWQpdXBwZXI7CistICByZXR1cm4gc3RhdGlj X2Nhc3Q8SW50Pih2YWx1ZSk7CistfQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJ bnQsIEZNVF9FTkFCTEVfSUYoIXN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlKT4KKy1pbmxpbmUg SW50IHRvX25vbm5lZ2F0aXZlX2ludChUIHZhbHVlLCBJbnQgdXBwZXIpIHsKKy0gIGlmICh2YWx1 ZSA8IDAgfHwgdmFsdWUgPiBzdGF0aWNfY2FzdDxUPih1cHBlcikpCistICAgIEZNVF9USFJPVyhm b3JtYXRfZXJyb3IoImludmFsaWQgdmFsdWUiKSk7CistICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50 Pih2YWx1ZSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKHN0 ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlKT4KKy1pbmxpbmUgVCBtb2QoVCB4LCBpbnQgeSkgewor LSAgcmV0dXJuIHggJSBzdGF0aWNfY2FzdDxUPih5KTsKKy19CistdGVtcGxhdGUgPHR5cGVuYW1l IFQsIEZNVF9FTkFCTEVfSUYoc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUpPgorLWlu bGluZSBUIG1vZChUIHgsIGludCB5KSB7CistICByZXR1cm4gc3RkOjpmbW9kKHgsIHN0YXRpY19j YXN0PFQ+KHkpKTsKKy19CistCistLy8gSWYgVCBpcyBhbiBpbnRlZ3JhbCB0eXBlLCBtYXBzIFQg dG8gaXRzIHVuc2lnbmVkIGNvdW50ZXJwYXJ0LCBvdGhlcndpc2UKKy0vLyBsZWF2ZXMgaXQgdW5j aGFuZ2VkICh1bmxpa2Ugc3RkOjptYWtlX3Vuc2lnbmVkKS4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUg VCwgYm9vbCBJTlRFR1JBTCA9IHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlPgorLXN0cnVjdCBt YWtlX3Vuc2lnbmVkX29yX3VuY2hhbmdlZCB7CistICB1c2luZyB0eXBlID0gVDsKKy19OworLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgbWFrZV91bnNpZ25lZF9vcl91bmNoYW5nZWQ8 VCwgdHJ1ZT4geworLSAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxU Pjo6dHlwZTsKKy19OworLQorLSNpZiBGTVRfU0FGRV9EVVJBVElPTl9DQVNUCistLy8gdGhyb3dp bmcgdmVyc2lvbiBvZiBzYWZlX2R1cmF0aW9uX2Nhc3QKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVG8s IHR5cGVuYW1lIEZyb21SZXAsIHR5cGVuYW1lIEZyb21QZXJpb2Q+CistVG8gZm10X3NhZmVfZHVy YXRpb25fY2FzdChzdGQ6OmNocm9ubzo6ZHVyYXRpb248RnJvbVJlcCwgRnJvbVBlcmlvZD4gZnJv bSkgeworLSAgaW50IGVjOworLSAgVG8gdG8gPSBzYWZlX2R1cmF0aW9uX2Nhc3Q6OnNhZmVfZHVy YXRpb25fY2FzdDxUbz4oZnJvbSwgZWMpOworLSAgaWYgKGVjKSBGTVRfVEhST1coZm9ybWF0X2Vy cm9yKCJjYW5ub3QgZm9ybWF0IGR1cmF0aW9uIikpOworLSAgcmV0dXJuIHRvOworLX0KKy0jZW5k aWYKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgUmVwLCB0eXBlbmFtZSBQZXJpb2QsCistICAgICAg ICAgIEZNVF9FTkFCTEVfSUYoc3RkOjppc19pbnRlZ3JhbDxSZXA+Ojp2YWx1ZSk+CistaW5saW5l IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIHN0ZDo6bWlsbGk+IGdldF9taWxsaXNlY29uZHMo CistICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4gZCkgeworLSAgLy8gdGhp cyBtYXkgb3ZlcmZsb3cgYW5kL29yIHRoZSByZXN1bHQgbWF5IG5vdCBmaXQgaW4gdGhlCistICAv LyB0YXJnZXQgdHlwZS4KKy0jaWYgRk1UX1NBRkVfRFVSQVRJT05fQ0FTVAorLSAgdXNpbmcgQ29t bW9uU2Vjb25kc1R5cGUgPQorLSAgICAgIHR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8ZGVjbHR5 cGUoZCksIHN0ZDo6Y2hyb25vOjpzZWNvbmRzPjo6dHlwZTsKKy0gIGNvbnN0IGF1dG8gZF9hc19j b21tb24gPSBmbXRfc2FmZV9kdXJhdGlvbl9jYXN0PENvbW1vblNlY29uZHNUeXBlPihkKTsKKy0g IGNvbnN0IGF1dG8gZF9hc193aG9sZV9zZWNvbmRzID0KKy0gICAgICBmbXRfc2FmZV9kdXJhdGlv bl9jYXN0PHN0ZDo6Y2hyb25vOjpzZWNvbmRzPihkX2FzX2NvbW1vbik7CistICAvLyB0aGlzIGNv bnZlcnNpb24gc2hvdWxkIGJlIG5vbnByb2JsZW1hdGljCistICBjb25zdCBhdXRvIGRpZmYgPSBk X2FzX2NvbW1vbiAtIGRfYXNfd2hvbGVfc2Vjb25kczsKKy0gIGNvbnN0IGF1dG8gbXMgPQorLSAg ICAgIGZtdF9zYWZlX2R1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgc3Rk OjptaWxsaT4+KGRpZmYpOworLSAgcmV0dXJuIG1zOworLSNlbHNlCistICBhdXRvIHMgPSBzdGQ6 OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6c2Vjb25kcz4oZCk7CistICByZXR1 cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4o ZCAtIHMpOworLSNlbmRpZgorLX0KKy0KKy0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJhY3Rp b25hbCBkaWdpdHMgaW4gdGhlIHJhbmdlIFswLCAxOF0gYWNjb3JkaW5nIHRvIHRoZQorLS8vIEMr KzIwIHNwZWMuIElmIG1vcmUgdGhhbiAxOCBmcmFjdGlvbmFsIGRpZ2l0cyBhcmUgcmVxdWlyZWQg dGhlbiByZXR1cm5zIDYgZm9yCistLy8gbWljcm9zZWNvbmRzIHByZWNpc2lvbi4KKy1jb25zdGV4 cHIgaW50IGNvdW50X2ZyYWN0aW9uYWxfZGlnaXRzKGxvbmcgbG9uZyBudW0sIGxvbmcgbG9uZyBk ZW4sIGludCBuID0gMCkgeworLSAgcmV0dXJuIG51bSAlIGRlbiA9PSAwCistICAgICAgICAgICAg ID8gbgorLSAgICAgICAgICAgICA6IChuID4gMTggPyA2IDogY291bnRfZnJhY3Rpb25hbF9kaWdp dHMobnVtICogMTAsIGRlbiwgbiArIDEpKTsKKy19CistCistY29uc3RleHByIGxvbmcgbG9uZyBw b3cxMChzdGQ6OnVpbnQzMl90IG4pIHsKKy0gIHJldHVybiBuID09IDAgPyAxIDogMTAgKiBwb3cx MChuIC0gMSk7CistfQorLQorLXRlbXBsYXRlIDxjbGFzcyBSZXAsIGNsYXNzIFBlcmlvZCwKKy0g ICAgICAgICAgRk1UX0VOQUJMRV9JRihzdGQ6Om51bWVyaWNfbGltaXRzPFJlcD46OmlzX3NpZ25l ZCk+CistY29uc3RleHByIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4gYWJzKAor LSAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+IGQpIHsKKy0gIC8vIFdlIG5l ZWQgdG8gY29tcGFyZSB0aGUgZHVyYXRpb24gdXNpbmcgdGhlIGNvdW50KCkgbWV0aG9kIGRpcmVj dGx5CistICAvLyBkdWUgdG8gYSBjb21waWxlciBidWcgaW4gY2xhbmctMTEgcmVnYXJkaW5nIHRo ZSBzcGFjZXNoaXAgb3BlcmF0b3IsCistICAvLyB3aGVuIC1XemVyby1hcy1udWxsLXBvaW50ZXIt Y29uc3RhbnQgaXMgZW5hYmxlZC4KKy0gIC8vIEluIGNsYW5nLTEyIHRoZSBidWcgaGFzIGJlZW4g Zml4ZWQuIFNlZQorLSAgLy8gaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD00 NjIzNSBhbmQgdGhlIHJlcHJvZHVjaWJsZSBleGFtcGxlOgorLSAgLy8gaHR0cHM6Ly93d3cuZ29k Ym9sdC5vcmcvei9LbmJiNWpvWXguCistICByZXR1cm4gZC5jb3VudCgpID49IGQuemVybygpLmNv dW50KCkgPyBkIDogLWQ7CistfQorLQorLXRlbXBsYXRlIDxjbGFzcyBSZXAsIGNsYXNzIFBlcmlv ZCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRighc3RkOjpudW1lcmljX2xpbWl0czxSZXA+Ojpp c19zaWduZWQpPgorLWNvbnN0ZXhwciBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+ IGFicygKKy0gICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiBkKSB7CistICBy ZXR1cm4gZDsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFJlcCwg dHlwZW5hbWUgT3V0cHV0SXQsCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoc3RkOjppc19pbnRl Z3JhbDxSZXA+Ojp2YWx1ZSk+CistT3V0cHV0SXQgZm9ybWF0X2R1cmF0aW9uX3ZhbHVlKE91dHB1 dEl0IG91dCwgUmVwIHZhbCwgaW50KSB7CistICByZXR1cm4gd3JpdGU8Q2hhcj4ob3V0LCB2YWwp OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgUmVwLCB0eXBlbmFt ZSBPdXRwdXRJdCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRihzdGQ6OmlzX2Zsb2F0aW5nX3Bv aW50PFJlcD46OnZhbHVlKT4KKy1PdXRwdXRJdCBmb3JtYXRfZHVyYXRpb25fdmFsdWUoT3V0cHV0 SXQgb3V0LCBSZXAgdmFsLCBpbnQgcHJlY2lzaW9uKSB7CistICBhdXRvIHNwZWNzID0gYmFzaWNf Zm9ybWF0X3NwZWNzPENoYXI+KCk7CistICBzcGVjcy5wcmVjaXNpb24gPSBwcmVjaXNpb247Cist ICBzcGVjcy50eXBlID0gcHJlY2lzaW9uID49IDAgPyBwcmVzZW50YXRpb25fdHlwZTo6Zml4ZWRf bG93ZXIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByZXNlbnRhdGlvbl90eXBl OjpnZW5lcmFsX2xvd2VyOworLSAgcmV0dXJuIHdyaXRlPENoYXI+KG91dCwgdmFsLCBzcGVjcyk7 CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdD4KKy1P dXRwdXRJdCBjb3B5X3VuaXQoc3RyaW5nX3ZpZXcgdW5pdCwgT3V0cHV0SXQgb3V0LCBDaGFyKSB7 CistICByZXR1cm4gc3RkOjpjb3B5KHVuaXQuYmVnaW4oKSwgdW5pdC5lbmQoKSwgb3V0KTsKKy19 CistCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0PgorLU91dHB1dEl0IGNvcHlfdW5pdChz dHJpbmdfdmlldyB1bml0LCBPdXRwdXRJdCBvdXQsIHdjaGFyX3QpIHsKKy0gIC8vIFRoaXMgd29y a3Mgd2hlbiB3Y2hhcl90IGlzIFVURi0zMiBiZWNhdXNlIHVuaXRzIG9ubHkgY29udGFpbiBjaGFy YWN0ZXJzCistICAvLyB0aGF0IGhhdmUgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gaW4gVVRGLTE2 IGFuZCBVVEYtMzIuCistICB1dGY4X3RvX3V0ZjE2IHUodW5pdCk7CistICByZXR1cm4gc3RkOjpj b3B5KHUuY19zdHIoKSwgdS5jX3N0cigpICsgdS5zaXplKCksIG91dCk7CistfQorLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBQZXJpb2QsIHR5cGVuYW1lIE91dHB1dEl0Pgor LU91dHB1dEl0IGZvcm1hdF9kdXJhdGlvbl91bml0KE91dHB1dEl0IG91dCkgeworLSAgaWYgKGNv bnN0IGNoYXIqIHVuaXQgPSBnZXRfdW5pdHM8UGVyaW9kPigpKQorLSAgICByZXR1cm4gY29weV91 bml0KHN0cmluZ192aWV3KHVuaXQpLCBvdXQsIENoYXIoKSk7CistICAqb3V0KysgPSAnWyc7Cist ICBvdXQgPSB3cml0ZTxDaGFyPihvdXQsIFBlcmlvZDo6bnVtKTsKKy0gIGlmIChjb25zdF9jaGVj ayhQZXJpb2Q6OmRlbiAhPSAxKSkgeworLSAgICAqb3V0KysgPSAnLyc7CistICAgIG91dCA9IHdy aXRlPENoYXI+KG91dCwgUGVyaW9kOjpkZW4pOworLSAgfQorLSAgKm91dCsrID0gJ10nOworLSAg Km91dCsrID0gJ3MnOworLSAgcmV0dXJuIG91dDsKKy19CistCistY2xhc3MgZ2V0X2xvY2FsZSB7 CistIHByaXZhdGU6CistICB1bmlvbiB7CistICAgIHN0ZDo6bG9jYWxlIGxvY2FsZV87CistICB9 OworLSAgYm9vbCBoYXNfbG9jYWxlXyA9IGZhbHNlOworLQorLSBwdWJsaWM6CistICBnZXRfbG9j YWxlKGJvb2wgbG9jYWxpemVkLCBsb2NhbGVfcmVmIGxvYykgOiBoYXNfbG9jYWxlXyhsb2NhbGl6 ZWQpIHsKKy0gICAgaWYgKGxvY2FsaXplZCkKKy0gICAgICA6Om5ldyAoJmxvY2FsZV8pIHN0ZDo6 bG9jYWxlKGxvYy50ZW1wbGF0ZSBnZXQ8c3RkOjpsb2NhbGU+KCkpOworLSAgfQorLSAgfmdldF9s b2NhbGUoKSB7CistICAgIGlmIChoYXNfbG9jYWxlXykgbG9jYWxlXy5+bG9jYWxlKCk7CistICB9 CistICBvcGVyYXRvciBjb25zdCBzdGQ6OmxvY2FsZSYoKSBjb25zdCB7CistICAgIHJldHVybiBo YXNfbG9jYWxlXyA/IGxvY2FsZV8gOiBnZXRfY2xhc3NpY19sb2NhbGUoKTsKKy0gIH0KKy19Owor LQorLXRlbXBsYXRlIDx0eXBlbmFtZSBGb3JtYXRDb250ZXh0LCB0eXBlbmFtZSBPdXRwdXRJdCwg dHlwZW5hbWUgUmVwLAorLSAgICAgICAgICB0eXBlbmFtZSBQZXJpb2Q+Cistc3RydWN0IGNocm9u b19mb3JtYXR0ZXIgeworLSAgRm9ybWF0Q29udGV4dCYgY29udGV4dDsKKy0gIE91dHB1dEl0IG91 dDsKKy0gIGludCBwcmVjaXNpb247CistICBib29sIGxvY2FsaXplZCA9IGZhbHNlOworLSAgLy8g cmVwIGlzIHVuc2lnbmVkIHRvIGF2b2lkIG92ZXJmbG93LgorLSAgdXNpbmcgcmVwID0KKy0gICAg ICBjb25kaXRpb25hbF90PHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc2l6ZW9mKFJl cCkgPCBzaXplb2YoaW50KSwKKy0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkLCB0eXBlbmFt ZSBtYWtlX3Vuc2lnbmVkX29yX3VuY2hhbmdlZDxSZXA+Ojp0eXBlPjsKKy0gIHJlcCB2YWw7Cist ICB1c2luZyBzZWNvbmRzID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPHJlcD47CistICBzZWNvbmRz IHM7CistICB1c2luZyBtaWxsaXNlY29uZHMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248cmVwLCBz dGQ6Om1pbGxpPjsKKy0gIGJvb2wgbmVnYXRpdmU7CistCistICB1c2luZyBjaGFyX3R5cGUgPSB0 eXBlbmFtZSBGb3JtYXRDb250ZXh0OjpjaGFyX3R5cGU7CistICB1c2luZyB0bV93cml0ZXJfdHlw ZSA9IHRtX3dyaXRlcjxPdXRwdXRJdCwgY2hhcl90eXBlPjsKKy0KKy0gIGNocm9ub19mb3JtYXR0 ZXIoRm9ybWF0Q29udGV4dCYgY3R4LCBPdXRwdXRJdCBvLAorLSAgICAgICAgICAgICAgICAgICBz dGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+IGQpCistICAgICAgOiBjb250ZXh0KGN0 eCksCistICAgICAgICBvdXQobyksCistICAgICAgICB2YWwoc3RhdGljX2Nhc3Q8cmVwPihkLmNv dW50KCkpKSwKKy0gICAgICAgIG5lZ2F0aXZlKGZhbHNlKSB7CistICAgIGlmIChkLmNvdW50KCkg PCAwKSB7CistICAgICAgdmFsID0gMCAtIHZhbDsKKy0gICAgICBuZWdhdGl2ZSA9IHRydWU7Cist ICAgIH0KKy0KKy0gICAgLy8gdGhpcyBtYXkgb3ZlcmZsb3cgYW5kL29yIHRoZSByZXN1bHQgbWF5 IG5vdCBmaXQgaW4gdGhlCistICAgIC8vIHRhcmdldCB0eXBlLgorLSNpZiBGTVRfU0FGRV9EVVJB VElPTl9DQVNUCistICAgIC8vIG1pZ2h0IG5lZWQgY2hlY2tlZCBjb252ZXJzaW9uIChyZXAhPVJl cCkKKy0gICAgYXV0byB0bXB2YWwgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248cmVwLCBQZXJpb2Q+ KHZhbCk7CistICAgIHMgPSBmbXRfc2FmZV9kdXJhdGlvbl9jYXN0PHNlY29uZHM+KHRtcHZhbCk7 CistI2Vsc2UKKy0gICAgcyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHNlY29uZHM+KAor LSAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uPHJlcCwgUGVyaW9kPih2YWwpKTsKKy0jZW5k aWYKKy0gIH0KKy0KKy0gIC8vIHJldHVybnMgdHJ1ZSBpZiBuYW4gb3IgaW5mLCB3cml0ZXMgdG8g b3V0LgorLSAgYm9vbCBoYW5kbGVfbmFuX2luZigpIHsKKy0gICAgaWYgKGlzZmluaXRlKHZhbCkp IHsKKy0gICAgICByZXR1cm4gZmFsc2U7CistICAgIH0KKy0gICAgaWYgKGlzbmFuKHZhbCkpIHsK Ky0gICAgICB3cml0ZV9uYW4oKTsKKy0gICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLSAgICAv LyBtdXN0IGJlICstaW5mCistICAgIGlmICh2YWwgPiAwKSB7CistICAgICAgd3JpdGVfcGluZigp OworLSAgICB9IGVsc2UgeworLSAgICAgIHdyaXRlX25pbmYoKTsKKy0gICAgfQorLSAgICByZXR1 cm4gdHJ1ZTsKKy0gIH0KKy0KKy0gIFJlcCBob3VyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh c3Q8UmVwPihtb2QoKHMuY291bnQoKSAvIDM2MDApLCAyNCkpOyB9CistCistICBSZXAgaG91cjEy KCkgY29uc3QgeworLSAgICBSZXAgaG91ciA9IHN0YXRpY19jYXN0PFJlcD4obW9kKChzLmNvdW50 KCkgLyAzNjAwKSwgMTIpKTsKKy0gICAgcmV0dXJuIGhvdXIgPD0gMCA/IDEyIDogaG91cjsKKy0g IH0KKy0KKy0gIFJlcCBtaW51dGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZXA+KG1v ZCgocy5jb3VudCgpIC8gNjApLCA2MCkpOyB9CistICBSZXAgc2Vjb25kKCkgY29uc3QgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8UmVwPihtb2Qocy5jb3VudCgpLCA2MCkpOyB9CistCistICBzdGQ6OnRt IHRpbWUoKSBjb25zdCB7CistICAgIGF1dG8gdGltZSA9IHN0ZDo6dG0oKTsKKy0gICAgdGltZS50 bV9ob3VyID0gdG9fbm9ubmVnYXRpdmVfaW50KGhvdXIoKSwgMjQpOworLSAgICB0aW1lLnRtX21p biA9IHRvX25vbm5lZ2F0aXZlX2ludChtaW51dGUoKSwgNjApOworLSAgICB0aW1lLnRtX3NlYyA9 IHRvX25vbm5lZ2F0aXZlX2ludChzZWNvbmQoKSwgNjApOworLSAgICByZXR1cm4gdGltZTsKKy0g IH0KKy0KKy0gIHZvaWQgd3JpdGVfc2lnbigpIHsKKy0gICAgaWYgKG5lZ2F0aXZlKSB7CistICAg ICAgKm91dCsrID0gJy0nOworLSAgICAgIG5lZ2F0aXZlID0gZmFsc2U7CistICAgIH0KKy0gIH0K Ky0KKy0gIHZvaWQgd3JpdGUoUmVwIHZhbHVlLCBpbnQgd2lkdGgpIHsKKy0gICAgd3JpdGVfc2ln bigpOworLSAgICBpZiAoaXNuYW4odmFsdWUpKSByZXR1cm4gd3JpdGVfbmFuKCk7CistICAgIHVp bnQzMl9vcl82NF9vcl8xMjhfdDxpbnQ+IG4gPQorLSAgICAgICAgdG9fdW5zaWduZWQodG9fbm9u bmVnYXRpdmVfaW50KHZhbHVlLCBtYXhfdmFsdWU8aW50PigpKSk7CistICAgIGludCBudW1fZGln aXRzID0gZGV0YWlsOjpjb3VudF9kaWdpdHMobik7CistICAgIGlmICh3aWR0aCA+IG51bV9kaWdp dHMpIG91dCA9IHN0ZDo6ZmlsbF9uKG91dCwgd2lkdGggLSBudW1fZGlnaXRzLCAnMCcpOworLSAg ICBvdXQgPSBmb3JtYXRfZGVjaW1hbDxjaGFyX3R5cGU+KG91dCwgbiwgbnVtX2RpZ2l0cykuZW5k OworLSAgfQorLQorLSAgdGVtcGxhdGUgPGNsYXNzIER1cmF0aW9uPiB2b2lkIHdyaXRlX2ZyYWN0 aW9uYWxfc2Vjb25kcyhEdXJhdGlvbiBkKSB7CistICAgIGNvbnN0ZXhwciBhdXRvIG51bV9mcmFj dGlvbmFsX2RpZ2l0cyA9CistICAgICAgICBjb3VudF9mcmFjdGlvbmFsX2RpZ2l0cyhEdXJhdGlv bjo6cGVyaW9kOjpudW0sIER1cmF0aW9uOjpwZXJpb2Q6OmRlbik7CistCistICAgIHVzaW5nIHN1 YnNlY29uZF9wcmVjaXNpb24gPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248CistICAgICAgICB0eXBl bmFtZSBzdGQ6OmNvbW1vbl90eXBlPHR5cGVuYW1lIER1cmF0aW9uOjpyZXAsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzZWNvbmRzOjpyZXA+Ojp0eXBl LAorLSAgICAgICAgc3RkOjpyYXRpbzwxLCBkZXRhaWw6OnBvdzEwKG51bV9mcmFjdGlvbmFsX2Rp Z2l0cyk+PjsKKy0gICAgaWYgKHN0ZDo6cmF0aW9fbGVzczx0eXBlbmFtZSBzdWJzZWNvbmRfcHJl Y2lzaW9uOjpwZXJpb2QsCistICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjaHJvbm86OnNl Y29uZHM6OnBlcmlvZD46OnZhbHVlKSB7CistICAgICAgKm91dCsrID0gJy4nOworLSAgICAgIC8v IERvbid0IGNvbnZlcnQgbG9uZyBkb3VibGUgdG8gaW50ZWdlciBzZWNvbmRzIHRvIGF2b2lkIG92 ZXJmbG93LgorLSAgICAgIHVzaW5nIHNlYyA9IGNvbmRpdGlvbmFsX3Q8CistICAgICAgICAgIHN0 ZDo6aXNfc2FtZTx0eXBlbmFtZSBEdXJhdGlvbjo6cmVwLCBsb25nIGRvdWJsZT46OnZhbHVlLAor LSAgICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb248bG9uZyBkb3VibGU+LCBzdGQ6OmNocm9u bzo6c2Vjb25kcz47CistICAgICAgYXV0byBmcmFjdGlvbmFsID0gZGV0YWlsOjphYnMoZCkgLSBz dGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzZWM+KGQpOworLSAgICAgIGNvbnN0IGF1dG8gc3Vi c2Vjb25kcyA9CistICAgICAgICAgIHN0ZDo6Y2hyb25vOjp0cmVhdF9hc19mbG9hdGluZ19wb2lu dDwKKy0gICAgICAgICAgICAgIHR5cGVuYW1lIHN1YnNlY29uZF9wcmVjaXNpb246OnJlcD46OnZh bHVlCistICAgICAgICAgICAgICA/IGZyYWN0aW9uYWwuY291bnQoKQorLSAgICAgICAgICAgICAg OiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdWJzZWNvbmRfcHJlY2lzaW9uPihmcmFjdGlv bmFsKQorLSAgICAgICAgICAgICAgICAgICAgLmNvdW50KCk7CistICAgICAgdWludDMyX29yXzY0 X29yXzEyOF90PGxvbmcgbG9uZz4gbiA9CistICAgICAgICAgIHRvX3Vuc2lnbmVkKHRvX25vbm5l Z2F0aXZlX2ludChzdWJzZWNvbmRzLCBtYXhfdmFsdWU8bG9uZyBsb25nPigpKSk7CistICAgICAg aW50IG51bV9kaWdpdHMgPSBkZXRhaWw6OmNvdW50X2RpZ2l0cyhuKTsKKy0gICAgICBpZiAobnVt X2ZyYWN0aW9uYWxfZGlnaXRzID4gbnVtX2RpZ2l0cykKKy0gICAgICAgIG91dCA9IHN0ZDo6Zmls bF9uKG91dCwgbnVtX2ZyYWN0aW9uYWxfZGlnaXRzIC0gbnVtX2RpZ2l0cywgJzAnKTsKKy0gICAg ICBvdXQgPSBmb3JtYXRfZGVjaW1hbDxjaGFyX3R5cGU+KG91dCwgbiwgbnVtX2RpZ2l0cykuZW5k OworLSAgICB9CistICB9CistCistICB2b2lkIHdyaXRlX25hbigpIHsgc3RkOjpjb3B5X24oIm5h biIsIDMsIG91dCk7IH0KKy0gIHZvaWQgd3JpdGVfcGluZigpIHsgc3RkOjpjb3B5X24oImluZiIs IDMsIG91dCk7IH0KKy0gIHZvaWQgd3JpdGVfbmluZigpIHsgc3RkOjpjb3B5X24oIi1pbmYiLCA0 LCBvdXQpOyB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbGJhY2ssIHR5cGVuYW1lLi4u IEFyZ3M+CistICB2b2lkIGZvcm1hdF90bShjb25zdCB0bSYgdGltZSwgQ2FsbGJhY2sgY2IsIEFy Z3MuLi4gYXJncykgeworLSAgICBpZiAoaXNuYW4odmFsKSkgcmV0dXJuIHdyaXRlX25hbigpOwor LSAgICBnZXRfbG9jYWxlIGxvYyhsb2NhbGl6ZWQsIGNvbnRleHQubG9jYWxlKCkpOworLSAgICBh dXRvIHcgPSB0bV93cml0ZXJfdHlwZShsb2MsIG91dCwgdGltZSk7CistICAgICh3LipjYikoYXJn cy4uLik7CistICAgIG91dCA9IHcub3V0KCk7CistICB9CistCistICB2b2lkIG9uX3RleHQoY29u c3QgY2hhcl90eXBlKiBiZWdpbiwgY29uc3QgY2hhcl90eXBlKiBlbmQpIHsKKy0gICAgc3RkOjpj b3B5KGJlZ2luLCBlbmQsIG91dCk7CistICB9CistCistICAvLyBUaGVzZSBhcmUgbm90IGltcGxl bWVudGVkIGJlY2F1c2UgZHVyYXRpb25zIGRvbid0IGhhdmUgZGF0ZSBpbmZvcm1hdGlvbi4KKy0g IHZvaWQgb25fYWJicl93ZWVrZGF5KCkge30KKy0gIHZvaWQgb25fZnVsbF93ZWVrZGF5KCkge30K Ky0gIHZvaWQgb25fZGVjMF93ZWVrZGF5KG51bWVyaWNfc3lzdGVtKSB7fQorLSAgdm9pZCBvbl9k ZWMxX3dlZWtkYXkobnVtZXJpY19zeXN0ZW0pIHt9CistICB2b2lkIG9uX2FiYnJfbW9udGgoKSB7 fQorLSAgdm9pZCBvbl9mdWxsX21vbnRoKCkge30KKy0gIHZvaWQgb25fZGF0ZXRpbWUobnVtZXJp Y19zeXN0ZW0pIHt9CistICB2b2lkIG9uX2xvY19kYXRlKG51bWVyaWNfc3lzdGVtKSB7fQorLSAg dm9pZCBvbl9sb2NfdGltZShudW1lcmljX3N5c3RlbSkge30KKy0gIHZvaWQgb25fdXNfZGF0ZSgp IHt9CistICB2b2lkIG9uX2lzb19kYXRlKCkge30KKy0gIHZvaWQgb25fdXRjX29mZnNldCgpIHt9 CistICB2b2lkIG9uX3R6X25hbWUoKSB7fQorLSAgdm9pZCBvbl95ZWFyKG51bWVyaWNfc3lzdGVt KSB7fQorLSAgdm9pZCBvbl9zaG9ydF95ZWFyKG51bWVyaWNfc3lzdGVtKSB7fQorLSAgdm9pZCBv bl9vZmZzZXRfeWVhcigpIHt9CistICB2b2lkIG9uX2NlbnR1cnkobnVtZXJpY19zeXN0ZW0pIHt9 CistICB2b2lkIG9uX2lzb193ZWVrX2Jhc2VkX3llYXIoKSB7fQorLSAgdm9pZCBvbl9pc29fd2Vl a19iYXNlZF9zaG9ydF95ZWFyKCkge30KKy0gIHZvaWQgb25fZGVjX21vbnRoKG51bWVyaWNfc3lz dGVtKSB7fQorLSAgdm9pZCBvbl9kZWMwX3dlZWtfb2ZfeWVhcihudW1lcmljX3N5c3RlbSkge30K Ky0gIHZvaWQgb25fZGVjMV93ZWVrX29mX3llYXIobnVtZXJpY19zeXN0ZW0pIHt9CistICB2b2lk IG9uX2lzb193ZWVrX29mX3llYXIobnVtZXJpY19zeXN0ZW0pIHt9CistICB2b2lkIG9uX2RheV9v Zl95ZWFyKCkge30KKy0gIHZvaWQgb25fZGF5X29mX21vbnRoKG51bWVyaWNfc3lzdGVtKSB7fQor LSAgdm9pZCBvbl9kYXlfb2ZfbW9udGhfc3BhY2UobnVtZXJpY19zeXN0ZW0pIHt9CistCistICB2 b2lkIG9uXzI0X2hvdXIobnVtZXJpY19zeXN0ZW0gbnMpIHsKKy0gICAgaWYgKGhhbmRsZV9uYW5f aW5mKCkpIHJldHVybjsKKy0KKy0gICAgaWYgKG5zID09IG51bWVyaWNfc3lzdGVtOjpzdGFuZGFy ZCkgcmV0dXJuIHdyaXRlKGhvdXIoKSwgMik7CistICAgIGF1dG8gdGltZSA9IHRtKCk7CistICAg IHRpbWUudG1faG91ciA9IHRvX25vbm5lZ2F0aXZlX2ludChob3VyKCksIDI0KTsKKy0gICAgZm9y bWF0X3RtKHRpbWUsICZ0bV93cml0ZXJfdHlwZTo6b25fMjRfaG91ciwgbnMpOworLSAgfQorLQor LSAgdm9pZCBvbl8xMl9ob3VyKG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAgIGlmIChoYW5kbGVf bmFuX2luZigpKSByZXR1cm47CistCistICAgIGlmIChucyA9PSBudW1lcmljX3N5c3RlbTo6c3Rh bmRhcmQpIHJldHVybiB3cml0ZShob3VyMTIoKSwgMik7CistICAgIGF1dG8gdGltZSA9IHRtKCk7 CistICAgIHRpbWUudG1faG91ciA9IHRvX25vbm5lZ2F0aXZlX2ludChob3VyMTIoKSwgMTIpOwor LSAgICBmb3JtYXRfdG0odGltZSwgJnRtX3dyaXRlcl90eXBlOjpvbl8xMl9ob3VyLCBucyk7Cist ICB9CistCistICB2b2lkIG9uX21pbnV0ZShudW1lcmljX3N5c3RlbSBucykgeworLSAgICBpZiAo aGFuZGxlX25hbl9pbmYoKSkgcmV0dXJuOworLQorLSAgICBpZiAobnMgPT0gbnVtZXJpY19zeXN0 ZW06OnN0YW5kYXJkKSByZXR1cm4gd3JpdGUobWludXRlKCksIDIpOworLSAgICBhdXRvIHRpbWUg PSB0bSgpOworLSAgICB0aW1lLnRtX21pbiA9IHRvX25vbm5lZ2F0aXZlX2ludChtaW51dGUoKSwg NjApOworLSAgICBmb3JtYXRfdG0odGltZSwgJnRtX3dyaXRlcl90eXBlOjpvbl9taW51dGUsIG5z KTsKKy0gIH0KKy0KKy0gIHZvaWQgb25fc2Vjb25kKG51bWVyaWNfc3lzdGVtIG5zKSB7CistICAg IGlmIChoYW5kbGVfbmFuX2luZigpKSByZXR1cm47CistCistICAgIGlmIChucyA9PSBudW1lcmlj X3N5c3RlbTo6c3RhbmRhcmQpIHsKKy0gICAgICB3cml0ZShzZWNvbmQoKSwgMik7CistICAgICAg d3JpdGVfZnJhY3Rpb25hbF9zZWNvbmRzKHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxyZXAsIFBlcmlv ZD57dmFsfSk7CistICAgICAgcmV0dXJuOworLSAgICB9CistICAgIGF1dG8gdGltZSA9IHRtKCk7 CistICAgIHRpbWUudG1fc2VjID0gdG9fbm9ubmVnYXRpdmVfaW50KHNlY29uZCgpLCA2MCk7Cist ICAgIGZvcm1hdF90bSh0aW1lLCAmdG1fd3JpdGVyX3R5cGU6Om9uX3NlY29uZCwgbnMpOworLSAg fQorLQorLSAgdm9pZCBvbl8xMl9ob3VyX3RpbWUoKSB7CistICAgIGlmIChoYW5kbGVfbmFuX2lu ZigpKSByZXR1cm47CistICAgIGZvcm1hdF90bSh0aW1lKCksICZ0bV93cml0ZXJfdHlwZTo6b25f MTJfaG91cl90aW1lKTsKKy0gIH0KKy0KKy0gIHZvaWQgb25fMjRfaG91cl90aW1lKCkgeworLSAg ICBpZiAoaGFuZGxlX25hbl9pbmYoKSkgeworLSAgICAgICpvdXQrKyA9ICc6JzsKKy0gICAgICBo YW5kbGVfbmFuX2luZigpOworLSAgICAgIHJldHVybjsKKy0gICAgfQorLQorLSAgICB3cml0ZSho b3VyKCksIDIpOworLSAgICAqb3V0KysgPSAnOic7CistICAgIHdyaXRlKG1pbnV0ZSgpLCAyKTsK Ky0gIH0KKy0KKy0gIHZvaWQgb25faXNvX3RpbWUoKSB7CistICAgIG9uXzI0X2hvdXJfdGltZSgp OworLSAgICAqb3V0KysgPSAnOic7CistICAgIGlmIChoYW5kbGVfbmFuX2luZigpKSByZXR1cm47 CistICAgIG9uX3NlY29uZChudW1lcmljX3N5c3RlbTo6c3RhbmRhcmQpOworLSAgfQorLQorLSAg dm9pZCBvbl9hbV9wbSgpIHsKKy0gICAgaWYgKGhhbmRsZV9uYW5faW5mKCkpIHJldHVybjsKKy0g ICAgZm9ybWF0X3RtKHRpbWUoKSwgJnRtX3dyaXRlcl90eXBlOjpvbl9hbV9wbSk7CistICB9Cist CistICB2b2lkIG9uX2R1cmF0aW9uX3ZhbHVlKCkgeworLSAgICBpZiAoaGFuZGxlX25hbl9pbmYo KSkgcmV0dXJuOworLSAgICB3cml0ZV9zaWduKCk7CistICAgIG91dCA9IGZvcm1hdF9kdXJhdGlv bl92YWx1ZTxjaGFyX3R5cGU+KG91dCwgdmFsLCBwcmVjaXNpb24pOworLSAgfQorLQorLSAgdm9p ZCBvbl9kdXJhdGlvbl91bml0KCkgeworLSAgICBvdXQgPSBmb3JtYXRfZHVyYXRpb25fdW5pdDxj aGFyX3R5cGUsIFBlcmlvZD4ob3V0KTsKKy0gIH0KKy19OworLQorLUZNVF9FTkRfREVUQUlMX05B TUVTUEFDRQorLQorLSNpZiBkZWZpbmVkKF9fY3BwX2xpYl9jaHJvbm8pICYmIF9fY3BwX2xpYl9j aHJvbm8gPj0gMjAxOTA3CistdXNpbmcgd2Vla2RheSA9IHN0ZDo6Y2hyb25vOjp3ZWVrZGF5Owor LSNlbHNlCistLy8gQSBmYWxsYmFjayB2ZXJzaW9uIG9mIHdlZWtkYXkuCistY2xhc3Mgd2Vla2Rh eSB7CistIHByaXZhdGU6CistICB1bnNpZ25lZCBjaGFyIHZhbHVlOworLQorLSBwdWJsaWM6Cist ICB3ZWVrZGF5KCkgPSBkZWZhdWx0OworLSAgZXhwbGljaXQgY29uc3RleHByIHdlZWtkYXkodW5z aWduZWQgd2QpIG5vZXhjZXB0CistICAgICAgOiB2YWx1ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBj aGFyPih3ZCAhPSA3ID8gd2QgOiAwKSkge30KKy0gIGNvbnN0ZXhwciB1bnNpZ25lZCBjX2VuY29k aW5nKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdmFsdWU7IH0KKy19OworLQorLWNsYXNzIHll YXJfbW9udGhfZGF5IHt9OworLSNlbmRpZgorLQorLS8vIEEgcnVkaW1lbnRhcnkgd2Vla2RheSBm b3JtYXR0ZXIuCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IHN0cnVjdCBmb3JtYXR0ZXI8d2Vl a2RheSwgQ2hhcj4geworLSBwcml2YXRlOgorLSAgYm9vbCBsb2NhbGl6ZWQgPSBmYWxzZTsKKy0K Ky0gcHVibGljOgorLSAgRk1UX0NPTlNURVhQUiBhdXRvIHBhcnNlKGJhc2ljX2Zvcm1hdF9wYXJz ZV9jb250ZXh0PENoYXI+JiBjdHgpCistICAgICAgLT4gZGVjbHR5cGUoY3R4LmJlZ2luKCkpIHsK Ky0gICAgYXV0byBiZWdpbiA9IGN0eC5iZWdpbigpLCBlbmQgPSBjdHguZW5kKCk7CistICAgIGlm IChiZWdpbiAhPSBlbmQgJiYgKmJlZ2luID09ICdMJykgeworLSAgICAgICsrYmVnaW47CistICAg ICAgbG9jYWxpemVkID0gdHJ1ZTsKKy0gICAgfQorLSAgICByZXR1cm4gYmVnaW47CistICB9Cist CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm9ybWF0Q29udGV4dD4KKy0gIGF1dG8gZm9ybWF0KHdl ZWtkYXkgd2QsIEZvcm1hdENvbnRleHQmIGN0eCkgY29uc3QgLT4gZGVjbHR5cGUoY3R4Lm91dCgp KSB7CistICAgIGF1dG8gdGltZSA9IHN0ZDo6dG0oKTsKKy0gICAgdGltZS50bV93ZGF5ID0gc3Rh dGljX2Nhc3Q8aW50Pih3ZC5jX2VuY29kaW5nKCkpOworLSAgICBkZXRhaWw6OmdldF9sb2NhbGUg bG9jKGxvY2FsaXplZCwgY3R4LmxvY2FsZSgpKTsKKy0gICAgYXV0byB3ID0gZGV0YWlsOjp0bV93 cml0ZXI8ZGVjbHR5cGUoY3R4Lm91dCgpKSwgQ2hhcj4obG9jLCBjdHgub3V0KCksIHRpbWUpOwor LSAgICB3Lm9uX2FiYnJfd2Vla2RheSgpOworLSAgICByZXR1cm4gdy5vdXQoKTsKKy0gIH0KKy19 OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBSZXAsIHR5cGVuYW1lIFBlcmlvZCwgdHlwZW5hbWUg Q2hhcj4KKy1zdHJ1Y3QgZm9ybWF0dGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlv ZD4sIENoYXI+IHsKKy0gcHJpdmF0ZToKKy0gIGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiBzcGVj czsKKy0gIGludCBwcmVjaXNpb24gPSAtMTsKKy0gIHVzaW5nIGFyZ19yZWZfdHlwZSA9IGRldGFp bDo6YXJnX3JlZjxDaGFyPjsKKy0gIGFyZ19yZWZfdHlwZSB3aWR0aF9yZWY7CistICBhcmdfcmVm X3R5cGUgcHJlY2lzaW9uX3JlZjsKKy0gIGJvb2wgbG9jYWxpemVkID0gZmFsc2U7CistICBiYXNp Y19zdHJpbmdfdmlldzxDaGFyPiBmb3JtYXRfc3RyOworLSAgdXNpbmcgZHVyYXRpb24gPSBzdGQ6 OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+OworLQorLSAgc3RydWN0IHNwZWNfaGFuZGxl ciB7CistICAgIGZvcm1hdHRlciYgZjsKKy0gICAgYmFzaWNfZm9ybWF0X3BhcnNlX2NvbnRleHQ8 Q2hhcj4mIGNvbnRleHQ7CistICAgIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IGZvcm1hdF9zdHI7 CistCistICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJZD4gRk1UX0NPTlNURVhQUiBhcmdfcmVmX3R5 cGUgbWFrZV9hcmdfcmVmKElkIGFyZ19pZCkgeworLSAgICAgIGNvbnRleHQuY2hlY2tfYXJnX2lk KGFyZ19pZCk7CistICAgICAgcmV0dXJuIGFyZ19yZWZfdHlwZShhcmdfaWQpOworLSAgICB9Cist CistICAgIEZNVF9DT05TVEVYUFIgYXJnX3JlZl90eXBlIG1ha2VfYXJnX3JlZihiYXNpY19zdHJp bmdfdmlldzxDaGFyPiBhcmdfaWQpIHsKKy0gICAgICBjb250ZXh0LmNoZWNrX2FyZ19pZChhcmdf aWQpOworLSAgICAgIHJldHVybiBhcmdfcmVmX3R5cGUoYXJnX2lkKTsKKy0gICAgfQorLQorLSAg ICBGTVRfQ09OU1RFWFBSIGFyZ19yZWZfdHlwZSBtYWtlX2FyZ19yZWYoZGV0YWlsOjphdXRvX2lk KSB7CistICAgICAgcmV0dXJuIGFyZ19yZWZfdHlwZShjb250ZXh0Lm5leHRfYXJnX2lkKCkpOwor LSAgICB9CistCistICAgIHZvaWQgb25fZXJyb3IoY29uc3QgY2hhciogbXNnKSB7IEZNVF9USFJP Vyhmb3JtYXRfZXJyb3IobXNnKSk7IH0KKy0gICAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2ZpbGwo YmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gZmlsbCkgeworLSAgICAgIGYuc3BlY3MuZmlsbCA9IGZp bGw7CistICAgIH0KKy0gICAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2FsaWduKGFsaWduX3QgYWxp Z24pIHsgZi5zcGVjcy5hbGlnbiA9IGFsaWduOyB9CistICAgIEZNVF9DT05TVEVYUFIgdm9pZCBv bl93aWR0aChpbnQgd2lkdGgpIHsgZi5zcGVjcy53aWR0aCA9IHdpZHRoOyB9CistICAgIEZNVF9D T05TVEVYUFIgdm9pZCBvbl9wcmVjaXNpb24oaW50IF9wcmVjaXNpb24pIHsKKy0gICAgICBmLnBy ZWNpc2lvbiA9IF9wcmVjaXNpb247CistICAgIH0KKy0gICAgRk1UX0NPTlNURVhQUiB2b2lkIGVu ZF9wcmVjaXNpb24oKSB7fQorLQorLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSWQ+IEZNVF9DT05T VEVYUFIgdm9pZCBvbl9keW5hbWljX3dpZHRoKElkIGFyZ19pZCkgeworLSAgICAgIGYud2lkdGhf cmVmID0gbWFrZV9hcmdfcmVmKGFyZ19pZCk7CistICAgIH0KKy0KKy0gICAgdGVtcGxhdGUgPHR5 cGVuYW1lIElkPiBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZHluYW1pY19wcmVjaXNpb24oSWQgYXJn X2lkKSB7CistICAgICAgZi5wcmVjaXNpb25fcmVmID0gbWFrZV9hcmdfcmVmKGFyZ19pZCk7Cist ICAgIH0KKy0gIH07CistCistICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIGJhc2ljX2Zvcm1h dF9wYXJzZV9jb250ZXh0PENoYXI+OjppdGVyYXRvcjsKKy0gIHN0cnVjdCBwYXJzZV9yYW5nZSB7 CistICAgIGl0ZXJhdG9yIGJlZ2luOworLSAgICBpdGVyYXRvciBlbmQ7CistICB9OworLQorLSAg Rk1UX0NPTlNURVhQUiBwYXJzZV9yYW5nZSBkb19wYXJzZShiYXNpY19mb3JtYXRfcGFyc2VfY29u dGV4dDxDaGFyPiYgY3R4KSB7CistICAgIGF1dG8gYmVnaW4gPSBjdHguYmVnaW4oKSwgZW5kID0g Y3R4LmVuZCgpOworLSAgICBpZiAoYmVnaW4gPT0gZW5kIHx8ICpiZWdpbiA9PSAnfScpIHJldHVy biB7YmVnaW4sIGJlZ2lufTsKKy0gICAgc3BlY19oYW5kbGVyIGhhbmRsZXJ7KnRoaXMsIGN0eCwg Zm9ybWF0X3N0cn07CistICAgIGJlZ2luID0gZGV0YWlsOjpwYXJzZV9hbGlnbihiZWdpbiwgZW5k LCBoYW5kbGVyKTsKKy0gICAgaWYgKGJlZ2luID09IGVuZCkgcmV0dXJuIHtiZWdpbiwgYmVnaW59 OworLSAgICBiZWdpbiA9IGRldGFpbDo6cGFyc2Vfd2lkdGgoYmVnaW4sIGVuZCwgaGFuZGxlcik7 CistICAgIGlmIChiZWdpbiA9PSBlbmQpIHJldHVybiB7YmVnaW4sIGJlZ2lufTsKKy0gICAgaWYg KCpiZWdpbiA9PSAnLicpIHsKKy0gICAgICBpZiAoc3RkOjppc19mbG9hdGluZ19wb2ludDxSZXA+ Ojp2YWx1ZSkKKy0gICAgICAgIGJlZ2luID0gZGV0YWlsOjpwYXJzZV9wcmVjaXNpb24oYmVnaW4s IGVuZCwgaGFuZGxlcik7CistICAgICAgZWxzZQorLSAgICAgICAgaGFuZGxlci5vbl9lcnJvcigi cHJlY2lzaW9uIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFyZ3VtZW50IHR5cGUiKTsKKy0gICAgfQor LSAgICBpZiAoYmVnaW4gIT0gZW5kICYmICpiZWdpbiA9PSAnTCcpIHsKKy0gICAgICArK2JlZ2lu OworLSAgICAgIGxvY2FsaXplZCA9IHRydWU7CistICAgIH0KKy0gICAgZW5kID0gZGV0YWlsOjpw YXJzZV9jaHJvbm9fZm9ybWF0KGJlZ2luLCBlbmQsCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXRhaWw6OmNocm9ub19mb3JtYXRfY2hlY2tlcigpKTsKKy0gICAgcmV0 dXJuIHtiZWdpbiwgZW5kfTsKKy0gIH0KKy0KKy0gcHVibGljOgorLSAgRk1UX0NPTlNURVhQUiBh dXRvIHBhcnNlKGJhc2ljX2Zvcm1hdF9wYXJzZV9jb250ZXh0PENoYXI+JiBjdHgpCistICAgICAg LT4gZGVjbHR5cGUoY3R4LmJlZ2luKCkpIHsKKy0gICAgYXV0byByYW5nZSA9IGRvX3BhcnNlKGN0 eCk7CistICAgIGZvcm1hdF9zdHIgPSBiYXNpY19zdHJpbmdfdmlldzxDaGFyPigKKy0gICAgICAg ICYqcmFuZ2UuYmVnaW4sIGRldGFpbDo6dG9fdW5zaWduZWQocmFuZ2UuZW5kIC0gcmFuZ2UuYmVn aW4pKTsKKy0gICAgcmV0dXJuIHJhbmdlLmVuZDsKKy0gIH0KKy0KKy0gIHRlbXBsYXRlIDx0eXBl bmFtZSBGb3JtYXRDb250ZXh0PgorLSAgYXV0byBmb3JtYXQoY29uc3QgZHVyYXRpb24mIGQsIEZv cm1hdENvbnRleHQmIGN0eCkgY29uc3QKKy0gICAgICAtPiBkZWNsdHlwZShjdHgub3V0KCkpIHsK Ky0gICAgYXV0byBzcGVjc19jb3B5ID0gc3BlY3M7CistICAgIGF1dG8gcHJlY2lzaW9uX2NvcHkg PSBwcmVjaXNpb247CistICAgIGF1dG8gYmVnaW4gPSBmb3JtYXRfc3RyLmJlZ2luKCksIGVuZCA9 IGZvcm1hdF9zdHIuZW5kKCk7CistICAgIC8vIEFzIGEgcG9zc2libGUgZnV0dXJlIG9wdGltaXph dGlvbiwgd2UgY291bGQgYXZvaWQgZXh0cmEgY29weWluZyBpZiB3aWR0aAorLSAgICAvLyBpcyBu b3Qgc3BlY2lmaWVkLgorLSAgICBiYXNpY19tZW1vcnlfYnVmZmVyPENoYXI+IGJ1ZjsKKy0gICAg YXV0byBvdXQgPSBzdGQ6OmJhY2tfaW5zZXJ0ZXIoYnVmKTsKKy0gICAgZGV0YWlsOjpoYW5kbGVf ZHluYW1pY19zcGVjPGRldGFpbDo6d2lkdGhfY2hlY2tlcj4oc3BlY3NfY29weS53aWR0aCwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk dGhfcmVmLCBjdHgpOworLSAgICBkZXRhaWw6OmhhbmRsZV9keW5hbWljX3NwZWM8ZGV0YWlsOjpw cmVjaXNpb25fY2hlY2tlcj4ocHJlY2lzaW9uX2NvcHksCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb25fcmVmLCBjdHgp OworLSAgICBpZiAoYmVnaW4gPT0gZW5kIHx8ICpiZWdpbiA9PSAnfScpIHsKKy0gICAgICBvdXQg PSBkZXRhaWw6OmZvcm1hdF9kdXJhdGlvbl92YWx1ZTxDaGFyPihvdXQsIGQuY291bnQoKSwgcHJl Y2lzaW9uX2NvcHkpOworLSAgICAgIGRldGFpbDo6Zm9ybWF0X2R1cmF0aW9uX3VuaXQ8Q2hhciwg UGVyaW9kPihvdXQpOworLSAgICB9IGVsc2UgeworLSAgICAgIGRldGFpbDo6Y2hyb25vX2Zvcm1h dHRlcjxGb3JtYXRDb250ZXh0LCBkZWNsdHlwZShvdXQpLCBSZXAsIFBlcmlvZD4gZigKKy0gICAg ICAgICAgY3R4LCBvdXQsIGQpOworLSAgICAgIGYucHJlY2lzaW9uID0gcHJlY2lzaW9uX2NvcHk7 CistICAgICAgZi5sb2NhbGl6ZWQgPSBsb2NhbGl6ZWQ7CistICAgICAgZGV0YWlsOjpwYXJzZV9j aHJvbm9fZm9ybWF0KGJlZ2luLCBlbmQsIGYpOworLSAgICB9CistICAgIHJldHVybiBkZXRhaWw6 OndyaXRlKAorLSAgICAgICAgY3R4Lm91dCgpLCBiYXNpY19zdHJpbmdfdmlldzxDaGFyPihidWYu ZGF0YSgpLCBidWYuc2l6ZSgpKSwgc3BlY3NfY29weSk7CistICB9CistfTsKKy0KKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgRHVyYXRpb24+Cistc3RydWN0IGZvcm1hdHRlcjxz dGQ6OmNocm9ubzo6dGltZV9wb2ludDxzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrLCBEdXJhdGlv bj4sCistICAgICAgICAgICAgICAgICBDaGFyPiA6IGZvcm1hdHRlcjxzdGQ6OnRtLCBDaGFyPiB7 CistICBGTVRfQ09OU1RFWFBSIGZvcm1hdHRlcigpIHsKKy0gICAgdGhpcy0+ZG9fcGFyc2UoZGVm YXVsdF9zcGVjcywKKy0gICAgICAgICAgICAgICAgICAgZGVmYXVsdF9zcGVjcyArIHNpemVvZihk ZWZhdWx0X3NwZWNzKSAvIHNpemVvZihDaGFyKSk7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgUGFyc2VDb250ZXh0PgorLSAgRk1UX0NPTlNURVhQUiBhdXRvIHBhcnNlKFBhcnNlQ29u dGV4dCYgY3R4KSAtPiBkZWNsdHlwZShjdHguYmVnaW4oKSkgeworLSAgICByZXR1cm4gdGhpcy0+ ZG9fcGFyc2UoY3R4LmJlZ2luKCksIGN0eC5lbmQoKSwgdHJ1ZSk7CistICB9CistCistICB0ZW1w bGF0ZSA8dHlwZW5hbWUgRm9ybWF0Q29udGV4dD4KKy0gIGF1dG8gZm9ybWF0KHN0ZDo6Y2hyb25v Ojp0aW1lX3BvaW50PHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s+IHZhbCwKKy0gICAgICAgICAg ICAgIEZvcm1hdENvbnRleHQmIGN0eCkgY29uc3QgLT4gZGVjbHR5cGUoY3R4Lm91dCgpKSB7Cist ICAgIHJldHVybiBmb3JtYXR0ZXI8c3RkOjp0bSwgQ2hhcj46OmZvcm1hdChsb2NhbHRpbWUodmFs KSwgY3R4KTsKKy0gIH0KKy0KKy0gIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgQ2hhciBkZWZhdWx0 X3NwZWNzW10gPSB7JyUnLCAnRicsICcgJywgJyUnLCAnVCd9OworLX07CistCistdGVtcGxhdGUg PHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIER1cmF0aW9uPgorLWNvbnN0ZXhwciBjb25zdCBDaGFy CistICAgIGZvcm1hdHRlcjxzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxzdGQ6OmNocm9ubzo6c3lz dGVtX2Nsb2NrLCBEdXJhdGlvbj4sCistICAgICAgICAgICAgICBDaGFyPjo6ZGVmYXVsdF9zcGVj c1tdOworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBzdHJ1Y3QgZm9ybWF0dGVyPHN0ZDo6 dG0sIENoYXI+IHsKKy0gcHJpdmF0ZToKKy0gIGVudW0gY2xhc3Mgc3BlYyB7CistICAgIHVua25v d24sCistICAgIHllYXJfbW9udGhfZGF5LAorLSAgICBoaF9tbV9zcywKKy0gIH07CistICBzcGVj IHNwZWNfID0gc3BlYzo6dW5rbm93bjsKKy0gIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IHNwZWNz OworLQorLSBwcm90ZWN0ZWQ6CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXQ+CistICBGTVRfQ09O U1RFWFBSIGF1dG8gZG9fcGFyc2UoSXQgYmVnaW4sIEl0IGVuZCwgYm9vbCB3aXRoX2RlZmF1bHQg PSBmYWxzZSkKKy0gICAgICAtPiBJdCB7CistICAgIGlmIChiZWdpbiAhPSBlbmQgJiYgKmJlZ2lu ID09ICc6JykgKytiZWdpbjsKKy0gICAgZW5kID0gZGV0YWlsOjpwYXJzZV9jaHJvbm9fZm9ybWF0 KGJlZ2luLCBlbmQsIGRldGFpbDo6dG1fZm9ybWF0X2NoZWNrZXIoKSk7CistICAgIGlmICghd2l0 aF9kZWZhdWx0IHx8IGVuZCAhPSBiZWdpbikKKy0gICAgICBzcGVjcyA9IHtiZWdpbiwgZGV0YWls Ojp0b191bnNpZ25lZChlbmQgLSBiZWdpbil9OworLSAgICAvLyBiYXNpY19zdHJpbmdfdmlldzw+ Ojpjb21wYXJlIGlzbid0IGNvbnN0ZXhwciBiZWZvcmUgQysrMTcuCistICAgIGlmIChzcGVjcy5z aXplKCkgPT0gMiAmJiBzcGVjc1swXSA9PSBDaGFyKCclJykpIHsKKy0gICAgICBpZiAoc3BlY3Nb MV0gPT0gQ2hhcignRicpKQorLSAgICAgICAgc3BlY18gPSBzcGVjOjp5ZWFyX21vbnRoX2RheTsK Ky0gICAgICBlbHNlIGlmIChzcGVjc1sxXSA9PSBDaGFyKCdUJykpCistICAgICAgICBzcGVjXyA9 IHNwZWM6OmhoX21tX3NzOworLSAgICB9CistICAgIHJldHVybiBlbmQ7CistICB9CistCistIHB1 YmxpYzoKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZUNvbnRleHQ+CistICBGTVRfQ09OU1RF WFBSIGF1dG8gcGFyc2UoUGFyc2VDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBlKGN0eC5iZWdpbigp KSB7CistICAgIHJldHVybiB0aGlzLT5kb19wYXJzZShjdHguYmVnaW4oKSwgY3R4LmVuZCgpKTsK Ky0gIH0KKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGb3JtYXRDb250ZXh0PgorLSAgYXV0byBm b3JtYXQoY29uc3Qgc3RkOjp0bSYgdG0sIEZvcm1hdENvbnRleHQmIGN0eCkgY29uc3QKKy0gICAg ICAtPiBkZWNsdHlwZShjdHgub3V0KCkpIHsKKy0gICAgY29uc3QgYXV0byBsb2NfcmVmID0gY3R4 LmxvY2FsZSgpOworLSAgICBkZXRhaWw6OmdldF9sb2NhbGUgbG9jKHN0YXRpY19jYXN0PGJvb2w+ KGxvY19yZWYpLCBsb2NfcmVmKTsKKy0gICAgYXV0byB3ID0gZGV0YWlsOjp0bV93cml0ZXI8ZGVj bHR5cGUoY3R4Lm91dCgpKSwgQ2hhcj4obG9jLCBjdHgub3V0KCksIHRtKTsKKy0gICAgaWYgKHNw ZWNfID09IHNwZWM6OnllYXJfbW9udGhfZGF5KQorLSAgICAgIHcub25faXNvX2RhdGUoKTsKKy0g ICAgZWxzZSBpZiAoc3BlY18gPT0gc3BlYzo6aGhfbW1fc3MpCistICAgICAgdy5vbl9pc29fdGlt ZSgpOworLSAgICBlbHNlCistICAgICAgZGV0YWlsOjpwYXJzZV9jaHJvbm9fZm9ybWF0KHNwZWNz LmJlZ2luKCksIHNwZWNzLmVuZCgpLCB3KTsKKy0gICAgcmV0dXJuIHcub3V0KCk7CistICB9Cist fTsKKy0KKy1GTVRfTU9EVUxFX0VYUE9SVF9FTkQKKy1GTVRfRU5EX05BTUVTUEFDRQorLQorLSNl bmRpZiAgLy8gRk1UX0NIUk9OT19IXworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL2ZtdC9jb2xv ci5oIGIvaW5jbHVkZS9kcHAvZm10L2NvbG9yLmgKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAor aW5kZXggZGZiZTQ4Mi4uMDAwMDAwMAorLS0tIGEvaW5jbHVkZS9kcHAvZm10L2NvbG9yLmgKKysr KyAvZGV2L251bGwKK0BAIC0xLDYzOCArMCwwIEBACistLy8gRm9ybWF0dGluZyBsaWJyYXJ5IGZv ciBDKysgLSBjb2xvciBzdXBwb3J0CistLy8KKy0vLyBDb3B5cmlnaHQgKGMpIDIwMTggLSBwcmVz ZW50LCBWaWN0b3IgWnZlcm92aWNoIGFuZCBmbXQgY29udHJpYnV0b3JzCistLy8gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKy0vLworLS8vIEZvciB0aGUgbGljZW5zZSBpbmZvcm1hdGlvbiByZWZlciB0 byBmb3JtYXQuaC4KKy0KKy0jaWZuZGVmIEZNVF9DT0xPUl9IXworLSNkZWZpbmUgRk1UX0NPTE9S X0hfCistCistI2luY2x1ZGUgImZvcm1hdC5oIgorLQorLS8vIF9fZGVjbHNwZWMoZGVwcmVjYXRl ZCkgaXMgYnJva2VuIGluIHNvbWUgTVNWQyB2ZXJzaW9ucy4KKy0jaWYgRk1UX01TQ19WRVIKKy0j ICBkZWZpbmUgRk1UX0RFUFJFQ0FURURfTk9OTVNWQworLSNlbHNlCistIyAgZGVmaW5lIEZNVF9E RVBSRUNBVEVEX05PTk1TVkMgRk1UX0RFUFJFQ0FURUQKKy0jZW5kaWYKKy0KKy1GTVRfQkVHSU5f TkFNRVNQQUNFCistRk1UX01PRFVMRV9FWFBPUlRfQkVHSU4KKy0KKy1lbnVtIGNsYXNzIGNvbG9y IDogdWludDMyX3QgeworLSAgYWxpY2VfYmx1ZSA9IDB4RjBGOEZGLCAgICAgICAgICAgICAgIC8v IHJnYigyNDAsMjQ4LDI1NSkKKy0gIGFudGlxdWVfd2hpdGUgPSAweEZBRUJENywgICAgICAgICAg ICAvLyByZ2IoMjUwLDIzNSwyMTUpCistICBhcXVhID0gMHgwMEZGRkYsICAgICAgICAgICAgICAg ICAgICAgLy8gcmdiKDAsMjU1LDI1NSkKKy0gIGFxdWFtYXJpbmUgPSAweDdGRkZENCwgICAgICAg ICAgICAgICAvLyByZ2IoMTI3LDI1NSwyMTIpCistICBhenVyZSA9IDB4RjBGRkZGLCAgICAgICAg ICAgICAgICAgICAgLy8gcmdiKDI0MCwyNTUsMjU1KQorLSAgYmVpZ2UgPSAweEY1RjVEQywgICAg ICAgICAgICAgICAgICAgIC8vIHJnYigyNDUsMjQ1LDIyMCkKKy0gIGJpc3F1ZSA9IDB4RkZFNEM0 LCAgICAgICAgICAgICAgICAgICAvLyByZ2IoMjU1LDIyOCwxOTYpCistICBibGFjayA9IDB4MDAw MDAwLCAgICAgICAgICAgICAgICAgICAgLy8gcmdiKDAsMCwwKQorLSAgYmxhbmNoZWRfYWxtb25k ID0gMHhGRkVCQ0QsICAgICAgICAgIC8vIHJnYigyNTUsMjM1LDIwNSkKKy0gIGJsdWUgPSAweDAw MDBGRiwgICAgICAgICAgICAgICAgICAgICAvLyByZ2IoMCwwLDI1NSkKKy0gIGJsdWVfdmlvbGV0 ID0gMHg4QTJCRTIsICAgICAgICAgICAgICAvLyByZ2IoMTM4LDQzLDIyNikKKy0gIGJyb3duID0g MHhBNTJBMkEsICAgICAgICAgICAgICAgICAgICAvLyByZ2IoMTY1LDQyLDQyKQorLSAgYnVybHlf d29vZCA9IDB4REVCODg3LCAgICAgICAgICAgICAgIC8vIHJnYigyMjIsMTg0LDEzNSkKKy0gIGNh ZGV0X2JsdWUgPSAweDVGOUVBMCwgICAgICAgICAgICAgICAvLyByZ2IoOTUsMTU4LDE2MCkKKy0g IGNoYXJ0cmV1c2UgPSAweDdGRkYwMCwgICAgICAgICAgICAgICAvLyByZ2IoMTI3LDI1NSwwKQor LSAgY2hvY29sYXRlID0gMHhEMjY5MUUsICAgICAgICAgICAgICAgIC8vIHJnYigyMTAsMTA1LDMw KQorLSAgY29yYWwgPSAweEZGN0Y1MCwgICAgICAgICAgICAgICAgICAgIC8vIHJnYigyNTUsMTI3 LDgwKQorLSAgY29ybmZsb3dlcl9ibHVlID0gMHg2NDk1RUQsICAgICAgICAgIC8vIHJnYigxMDAs MTQ5LDIzNykKKy0gIGNvcm5zaWxrID0gMHhGRkY4REMsICAgICAgICAgICAgICAgICAvLyByZ2Io MjU1LDI0OCwyMjApCistICBjcmltc29uID0gMHhEQzE0M0MsICAgICAgICAgICAgICAgICAgLy8g cmdiKDIyMCwyMCw2MCkKKy0gIGN5YW4gPSAweDAwRkZGRiwgICAgICAgICAgICAgICAgICAgICAv LyByZ2IoMCwyNTUsMjU1KQorLSAgZGFya19ibHVlID0gMHgwMDAwOEIsICAgICAgICAgICAgICAg IC8vIHJnYigwLDAsMTM5KQorLSAgZGFya19jeWFuID0gMHgwMDhCOEIsICAgICAgICAgICAgICAg IC8vIHJnYigwLDEzOSwxMzkpCistICBkYXJrX2dvbGRlbl9yb2QgPSAweEI4ODYwQiwgICAgICAg ICAgLy8gcmdiKDE4NCwxMzQsMTEpCistICBkYXJrX2dyYXkgPSAweEE5QTlBOSwgICAgICAgICAg ICAgICAgLy8gcmdiKDE2OSwxNjksMTY5KQorLSAgZGFya19ncmVlbiA9IDB4MDA2NDAwLCAgICAg ICAgICAgICAgIC8vIHJnYigwLDEwMCwwKQorLSAgZGFya19raGFraSA9IDB4QkRCNzZCLCAgICAg ICAgICAgICAgIC8vIHJnYigxODksMTgzLDEwNykKKy0gIGRhcmtfbWFnZW50YSA9IDB4OEIwMDhC LCAgICAgICAgICAgICAvLyByZ2IoMTM5LDAsMTM5KQorLSAgZGFya19vbGl2ZV9ncmVlbiA9IDB4 NTU2QjJGLCAgICAgICAgIC8vIHJnYig4NSwxMDcsNDcpCistICBkYXJrX29yYW5nZSA9IDB4RkY4 QzAwLCAgICAgICAgICAgICAgLy8gcmdiKDI1NSwxNDAsMCkKKy0gIGRhcmtfb3JjaGlkID0gMHg5 OTMyQ0MsICAgICAgICAgICAgICAvLyByZ2IoMTUzLDUwLDIwNCkKKy0gIGRhcmtfcmVkID0gMHg4 QjAwMDAsICAgICAgICAgICAgICAgICAvLyByZ2IoMTM5LDAsMCkKKy0gIGRhcmtfc2FsbW9uID0g MHhFOTk2N0EsICAgICAgICAgICAgICAvLyByZ2IoMjMzLDE1MCwxMjIpCistICBkYXJrX3NlYV9n cmVlbiA9IDB4OEZCQzhGLCAgICAgICAgICAgLy8gcmdiKDE0MywxODgsMTQzKQorLSAgZGFya19z bGF0ZV9ibHVlID0gMHg0ODNEOEIsICAgICAgICAgIC8vIHJnYig3Miw2MSwxMzkpCistICBkYXJr X3NsYXRlX2dyYXkgPSAweDJGNEY0RiwgICAgICAgICAgLy8gcmdiKDQ3LDc5LDc5KQorLSAgZGFy a190dXJxdW9pc2UgPSAweDAwQ0VEMSwgICAgICAgICAgIC8vIHJnYigwLDIwNiwyMDkpCistICBk YXJrX3Zpb2xldCA9IDB4OTQwMEQzLCAgICAgICAgICAgICAgLy8gcmdiKDE0OCwwLDIxMSkKKy0g IGRlZXBfcGluayA9IDB4RkYxNDkzLCAgICAgICAgICAgICAgICAvLyByZ2IoMjU1LDIwLDE0NykK Ky0gIGRlZXBfc2t5X2JsdWUgPSAweDAwQkZGRiwgICAgICAgICAgICAvLyByZ2IoMCwxOTEsMjU1 KQorLSAgZGltX2dyYXkgPSAweDY5Njk2OSwgICAgICAgICAgICAgICAgIC8vIHJnYigxMDUsMTA1 LDEwNSkKKy0gIGRvZGdlcl9ibHVlID0gMHgxRTkwRkYsICAgICAgICAgICAgICAvLyByZ2IoMzAs MTQ0LDI1NSkKKy0gIGZpcmVfYnJpY2sgPSAweEIyMjIyMiwgICAgICAgICAgICAgICAvLyByZ2Io MTc4LDM0LDM0KQorLSAgZmxvcmFsX3doaXRlID0gMHhGRkZBRjAsICAgICAgICAgICAgIC8vIHJn YigyNTUsMjUwLDI0MCkKKy0gIGZvcmVzdF9ncmVlbiA9IDB4MjI4QjIyLCAgICAgICAgICAgICAv LyByZ2IoMzQsMTM5LDM0KQorLSAgZnVjaHNpYSA9IDB4RkYwMEZGLCAgICAgICAgICAgICAgICAg IC8vIHJnYigyNTUsMCwyNTUpCistICBnYWluc2Jvcm8gPSAweERDRENEQywgICAgICAgICAgICAg ICAgLy8gcmdiKDIyMCwyMjAsMjIwKQorLSAgZ2hvc3Rfd2hpdGUgPSAweEY4RjhGRiwgICAgICAg ICAgICAgIC8vIHJnYigyNDgsMjQ4LDI1NSkKKy0gIGdvbGQgPSAweEZGRDcwMCwgICAgICAgICAg ICAgICAgICAgICAvLyByZ2IoMjU1LDIxNSwwKQorLSAgZ29sZGVuX3JvZCA9IDB4REFBNTIwLCAg ICAgICAgICAgICAgIC8vIHJnYigyMTgsMTY1LDMyKQorLSAgZ3JheSA9IDB4ODA4MDgwLCAgICAg ICAgICAgICAgICAgICAgIC8vIHJnYigxMjgsMTI4LDEyOCkKKy0gIGdyZWVuID0gMHgwMDgwMDAs ICAgICAgICAgICAgICAgICAgICAvLyByZ2IoMCwxMjgsMCkKKy0gIGdyZWVuX3llbGxvdyA9IDB4 QURGRjJGLCAgICAgICAgICAgICAvLyByZ2IoMTczLDI1NSw0NykKKy0gIGhvbmV5X2RldyA9IDB4 RjBGRkYwLCAgICAgICAgICAgICAgICAvLyByZ2IoMjQwLDI1NSwyNDApCistICBob3RfcGluayA9 IDB4RkY2OUI0LCAgICAgICAgICAgICAgICAgLy8gcmdiKDI1NSwxMDUsMTgwKQorLSAgaW5kaWFu X3JlZCA9IDB4Q0Q1QzVDLCAgICAgICAgICAgICAgIC8vIHJnYigyMDUsOTIsOTIpCistICBpbmRp Z28gPSAweDRCMDA4MiwgICAgICAgICAgICAgICAgICAgLy8gcmdiKDc1LDAsMTMwKQorLSAgaXZv cnkgPSAweEZGRkZGMCwgICAgICAgICAgICAgICAgICAgIC8vIHJnYigyNTUsMjU1LDI0MCkKKy0g IGtoYWtpID0gMHhGMEU2OEMsICAgICAgICAgICAgICAgICAgICAvLyByZ2IoMjQwLDIzMCwxNDAp CistICBsYXZlbmRlciA9IDB4RTZFNkZBLCAgICAgICAgICAgICAgICAgLy8gcmdiKDIzMCwyMzAs MjUwKQorLSAgbGF2ZW5kZXJfYmx1c2ggPSAweEZGRjBGNSwgICAgICAgICAgIC8vIHJnYigyNTUs MjQwLDI0NSkKKy0gIGxhd25fZ3JlZW4gPSAweDdDRkMwMCwgICAgICAgICAgICAgICAvLyByZ2Io MTI0LDI1MiwwKQorLSAgbGVtb25fY2hpZmZvbiA9IDB4RkZGQUNELCAgICAgICAgICAgIC8vIHJn YigyNTUsMjUwLDIwNSkKKy0gIGxpZ2h0X2JsdWUgPSAweEFERDhFNiwgICAgICAgICAgICAgICAv LyByZ2IoMTczLDIxNiwyMzApCistICBsaWdodF9jb3JhbCA9IDB4RjA4MDgwLCAgICAgICAgICAg ICAgLy8gcmdiKDI0MCwxMjgsMTI4KQorLSAgbGlnaHRfY3lhbiA9IDB4RTBGRkZGLCAgICAgICAg ICAgICAgIC8vIHJnYigyMjQsMjU1LDI1NSkKKy0gIGxpZ2h0X2dvbGRlbl9yb2RfeWVsbG93ID0g MHhGQUZBRDIsICAvLyByZ2IoMjUwLDI1MCwyMTApCistICBsaWdodF9ncmF5ID0gMHhEM0QzRDMs ICAgICAgICAgICAgICAgLy8gcmdiKDIxMSwyMTEsMjExKQorLSAgbGlnaHRfZ3JlZW4gPSAweDkw RUU5MCwgICAgICAgICAgICAgIC8vIHJnYigxNDQsMjM4LDE0NCkKKy0gIGxpZ2h0X3BpbmsgPSAw eEZGQjZDMSwgICAgICAgICAgICAgICAvLyByZ2IoMjU1LDE4MiwxOTMpCistICBsaWdodF9zYWxt b24gPSAweEZGQTA3QSwgICAgICAgICAgICAgLy8gcmdiKDI1NSwxNjAsMTIyKQorLSAgbGlnaHRf c2VhX2dyZWVuID0gMHgyMEIyQUEsICAgICAgICAgIC8vIHJnYigzMiwxNzgsMTcwKQorLSAgbGln aHRfc2t5X2JsdWUgPSAweDg3Q0VGQSwgICAgICAgICAgIC8vIHJnYigxMzUsMjA2LDI1MCkKKy0g IGxpZ2h0X3NsYXRlX2dyYXkgPSAweDc3ODg5OSwgICAgICAgICAvLyByZ2IoMTE5LDEzNiwxNTMp CistICBsaWdodF9zdGVlbF9ibHVlID0gMHhCMEM0REUsICAgICAgICAgLy8gcmdiKDE3NiwxOTYs MjIyKQorLSAgbGlnaHRfeWVsbG93ID0gMHhGRkZGRTAsICAgICAgICAgICAgIC8vIHJnYigyNTUs MjU1LDIyNCkKKy0gIGxpbWUgPSAweDAwRkYwMCwgICAgICAgICAgICAgICAgICAgICAvLyByZ2Io MCwyNTUsMCkKKy0gIGxpbWVfZ3JlZW4gPSAweDMyQ0QzMiwgICAgICAgICAgICAgICAvLyByZ2Io NTAsMjA1LDUwKQorLSAgbGluZW4gPSAweEZBRjBFNiwgICAgICAgICAgICAgICAgICAgIC8vIHJn YigyNTAsMjQwLDIzMCkKKy0gIG1hZ2VudGEgPSAweEZGMDBGRiwgICAgICAgICAgICAgICAgICAv LyByZ2IoMjU1LDAsMjU1KQorLSAgbWFyb29uID0gMHg4MDAwMDAsICAgICAgICAgICAgICAgICAg IC8vIHJnYigxMjgsMCwwKQorLSAgbWVkaXVtX2FxdWFtYXJpbmUgPSAweDY2Q0RBQSwgICAgICAg IC8vIHJnYigxMDIsMjA1LDE3MCkKKy0gIG1lZGl1bV9ibHVlID0gMHgwMDAwQ0QsICAgICAgICAg ICAgICAvLyByZ2IoMCwwLDIwNSkKKy0gIG1lZGl1bV9vcmNoaWQgPSAweEJBNTVEMywgICAgICAg ICAgICAvLyByZ2IoMTg2LDg1LDIxMSkKKy0gIG1lZGl1bV9wdXJwbGUgPSAweDkzNzBEQiwgICAg ICAgICAgICAvLyByZ2IoMTQ3LDExMiwyMTkpCistICBtZWRpdW1fc2VhX2dyZWVuID0gMHgzQ0Iz NzEsICAgICAgICAgLy8gcmdiKDYwLDE3OSwxMTMpCistICBtZWRpdW1fc2xhdGVfYmx1ZSA9IDB4 N0I2OEVFLCAgICAgICAgLy8gcmdiKDEyMywxMDQsMjM4KQorLSAgbWVkaXVtX3NwcmluZ19ncmVl biA9IDB4MDBGQTlBLCAgICAgIC8vIHJnYigwLDI1MCwxNTQpCistICBtZWRpdW1fdHVycXVvaXNl ID0gMHg0OEQxQ0MsICAgICAgICAgLy8gcmdiKDcyLDIwOSwyMDQpCistICBtZWRpdW1fdmlvbGV0 X3JlZCA9IDB4QzcxNTg1LCAgICAgICAgLy8gcmdiKDE5OSwyMSwxMzMpCistICBtaWRuaWdodF9i bHVlID0gMHgxOTE5NzAsICAgICAgICAgICAgLy8gcmdiKDI1LDI1LDExMikKKy0gIG1pbnRfY3Jl YW0gPSAweEY1RkZGQSwgICAgICAgICAgICAgICAvLyByZ2IoMjQ1LDI1NSwyNTApCistICBtaXN0 eV9yb3NlID0gMHhGRkU0RTEsICAgICAgICAgICAgICAgLy8gcmdiKDI1NSwyMjgsMjI1KQorLSAg bW9jY2FzaW4gPSAweEZGRTRCNSwgICAgICAgICAgICAgICAgIC8vIHJnYigyNTUsMjI4LDE4MSkK Ky0gIG5hdmFqb193aGl0ZSA9IDB4RkZERUFELCAgICAgICAgICAgICAvLyByZ2IoMjU1LDIyMiwx NzMpCistICBuYXZ5ID0gMHgwMDAwODAsICAgICAgICAgICAgICAgICAgICAgLy8gcmdiKDAsMCwx MjgpCistICBvbGRfbGFjZSA9IDB4RkRGNUU2LCAgICAgICAgICAgICAgICAgLy8gcmdiKDI1Mywy NDUsMjMwKQorLSAgb2xpdmUgPSAweDgwODAwMCwgICAgICAgICAgICAgICAgICAgIC8vIHJnYigx MjgsMTI4LDApCistICBvbGl2ZV9kcmFiID0gMHg2QjhFMjMsICAgICAgICAgICAgICAgLy8gcmdi KDEwNywxNDIsMzUpCistICBvcmFuZ2UgPSAweEZGQTUwMCwgICAgICAgICAgICAgICAgICAgLy8g cmdiKDI1NSwxNjUsMCkKKy0gIG9yYW5nZV9yZWQgPSAweEZGNDUwMCwgICAgICAgICAgICAgICAv LyByZ2IoMjU1LDY5LDApCistICBvcmNoaWQgPSAweERBNzBENiwgICAgICAgICAgICAgICAgICAg Ly8gcmdiKDIxOCwxMTIsMjE0KQorLSAgcGFsZV9nb2xkZW5fcm9kID0gMHhFRUU4QUEsICAgICAg ICAgIC8vIHJnYigyMzgsMjMyLDE3MCkKKy0gIHBhbGVfZ3JlZW4gPSAweDk4RkI5OCwgICAgICAg ICAgICAgICAvLyByZ2IoMTUyLDI1MSwxNTIpCistICBwYWxlX3R1cnF1b2lzZSA9IDB4QUZFRUVF LCAgICAgICAgICAgLy8gcmdiKDE3NSwyMzgsMjM4KQorLSAgcGFsZV92aW9sZXRfcmVkID0gMHhE QjcwOTMsICAgICAgICAgIC8vIHJnYigyMTksMTEyLDE0NykKKy0gIHBhcGF5YV93aGlwID0gMHhG RkVGRDUsICAgICAgICAgICAgICAvLyByZ2IoMjU1LDIzOSwyMTMpCistICBwZWFjaF9wdWZmID0g MHhGRkRBQjksICAgICAgICAgICAgICAgLy8gcmdiKDI1NSwyMTgsMTg1KQorLSAgcGVydSA9IDB4 Q0Q4NTNGLCAgICAgICAgICAgICAgICAgICAgIC8vIHJnYigyMDUsMTMzLDYzKQorLSAgcGluayA9 IDB4RkZDMENCLCAgICAgICAgICAgICAgICAgICAgIC8vIHJnYigyNTUsMTkyLDIwMykKKy0gIHBs dW0gPSAweEREQTBERCwgICAgICAgICAgICAgICAgICAgICAvLyByZ2IoMjIxLDE2MCwyMjEpCist ICBwb3dkZXJfYmx1ZSA9IDB4QjBFMEU2LCAgICAgICAgICAgICAgLy8gcmdiKDE3NiwyMjQsMjMw KQorLSAgcHVycGxlID0gMHg4MDAwODAsICAgICAgICAgICAgICAgICAgIC8vIHJnYigxMjgsMCwx MjgpCistICByZWJlY2NhX3B1cnBsZSA9IDB4NjYzMzk5LCAgICAgICAgICAgLy8gcmdiKDEwMiw1 MSwxNTMpCistICByZWQgPSAweEZGMDAwMCwgICAgICAgICAgICAgICAgICAgICAgLy8gcmdiKDI1 NSwwLDApCistICByb3N5X2Jyb3duID0gMHhCQzhGOEYsICAgICAgICAgICAgICAgLy8gcmdiKDE4 OCwxNDMsMTQzKQorLSAgcm95YWxfYmx1ZSA9IDB4NDE2OUUxLCAgICAgICAgICAgICAgIC8vIHJn Yig2NSwxMDUsMjI1KQorLSAgc2FkZGxlX2Jyb3duID0gMHg4QjQ1MTMsICAgICAgICAgICAgIC8v IHJnYigxMzksNjksMTkpCistICBzYWxtb24gPSAweEZBODA3MiwgICAgICAgICAgICAgICAgICAg Ly8gcmdiKDI1MCwxMjgsMTE0KQorLSAgc2FuZHlfYnJvd24gPSAweEY0QTQ2MCwgICAgICAgICAg ICAgIC8vIHJnYigyNDQsMTY0LDk2KQorLSAgc2VhX2dyZWVuID0gMHgyRThCNTcsICAgICAgICAg ICAgICAgIC8vIHJnYig0NiwxMzksODcpCistICBzZWFfc2hlbGwgPSAweEZGRjVFRSwgICAgICAg ICAgICAgICAgLy8gcmdiKDI1NSwyNDUsMjM4KQorLSAgc2llbm5hID0gMHhBMDUyMkQsICAgICAg ICAgICAgICAgICAgIC8vIHJnYigxNjAsODIsNDUpCistICBzaWx2ZXIgPSAweEMwQzBDMCwgICAg ICAgICAgICAgICAgICAgLy8gcmdiKDE5MiwxOTIsMTkyKQorLSAgc2t5X2JsdWUgPSAweDg3Q0VF QiwgICAgICAgICAgICAgICAgIC8vIHJnYigxMzUsMjA2LDIzNSkKKy0gIHNsYXRlX2JsdWUgPSAw eDZBNUFDRCwgICAgICAgICAgICAgICAvLyByZ2IoMTA2LDkwLDIwNSkKKy0gIHNsYXRlX2dyYXkg PSAweDcwODA5MCwgICAgICAgICAgICAgICAvLyByZ2IoMTEyLDEyOCwxNDQpCistICBzbm93ID0g MHhGRkZBRkEsICAgICAgICAgICAgICAgICAgICAgLy8gcmdiKDI1NSwyNTAsMjUwKQorLSAgc3By aW5nX2dyZWVuID0gMHgwMEZGN0YsICAgICAgICAgICAgIC8vIHJnYigwLDI1NSwxMjcpCistICBz dGVlbF9ibHVlID0gMHg0NjgyQjQsICAgICAgICAgICAgICAgLy8gcmdiKDcwLDEzMCwxODApCist ICB0YW4gPSAweEQyQjQ4QywgICAgICAgICAgICAgICAgICAgICAgLy8gcmdiKDIxMCwxODAsMTQw KQorLSAgdGVhbCA9IDB4MDA4MDgwLCAgICAgICAgICAgICAgICAgICAgIC8vIHJnYigwLDEyOCwx MjgpCistICB0aGlzdGxlID0gMHhEOEJGRDgsICAgICAgICAgICAgICAgICAgLy8gcmdiKDIxNiwx OTEsMjE2KQorLSAgdG9tYXRvID0gMHhGRjYzNDcsICAgICAgICAgICAgICAgICAgIC8vIHJnYigy NTUsOTksNzEpCistICB0dXJxdW9pc2UgPSAweDQwRTBEMCwgICAgICAgICAgICAgICAgLy8gcmdi KDY0LDIyNCwyMDgpCistICB2aW9sZXQgPSAweEVFODJFRSwgICAgICAgICAgICAgICAgICAgLy8g cmdiKDIzOCwxMzAsMjM4KQorLSAgd2hlYXQgPSAweEY1REVCMywgICAgICAgICAgICAgICAgICAg IC8vIHJnYigyNDUsMjIyLDE3OSkKKy0gIHdoaXRlID0gMHhGRkZGRkYsICAgICAgICAgICAgICAg ICAgICAvLyByZ2IoMjU1LDI1NSwyNTUpCistICB3aGl0ZV9zbW9rZSA9IDB4RjVGNUY1LCAgICAg ICAgICAgICAgLy8gcmdiKDI0NSwyNDUsMjQ1KQorLSAgeWVsbG93ID0gMHhGRkZGMDAsICAgICAg ICAgICAgICAgICAgIC8vIHJnYigyNTUsMjU1LDApCistICB5ZWxsb3dfZ3JlZW4gPSAweDlBQ0Qz MiAgICAgICAgICAgICAgLy8gcmdiKDE1NCwyMDUsNTApCistfTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gZW51bSBjbGFzcyBjb2xvcgorLQorLWVudW0gY2xhc3MgdGVy bWluYWxfY29sb3IgOiB1aW50OF90IHsKKy0gIGJsYWNrID0gMzAsCistICByZWQsCistICBncmVl biwKKy0gIHllbGxvdywKKy0gIGJsdWUsCistICBtYWdlbnRhLAorLSAgY3lhbiwKKy0gIHdoaXRl LAorLSAgYnJpZ2h0X2JsYWNrID0gOTAsCistICBicmlnaHRfcmVkLAorLSAgYnJpZ2h0X2dyZWVu LAorLSAgYnJpZ2h0X3llbGxvdywKKy0gIGJyaWdodF9ibHVlLAorLSAgYnJpZ2h0X21hZ2VudGEs CistICBicmlnaHRfY3lhbiwKKy0gIGJyaWdodF93aGl0ZQorLX07CistCistZW51bSBjbGFzcyBl bXBoYXNpcyA6IHVpbnQ4X3QgeworLSAgYm9sZCA9IDEsCistICBmYWludCA9IDEgPDwgMSwKKy0g IGl0YWxpYyA9IDEgPDwgMiwKKy0gIHVuZGVybGluZSA9IDEgPDwgMywKKy0gIGJsaW5rID0gMSA8 PCA0LAorLSAgcmV2ZXJzZSA9IDEgPDwgNSwKKy0gIGNvbmNlYWwgPSAxIDw8IDYsCistICBzdHJp a2V0aHJvdWdoID0gMSA8PCA3LAorLX07CistCistLy8gcmdiIGlzIGEgc3RydWN0IGZvciByZWQs IGdyZWVuIGFuZCBibHVlIGNvbG9ycy4KKy0vLyBVc2luZyB0aGUgbmFtZSAicmdiIiBtYWtlcyBz b21lIGVkaXRvcnMgc2hvdyB0aGUgY29sb3IgaW4gYSB0b29sdGlwLgorLXN0cnVjdCByZ2Igewor LSAgRk1UX0NPTlNURVhQUiByZ2IoKSA6IHIoMCksIGcoMCksIGIoMCkge30KKy0gIEZNVF9DT05T VEVYUFIgcmdiKHVpbnQ4X3Qgcl8sIHVpbnQ4X3QgZ18sIHVpbnQ4X3QgYl8pIDogcihyXyksIGco Z18pLCBiKGJfKSB7fQorLSAgRk1UX0NPTlNURVhQUiByZ2IodWludDMyX3QgaGV4KQorLSAgICAg IDogcigoaGV4ID4+IDE2KSAmIDB4RkYpLCBnKChoZXggPj4gOCkgJiAweEZGKSwgYihoZXggJiAw eEZGKSB7fQorLSAgRk1UX0NPTlNURVhQUiByZ2IoY29sb3IgaGV4KQorLSAgICAgIDogcigodWlu dDMyX3QoaGV4KSA+PiAxNikgJiAweEZGKSwKKy0gICAgICAgIGcoKHVpbnQzMl90KGhleCkgPj4g OCkgJiAweEZGKSwKKy0gICAgICAgIGIodWludDMyX3QoaGV4KSAmIDB4RkYpIHt9CistICB1aW50 OF90IHI7CistICB1aW50OF90IGc7CistICB1aW50OF90IGI7CistfTsKKy0KKy1GTVRfQkVHSU5f REVUQUlMX05BTUVTUEFDRQorLQorLS8vIGNvbG9yIGlzIGEgc3RydWN0IG9mIGVpdGhlciBhIHJn YiBjb2xvciBvciBhIHRlcm1pbmFsIGNvbG9yLgorLXN0cnVjdCBjb2xvcl90eXBlIHsKKy0gIEZN VF9DT05TVEVYUFIgY29sb3JfdHlwZSgpIEZNVF9OT0VYQ0VQVCA6IGlzX3JnYigpLCB2YWx1ZXt9 IHt9CistICBGTVRfQ09OU1RFWFBSIGNvbG9yX3R5cGUoY29sb3IgcmdiX2NvbG9yKSBGTVRfTk9F WENFUFQgOiBpc19yZ2IodHJ1ZSksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXt9IHsKKy0gICAgdmFsdWUucmdiX2NvbG9y ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJnYl9jb2xvcik7CistICB9CistICBGTVRfQ09OU1RF WFBSIGNvbG9yX3R5cGUocmdiIHJnYl9jb2xvcikgRk1UX05PRVhDRVBUIDogaXNfcmdiKHRydWUp LCB2YWx1ZXt9IHsKKy0gICAgdmFsdWUucmdiX2NvbG9yID0gKHN0YXRpY19jYXN0PHVpbnQzMl90 PihyZ2JfY29sb3IucikgPDwgMTYpIHwKKy0gICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19j YXN0PHVpbnQzMl90PihyZ2JfY29sb3IuZykgPDwgOCkgfCByZ2JfY29sb3IuYjsKKy0gIH0KKy0g IEZNVF9DT05TVEVYUFIgY29sb3JfdHlwZSh0ZXJtaW5hbF9jb2xvciB0ZXJtX2NvbG9yKSBGTVRf Tk9FWENFUFQgOiBpc19yZ2IoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXt9IHsKKy0gICAgdmFsdWUu dGVybV9jb2xvciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRlcm1fY29sb3IpOworLSAgfQorLSAg Ym9vbCBpc19yZ2I7CistICB1bmlvbiBjb2xvcl91bmlvbiB7CistICAgIHVpbnQ4X3QgdGVybV9j b2xvcjsKKy0gICAgdWludDMyX3QgcmdiX2NvbG9yOworLSAgfSB2YWx1ZTsKKy19OworLQorLUZN VF9FTkRfREVUQUlMX05BTUVTUEFDRQorLQorLS8qKiBBIHRleHQgc3R5bGUgY29uc2lzdGluZyBv ZiBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBhbmQgZW1waGFzaXMuICovCistY2xh c3MgdGV4dF9zdHlsZSB7CistIHB1YmxpYzoKKy0gIEZNVF9DT05TVEVYUFIgdGV4dF9zdHlsZShl bXBoYXNpcyBlbSA9IGVtcGhhc2lzKCkpIEZNVF9OT0VYQ0VQVAorLSAgICAgIDogc2V0X2ZvcmVn cm91bmRfY29sb3IoKSwKKy0gICAgICAgIHNldF9iYWNrZ3JvdW5kX2NvbG9yKCksCistICAgICAg ICBlbXMoZW0pIHt9CistCistICBGTVRfQ09OU1RFWFBSIHRleHRfc3R5bGUmIG9wZXJhdG9yfD0o Y29uc3QgdGV4dF9zdHlsZSYgcmhzKSB7CistICAgIGlmICghc2V0X2ZvcmVncm91bmRfY29sb3Ip IHsKKy0gICAgICBzZXRfZm9yZWdyb3VuZF9jb2xvciA9IHJocy5zZXRfZm9yZWdyb3VuZF9jb2xv cjsKKy0gICAgICBmb3JlZ3JvdW5kX2NvbG9yID0gcmhzLmZvcmVncm91bmRfY29sb3I7CistICAg IH0gZWxzZSBpZiAocmhzLnNldF9mb3JlZ3JvdW5kX2NvbG9yKSB7CistICAgICAgaWYgKCFmb3Jl Z3JvdW5kX2NvbG9yLmlzX3JnYiB8fCAhcmhzLmZvcmVncm91bmRfY29sb3IuaXNfcmdiKQorLSAg ICAgICAgRk1UX1RIUk9XKGZvcm1hdF9lcnJvcigiY2FuJ3QgT1IgYSB0ZXJtaW5hbCBjb2xvciIp KTsKKy0gICAgICBmb3JlZ3JvdW5kX2NvbG9yLnZhbHVlLnJnYl9jb2xvciB8PSByaHMuZm9yZWdy b3VuZF9jb2xvci52YWx1ZS5yZ2JfY29sb3I7CistICAgIH0KKy0KKy0gICAgaWYgKCFzZXRfYmFj a2dyb3VuZF9jb2xvcikgeworLSAgICAgIHNldF9iYWNrZ3JvdW5kX2NvbG9yID0gcmhzLnNldF9i YWNrZ3JvdW5kX2NvbG9yOworLSAgICAgIGJhY2tncm91bmRfY29sb3IgPSByaHMuYmFja2dyb3Vu ZF9jb2xvcjsKKy0gICAgfSBlbHNlIGlmIChyaHMuc2V0X2JhY2tncm91bmRfY29sb3IpIHsKKy0g ICAgICBpZiAoIWJhY2tncm91bmRfY29sb3IuaXNfcmdiIHx8ICFyaHMuYmFja2dyb3VuZF9jb2xv ci5pc19yZ2IpCistICAgICAgICBGTVRfVEhST1coZm9ybWF0X2Vycm9yKCJjYW4ndCBPUiBhIHRl cm1pbmFsIGNvbG9yIikpOworLSAgICAgIGJhY2tncm91bmRfY29sb3IudmFsdWUucmdiX2NvbG9y IHw9IHJocy5iYWNrZ3JvdW5kX2NvbG9yLnZhbHVlLnJnYl9jb2xvcjsKKy0gICAgfQorLQorLSAg ICBlbXMgPSBzdGF0aWNfY2FzdDxlbXBoYXNpcz4oc3RhdGljX2Nhc3Q8dWludDhfdD4oZW1zKSB8 CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Pihy aHMuZW1zKSk7CistICAgIHJldHVybiAqdGhpczsKKy0gIH0KKy0KKy0gIGZyaWVuZCBGTVRfQ09O U1RFWFBSIHRleHRfc3R5bGUgb3BlcmF0b3J8KHRleHRfc3R5bGUgbGhzLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dF9zdHlsZSYgcmhzKSB7 CistICAgIHJldHVybiBsaHMgfD0gcmhzOworLSAgfQorLQorLSAgRk1UX0RFUFJFQ0FURURfTk9O TVNWQyBGTVRfQ09OU1RFWFBSIHRleHRfc3R5bGUmIG9wZXJhdG9yJj0oCistICAgICAgY29uc3Qg dGV4dF9zdHlsZSYgcmhzKSB7CistICAgIHJldHVybiBhbmRfYXNzaWduKHJocyk7CistICB9Cist CistICBGTVRfREVQUkVDQVRFRF9OT05NU1ZDIGZyaWVuZCBGTVRfQ09OU1RFWFBSIHRleHRfc3R5 bGUKKy0gIG9wZXJhdG9yJih0ZXh0X3N0eWxlIGxocywgY29uc3QgdGV4dF9zdHlsZSYgcmhzKSB7 CistICAgIHJldHVybiBsaHMuYW5kX2Fzc2lnbihyaHMpOworLSAgfQorLQorLSAgRk1UX0NPTlNU RVhQUiBib29sIGhhc19mb3JlZ3JvdW5kKCkgY29uc3QgRk1UX05PRVhDRVBUIHsKKy0gICAgcmV0 dXJuIHNldF9mb3JlZ3JvdW5kX2NvbG9yOworLSAgfQorLSAgRk1UX0NPTlNURVhQUiBib29sIGhh c19iYWNrZ3JvdW5kKCkgY29uc3QgRk1UX05PRVhDRVBUIHsKKy0gICAgcmV0dXJuIHNldF9iYWNr Z3JvdW5kX2NvbG9yOworLSAgfQorLSAgRk1UX0NPTlNURVhQUiBib29sIGhhc19lbXBoYXNpcygp IGNvbnN0IEZNVF9OT0VYQ0VQVCB7CistICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pihl bXMpICE9IDA7CistICB9CistICBGTVRfQ09OU1RFWFBSIGRldGFpbDo6Y29sb3JfdHlwZSBnZXRf Zm9yZWdyb3VuZCgpIGNvbnN0IEZNVF9OT0VYQ0VQVCB7CistICAgIEZNVF9BU1NFUlQoaGFzX2Zv cmVncm91bmQoKSwgIm5vIGZvcmVncm91bmQgc3BlY2lmaWVkIGZvciB0aGlzIHN0eWxlIik7Cist ICAgIHJldHVybiBmb3JlZ3JvdW5kX2NvbG9yOworLSAgfQorLSAgRk1UX0NPTlNURVhQUiBkZXRh aWw6OmNvbG9yX3R5cGUgZ2V0X2JhY2tncm91bmQoKSBjb25zdCBGTVRfTk9FWENFUFQgeworLSAg ICBGTVRfQVNTRVJUKGhhc19iYWNrZ3JvdW5kKCksICJubyBiYWNrZ3JvdW5kIHNwZWNpZmllZCBm b3IgdGhpcyBzdHlsZSIpOworLSAgICByZXR1cm4gYmFja2dyb3VuZF9jb2xvcjsKKy0gIH0KKy0g IEZNVF9DT05TVEVYUFIgZW1waGFzaXMgZ2V0X2VtcGhhc2lzKCkgY29uc3QgRk1UX05PRVhDRVBU IHsKKy0gICAgRk1UX0FTU0VSVChoYXNfZW1waGFzaXMoKSwgIm5vIGVtcGhhc2lzIHNwZWNpZmll ZCBmb3IgdGhpcyBzdHlsZSIpOworLSAgICByZXR1cm4gZW1zOworLSAgfQorLQorLSBwcml2YXRl OgorLSAgRk1UX0NPTlNURVhQUiB0ZXh0X3N0eWxlKGJvb2wgaXNfZm9yZWdyb3VuZCwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6OmNvbG9yX3R5cGUgdGV4dF9jb2xvcikgRk1U X05PRVhDRVBUCistICAgICAgOiBzZXRfZm9yZWdyb3VuZF9jb2xvcigpLAorLSAgICAgICAgc2V0 X2JhY2tncm91bmRfY29sb3IoKSwKKy0gICAgICAgIGVtcygpIHsKKy0gICAgaWYgKGlzX2ZvcmVn cm91bmQpIHsKKy0gICAgICBmb3JlZ3JvdW5kX2NvbG9yID0gdGV4dF9jb2xvcjsKKy0gICAgICBz ZXRfZm9yZWdyb3VuZF9jb2xvciA9IHRydWU7CistICAgIH0gZWxzZSB7CistICAgICAgYmFja2dy b3VuZF9jb2xvciA9IHRleHRfY29sb3I7CistICAgICAgc2V0X2JhY2tncm91bmRfY29sb3IgPSB0 cnVlOworLSAgICB9CistICB9CistCistICAvLyBERVBSRUNBVEVEIQorLSAgRk1UX0NPTlNURVhQ UiB0ZXh0X3N0eWxlJiBhbmRfYXNzaWduKGNvbnN0IHRleHRfc3R5bGUmIHJocykgeworLSAgICBp ZiAoIXNldF9mb3JlZ3JvdW5kX2NvbG9yKSB7CistICAgICAgc2V0X2ZvcmVncm91bmRfY29sb3Ig PSByaHMuc2V0X2ZvcmVncm91bmRfY29sb3I7CistICAgICAgZm9yZWdyb3VuZF9jb2xvciA9IHJo cy5mb3JlZ3JvdW5kX2NvbG9yOworLSAgICB9IGVsc2UgaWYgKHJocy5zZXRfZm9yZWdyb3VuZF9j b2xvcikgeworLSAgICAgIGlmICghZm9yZWdyb3VuZF9jb2xvci5pc19yZ2IgfHwgIXJocy5mb3Jl Z3JvdW5kX2NvbG9yLmlzX3JnYikKKy0gICAgICAgIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoImNh bid0IEFORCBhIHRlcm1pbmFsIGNvbG9yIikpOworLSAgICAgIGZvcmVncm91bmRfY29sb3IudmFs dWUucmdiX2NvbG9yICY9IHJocy5mb3JlZ3JvdW5kX2NvbG9yLnZhbHVlLnJnYl9jb2xvcjsKKy0g ICAgfQorLQorLSAgICBpZiAoIXNldF9iYWNrZ3JvdW5kX2NvbG9yKSB7CistICAgICAgc2V0X2Jh Y2tncm91bmRfY29sb3IgPSByaHMuc2V0X2JhY2tncm91bmRfY29sb3I7CistICAgICAgYmFja2dy b3VuZF9jb2xvciA9IHJocy5iYWNrZ3JvdW5kX2NvbG9yOworLSAgICB9IGVsc2UgaWYgKHJocy5z ZXRfYmFja2dyb3VuZF9jb2xvcikgeworLSAgICAgIGlmICghYmFja2dyb3VuZF9jb2xvci5pc19y Z2IgfHwgIXJocy5iYWNrZ3JvdW5kX2NvbG9yLmlzX3JnYikKKy0gICAgICAgIEZNVF9USFJPVyhm b3JtYXRfZXJyb3IoImNhbid0IEFORCBhIHRlcm1pbmFsIGNvbG9yIikpOworLSAgICAgIGJhY2tn cm91bmRfY29sb3IudmFsdWUucmdiX2NvbG9yICY9IHJocy5iYWNrZ3JvdW5kX2NvbG9yLnZhbHVl LnJnYl9jb2xvcjsKKy0gICAgfQorLQorLSAgICBlbXMgPSBzdGF0aWNfY2FzdDxlbXBoYXNpcz4o c3RhdGljX2Nhc3Q8dWludDhfdD4oZW1zKSAmCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihyaHMuZW1zKSk7CistICAgIHJldHVybiAqdGhpczsK Ky0gIH0KKy0KKy0gIGZyaWVuZCBGTVRfQ09OU1RFWFBSX0RFQ0wgdGV4dF9zdHlsZSBmZyhkZXRh aWw6OmNvbG9yX3R5cGUgZm9yZWdyb3VuZCkKKy0gICAgICBGTVRfTk9FWENFUFQ7CistCistICBm cmllbmQgRk1UX0NPTlNURVhQUl9ERUNMIHRleHRfc3R5bGUgYmcoZGV0YWlsOjpjb2xvcl90eXBl IGJhY2tncm91bmQpCistICAgICAgRk1UX05PRVhDRVBUOworLQorLSAgZGV0YWlsOjpjb2xvcl90 eXBlIGZvcmVncm91bmRfY29sb3I7CistICBkZXRhaWw6OmNvbG9yX3R5cGUgYmFja2dyb3VuZF9j b2xvcjsKKy0gIGJvb2wgc2V0X2ZvcmVncm91bmRfY29sb3I7CistICBib29sIHNldF9iYWNrZ3Jv dW5kX2NvbG9yOworLSAgZW1waGFzaXMgZW1zOworLX07CistCistLyoqIENyZWF0ZXMgYSB0ZXh0 IHN0eWxlIGZyb20gdGhlIGZvcmVncm91bmQgKHRleHQpIGNvbG9yLiAqLworLUZNVF9DT05TVEVY UFIgaW5saW5lIHRleHRfc3R5bGUgZmcoZGV0YWlsOjpjb2xvcl90eXBlIGZvcmVncm91bmQpIEZN VF9OT0VYQ0VQVCB7CistICByZXR1cm4gdGV4dF9zdHlsZSh0cnVlLCBmb3JlZ3JvdW5kKTsKKy19 CistCistLyoqIENyZWF0ZXMgYSB0ZXh0IHN0eWxlIGZyb20gdGhlIGJhY2tncm91bmQgY29sb3Iu ICovCistRk1UX0NPTlNURVhQUiBpbmxpbmUgdGV4dF9zdHlsZSBiZyhkZXRhaWw6OmNvbG9yX3R5 cGUgYmFja2dyb3VuZCkgRk1UX05PRVhDRVBUIHsKKy0gIHJldHVybiB0ZXh0X3N0eWxlKGZhbHNl LCBiYWNrZ3JvdW5kKTsKKy19CistCistRk1UX0NPTlNURVhQUiBpbmxpbmUgdGV4dF9zdHlsZSBv cGVyYXRvcnwoZW1waGFzaXMgbGhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVtcGhhc2lzIHJocykgRk1UX05PRVhDRVBUIHsKKy0gIHJldHVybiB0ZXh0X3N0 eWxlKGxocykgfCByaHM7CistfQorLQorLUZNVF9CRUdJTl9ERVRBSUxfTkFNRVNQQUNFCistCist dGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IHN0cnVjdCBhbnNpX2NvbG9yX2VzY2FwZSB7CistICBG TVRfQ09OU1RFWFBSIGFuc2lfY29sb3JfZXNjYXBlKGRldGFpbDo6Y29sb3JfdHlwZSB0ZXh0X2Nv bG9yLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlc2Mp IEZNVF9OT0VYQ0VQVCB7CistICAgIC8vIElmIHdlIGhhdmUgYSB0ZXJtaW5hbCBjb2xvciwgd2Ug bmVlZCB0byBvdXRwdXQgYW5vdGhlciBlc2NhcGUgY29kZQorLSAgICAvLyBzZXF1ZW5jZS4KKy0g ICAgaWYgKCF0ZXh0X2NvbG9yLmlzX3JnYikgeworLSAgICAgIGJvb2wgaXNfYmFja2dyb3VuZCA9 IGVzYyA9PSBzdHJpbmdfdmlldygiXHgxYls0ODsyOyIpOworLSAgICAgIHVpbnQzMl90IHZhbHVl ID0gdGV4dF9jb2xvci52YWx1ZS50ZXJtX2NvbG9yOworLSAgICAgIC8vIEJhY2tncm91bmQgQVND SUkgY29kZXMgYXJlIHRoZSBzYW1lIGFzIHRoZSBmb3JlZ3JvdW5kIG9uZXMgYnV0IHdpdGgKKy0g ICAgICAvLyAxMCBtb3JlLgorLSAgICAgIGlmIChpc19iYWNrZ3JvdW5kKSB2YWx1ZSArPSAxMHU7 CistCistICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKy0gICAgICBidWZmZXJbaW5kZXgrK10gPSBz dGF0aWNfY2FzdDxDaGFyPignXHgxYicpOworLSAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IHN0YXRp Y19jYXN0PENoYXI+KCdbJyk7CistCistICAgICAgaWYgKHZhbHVlID49IDEwMHUpIHsKKy0gICAg ICAgIGJ1ZmZlcltpbmRleCsrXSA9IHN0YXRpY19jYXN0PENoYXI+KCcxJyk7CistICAgICAgICB2 YWx1ZSAlPSAxMDB1OworLSAgICAgIH0KKy0gICAgICBidWZmZXJbaW5kZXgrK10gPSBzdGF0aWNf Y2FzdDxDaGFyPignMCcgKyB2YWx1ZSAvIDEwdSk7CistICAgICAgYnVmZmVyW2luZGV4KytdID0g c3RhdGljX2Nhc3Q8Q2hhcj4oJzAnICsgdmFsdWUgJSAxMHUpOworLQorLSAgICAgIGJ1ZmZlcltp bmRleCsrXSA9IHN0YXRpY19jYXN0PENoYXI+KCdtJyk7CistICAgICAgYnVmZmVyW2luZGV4Kytd ID0gc3RhdGljX2Nhc3Q8Q2hhcj4oJ1wwJyk7CistICAgICAgcmV0dXJuOworLSAgICB9CistCist ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNzsgaSsrKSB7CistICAgICAgYnVmZmVyW2ldID0gc3Rh dGljX2Nhc3Q8Q2hhcj4oZXNjW2ldKTsKKy0gICAgfQorLSAgICByZ2IgY29sb3IodGV4dF9jb2xv ci52YWx1ZS5yZ2JfY29sb3IpOworLSAgICB0b19lc2MoY29sb3IuciwgYnVmZmVyICsgNywgJzsn KTsKKy0gICAgdG9fZXNjKGNvbG9yLmcsIGJ1ZmZlciArIDExLCAnOycpOworLSAgICB0b19lc2Mo Y29sb3IuYiwgYnVmZmVyICsgMTUsICdtJyk7CistICAgIGJ1ZmZlclsxOV0gPSBzdGF0aWNfY2Fz dDxDaGFyPigwKTsKKy0gIH0KKy0gIEZNVF9DT05TVEVYUFIgYW5zaV9jb2xvcl9lc2NhcGUoZW1w aGFzaXMgZW0pIEZNVF9OT0VYQ0VQVCB7CistICAgIHVpbnQ4X3QgZW1fY29kZXNbbnVtX2VtcGhh c2VzXSA9IHt9OworLSAgICBpZiAoaGFzX2VtcGhhc2lzKGVtLCBlbXBoYXNpczo6Ym9sZCkpIGVt X2NvZGVzWzBdID0gMTsKKy0gICAgaWYgKGhhc19lbXBoYXNpcyhlbSwgZW1waGFzaXM6OmZhaW50 KSkgZW1fY29kZXNbMV0gPSAyOworLSAgICBpZiAoaGFzX2VtcGhhc2lzKGVtLCBlbXBoYXNpczo6 aXRhbGljKSkgZW1fY29kZXNbMl0gPSAzOworLSAgICBpZiAoaGFzX2VtcGhhc2lzKGVtLCBlbXBo YXNpczo6dW5kZXJsaW5lKSkgZW1fY29kZXNbM10gPSA0OworLSAgICBpZiAoaGFzX2VtcGhhc2lz KGVtLCBlbXBoYXNpczo6YmxpbmspKSBlbV9jb2Rlc1s0XSA9IDU7CistICAgIGlmIChoYXNfZW1w aGFzaXMoZW0sIGVtcGhhc2lzOjpyZXZlcnNlKSkgZW1fY29kZXNbNV0gPSA3OworLSAgICBpZiAo aGFzX2VtcGhhc2lzKGVtLCBlbXBoYXNpczo6Y29uY2VhbCkpIGVtX2NvZGVzWzZdID0gODsKKy0g ICAgaWYgKGhhc19lbXBoYXNpcyhlbSwgZW1waGFzaXM6OnN0cmlrZXRocm91Z2gpKSBlbV9jb2Rl c1s3XSA9IDk7CistCistICAgIHNpemVfdCBpbmRleCA9IDA7CistICAgIGZvciAoc2l6ZV90IGkg PSAwOyBpIDwgbnVtX2VtcGhhc2VzOyArK2kpIHsKKy0gICAgICBpZiAoIWVtX2NvZGVzW2ldKSBj b250aW51ZTsKKy0gICAgICBidWZmZXJbaW5kZXgrK10gPSBzdGF0aWNfY2FzdDxDaGFyPignXHgx YicpOworLSAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IHN0YXRpY19jYXN0PENoYXI+KCdbJyk7Cist ICAgICAgYnVmZmVyW2luZGV4KytdID0gc3RhdGljX2Nhc3Q8Q2hhcj4oJzAnICsgZW1fY29kZXNb aV0pOworLSAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IHN0YXRpY19jYXN0PENoYXI+KCdtJyk7Cist ICAgIH0KKy0gICAgYnVmZmVyW2luZGV4KytdID0gc3RhdGljX2Nhc3Q8Q2hhcj4oMCk7CistICB9 CistICBGTVRfQ09OU1RFWFBSIG9wZXJhdG9yIGNvbnN0IENoYXIqKCkgY29uc3QgRk1UX05PRVhD RVBUIHsgcmV0dXJuIGJ1ZmZlcjsgfQorLQorLSAgRk1UX0NPTlNURVhQUiBjb25zdCBDaGFyKiBi ZWdpbigpIGNvbnN0IEZNVF9OT0VYQ0VQVCB7IHJldHVybiBidWZmZXI7IH0KKy0gIEZNVF9DT05T VEVYUFJfQ0hBUl9UUkFJVFMgY29uc3QgQ2hhciogZW5kKCkgY29uc3QgRk1UX05PRVhDRVBUIHsK Ky0gICAgcmV0dXJuIGJ1ZmZlciArIHN0ZDo6Y2hhcl90cmFpdHM8Q2hhcj46Omxlbmd0aChidWZm ZXIpOworLSAgfQorLQorLSBwcml2YXRlOgorLSAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt X2VtcGhhc2VzID0gODsKKy0gIENoYXIgYnVmZmVyWzd1ICsgM3UgKiBudW1fZW1waGFzZXMgKyAx dV07CistCistICBzdGF0aWMgRk1UX0NPTlNURVhQUiB2b2lkIHRvX2VzYyh1aW50OF90IGMsIENo YXIqIG91dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGVsaW1p dGVyKSBGTVRfTk9FWENFUFQgeworLSAgICBvdXRbMF0gPSBzdGF0aWNfY2FzdDxDaGFyPignMCcg KyBjIC8gMTAwKTsKKy0gICAgb3V0WzFdID0gc3RhdGljX2Nhc3Q8Q2hhcj4oJzAnICsgYyAvIDEw ICUgMTApOworLSAgICBvdXRbMl0gPSBzdGF0aWNfY2FzdDxDaGFyPignMCcgKyBjICUgMTApOwor LSAgICBvdXRbM10gPSBzdGF0aWNfY2FzdDxDaGFyPihkZWxpbWl0ZXIpOworLSAgfQorLSAgc3Rh dGljIEZNVF9DT05TVEVYUFIgYm9vbCBoYXNfZW1waGFzaXMoZW1waGFzaXMgZW0sCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXBoYXNpcyBtYXNrKSBGTVRfTk9F WENFUFQgeworLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oZW0pICYgc3RhdGljX2Nh c3Q8dWludDhfdD4obWFzayk7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh cj4KKy1GTVRfQ09OU1RFWFBSIGFuc2lfY29sb3JfZXNjYXBlPENoYXI+IG1ha2VfZm9yZWdyb3Vu ZF9jb2xvcigKKy0gICAgZGV0YWlsOjpjb2xvcl90eXBlIGZvcmVncm91bmQpIEZNVF9OT0VYQ0VQ VCB7CistICByZXR1cm4gYW5zaV9jb2xvcl9lc2NhcGU8Q2hhcj4oZm9yZWdyb3VuZCwgIlx4MWJb Mzg7MjsiKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CistRk1UX0NPTlNURVhQ UiBhbnNpX2NvbG9yX2VzY2FwZTxDaGFyPiBtYWtlX2JhY2tncm91bmRfY29sb3IoCistICAgIGRl dGFpbDo6Y29sb3JfdHlwZSBiYWNrZ3JvdW5kKSBGTVRfTk9FWENFUFQgeworLSAgcmV0dXJuIGFu c2lfY29sb3JfZXNjYXBlPENoYXI+KGJhY2tncm91bmQsICJceDFiWzQ4OzI7Iik7CistfQorLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLUZNVF9DT05TVEVYUFIgYW5zaV9jb2xvcl9lc2Nh cGU8Q2hhcj4gbWFrZV9lbXBoYXNpcyhlbXBoYXNpcyBlbSkgRk1UX05PRVhDRVBUIHsKKy0gIHJl dHVybiBhbnNpX2NvbG9yX2VzY2FwZTxDaGFyPihlbSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBl bmFtZSBDaGFyPgorLWlubGluZSB2b2lkIGZwdXRzKGNvbnN0IENoYXIqIGNoYXJzLCBGSUxFKiBz dHJlYW0pIEZNVF9OT0VYQ0VQVCB7CistICBzdGQ6OmZwdXRzKGNoYXJzLCBzdHJlYW0pOworLX0K Ky0KKy10ZW1wbGF0ZSA8PgorLWlubGluZSB2b2lkIGZwdXRzPHdjaGFyX3Q+KGNvbnN0IHdjaGFy X3QqIGNoYXJzLCBGSUxFKiBzdHJlYW0pIEZNVF9OT0VYQ0VQVCB7CistICBzdGQ6OmZwdXR3cyhj aGFycywgc3RyZWFtKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IGlubGluZSB2 b2lkIHJlc2V0X2NvbG9yKEZJTEUqIHN0cmVhbSkgRk1UX05PRVhDRVBUIHsKKy0gIGZwdXRzKCJc eDFiWzBtIiwgc3RyZWFtKTsKKy19CistCistdGVtcGxhdGUgPD4gaW5saW5lIHZvaWQgcmVzZXRf Y29sb3I8d2NoYXJfdD4oRklMRSogc3RyZWFtKSBGTVRfTk9FWENFUFQgeworLSAgZnB1dHMoTCJc eDFiWzBtIiwgc3RyZWFtKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CistaW5s aW5lIHZvaWQgcmVzZXRfY29sb3IoYnVmZmVyPENoYXI+JiBidWZmZXIpIEZNVF9OT0VYQ0VQVCB7 CistICBhdXRvIHJlc2V0X2NvbG9yID0gc3RyaW5nX3ZpZXcoIlx4MWJbMG0iKTsKKy0gIGJ1ZmZl ci5hcHBlbmQocmVzZXRfY29sb3IuYmVnaW4oKSwgcmVzZXRfY29sb3IuZW5kKCkpOworLX0KKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy12b2lkIHZmb3JtYXRfdG8oYnVmZmVyPENoYXI+ JiBidWYsIGNvbnN0IHRleHRfc3R5bGUmIHRzLAorLSAgICAgICAgICAgICAgICBiYXNpY19zdHJp bmdfdmlldzxDaGFyPiBmb3JtYXRfc3RyLAorLSAgICAgICAgICAgICAgICBiYXNpY19mb3JtYXRf YXJnczxidWZmZXJfY29udGV4dDx0eXBlX2lkZW50aXR5X3Q8Q2hhcj4+PiBhcmdzKSB7CistICBi b29sIGhhc19zdHlsZSA9IGZhbHNlOworLSAgaWYgKHRzLmhhc19lbXBoYXNpcygpKSB7CistICAg IGhhc19zdHlsZSA9IHRydWU7CistICAgIGF1dG8gZW1waGFzaXMgPSBkZXRhaWw6Om1ha2VfZW1w aGFzaXM8Q2hhcj4odHMuZ2V0X2VtcGhhc2lzKCkpOworLSAgICBidWYuYXBwZW5kKGVtcGhhc2lz LmJlZ2luKCksIGVtcGhhc2lzLmVuZCgpKTsKKy0gIH0KKy0gIGlmICh0cy5oYXNfZm9yZWdyb3Vu ZCgpKSB7CistICAgIGhhc19zdHlsZSA9IHRydWU7CistICAgIGF1dG8gZm9yZWdyb3VuZCA9IGRl dGFpbDo6bWFrZV9mb3JlZ3JvdW5kX2NvbG9yPENoYXI+KHRzLmdldF9mb3JlZ3JvdW5kKCkpOwor LSAgICBidWYuYXBwZW5kKGZvcmVncm91bmQuYmVnaW4oKSwgZm9yZWdyb3VuZC5lbmQoKSk7Cist ICB9CistICBpZiAodHMuaGFzX2JhY2tncm91bmQoKSkgeworLSAgICBoYXNfc3R5bGUgPSB0cnVl OworLSAgICBhdXRvIGJhY2tncm91bmQgPSBkZXRhaWw6Om1ha2VfYmFja2dyb3VuZF9jb2xvcjxD aGFyPih0cy5nZXRfYmFja2dyb3VuZCgpKTsKKy0gICAgYnVmLmFwcGVuZChiYWNrZ3JvdW5kLmJl Z2luKCksIGJhY2tncm91bmQuZW5kKCkpOworLSAgfQorLSAgZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1 ZiwgZm9ybWF0X3N0ciwgYXJncywge30pOworLSAgaWYgKGhhc19zdHlsZSkgZGV0YWlsOjpyZXNl dF9jb2xvcjxDaGFyPihidWYpOworLX0KKy0KKy1GTVRfRU5EX0RFVEFJTF9OQU1FU1BBQ0UKKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUgQ2hhciA9IGNoYXJfdDxTPj4KKy12b2lk IHZwcmludChzdGQ6OkZJTEUqIGYsIGNvbnN0IHRleHRfc3R5bGUmIHRzLCBjb25zdCBTJiBmb3Jt YXQsCistICAgICAgICAgICAgYmFzaWNfZm9ybWF0X2FyZ3M8YnVmZmVyX2NvbnRleHQ8dHlwZV9p ZGVudGl0eV90PENoYXI+Pj4gYXJncykgeworLSAgYmFzaWNfbWVtb3J5X2J1ZmZlcjxDaGFyPiBi dWY7CistICBkZXRhaWw6OnZmb3JtYXRfdG8oYnVmLCB0cywgdG9fc3RyaW5nX3ZpZXcoZm9ybWF0 KSwgYXJncyk7CistICBidWYucHVzaF9iYWNrKENoYXIoMCkpOworLSAgZGV0YWlsOjpmcHV0cyhi dWYuZGF0YSgpLCBmKTsKKy19CistCistLyoqCistICBccnN0CistICBGb3JtYXRzIGEgc3RyaW5n IGFuZCBwcmludHMgaXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlIHN0cmVhbSB1c2luZyBBTlNJCist ICBlc2NhcGUgc2VxdWVuY2VzIHRvIHNwZWNpZnkgdGV4dCBmb3JtYXR0aW5nLgorLQorLSAgKipF eGFtcGxlKio6OgorLQorLSAgICBmbXQ6OnByaW50KGZtdDo6ZW1waGFzaXM6OmJvbGQgfCBmZyhm bXQ6OmNvbG9yOjpyZWQpLAorLSAgICAgICAgICAgICAgICJFbGFwc2VkIHRpbWU6IHswOi4yZn0g c2Vjb25kcyIsIDEuMjMpOworLSAgXGVuZHJzdAorLSAqLworLXRlbXBsYXRlIDx0eXBlbmFtZSBT LCB0eXBlbmFtZS4uLiBBcmdzLAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNf c3RyaW5nPFM+Ojp2YWx1ZSk+Cistdm9pZCBwcmludChzdGQ6OkZJTEUqIGYsIGNvbnN0IHRleHRf c3R5bGUmIHRzLCBjb25zdCBTJiBmb3JtYXRfc3RyLAorLSAgICAgICAgICAgY29uc3QgQXJncyYu Li4gYXJncykgeworLSAgdnByaW50KGYsIHRzLCBmb3JtYXRfc3RyLAorLSAgICAgICAgIGZtdDo6 bWFrZV9hcmdzX2NoZWNrZWQ8QXJncy4uLj4oZm9ybWF0X3N0ciwgYXJncy4uLikpOworLX0KKy0K Ky0vKioKKy0gIFxyc3QKKy0gIEZvcm1hdHMgYSBzdHJpbmcgYW5kIHByaW50cyBpdCB0byBzdGRv dXQgdXNpbmcgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIHRvCistICBzcGVjaWZ5IHRleHQgZm9ybWF0 dGluZy4KKy0KKy0gICoqRXhhbXBsZSoqOjoKKy0KKy0gICAgZm10OjpwcmludChmbXQ6OmVtcGhh c2lzOjpib2xkIHwgZmcoZm10Ojpjb2xvcjo6cmVkKSwKKy0gICAgICAgICAgICAgICAiRWxhcHNl ZCB0aW1lOiB7MDouMmZ9IHNlY29uZHMiLCAxLjIzKTsKKy0gIFxlbmRyc3QKKy0gKi8KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUuLi4gQXJncywKKy0gICAgICAgICAgRk1UX0VOQUJM RV9JRihkZXRhaWw6OmlzX3N0cmluZzxTPjo6dmFsdWUpPgorLXZvaWQgcHJpbnQoY29uc3QgdGV4 dF9zdHlsZSYgdHMsIGNvbnN0IFMmIGZvcm1hdF9zdHIsIGNvbnN0IEFyZ3MmLi4uIGFyZ3MpIHsK Ky0gIHJldHVybiBwcmludChzdGRvdXQsIHRzLCBmb3JtYXRfc3RyLCBhcmdzLi4uKTsKKy19Cist CistdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIENoYXIgPSBjaGFyX3Q8Uz4+CistaW5s aW5lIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+IHZmb3JtYXQoCistICAgIGNvbnN0IHRleHRfc3R5 bGUmIHRzLCBjb25zdCBTJiBmb3JtYXRfc3RyLAorLSAgICBiYXNpY19mb3JtYXRfYXJnczxidWZm ZXJfY29udGV4dDx0eXBlX2lkZW50aXR5X3Q8Q2hhcj4+PiBhcmdzKSB7CistICBiYXNpY19tZW1v cnlfYnVmZmVyPENoYXI+IGJ1ZjsKKy0gIGRldGFpbDo6dmZvcm1hdF90byhidWYsIHRzLCB0b19z dHJpbmdfdmlldyhmb3JtYXRfc3RyKSwgYXJncyk7CistICByZXR1cm4gZm10Ojp0b19zdHJpbmco YnVmKTsKKy19CistCistLyoqCistICBccnN0CistICBGb3JtYXRzIGFyZ3VtZW50cyBhbmQgcmV0 dXJucyB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nIHVzaW5nIEFOU0kKKy0gIGVzY2FwZSBzZXF1ZW5j ZXMgdG8gc3BlY2lmeSB0ZXh0IGZvcm1hdHRpbmcuCistCistICAqKkV4YW1wbGUqKjo6CistCist ICAgICNpbmNsdWRlIDxmbXQvY29sb3IuaD4KKy0gICAgc3RkOjpzdHJpbmcgbWVzc2FnZSA9IGZt dDo6Zm9ybWF0KGZtdDo6ZW1waGFzaXM6OmJvbGQgfCBmZyhmbXQ6OmNvbG9yOjpyZWQpLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBhbnN3ZXIgaXMge30iLCA0 Mik7CistICBcZW5kcnN0CistKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUuLi4g QXJncywgdHlwZW5hbWUgQ2hhciA9IGNoYXJfdDxTPj4KKy1pbmxpbmUgc3RkOjpiYXNpY19zdHJp bmc8Q2hhcj4gZm9ybWF0KGNvbnN0IHRleHRfc3R5bGUmIHRzLCBjb25zdCBTJiBmb3JtYXRfc3Ry LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJncyYuLi4g YXJncykgeworLSAgcmV0dXJuIGZtdDo6dmZvcm1hdCh0cywgdG9fc3RyaW5nX3ZpZXcoZm9ybWF0 X3N0ciksCistICAgICAgICAgICAgICAgICAgICAgIGZtdDo6bWFrZV9hcmdzX2NoZWNrZWQ8QXJn cy4uLj4oZm9ybWF0X3N0ciwgYXJncy4uLikpOworLX0KKy0KKy0vKioKKy0gIEZvcm1hdHMgYSBz dHJpbmcgd2l0aCB0aGUgZ2l2ZW4gdGV4dF9zdHlsZSBhbmQgd3JpdGVzIHRoZSBvdXRwdXQgdG8g YGBvdXRgYC4KKy0gKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIENo YXIsCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoZGV0YWlsOjppc19vdXRwdXRfaXRlcmF0b3I8 T3V0cHV0SXQsIENoYXI+Ojp2YWx1ZSk+CistT3V0cHV0SXQgdmZvcm1hdF90bygKKy0gICAgT3V0 cHV0SXQgb3V0LCBjb25zdCB0ZXh0X3N0eWxlJiB0cywgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4g Zm9ybWF0X3N0ciwKKy0gICAgYmFzaWNfZm9ybWF0X2FyZ3M8YnVmZmVyX2NvbnRleHQ8dHlwZV9p ZGVudGl0eV90PENoYXI+Pj4gYXJncykgeworLSAgYXV0byYmIGJ1ZiA9IGRldGFpbDo6Z2V0X2J1 ZmZlcjxDaGFyPihvdXQpOworLSAgZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1ZiwgdHMsIGZvcm1hdF9z dHIsIGFyZ3MpOworLSAgcmV0dXJuIGRldGFpbDo6Z2V0X2l0ZXJhdG9yKGJ1Zik7CistfQorLQor LS8qKgorLSAgXHJzdAorLSAgRm9ybWF0cyBhcmd1bWVudHMgd2l0aCB0aGUgZ2l2ZW4gdGV4dF9z dHlsZSwgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIG91dHB1dAorLSAgaXRlcmF0b3IgYGBvdXRg YCBhbmQgcmV0dXJucyB0aGUgaXRlcmF0b3IgcGFzdCB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgcmFu Z2UuCistCistICAqKkV4YW1wbGUqKjo6CistCistICAgIHN0ZDo6dmVjdG9yPGNoYXI+IG91dDsK Ky0gICAgZm10Ojpmb3JtYXRfdG8oc3RkOjpiYWNrX2luc2VydGVyKG91dCksCistICAgICAgICAg ICAgICAgICAgIGZtdDo6ZW1waGFzaXM6OmJvbGQgfCBmZyhmbXQ6OmNvbG9yOjpyZWQpLCAie30i LCA0Mik7CistICBcZW5kcnN0CistKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5 cGVuYW1lIFMsIHR5cGVuYW1lLi4uIEFyZ3MsCistICAgICAgICAgIGJvb2wgZW5hYmxlID0gZGV0 YWlsOjppc19vdXRwdXRfaXRlcmF0b3I8T3V0cHV0SXQsIGNoYXJfdDxTPj46OnZhbHVlJiYKKy0g ICAgICAgICAgICAgIGRldGFpbDo6aXNfc3RyaW5nPFM+Ojp2YWx1ZT4KKy1pbmxpbmUgYXV0byBm b3JtYXRfdG8oT3V0cHV0SXQgb3V0LCBjb25zdCB0ZXh0X3N0eWxlJiB0cywgY29uc3QgUyYgZm9y bWF0X3N0ciwKKy0gICAgICAgICAgICAgICAgICAgICAgQXJncyYmLi4uIGFyZ3MpIC0+CistICAg IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGVuYWJsZSwgT3V0cHV0SXQ+Ojp0eXBlIHsKKy0gIHJl dHVybiB2Zm9ybWF0X3RvKG91dCwgdHMsIHRvX3N0cmluZ192aWV3KGZvcm1hdF9zdHIpLAorLSAg ICAgICAgICAgICAgICAgICAgZm10OjptYWtlX2FyZ3NfY2hlY2tlZDxBcmdzLi4uPihmb3JtYXRf c3RyLCBhcmdzLi4uKSk7CistfQorLQorLUZNVF9NT0RVTEVfRVhQT1JUX0VORAorLUZNVF9FTkRf TkFNRVNQQUNFCistCistI2VuZGlmICAvLyBGTVRfQ09MT1JfSF8KK2RpZmYgLS1naXQgYS9pbmNs dWRlL2RwcC9mbXQvY29tcGlsZS5oIGIvaW5jbHVkZS9kcHAvZm10L2NvbXBpbGUuaAorZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAxZGJhM2RkLi4wMDAwMDAwCistLS0gYS9pbmNsdWRl L2RwcC9mbXQvY29tcGlsZS5oCisrKysgL2Rldi9udWxsCitAQCAtMSw2NDIgKzAsMCBAQAorLS8v IEZvcm1hdHRpbmcgbGlicmFyeSBmb3IgQysrIC0gZXhwZXJpbWVudGFsIGZvcm1hdCBzdHJpbmcg Y29tcGlsYXRpb24KKy0vLworLS8vIENvcHlyaWdodCAoYykgMjAxMiAtIHByZXNlbnQsIFZpY3Rv ciBadmVyb3ZpY2ggYW5kIGZtdCBjb250cmlidXRvcnMKKy0vLyBBbGwgcmlnaHRzIHJlc2VydmVk LgorLS8vCistLy8gRm9yIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGZvcm1hdC5o LgorLQorLSNpZm5kZWYgRk1UX0NPTVBJTEVfSF8KKy0jZGVmaW5lIEZNVF9DT01QSUxFX0hfCist CistI2luY2x1ZGUgImZvcm1hdC5oIgorLQorLUZNVF9CRUdJTl9OQU1FU1BBQ0UKKy1uYW1lc3Bh Y2UgZGV0YWlsIHsKKy0KKy0vLyBBbiBvdXRwdXQgaXRlcmF0b3IgdGhhdCBjb3VudHMgdGhlIG51 bWJlciBvZiBvYmplY3RzIHdyaXR0ZW4gdG8gaXQgYW5kCistLy8gZGlzY2FyZHMgdGhlbS4KKy1j bGFzcyBjb3VudGluZ19pdGVyYXRvciB7CistIHByaXZhdGU6CistICBzaXplX3QgY291bnRfOwor LQorLSBwdWJsaWM6CistICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6b3V0cHV0X2l0 ZXJhdG9yX3RhZzsKKy0gIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90Owor LSAgdXNpbmcgcG9pbnRlciA9IHZvaWQ7CistICB1c2luZyByZWZlcmVuY2UgPSB2b2lkOworLSAg dXNpbmcgX1VuY2hlY2tlZF90eXBlID0gY291bnRpbmdfaXRlcmF0b3I7ICAvLyBNYXJrIGl0ZXJh dG9yIGFzIGNoZWNrZWQuCistCistICBzdHJ1Y3QgdmFsdWVfdHlwZSB7CistICAgIHRlbXBsYXRl IDx0eXBlbmFtZSBUPiB2b2lkIG9wZXJhdG9yPShjb25zdCBUJikge30KKy0gIH07CistCistICBj b3VudGluZ19pdGVyYXRvcigpIDogY291bnRfKDApIHt9CistCistICBzaXplX3QgY291bnQoKSBj b25zdCB7IHJldHVybiBjb3VudF87IH0KKy0KKy0gIGNvdW50aW5nX2l0ZXJhdG9yJiBvcGVyYXRv cisrKCkgeworLSAgICArK2NvdW50XzsKKy0gICAgcmV0dXJuICp0aGlzOworLSAgfQorLSAgY291 bnRpbmdfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKKy0gICAgYXV0byBpdCA9ICp0aGlzOwor LSAgICArKyp0aGlzOworLSAgICByZXR1cm4gaXQ7CistICB9CistCistICBmcmllbmQgY291bnRp bmdfaXRlcmF0b3Igb3BlcmF0b3IrKGNvdW50aW5nX2l0ZXJhdG9yIGl0LCBkaWZmZXJlbmNlX3R5 cGUgbikgeworLSAgICBpdC5jb3VudF8gKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihuKTsKKy0gICAg cmV0dXJuIGl0OworLSAgfQorLQorLSAgdmFsdWVfdHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJl dHVybiB7fTsgfQorLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIElu cHV0SXQ+CistaW5saW5lIGNvdW50aW5nX2l0ZXJhdG9yIGNvcHlfc3RyKElucHV0SXQgYmVnaW4s IElucHV0SXQgZW5kLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGlu Z19pdGVyYXRvciBpdCkgeworLSAgcmV0dXJuIGl0ICsgKGVuZCAtIGJlZ2luKTsKKy19CistCist dGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0PiBjbGFzcyB0cnVuY2F0aW5nX2l0ZXJhdG9yX2Jh c2UgeworLSBwcm90ZWN0ZWQ6CistICBPdXRwdXRJdCBvdXRfOworLSAgc2l6ZV90IGxpbWl0XzsK Ky0gIHNpemVfdCBjb3VudF8gPSAwOworLQorLSAgdHJ1bmNhdGluZ19pdGVyYXRvcl9iYXNlKCkg OiBvdXRfKCksIGxpbWl0XygwKSB7fQorLQorLSAgdHJ1bmNhdGluZ19pdGVyYXRvcl9iYXNlKE91 dHB1dEl0IG91dCwgc2l6ZV90IGxpbWl0KQorLSAgICAgIDogb3V0XyhvdXQpLCBsaW1pdF8obGlt aXQpIHt9CistCistIHB1YmxpYzoKKy0gIHVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpv dXRwdXRfaXRlcmF0b3JfdGFnOworLSAgdXNpbmcgdmFsdWVfdHlwZSA9IHR5cGVuYW1lIHN0ZDo6 aXRlcmF0b3JfdHJhaXRzPE91dHB1dEl0Pjo6dmFsdWVfdHlwZTsKKy0gIHVzaW5nIGRpZmZlcmVu Y2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90OworLSAgdXNpbmcgcG9pbnRlciA9IHZvaWQ7CistICB1 c2luZyByZWZlcmVuY2UgPSB2b2lkOworLSAgdXNpbmcgX1VuY2hlY2tlZF90eXBlID0KKy0gICAg ICB0cnVuY2F0aW5nX2l0ZXJhdG9yX2Jhc2U7ICAvLyBNYXJrIGl0ZXJhdG9yIGFzIGNoZWNrZWQu CistCistICBPdXRwdXRJdCBiYXNlKCkgY29uc3QgeyByZXR1cm4gb3V0XzsgfQorLSAgc2l6ZV90 IGNvdW50KCkgY29uc3QgeyByZXR1cm4gY291bnRfOyB9CistfTsKKy0KKy0vLyBBbiBvdXRwdXQg aXRlcmF0b3IgdGhhdCB0cnVuY2F0ZXMgdGhlIG91dHB1dCBhbmQgY291bnRzIHRoZSBudW1iZXIg b2Ygb2JqZWN0cworLS8vIHdyaXR0ZW4gdG8gaXQuCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1 dEl0LAorLSAgICAgICAgICB0eXBlbmFtZSBFbmFibGUgPSB0eXBlbmFtZSBzdGQ6OmlzX3ZvaWQ8 CistICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxPdXRwdXRJdD46 OnZhbHVlX3R5cGU+Ojp0eXBlPgorLWNsYXNzIHRydW5jYXRpbmdfaXRlcmF0b3I7CistCistdGVt cGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0PgorLWNsYXNzIHRydW5jYXRpbmdfaXRlcmF0b3I8T3V0 cHV0SXQsIHN0ZDo6ZmFsc2VfdHlwZT4KKy0gICAgOiBwdWJsaWMgdHJ1bmNhdGluZ19pdGVyYXRv cl9iYXNlPE91dHB1dEl0PiB7CistICBtdXRhYmxlIHR5cGVuYW1lIHRydW5jYXRpbmdfaXRlcmF0 b3JfYmFzZTxPdXRwdXRJdD46OnZhbHVlX3R5cGUgYmxhY2tob2xlXzsKKy0KKy0gcHVibGljOgor LSAgdXNpbmcgdmFsdWVfdHlwZSA9IHR5cGVuYW1lIHRydW5jYXRpbmdfaXRlcmF0b3JfYmFzZTxP dXRwdXRJdD46OnZhbHVlX3R5cGU7CistCistICB0cnVuY2F0aW5nX2l0ZXJhdG9yKCkgPSBkZWZh dWx0OworLQorLSAgdHJ1bmNhdGluZ19pdGVyYXRvcihPdXRwdXRJdCBvdXQsIHNpemVfdCBsaW1p dCkKKy0gICAgICA6IHRydW5jYXRpbmdfaXRlcmF0b3JfYmFzZTxPdXRwdXRJdD4ob3V0LCBsaW1p dCkge30KKy0KKy0gIHRydW5jYXRpbmdfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CistICAgIGlm ICh0aGlzLT5jb3VudF8rKyA8IHRoaXMtPmxpbWl0XykgKyt0aGlzLT5vdXRfOworLSAgICByZXR1 cm4gKnRoaXM7CistICB9CistCistICB0cnVuY2F0aW5nX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50 KSB7CistICAgIGF1dG8gaXQgPSAqdGhpczsKKy0gICAgKysqdGhpczsKKy0gICAgcmV0dXJuIGl0 OworLSAgfQorLQorLSAgdmFsdWVfdHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeworLSAgICByZXR1 cm4gdGhpcy0+Y291bnRfIDwgdGhpcy0+bGltaXRfID8gKnRoaXMtPm91dF8gOiBibGFja2hvbGVf OworLSAgfQorLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0PgorLWNsYXNzIHRy dW5jYXRpbmdfaXRlcmF0b3I8T3V0cHV0SXQsIHN0ZDo6dHJ1ZV90eXBlPgorLSAgICA6IHB1Ymxp YyB0cnVuY2F0aW5nX2l0ZXJhdG9yX2Jhc2U8T3V0cHV0SXQ+IHsKKy0gcHVibGljOgorLSAgdHJ1 bmNhdGluZ19pdGVyYXRvcigpID0gZGVmYXVsdDsKKy0KKy0gIHRydW5jYXRpbmdfaXRlcmF0b3Io T3V0cHV0SXQgb3V0LCBzaXplX3QgbGltaXQpCistICAgICAgOiB0cnVuY2F0aW5nX2l0ZXJhdG9y X2Jhc2U8T3V0cHV0SXQ+KG91dCwgbGltaXQpIHt9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gdHJ1bmNhdGluZ19pdGVyYXRvciYgb3BlcmF0b3I9KFQgdmFsKSB7CistICAgIGlmICh0aGlz LT5jb3VudF8rKyA8IHRoaXMtPmxpbWl0XykgKnRoaXMtPm91dF8rKyA9IHZhbDsKKy0gICAgcmV0 dXJuICp0aGlzOworLSAgfQorLQorLSAgdHJ1bmNhdGluZ19pdGVyYXRvciYgb3BlcmF0b3IrKygp IHsgcmV0dXJuICp0aGlzOyB9CistICB0cnVuY2F0aW5nX2l0ZXJhdG9yJiBvcGVyYXRvcisrKGlu dCkgeyByZXR1cm4gKnRoaXM7IH0KKy0gIHRydW5jYXRpbmdfaXRlcmF0b3ImIG9wZXJhdG9yKigp IHsgcmV0dXJuICp0aGlzOyB9CistfTsKKy0KKy0vLyBBIGNvbXBpbGUtdGltZSBzdHJpbmcgd2hp Y2ggaXMgY29tcGlsZWQgaW50byBmYXN0IGZvcm1hdHRpbmcgY29kZS4KKy1jbGFzcyBjb21waWxl ZF9zdHJpbmcge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFM+Cistc3RydWN0IGlzX2NvbXBp bGVkX3N0cmluZyA6IHN0ZDo6aXNfYmFzZV9vZjxjb21waWxlZF9zdHJpbmcsIFM+IHt9OworLQor LS8qKgorLSAgXHJzdAorLSAgQ29udmVydHMgYSBzdHJpbmcgbGl0ZXJhbCAqcyogaW50byBhIGZv cm1hdCBzdHJpbmcgdGhhdCB3aWxsIGJlIHBhcnNlZCBhdAorLSAgY29tcGlsZSB0aW1lIGFuZCBj b252ZXJ0ZWQgaW50byBlZmZpY2llbnQgZm9ybWF0dGluZyBjb2RlLiBSZXF1aXJlcyBDKysxNwor LSAgYGBjb25zdGV4cHIgaWZgYCBjb21waWxlciBzdXBwb3J0LgorLQorLSAgKipFeGFtcGxlKio6 OgorLQorLSAgICAvLyBDb252ZXJ0cyA0MiBpbnRvIHN0ZDo6c3RyaW5nIHVzaW5nIHRoZSBtb3N0 IGVmZmljaWVudCBtZXRob2QgYW5kIG5vCistICAgIC8vIHJ1bnRpbWUgZm9ybWF0IHN0cmluZyBw cm9jZXNzaW5nLgorLSAgICBzdGQ6OnN0cmluZyBzID0gZm10Ojpmb3JtYXQoRk1UX0NPTVBJTEUo Int9IiksIDQyKTsKKy0gIFxlbmRyc3QKKy0gKi8KKy0jaWYgZGVmaW5lZChfX2NwcF9pZl9jb25z dGV4cHIpICYmIGRlZmluZWQoX19jcHBfcmV0dXJuX3R5cGVfZGVkdWN0aW9uKQorLSMgIGRlZmlu ZSBGTVRfQ09NUElMRShzKSBcCistICAgIEZNVF9TVFJJTkdfSU1QTChzLCBmbXQ6OmRldGFpbDo6 Y29tcGlsZWRfc3RyaW5nLCBleHBsaWNpdCkKKy0jZWxzZQorLSMgIGRlZmluZSBGTVRfQ09NUElM RShzKSBGTVRfU1RSSU5HKHMpCistI2VuZGlmCistCistI2lmIEZNVF9VU0VfTk9OVFlQRV9URU1Q TEFURV9QQVJBTUVURVJTCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHNpemVfdCBOLAorLSAg ICAgICAgICBmbXQ6OmRldGFpbF9leHBvcnRlZDo6Zml4ZWRfc3RyaW5nPENoYXIsIE4+IFN0cj4K Ky1zdHJ1Y3QgdWRsX2NvbXBpbGVkX3N0cmluZyA6IGNvbXBpbGVkX3N0cmluZyB7CistICB1c2lu ZyBjaGFyX3R5cGUgPSBDaGFyOworLSAgY29uc3RleHByIG9wZXJhdG9yIGJhc2ljX3N0cmluZ192 aWV3PGNoYXJfdHlwZT4oKSBjb25zdCB7CistICAgIHJldHVybiB7U3RyLmRhdGEsIE4gLSAxfTsK Ky0gIH0KKy19OworLSNlbmRpZgorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4u LiBUYWlsPgorLWNvbnN0IFQmIGZpcnN0KGNvbnN0IFQmIHZhbHVlLCBjb25zdCBUYWlsJi4uLikg eworLSAgcmV0dXJuIHZhbHVlOworLX0KKy0KKy0jaWYgZGVmaW5lZChfX2NwcF9pZl9jb25zdGV4 cHIpICYmIGRlZmluZWQoX19jcHBfcmV0dXJuX3R5cGVfZGVkdWN0aW9uKQorLXRlbXBsYXRlIDx0 eXBlbmFtZS4uLiBBcmdzPiBzdHJ1Y3QgdHlwZV9saXN0IHt9OworLQorLS8vIFJldHVybnMgYSBy ZWZlcmVuY2UgdG8gdGhlIGFyZ3VtZW50IGF0IGluZGV4IE4gZnJvbSBbZmlyc3QsIHJlc3QuLi5d LgorLXRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KKy1jb25z dGV4cHIgY29uc3QgYXV0byYgZ2V0KFtbbWF5YmVfdW51c2VkXV0gY29uc3QgVCYgZmlyc3QsCist ICAgICAgICAgICAgICAgICAgICAgICAgICBbW21heWJlX3VudXNlZF1dIGNvbnN0IEFyZ3MmLi4u IHJlc3QpIHsKKy0gIHN0YXRpY19hc3NlcnQoTiA8IDEgKyBzaXplb2YuLi4oQXJncyksICJpbmRl eCBpcyBvdXQgb2YgYm91bmRzIik7CistICBpZiBjb25zdGV4cHIgKE4gPT0gMCkKKy0gICAgcmV0 dXJuIGZpcnN0OworLSAgZWxzZQorLSAgICByZXR1cm4gZGV0YWlsOjpnZXQ8TiAtIDE+KHJlc3Qu Li4pOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUuLi4gQXJncz4K Ky1jb25zdGV4cHIgaW50IGdldF9hcmdfaW5kZXhfYnlfbmFtZShiYXNpY19zdHJpbmdfdmlldzxD aGFyPiBuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfbGlz dDxBcmdzLi4uPikgeworLSAgcmV0dXJuIGdldF9hcmdfaW5kZXhfYnlfbmFtZTxBcmdzLi4uPihu YW1lKTsKKy19CistCistdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZT4gc3RydWN0IGdldF90eXBl X2ltcGw7CistCistdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZS4uLiBBcmdzPiBzdHJ1Y3QgZ2V0 X3R5cGVfaW1wbDxOLCB0eXBlX2xpc3Q8QXJncy4uLj4+IHsKKy0gIHVzaW5nIHR5cGUgPQorLSAg ICAgIHJlbW92ZV9jdnJlZl90PGRlY2x0eXBlKGRldGFpbDo6Z2V0PE4+KHN0ZDo6ZGVjbHZhbDxB cmdzPigpLi4uKSk+OworLX07CistCistdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUPgorLXVz aW5nIGdldF90eXBlID0gdHlwZW5hbWUgZ2V0X3R5cGVfaW1wbDxOLCBUPjo6dHlwZTsKKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGlzX2NvbXBpbGVkX2Zvcm1hdCA6IHN0ZDo6ZmFs c2VfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4gc3RydWN0IHRleHQgewor LSAgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gZGF0YTsKKy0gIHVzaW5nIGNoYXJfdHlwZSA9IENo YXI7CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lLi4uIEFyZ3M+ CistICBjb25zdGV4cHIgT3V0cHV0SXQgZm9ybWF0KE91dHB1dEl0IG91dCwgY29uc3QgQXJncyYu Li4pIGNvbnN0IHsKKy0gICAgcmV0dXJuIHdyaXRlPENoYXI+KG91dCwgZGF0YSk7CistICB9Cist fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy1zdHJ1Y3QgaXNfY29tcGlsZWRfZm9y bWF0PHRleHQ8Q2hhcj4+IDogc3RkOjp0cnVlX3R5cGUge307CistCistdGVtcGxhdGUgPHR5cGVu YW1lIENoYXI+CistY29uc3RleHByIHRleHQ8Q2hhcj4gbWFrZV90ZXh0KGJhc2ljX3N0cmluZ192 aWV3PENoYXI+IHMsIHNpemVfdCBwb3MsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzaXplKSB7CistICByZXR1cm4ge3smc1twb3NdLCBzaXplfX07CistfQorLQorLXRl bXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBzdHJ1Y3QgY29kZV91bml0IHsKKy0gIENoYXIgdmFsdWU7 CistICB1c2luZyBjaGFyX3R5cGUgPSBDaGFyOworLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIE91 dHB1dEl0LCB0eXBlbmFtZS4uLiBBcmdzPgorLSAgY29uc3RleHByIE91dHB1dEl0IGZvcm1hdChP dXRwdXRJdCBvdXQsIGNvbnN0IEFyZ3MmLi4uKSBjb25zdCB7CistICAgIHJldHVybiB3cml0ZTxD aGFyPihvdXQsIHZhbHVlKTsKKy0gIH0KKy19OworLQorLS8vIFRoaXMgZW5zdXJlcyB0aGF0IHRo ZSBhcmd1bWVudCB0eXBlIGlzIGNvbnZlcnRpYmxlIHRvIGBjb25zdCBUJmAuCistdGVtcGxhdGUg PHR5cGVuYW1lIFQsIGludCBOLCB0eXBlbmFtZS4uLiBBcmdzPgorLWNvbnN0ZXhwciBjb25zdCBU JiBnZXRfYXJnX2NoZWNrZWQoY29uc3QgQXJncyYuLi4gYXJncykgeworLSAgY29uc3QgYXV0byYg YXJnID0gZGV0YWlsOjpnZXQ8Tj4oYXJncy4uLik7CistICBpZiBjb25zdGV4cHIgKGRldGFpbDo6 aXNfbmFtZWRfYXJnPHJlbW92ZV9jdnJlZl90PGRlY2x0eXBlKGFyZyk+PigpKSB7CistICAgIHJl dHVybiBhcmcudmFsdWU7CistICB9IGVsc2UgeworLSAgICByZXR1cm4gYXJnOworLSAgfQorLX0K Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy1zdHJ1Y3QgaXNfY29tcGlsZWRfZm9ybWF0 PGNvZGVfdW5pdDxDaGFyPj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy0vLyBBIHJlcGxhY2Vt ZW50IGZpZWxkIHRoYXQgcmVmZXJzIHRvIGFyZ3VtZW50IE4uCistdGVtcGxhdGUgPHR5cGVuYW1l IENoYXIsIHR5cGVuYW1lIFQsIGludCBOPiBzdHJ1Y3QgZmllbGQgeworLSAgdXNpbmcgY2hhcl90 eXBlID0gQ2hhcjsKKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUu Li4gQXJncz4KKy0gIGNvbnN0ZXhwciBPdXRwdXRJdCBmb3JtYXQoT3V0cHV0SXQgb3V0LCBjb25z dCBBcmdzJi4uLiBhcmdzKSBjb25zdCB7CistICAgIHJldHVybiB3cml0ZTxDaGFyPihvdXQsIGdl dF9hcmdfY2hlY2tlZDxULCBOPihhcmdzLi4uKSk7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVCwgaW50IE4+Cistc3RydWN0IGlzX2NvbXBpbGVkX2Zv cm1hdDxmaWVsZDxDaGFyLCBULCBOPj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy0vLyBBIHJl cGxhY2VtZW50IGZpZWxkIHRoYXQgcmVmZXJzIHRvIGFyZ3VtZW50IHdpdGggbmFtZS4KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgQ2hhcj4gc3RydWN0IHJ1bnRpbWVfbmFtZWRfZmllbGQgeworLSAgdXNp bmcgY2hhcl90eXBlID0gQ2hhcjsKKy0gIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IG5hbWU7Cist CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIFQ+CistICBjb25zdGV4 cHIgc3RhdGljIGJvb2wgdHJ5X2Zvcm1hdF9hcmd1bWVudCgKKy0gICAgICBPdXRwdXRJdCYgb3V0 LAorLSAgICAgIC8vIFtbbWF5YmVfdW51c2VkXV0gZHVlIHRvIHVudXNlZC1idXQtc2V0LXBhcmFt ZXRlciB3YXJuaW5nIGluIEdDQyA3LDgsOQorLSAgICAgIFtbbWF5YmVfdW51c2VkXV0gYmFzaWNf c3RyaW5nX3ZpZXc8Q2hhcj4gYXJnX25hbWUsIGNvbnN0IFQmIGFyZykgeworLSAgICBpZiBjb25z dGV4cHIgKGlzX25hbWVkX2FyZzx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6dHlwZT46OnZh bHVlKSB7CistICAgICAgaWYgKGFyZ19uYW1lID09IGFyZy5uYW1lKSB7CistICAgICAgICBvdXQg PSB3cml0ZTxDaGFyPihvdXQsIGFyZy52YWx1ZSk7CistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0g ICAgICB9CistICAgIH0KKy0gICAgcmV0dXJuIGZhbHNlOworLSAgfQorLQorLSAgdGVtcGxhdGUg PHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZS4uLiBBcmdzPgorLSAgY29uc3RleHByIE91dHB1 dEl0IGZvcm1hdChPdXRwdXRJdCBvdXQsIGNvbnN0IEFyZ3MmLi4uIGFyZ3MpIGNvbnN0IHsKKy0g ICAgYm9vbCBmb3VuZCA9ICh0cnlfZm9ybWF0X2FyZ3VtZW50KG91dCwgbmFtZSwgYXJncykgfHwg Li4uKTsKKy0gICAgaWYgKCFmb3VuZCkgeworLSAgICAgIEZNVF9USFJPVyhmb3JtYXRfZXJyb3Io ImFyZ3VtZW50IHdpdGggc3BlY2lmaWVkIG5hbWUgaXMgbm90IGZvdW5kIikpOworLSAgICB9Cist ICAgIHJldHVybiBvdXQ7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4K Ky1zdHJ1Y3QgaXNfY29tcGlsZWRfZm9ybWF0PHJ1bnRpbWVfbmFtZWRfZmllbGQ8Q2hhcj4+IDog c3RkOjp0cnVlX3R5cGUge307CistCistLy8gQSByZXBsYWNlbWVudCBmaWVsZCB0aGF0IHJlZmVy cyB0byBhcmd1bWVudCBOIGFuZCBoYXMgZm9ybWF0IHNwZWNpZmllcnMuCistdGVtcGxhdGUgPHR5 cGVuYW1lIENoYXIsIHR5cGVuYW1lIFQsIGludCBOPiBzdHJ1Y3Qgc3BlY19maWVsZCB7CistICB1 c2luZyBjaGFyX3R5cGUgPSBDaGFyOworLSAgZm9ybWF0dGVyPFQsIENoYXI+IGZtdDsKKy0KKy0g IHRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUuLi4gQXJncz4KKy0gIGNvbnN0 ZXhwciBGTVRfSU5MSU5FIE91dHB1dEl0IGZvcm1hdChPdXRwdXRJdCBvdXQsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJncyYuLi4gYXJncykgY29uc3Qg eworLSAgICBjb25zdCBhdXRvJiB2YXJncyA9CistICAgICAgICBmbXQ6Om1ha2VfZm9ybWF0X2Fy Z3M8YmFzaWNfZm9ybWF0X2NvbnRleHQ8T3V0cHV0SXQsIENoYXI+PihhcmdzLi4uKTsKKy0gICAg YmFzaWNfZm9ybWF0X2NvbnRleHQ8T3V0cHV0SXQsIENoYXI+IGN0eChvdXQsIHZhcmdzKTsKKy0g ICAgcmV0dXJuIGZtdC5mb3JtYXQoZ2V0X2FyZ19jaGVja2VkPFQsIE4+KGFyZ3MuLi4pLCBjdHgp OworLSAgfQorLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFQsIGlu dCBOPgorLXN0cnVjdCBpc19jb21waWxlZF9mb3JtYXQ8c3BlY19maWVsZDxDaGFyLCBULCBOPj4g OiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgTCwgdHlwZW5hbWUg Uj4gc3RydWN0IGNvbmNhdCB7CistICBMIGxoczsKKy0gIFIgcmhzOworLSAgdXNpbmcgY2hhcl90 eXBlID0gdHlwZW5hbWUgTDo6Y2hhcl90eXBlOworLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIE91 dHB1dEl0LCB0eXBlbmFtZS4uLiBBcmdzPgorLSAgY29uc3RleHByIE91dHB1dEl0IGZvcm1hdChP dXRwdXRJdCBvdXQsIGNvbnN0IEFyZ3MmLi4uIGFyZ3MpIGNvbnN0IHsKKy0gICAgb3V0ID0gbGhz LmZvcm1hdChvdXQsIGFyZ3MuLi4pOworLSAgICByZXR1cm4gcmhzLmZvcm1hdChvdXQsIGFyZ3Mu Li4pOworLSAgfQorLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIEwsIHR5cGVuYW1lIFI+Cist c3RydWN0IGlzX2NvbXBpbGVkX2Zvcm1hdDxjb25jYXQ8TCwgUj4+IDogc3RkOjp0cnVlX3R5cGUg e307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIEwsIHR5cGVuYW1lIFI+CistY29uc3RleHByIGNv bmNhdDxMLCBSPiBtYWtlX2NvbmNhdChMIGxocywgUiByaHMpIHsKKy0gIHJldHVybiB7bGhzLCBy aHN9OworLX0KKy0KKy1zdHJ1Y3QgdW5rbm93bl9mb3JtYXQge307CistCistdGVtcGxhdGUgPHR5 cGVuYW1lIENoYXI+CistY29uc3RleHByIHNpemVfdCBwYXJzZV90ZXh0KGJhc2ljX3N0cmluZ192 aWV3PENoYXI+IHN0ciwgc2l6ZV90IHBvcykgeworLSAgZm9yIChzaXplX3Qgc2l6ZSA9IHN0ci5z aXplKCk7IHBvcyAhPSBzaXplOyArK3BvcykgeworLSAgICBpZiAoc3RyW3Bvc10gPT0gJ3snIHx8 IHN0cltwb3NdID09ICd9JykgYnJlYWs7CistICB9CistICByZXR1cm4gcG9zOworLX0KKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgQXJncywgc2l6ZV90IFBPUywgaW50IElELCB0eXBlbmFtZSBTPgor LWNvbnN0ZXhwciBhdXRvIGNvbXBpbGVfZm9ybWF0X3N0cmluZyhTIGZvcm1hdF9zdHIpOworLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBBcmdzLCBzaXplX3QgUE9TLCBpbnQgSUQsIHR5cGVuYW1lIFQs IHR5cGVuYW1lIFM+CistY29uc3RleHByIGF1dG8gcGFyc2VfdGFpbChUIGhlYWQsIFMgZm9ybWF0 X3N0cikgeworLSAgaWYgY29uc3RleHByIChQT1MgIT0KKy0gICAgICAgICAgICAgICAgYmFzaWNf c3RyaW5nX3ZpZXc8dHlwZW5hbWUgUzo6Y2hhcl90eXBlPihmb3JtYXRfc3RyKS5zaXplKCkpIHsK Ky0gICAgY29uc3RleHByIGF1dG8gdGFpbCA9IGNvbXBpbGVfZm9ybWF0X3N0cmluZzxBcmdzLCBQ T1MsIElEPihmb3JtYXRfc3RyKTsKKy0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8cmVt b3ZlX2N2cmVmX3Q8ZGVjbHR5cGUodGFpbCk+LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bmtub3duX2Zvcm1hdD4oKSkKKy0gICAgICByZXR1cm4gdGFpbDsKKy0gICAgZWxzZQor LSAgICAgIHJldHVybiBtYWtlX2NvbmNhdChoZWFkLCB0YWlsKTsKKy0gIH0gZWxzZSB7CistICAg IHJldHVybiBoZWFkOworLSAgfQorLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h bWUgQ2hhcj4gc3RydWN0IHBhcnNlX3NwZWNzX3Jlc3VsdCB7CistICBmb3JtYXR0ZXI8VCwgQ2hh cj4gZm10OworLSAgc2l6ZV90IGVuZDsKKy0gIGludCBuZXh0X2FyZ19pZDsKKy19OworLQorLWNv bnN0ZXhwciBpbnQgbWFudWFsX2luZGV4aW5nX2lkID0gLTE7CistCistdGVtcGxhdGUgPHR5cGVu YW1lIFQsIHR5cGVuYW1lIENoYXI+CistY29uc3RleHByIHBhcnNlX3NwZWNzX3Jlc3VsdDxULCBD aGFyPiBwYXJzZV9zcGVjcyhiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBzdHIsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcG9zLCBpbnQg bmV4dF9hcmdfaWQpIHsKKy0gIHN0ci5yZW1vdmVfcHJlZml4KHBvcyk7CistICBhdXRvIGN0eCA9 IGJhc2ljX2Zvcm1hdF9wYXJzZV9jb250ZXh0PENoYXI+KHN0ciwge30sIG5leHRfYXJnX2lkKTsK Ky0gIGF1dG8gZiA9IGZvcm1hdHRlcjxULCBDaGFyPigpOworLSAgYXV0byBlbmQgPSBmLnBhcnNl KGN0eCk7CistICByZXR1cm4ge2YsIHBvcyArIGZtdDo6ZGV0YWlsOjp0b191bnNpZ25lZChlbmQg LSBzdHIuZGF0YSgpKSArIDEsCistICAgICAgICAgIG5leHRfYXJnX2lkID09IDAgPyBtYW51YWxf aW5kZXhpbmdfaWQgOiBjdHgubmV4dF9hcmdfaWQoKX07CistfQorLQorLXRlbXBsYXRlIDx0eXBl bmFtZSBDaGFyPiBzdHJ1Y3QgYXJnX2lkX2hhbmRsZXIgeworLSAgYXJnX3JlZjxDaGFyPiBhcmdf aWQ7CistCistICBjb25zdGV4cHIgaW50IG9wZXJhdG9yKCkoKSB7CistICAgIEZNVF9BU1NFUlQo ZmFsc2UsICJoYW5kbGVyIGNhbm5vdCBiZSB1c2VkIHdpdGggYXV0b21hdGljIGluZGV4aW5nIik7 CistICAgIHJldHVybiAwOworLSAgfQorLSAgY29uc3RleHByIGludCBvcGVyYXRvcigpKGludCBp ZCkgeworLSAgICBhcmdfaWQgPSBhcmdfcmVmPENoYXI+KGlkKTsKKy0gICAgcmV0dXJuIDA7Cist ICB9CistICBjb25zdGV4cHIgaW50IG9wZXJhdG9yKCkoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4g aWQpIHsKKy0gICAgYXJnX2lkID0gYXJnX3JlZjxDaGFyPihpZCk7CistICAgIHJldHVybiAwOwor LSAgfQorLQorLSAgY29uc3RleHByIHZvaWQgb25fZXJyb3IoY29uc3QgY2hhciogbWVzc2FnZSkg eworLSAgICBGTVRfVEhST1coZm9ybWF0X2Vycm9yKG1lc3NhZ2UpKTsKKy0gIH0KKy19OworLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBzdHJ1Y3QgcGFyc2VfYXJnX2lkX3Jlc3VsdCB7Cist ICBhcmdfcmVmPENoYXI+IGFyZ19pZDsKKy0gIGNvbnN0IENoYXIqIGFyZ19pZF9lbmQ7CistfTsK Ky0KKy10ZW1wbGF0ZSA8aW50IElELCB0eXBlbmFtZSBDaGFyPgorLWNvbnN0ZXhwciBhdXRvIHBh cnNlX2FyZ19pZChjb25zdCBDaGFyKiBiZWdpbiwgY29uc3QgQ2hhciogZW5kKSB7CistICBhdXRv IGhhbmRsZXIgPSBhcmdfaWRfaGFuZGxlcjxDaGFyPnthcmdfcmVmPENoYXI+e319OworLSAgYXV0 byBhcmdfaWRfZW5kID0gcGFyc2VfYXJnX2lkKGJlZ2luLCBlbmQsIGhhbmRsZXIpOworLSAgcmV0 dXJuIHBhcnNlX2FyZ19pZF9yZXN1bHQ8Q2hhcj57aGFuZGxlci5hcmdfaWQsIGFyZ19pZF9lbmR9 OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4g c3RydWN0IGZpZWxkX3R5cGUgeworLSAgdXNpbmcgdHlwZSA9IHJlbW92ZV9jdnJlZl90PFQ+Owor LX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RydWN0IGZpZWxkX3R5cGU8VCwgZW5h YmxlX2lmX3Q8ZGV0YWlsOjppc19uYW1lZF9hcmc8VD46OnZhbHVlPj4geworLSAgdXNpbmcgdHlw ZSA9IHJlbW92ZV9jdnJlZl90PGRlY2x0eXBlKFQ6OnZhbHVlKT47CistfTsKKy0KKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJncywgc2l6ZV90IEVORF9QT1MsIGludCBBUkdfSU5E RVgsIGludCBORVhUX0lELAorLSAgICAgICAgICB0eXBlbmFtZSBTPgorLWNvbnN0ZXhwciBhdXRv IHBhcnNlX3JlcGxhY2VtZW50X2ZpZWxkX3RoZW5fdGFpbChTIGZvcm1hdF9zdHIpIHsKKy0gIHVz aW5nIGNoYXJfdHlwZSA9IHR5cGVuYW1lIFM6OmNoYXJfdHlwZTsKKy0gIGNvbnN0ZXhwciBhdXRv IHN0ciA9IGJhc2ljX3N0cmluZ192aWV3PGNoYXJfdHlwZT4oZm9ybWF0X3N0cik7CistICBjb25z dGV4cHIgY2hhcl90eXBlIGMgPSBFTkRfUE9TICE9IHN0ci5zaXplKCkgPyBzdHJbRU5EX1BPU10g OiBjaGFyX3R5cGUoKTsKKy0gIGlmIGNvbnN0ZXhwciAoYyA9PSAnfScpIHsKKy0gICAgcmV0dXJu IHBhcnNlX3RhaWw8QXJncywgRU5EX1BPUyArIDEsIE5FWFRfSUQ+KAorLSAgICAgICAgZmllbGQ8 Y2hhcl90eXBlLCB0eXBlbmFtZSBmaWVsZF90eXBlPFQ+Ojp0eXBlLCBBUkdfSU5ERVg+KCksCist ICAgICAgICBmb3JtYXRfc3RyKTsKKy0gIH0gZWxzZSBpZiBjb25zdGV4cHIgKGMgPT0gJzonKSB7 CistICAgIGNvbnN0ZXhwciBhdXRvIHJlc3VsdCA9IHBhcnNlX3NwZWNzPHR5cGVuYW1lIGZpZWxk X3R5cGU8VD46OnR5cGU+KAorLSAgICAgICAgc3RyLCBFTkRfUE9TICsgMSwgTkVYVF9JRCA9PSBt YW51YWxfaW5kZXhpbmdfaWQgPyAwIDogTkVYVF9JRCk7CistICAgIHJldHVybiBwYXJzZV90YWls PEFyZ3MsIHJlc3VsdC5lbmQsIHJlc3VsdC5uZXh0X2FyZ19pZD4oCistICAgICAgICBzcGVjX2Zp ZWxkPGNoYXJfdHlwZSwgdHlwZW5hbWUgZmllbGRfdHlwZTxUPjo6dHlwZSwgQVJHX0lOREVYPnsK Ky0gICAgICAgICAgICByZXN1bHQuZm10fSwKKy0gICAgICAgIGZvcm1hdF9zdHIpOworLSAgfQor LX0KKy0KKy0vLyBDb21waWxlcyBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGFuZCByZXR1cm5z IHRoZSBjb21waWxlZCByZXByZXNlbnRhdGlvbgorLS8vIG9yIHVua25vd25fZm9ybWF0KCkgb24g dW5yZWNvZ25pemVkIGlucHV0LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBBcmdzLCBzaXplX3QgUE9T LCBpbnQgSUQsIHR5cGVuYW1lIFM+CistY29uc3RleHByIGF1dG8gY29tcGlsZV9mb3JtYXRfc3Ry aW5nKFMgZm9ybWF0X3N0cikgeworLSAgdXNpbmcgY2hhcl90eXBlID0gdHlwZW5hbWUgUzo6Y2hh cl90eXBlOworLSAgY29uc3RleHByIGF1dG8gc3RyID0gYmFzaWNfc3RyaW5nX3ZpZXc8Y2hhcl90 eXBlPihmb3JtYXRfc3RyKTsKKy0gIGlmIGNvbnN0ZXhwciAoc3RyW1BPU10gPT0gJ3snKSB7Cist ICAgIGlmIGNvbnN0ZXhwciAoUE9TICsgMSA9PSBzdHIuc2l6ZSgpKQorLSAgICAgIEZNVF9USFJP Vyhmb3JtYXRfZXJyb3IoInVubWF0Y2hlZCAneycgaW4gZm9ybWF0IHN0cmluZyIpKTsKKy0gICAg aWYgY29uc3RleHByIChzdHJbUE9TICsgMV0gPT0gJ3snKSB7CistICAgICAgcmV0dXJuIHBhcnNl X3RhaWw8QXJncywgUE9TICsgMiwgSUQ+KG1ha2VfdGV4dChzdHIsIFBPUywgMSksIGZvcm1hdF9z dHIpOworLSAgICB9IGVsc2UgaWYgY29uc3RleHByIChzdHJbUE9TICsgMV0gPT0gJ30nIHx8IHN0 cltQT1MgKyAxXSA9PSAnOicpIHsKKy0gICAgICBzdGF0aWNfYXNzZXJ0KElEICE9IG1hbnVhbF9p bmRleGluZ19pZCwKKy0gICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc3dpdGNoIGZyb20gbWFu dWFsIHRvIGF1dG9tYXRpYyBhcmd1bWVudCBpbmRleGluZyIpOworLSAgICAgIGNvbnN0ZXhwciBh dXRvIG5leHRfaWQgPQorLSAgICAgICAgICBJRCAhPSBtYW51YWxfaW5kZXhpbmdfaWQgPyBJRCAr IDEgOiBtYW51YWxfaW5kZXhpbmdfaWQ7CistICAgICAgcmV0dXJuIHBhcnNlX3JlcGxhY2VtZW50 X2ZpZWxkX3RoZW5fdGFpbDxnZXRfdHlwZTxJRCwgQXJncz4sIEFyZ3MsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1MgKyAxLCBJRCwgbmV4dF9pZD4o CistICAgICAgICAgIGZvcm1hdF9zdHIpOworLSAgICB9IGVsc2UgeworLSAgICAgIGNvbnN0ZXhw ciBhdXRvIGFyZ19pZF9yZXN1bHQgPQorLSAgICAgICAgICBwYXJzZV9hcmdfaWQ8SUQ+KHN0ci5k YXRhKCkgKyBQT1MgKyAxLCBzdHIuZGF0YSgpICsgc3RyLnNpemUoKSk7CistICAgICAgY29uc3Rl eHByIGF1dG8gYXJnX2lkX2VuZF9wb3MgPSBhcmdfaWRfcmVzdWx0LmFyZ19pZF9lbmQgLSBzdHIu ZGF0YSgpOworLSAgICAgIGNvbnN0ZXhwciBjaGFyX3R5cGUgYyA9CistICAgICAgICAgIGFyZ19p ZF9lbmRfcG9zICE9IHN0ci5zaXplKCkgPyBzdHJbYXJnX2lkX2VuZF9wb3NdIDogY2hhcl90eXBl KCk7CistICAgICAgc3RhdGljX2Fzc2VydChjID09ICd9JyB8fCBjID09ICc6JywgIm1pc3Npbmcg J30nIGluIGZvcm1hdCBzdHJpbmciKTsKKy0gICAgICBpZiBjb25zdGV4cHIgKGFyZ19pZF9yZXN1 bHQuYXJnX2lkLmtpbmQgPT0gYXJnX2lkX2tpbmQ6OmluZGV4KSB7CistICAgICAgICBzdGF0aWNf YXNzZXJ0KAorLSAgICAgICAgICAgIElEID09IG1hbnVhbF9pbmRleGluZ19pZCB8fCBJRCA9PSAw LAorLSAgICAgICAgICAgICJjYW5ub3Qgc3dpdGNoIGZyb20gYXV0b21hdGljIHRvIG1hbnVhbCBh cmd1bWVudCBpbmRleGluZyIpOworLSAgICAgICAgY29uc3RleHByIGF1dG8gYXJnX2luZGV4ID0g YXJnX2lkX3Jlc3VsdC5hcmdfaWQudmFsLmluZGV4OworLSAgICAgICAgcmV0dXJuIHBhcnNlX3Jl cGxhY2VtZW50X2ZpZWxkX3RoZW5fdGFpbDxnZXRfdHlwZTxhcmdfaW5kZXgsIEFyZ3M+LAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLCBhcmdf aWRfZW5kX3BvcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXJnX2luZGV4LCBtYW51YWxfaW5kZXhpbmdfaWQ+KAorLSAgICAgICAgICAgIGZvcm1h dF9zdHIpOworLSAgICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKGFyZ19pZF9yZXN1bHQuYXJnX2lk LmtpbmQgPT0gYXJnX2lkX2tpbmQ6Om5hbWUpIHsKKy0gICAgICAgIGNvbnN0ZXhwciBhdXRvIGFy Z19pbmRleCA9CistICAgICAgICAgICAgZ2V0X2FyZ19pbmRleF9ieV9uYW1lKGFyZ19pZF9yZXN1 bHQuYXJnX2lkLnZhbC5uYW1lLCBBcmdze30pOworLSAgICAgICAgaWYgY29uc3RleHByIChhcmdf aW5kZXggIT0gaW52YWxpZF9hcmdfaW5kZXgpIHsKKy0gICAgICAgICAgY29uc3RleHByIGF1dG8g bmV4dF9pZCA9CistICAgICAgICAgICAgICBJRCAhPSBtYW51YWxfaW5kZXhpbmdfaWQgPyBJRCAr IDEgOiBtYW51YWxfaW5kZXhpbmdfaWQ7CistICAgICAgICAgIHJldHVybiBwYXJzZV9yZXBsYWNl bWVudF9maWVsZF90aGVuX3RhaWw8CistICAgICAgICAgICAgICBkZWNsdHlwZShnZXRfdHlwZTxh cmdfaW5kZXgsIEFyZ3M+Ojp2YWx1ZSksIEFyZ3MsIGFyZ19pZF9lbmRfcG9zLAorLSAgICAgICAg ICAgICAgYXJnX2luZGV4LCBuZXh0X2lkPihmb3JtYXRfc3RyKTsKKy0gICAgICAgIH0gZWxzZSB7 CistICAgICAgICAgIGlmIGNvbnN0ZXhwciAoYyA9PSAnfScpIHsKKy0gICAgICAgICAgICByZXR1 cm4gcGFyc2VfdGFpbDxBcmdzLCBhcmdfaWRfZW5kX3BvcyArIDEsIElEPigKKy0gICAgICAgICAg ICAgICAgcnVudGltZV9uYW1lZF9maWVsZDxjaGFyX3R5cGU+e2FyZ19pZF9yZXN1bHQuYXJnX2lk LnZhbC5uYW1lfSwKKy0gICAgICAgICAgICAgICAgZm9ybWF0X3N0cik7CistICAgICAgICAgIH0g ZWxzZSBpZiBjb25zdGV4cHIgKGMgPT0gJzonKSB7CistICAgICAgICAgICAgcmV0dXJuIHVua25v d25fZm9ybWF0KCk7ICAvLyBubyB0eXBlIGluZm8gZm9yIHNwZWNzIHBhcnNpbmcKKy0gICAgICAg ICAgfQorLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgfQorLSAgfSBlbHNlIGlmIGNvbnN0ZXhw ciAoc3RyW1BPU10gPT0gJ30nKSB7CistICAgIGlmIGNvbnN0ZXhwciAoUE9TICsgMSA9PSBzdHIu c2l6ZSgpKQorLSAgICAgIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoInVubWF0Y2hlZCAnfScgaW4g Zm9ybWF0IHN0cmluZyIpKTsKKy0gICAgcmV0dXJuIHBhcnNlX3RhaWw8QXJncywgUE9TICsgMiwg SUQ+KG1ha2VfdGV4dChzdHIsIFBPUywgMSksIGZvcm1hdF9zdHIpOworLSAgfSBlbHNlIHsKKy0g ICAgY29uc3RleHByIGF1dG8gZW5kID0gcGFyc2VfdGV4dChzdHIsIFBPUyArIDEpOworLSAgICBp ZiBjb25zdGV4cHIgKGVuZCAtIFBPUyA+IDEpIHsKKy0gICAgICByZXR1cm4gcGFyc2VfdGFpbDxB cmdzLCBlbmQsIElEPihtYWtlX3RleHQoc3RyLCBQT1MsIGVuZCAtIFBPUyksCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3N0cik7CistICAgIH0gZWxzZSB7 CistICAgICAgcmV0dXJuIHBhcnNlX3RhaWw8QXJncywgZW5kLCBJRD4oY29kZV91bml0PGNoYXJf dHlwZT57c3RyW1BPU119LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvcm1hdF9zdHIpOworLSAgICB9CistICB9CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZS4u LiBBcmdzLCB0eXBlbmFtZSBTLAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNf Y29tcGlsZWRfc3RyaW5nPFM+Ojp2YWx1ZSk+CistY29uc3RleHByIGF1dG8gY29tcGlsZShTIGZv cm1hdF9zdHIpIHsKKy0gIGNvbnN0ZXhwciBhdXRvIHN0ciA9IGJhc2ljX3N0cmluZ192aWV3PHR5 cGVuYW1lIFM6OmNoYXJfdHlwZT4oZm9ybWF0X3N0cik7CistICBpZiBjb25zdGV4cHIgKHN0ci5z aXplKCkgPT0gMCkgeworLSAgICByZXR1cm4gZGV0YWlsOjptYWtlX3RleHQoc3RyLCAwLCAwKTsK Ky0gIH0gZWxzZSB7CistICAgIGNvbnN0ZXhwciBhdXRvIHJlc3VsdCA9CistICAgICAgICBkZXRh aWw6OmNvbXBpbGVfZm9ybWF0X3N0cmluZzxkZXRhaWw6OnR5cGVfbGlzdDxBcmdzLi4uPiwgMCwg MD4oCistICAgICAgICAgICAgZm9ybWF0X3N0cik7CistICAgIHJldHVybiByZXN1bHQ7CistICB9 CistfQorLSNlbmRpZiAgLy8gZGVmaW5lZChfX2NwcF9pZl9jb25zdGV4cHIpICYmIGRlZmluZWQo X19jcHBfcmV0dXJuX3R5cGVfZGVkdWN0aW9uKQorLX0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKy0K Ky1GTVRfTU9EVUxFX0VYUE9SVF9CRUdJTgorLQorLSNpZiBkZWZpbmVkKF9fY3BwX2lmX2NvbnN0 ZXhwcikgJiYgZGVmaW5lZChfX2NwcF9yZXR1cm5fdHlwZV9kZWR1Y3Rpb24pCistCistdGVtcGxh dGUgPHR5cGVuYW1lIENvbXBpbGVkRm9ybWF0LCB0eXBlbmFtZS4uLiBBcmdzLAorLSAgICAgICAg ICB0eXBlbmFtZSBDaGFyID0gdHlwZW5hbWUgQ29tcGlsZWRGb3JtYXQ6OmNoYXJfdHlwZSwKKy0g ICAgICAgICAgRk1UX0VOQUJMRV9JRihkZXRhaWw6OmlzX2NvbXBpbGVkX2Zvcm1hdDxDb21waWxl ZEZvcm1hdD46OnZhbHVlKT4KKy1GTVRfSU5MSU5FIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+IGZv cm1hdChjb25zdCBDb21waWxlZEZvcm1hdCYgY2YsCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQXJncyYuLi4gYXJncykgeworLSAgYXV0byBzID0gc3Rk OjpiYXNpY19zdHJpbmc8Q2hhcj4oKTsKKy0gIGNmLmZvcm1hdChzdGQ6OmJhY2tfaW5zZXJ0ZXIo cyksIGFyZ3MuLi4pOworLSAgcmV0dXJuIHM7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBP dXRwdXRJdCwgdHlwZW5hbWUgQ29tcGlsZWRGb3JtYXQsIHR5cGVuYW1lLi4uIEFyZ3MsCistICAg ICAgICAgIEZNVF9FTkFCTEVfSUYoZGV0YWlsOjppc19jb21waWxlZF9mb3JtYXQ8Q29tcGlsZWRG b3JtYXQ+Ojp2YWx1ZSk+CistY29uc3RleHByIEZNVF9JTkxJTkUgT3V0cHV0SXQgZm9ybWF0X3Rv KE91dHB1dEl0IG91dCwgY29uc3QgQ29tcGlsZWRGb3JtYXQmIGNmLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmdzJi4uLiBhcmdzKSB7CistICByZXR1 cm4gY2YuZm9ybWF0KG91dCwgYXJncy4uLik7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBT LCB0eXBlbmFtZS4uLiBBcmdzLAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNf Y29tcGlsZWRfc3RyaW5nPFM+Ojp2YWx1ZSk+CistRk1UX0lOTElORSBzdGQ6OmJhc2ljX3N0cmlu Zzx0eXBlbmFtZSBTOjpjaGFyX3R5cGU+IGZvcm1hdChjb25zdCBTJiwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MmJi4uLiBh cmdzKSB7CistICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBTOjpjaGFyX3R5 cGUsIGNoYXI+Ojp2YWx1ZSkgeworLSAgICBjb25zdGV4cHIgYXV0byBzdHIgPSBiYXNpY19zdHJp bmdfdmlldzx0eXBlbmFtZSBTOjpjaGFyX3R5cGU+KFMoKSk7CistICAgIGlmIGNvbnN0ZXhwciAo c3RyLnNpemUoKSA9PSAyICYmIHN0clswXSA9PSAneycgJiYgc3RyWzFdID09ICd9JykgeworLSAg ICAgIGNvbnN0IGF1dG8mIGZpcnN0ID0gZGV0YWlsOjpmaXJzdChhcmdzLi4uKTsKKy0gICAgICBp ZiBjb25zdGV4cHIgKGRldGFpbDo6aXNfbmFtZWRfYXJnPAorLSAgICAgICAgICAgICAgICAgICAg ICAgIHJlbW92ZV9jdnJlZl90PGRlY2x0eXBlKGZpcnN0KT4+Ojp2YWx1ZSkgeworLSAgICAgICAg cmV0dXJuIGZtdDo6dG9fc3RyaW5nKGZpcnN0LnZhbHVlKTsKKy0gICAgICB9IGVsc2UgeworLSAg ICAgICAgcmV0dXJuIGZtdDo6dG9fc3RyaW5nKGZpcnN0KTsKKy0gICAgICB9CistICAgIH0KKy0g IH0KKy0gIGNvbnN0ZXhwciBhdXRvIGNvbXBpbGVkID0gZGV0YWlsOjpjb21waWxlPEFyZ3MuLi4+ KFMoKSk7CistICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxyZW1vdmVfY3ZyZWZfdDxkZWNs dHlwZShjb21waWxlZCk+LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOjp1 bmtub3duX2Zvcm1hdD4oKSkgeworLSAgICByZXR1cm4gZm9ybWF0KHN0YXRpY19jYXN0PGJhc2lj X3N0cmluZ192aWV3PHR5cGVuYW1lIFM6OmNoYXJfdHlwZT4+KFMoKSksCistICAgICAgICAgICAg ICAgICAgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKy0gIH0gZWxzZSB7CistICAgIHJl dHVybiBmb3JtYXQoY29tcGlsZWQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CistICB9 CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgUywgdHlwZW5h bWUuLi4gQXJncywKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRihkZXRhaWw6OmlzX2NvbXBpbGVk X3N0cmluZzxTPjo6dmFsdWUpPgorLUZNVF9DT05TVEVYUFIgT3V0cHV0SXQgZm9ybWF0X3RvKE91 dHB1dEl0IG91dCwgY29uc3QgUyYsIEFyZ3MmJi4uLiBhcmdzKSB7CistICBjb25zdGV4cHIgYXV0 byBjb21waWxlZCA9IGRldGFpbDo6Y29tcGlsZTxBcmdzLi4uPihTKCkpOworLSAgaWYgY29uc3Rl eHByIChzdGQ6OmlzX3NhbWU8cmVtb3ZlX2N2cmVmX3Q8ZGVjbHR5cGUoY29tcGlsZWQpPiwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6dW5rbm93bl9mb3JtYXQ+KCkpIHsK Ky0gICAgcmV0dXJuIGZvcm1hdF90byhvdXQsCistICAgICAgICAgICAgICAgICAgICAgc3RhdGlj X2Nhc3Q8YmFzaWNfc3RyaW5nX3ZpZXc8dHlwZW5hbWUgUzo6Y2hhcl90eXBlPj4oUygpKSwKKy0g ICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworLSAgfSBl bHNlIHsKKy0gICAgcmV0dXJuIGZvcm1hdF90byhvdXQsIGNvbXBpbGVkLCBzdGQ6OmZvcndhcmQ8 QXJncz4oYXJncykuLi4pOworLSAgfQorLX0KKy0jZW5kaWYKKy0KKy10ZW1wbGF0ZSA8dHlwZW5h bWUgT3V0cHV0SXQsIHR5cGVuYW1lIFMsIHR5cGVuYW1lLi4uIEFyZ3MsCistICAgICAgICAgIEZN VF9FTkFCTEVfSUYoZGV0YWlsOjppc19jb21waWxlZF9zdHJpbmc8Uz46OnZhbHVlKT4KKy1mb3Jt YXRfdG9fbl9yZXN1bHQ8T3V0cHV0SXQ+IGZvcm1hdF90b19uKE91dHB1dEl0IG91dCwgc2l6ZV90 IG4sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTJiBm b3JtYXRfc3RyLCBBcmdzJiYuLi4gYXJncykgeworLSAgYXV0byBpdCA9IGZvcm1hdF90byhkZXRh aWw6OnRydW5jYXRpbmdfaXRlcmF0b3I8T3V0cHV0SXQ+KG91dCwgbiksIGZvcm1hdF9zdHIsCist ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CistICBy ZXR1cm4ge2l0LmJhc2UoKSwgaXQuY291bnQoKX07CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFt ZSBTLCB0eXBlbmFtZS4uLiBBcmdzLAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6 aXNfY29tcGlsZWRfc3RyaW5nPFM+Ojp2YWx1ZSk+Cistc2l6ZV90IGZvcm1hdHRlZF9zaXplKGNv bnN0IFMmIGZvcm1hdF9zdHIsIGNvbnN0IEFyZ3MmLi4uIGFyZ3MpIHsKKy0gIHJldHVybiBmb3Jt YXRfdG8oZGV0YWlsOjpjb3VudGluZ19pdGVyYXRvcigpLCBmb3JtYXRfc3RyLCBhcmdzLi4uKS5j b3VudCgpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUuLi4gQXJncywK Ky0gICAgICAgICAgRk1UX0VOQUJMRV9JRihkZXRhaWw6OmlzX2NvbXBpbGVkX3N0cmluZzxTPjo6 dmFsdWUpPgorLXZvaWQgcHJpbnQoc3RkOjpGSUxFKiBmLCBjb25zdCBTJiBmb3JtYXRfc3RyLCBj b25zdCBBcmdzJi4uLiBhcmdzKSB7CistICBtZW1vcnlfYnVmZmVyIGJ1ZmZlcjsKKy0gIGZvcm1h dF90byhzdGQ6OmJhY2tfaW5zZXJ0ZXIoYnVmZmVyKSwgZm9ybWF0X3N0ciwgYXJncy4uLik7Cist ICBkZXRhaWw6OnByaW50KGYsIHtidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpfSk7CistfQor LQorLXRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZS4uLiBBcmdzLAorLSAgICAgICAgICBG TVRfRU5BQkxFX0lGKGRldGFpbDo6aXNfY29tcGlsZWRfc3RyaW5nPFM+Ojp2YWx1ZSk+Cistdm9p ZCBwcmludChjb25zdCBTJiBmb3JtYXRfc3RyLCBjb25zdCBBcmdzJi4uLiBhcmdzKSB7CistICBw cmludChzdGRvdXQsIGZvcm1hdF9zdHIsIGFyZ3MuLi4pOworLX0KKy0KKy0jaWYgRk1UX1VTRV9O T05UWVBFX1RFTVBMQVRFX1BBUkFNRVRFUlMKKy1pbmxpbmUgbmFtZXNwYWNlIGxpdGVyYWxzIHsK Ky10ZW1wbGF0ZSA8ZGV0YWlsX2V4cG9ydGVkOjpmaXhlZF9zdHJpbmcgU3RyPgorLWNvbnN0ZXhw ciBkZXRhaWw6OnVkbF9jb21waWxlZF9zdHJpbmc8CistICAgIHJlbW92ZV9jdnJlZl90PGRlY2x0 eXBlKFN0ci5kYXRhWzBdKT4sCistICAgIHNpemVvZihTdHIuZGF0YSkgLyBzaXplb2YoZGVjbHR5 cGUoU3RyLmRhdGFbMF0pKSwgU3RyPgorLW9wZXJhdG9yIiJfY2YoKSB7CistICByZXR1cm4ge307 CistfQorLX0gIC8vIG5hbWVzcGFjZSBsaXRlcmFscworLSNlbmRpZgorLQorLUZNVF9NT0RVTEVf RVhQT1JUX0VORAorLUZNVF9FTkRfTkFNRVNQQUNFCistCistI2VuZGlmICAvLyBGTVRfQ09NUElM RV9IXworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL2ZtdC9jb3JlLmggYi9pbmNsdWRlL2RwcC9m bXQvY29yZS5oCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDkyYTdhYTEuLjAwMDAw MDAKKy0tLSBhL2luY2x1ZGUvZHBwL2ZtdC9jb3JlLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDMy MzYgKzAsMCBAQAorLS8vIEZvcm1hdHRpbmcgbGlicmFyeSBmb3IgQysrIC0gdGhlIGNvcmUgQVBJ IGZvciBjaGFyL1VURi04CistLy8KKy0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgLSBwcmVzZW50LCBW aWN0b3IgWnZlcm92aWNoCistLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0vLworLS8vIEZvciB0 aGUgbGljZW5zZSBpbmZvcm1hdGlvbiByZWZlciB0byBmb3JtYXQuaC4KKy0KKy0jaWZuZGVmIEZN VF9DT1JFX0hfCistI2RlZmluZSBGTVRfQ09SRV9IXworLQorLSNpbmNsdWRlIDxjc3RkZGVmPiAg Ly8gc3RkOjpieXRlCistI2luY2x1ZGUgPGNzdGRpbz4gICAvLyBzdGQ6OkZJTEUKKy0jaW5jbHVk ZSA8Y3N0cmluZz4KKy0jaW5jbHVkZSA8aXRlcmF0b3I+CistI2luY2x1ZGUgPGxpbWl0cz4KKy0j aW5jbHVkZSA8c3RyaW5nPgorLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKy0KKy0vLyBUaGUgZm10 IGxpYnJhcnkgdmVyc2lvbiBpbiB0aGUgZm9ybSBtYWpvciAqIDEwMDAwICsgbWlub3IgKiAxMDAg KyBwYXRjaC4KKy0jZGVmaW5lIEZNVF9WRVJTSU9OIDgwMTAxCistCistI2lmIGRlZmluZWQoX19j bGFuZ19fKSAmJiAhZGVmaW5lZChfX2libXhsX18pCistIyAgZGVmaW5lIEZNVF9DTEFOR19WRVJT SU9OIChfX2NsYW5nX21ham9yX18gKiAxMDAgKyBfX2NsYW5nX21pbm9yX18pCistI2Vsc2UKKy0j ICBkZWZpbmUgRk1UX0NMQU5HX1ZFUlNJT04gMAorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKF9f R05VQ19fKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElM RVIpICYmIFwKKy0gICAgIWRlZmluZWQoX19OVkNPTVBJTEVSKQorLSMgIGRlZmluZSBGTVRfR0ND X1ZFUlNJT04gKF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18pCistI2Vsc2UKKy0jICBk ZWZpbmUgRk1UX0dDQ19WRVJTSU9OIDAKKy0jZW5kaWYKKy0KKy0jaWZuZGVmIEZNVF9HQ0NfUFJB R01BCistLy8gV29ya2Fyb3VuZCBfUHJhZ21hIGJ1ZyBodHRwczovL2djYy5nbnUub3JnL2J1Z3pp bGxhL3Nob3dfYnVnLmNnaT9pZD01OTg4NC4KKy0jICBpZiBGTVRfR0NDX1ZFUlNJT04gPj0gNTA0 CistIyAgICBkZWZpbmUgRk1UX0dDQ19QUkFHTUEoYXJnKSBfUHJhZ21hKGFyZykKKy0jICBlbHNl CistIyAgICBkZWZpbmUgRk1UX0dDQ19QUkFHTUEoYXJnKQorLSMgIGVuZGlmCistI2VuZGlmCist CistI2lmZGVmIF9fSUNMCistIyAgZGVmaW5lIEZNVF9JQ0NfVkVSU0lPTiBfX0lDTAorLSNlbGlm IGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKy0jICBkZWZpbmUgRk1UX0lDQ19WRVJTSU9OIF9f SU5URUxfQ09NUElMRVIKKy0jZWxzZQorLSMgIGRlZmluZSBGTVRfSUNDX1ZFUlNJT04gMAorLSNl bmRpZgorLQorLSNpZmRlZiBfX05WQ0NfXworLSMgIGRlZmluZSBGTVRfTlZDQyBfX05WQ0NfXwor LSNlbHNlCistIyAgZGVmaW5lIEZNVF9OVkNDIDAKKy0jZW5kaWYKKy0KKy0jaWZkZWYgX01TQ19W RVIKKy0jICBkZWZpbmUgRk1UX01TQ19WRVIgX01TQ19WRVIKKy0jICBkZWZpbmUgRk1UX01TQ19X QVJOSU5HKC4uLikgX19wcmFnbWEod2FybmluZyhfX1ZBX0FSR1NfXykpCistI2Vsc2UKKy0jICBk ZWZpbmUgRk1UX01TQ19WRVIgMAorLSMgIGRlZmluZSBGTVRfTVNDX1dBUk5JTkcoLi4uKQorLSNl bmRpZgorLQorLSNpZmRlZiBfX2hhc19mZWF0dXJlCistIyAgZGVmaW5lIEZNVF9IQVNfRkVBVFVS RSh4KSBfX2hhc19mZWF0dXJlKHgpCistI2Vsc2UKKy0jICBkZWZpbmUgRk1UX0hBU19GRUFUVVJF KHgpIDAKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAoIWRlZmluZWQoX19JTlRFTExJU0VOU0VfXykg fHwgRk1UX01TQ19WRVIgPiAxOTAwKSAmJiBcCistICAgICghRk1UX0lDQ19WRVJTSU9OIHx8IEZN VF9JQ0NfVkVSU0lPTiA+PSAxNjAwKQorLSMgIGRlZmluZSBGTVRfSEFTX0lOQ0xVREUoeCkgX19o YXNfaW5jbHVkZSh4KQorLSNlbHNlCistIyAgZGVmaW5lIEZNVF9IQVNfSU5DTFVERSh4KSAwCist I2VuZGlmCistCistI2lmZGVmIF9faGFzX2NwcF9hdHRyaWJ1dGUKKy0jICBkZWZpbmUgRk1UX0hB U19DUFBfQVRUUklCVVRFKHgpIF9faGFzX2NwcF9hdHRyaWJ1dGUoeCkKKy0jZWxzZQorLSMgIGRl ZmluZSBGTVRfSEFTX0NQUF9BVFRSSUJVVEUoeCkgMAorLSNlbmRpZgorLQorLSNpZmRlZiBfTVNW Q19MQU5HCistIyAgZGVmaW5lIEZNVF9DUExVU1BMVVMgX01TVkNfTEFORworLSNlbHNlCistIyAg ZGVmaW5lIEZNVF9DUExVU1BMVVMgX19jcGx1c3BsdXMKKy0jZW5kaWYKKy0KKy0jZGVmaW5lIEZN VF9IQVNfQ1BQMTRfQVRUUklCVVRFKGF0dHJpYnV0ZSkgXAorLSAgKEZNVF9DUExVU1BMVVMgPj0g MjAxNDAyTCAmJiBGTVRfSEFTX0NQUF9BVFRSSUJVVEUoYXR0cmlidXRlKSkKKy0KKy0jZGVmaW5l IEZNVF9IQVNfQ1BQMTdfQVRUUklCVVRFKGF0dHJpYnV0ZSkgXAorLSAgKEZNVF9DUExVU1BMVVMg Pj0gMjAxNzAzTCAmJiBGTVRfSEFTX0NQUF9BVFRSSUJVVEUoYXR0cmlidXRlKSkKKy0KKy0vLyBD aGVjayBpZiByZWxheGVkIEMrKzE0IGNvbnN0ZXhwciBpcyBzdXBwb3J0ZWQuCistLy8gR0NDIGRv ZXNuJ3QgYWxsb3cgdGhyb3cgaW4gY29uc3RleHByIHVudGlsIHZlcnNpb24gNiAoYnVnIDY3Mzcx KS4KKy0jaWZuZGVmIEZNVF9VU0VfQ09OU1RFWFBSCistIyAgZGVmaW5lIEZNVF9VU0VfQ09OU1RF WFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgKEZN VF9IQVNfRkVBVFVSRShjeHhfcmVsYXhlZF9jb25zdGV4cHIpIHx8IEZNVF9NU0NfVkVSID49IDE5 MTIgfHwgXAorLSAgICAgKEZNVF9HQ0NfVkVSU0lPTiA+PSA2MDAgJiYgX19jcGx1c3BsdXMgPj0g MjAxNDAyTCkpICYmICAgICAgICAgICBcCistICAgICAgICAhRk1UX05WQ0MgJiYgIUZNVF9JQ0Nf VkVSU0lPTgorLSNlbmRpZgorLSNpZiBGTVRfVVNFX0NPTlNURVhQUgorLSMgIGRlZmluZSBGTVRf Q09OU1RFWFBSIGNvbnN0ZXhwcgorLSMgIGRlZmluZSBGTVRfQ09OU1RFWFBSX0RFQ0wgY29uc3Rl eHByCistI2Vsc2UKKy0jICBkZWZpbmUgRk1UX0NPTlNURVhQUgorLSMgIGRlZmluZSBGTVRfQ09O U1RFWFBSX0RFQ0wKKy0jZW5kaWYKKy0KKy0jaWYgKChfX2NwbHVzcGx1cyA+PSAyMDIwMDJMKSAm JiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICghZGVmaW5lZChfR0xJQkNY WF9SRUxFQVNFKSB8fCBfR0xJQkNYWF9SRUxFQVNFID4gOSkpIHx8IFwKKy0gICAgKF9fY3BsdXNw bHVzID49IDIwMTcwOUwgJiYgRk1UX0dDQ19WRVJTSU9OID49IDEwMDIpCistIyAgZGVmaW5lIEZN VF9DT05TVEVYUFIyMCBjb25zdGV4cHIKKy0jZWxzZQorLSMgIGRlZmluZSBGTVRfQ09OU1RFWFBS MjAKKy0jZW5kaWYKKy0KKy0vLyBDaGVjayBpZiBjb25zdGV4cHIgc3RkOjpjaGFyX3RyYWl0czw+ Ojpjb21wYXJlLGxlbmd0aCBpcyBzdXBwb3J0ZWQuCistI2lmIGRlZmluZWQoX19HTElCQ1hYX18p CistIyAgaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCAmJiBkZWZpbmVkKF9HTElCQ1hYX1JFTEVB U0UpICYmIFwKKy0gICAgICBfR0xJQkNYWF9SRUxFQVNFID49IDcgIC8vIEdDQyA3KyBsaWJzdGRj KysgaGFzIF9HTElCQ1hYX1JFTEVBU0UuCistIyAgICBkZWZpbmUgRk1UX0NPTlNURVhQUl9DSEFS X1RSQUlUUyBjb25zdGV4cHIKKy0jICBlbmRpZgorLSNlbGlmIGRlZmluZWQoX0xJQkNQUF9WRVJT SU9OKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMICYmIFwKKy0gICAgX0xJQkNQUF9WRVJTSU9O ID49IDQwMDAKKy0jICBkZWZpbmUgRk1UX0NPTlNURVhQUl9DSEFSX1RSQUlUUyBjb25zdGV4cHIK Ky0jZWxpZiBGTVRfTVNDX1ZFUiA+PSAxOTE0ICYmIF9NU1ZDX0xBTkcgPj0gMjAxNzAzTAorLSMg IGRlZmluZSBGTVRfQ09OU1RFWFBSX0NIQVJfVFJBSVRTIGNvbnN0ZXhwcgorLSNlbmRpZgorLSNp Zm5kZWYgRk1UX0NPTlNURVhQUl9DSEFSX1RSQUlUUworLSMgIGRlZmluZSBGTVRfQ09OU1RFWFBS X0NIQVJfVFJBSVRTCistI2VuZGlmCistCistLy8gQ2hlY2sgaWYgZXhjZXB0aW9ucyBhcmUgZGlz YWJsZWQuCistI2lmbmRlZiBGTVRfRVhDRVBUSU9OUworLSMgIGlmIChkZWZpbmVkKF9fR05VQ19f KSAmJiAhZGVmaW5lZChfX0VYQ0VQVElPTlMpKSB8fCBcCistICAgICAgRk1UX01TQ19WRVIgJiYg IV9IQVNfRVhDRVBUSU9OUworLSMgICAgZGVmaW5lIEZNVF9FWENFUFRJT05TIDAKKy0jICBlbHNl CistIyAgICBkZWZpbmUgRk1UX0VYQ0VQVElPTlMgMQorLSMgIGVuZGlmCistI2VuZGlmCistCist Ly8gRGVmaW5lIEZNVF9VU0VfTk9FWENFUFQgdG8gbWFrZSBmbXQgdXNlIG5vZXhjZXB0IChDKysx MSBmZWF0dXJlKS4KKy0jaWZuZGVmIEZNVF9VU0VfTk9FWENFUFQKKy0jICBkZWZpbmUgRk1UX1VT RV9OT0VYQ0VQVCAwCistI2VuZGlmCistCistI2lmIEZNVF9VU0VfTk9FWENFUFQgfHwgRk1UX0hB U19GRUFUVVJFKGN4eF9ub2V4Y2VwdCkgfHwgXAorLSAgICBGTVRfR0NDX1ZFUlNJT04gPj0gNDA4 IHx8IEZNVF9NU0NfVkVSID49IDE5MDAKKy0jICBkZWZpbmUgRk1UX0RFVEVDVEVEX05PRVhDRVBU IG5vZXhjZXB0CistIyAgZGVmaW5lIEZNVF9IQVNfQ1hYMTFfTk9FWENFUFQgMQorLSNlbHNlCist IyAgZGVmaW5lIEZNVF9ERVRFQ1RFRF9OT0VYQ0VQVCB0aHJvdygpCistIyAgZGVmaW5lIEZNVF9I QVNfQ1hYMTFfTk9FWENFUFQgMAorLSNlbmRpZgorLQorLSNpZm5kZWYgRk1UX05PRVhDRVBUCist IyAgaWYgRk1UX0VYQ0VQVElPTlMgfHwgRk1UX0hBU19DWFgxMV9OT0VYQ0VQVAorLSMgICAgZGVm aW5lIEZNVF9OT0VYQ0VQVCBGTVRfREVURUNURURfTk9FWENFUFQKKy0jICBlbHNlCistIyAgICBk ZWZpbmUgRk1UX05PRVhDRVBUCistIyAgZW5kaWYKKy0jZW5kaWYKKy0KKy0vLyBbW25vcmV0dXJu XV0gaXMgZGlzYWJsZWQgb24gTVNWQyBhbmQgTlZDQyBiZWNhdXNlIG9mIGJvZ3VzIHVucmVhY2hh YmxlIGNvZGUKKy0vLyB3YXJuaW5ncy4KKy0jaWYgRk1UX0VYQ0VQVElPTlMgJiYgRk1UX0hBU19D UFBfQVRUUklCVVRFKG5vcmV0dXJuKSAmJiAhRk1UX01TQ19WRVIgJiYgXAorLSAgICAhRk1UX05W Q0MKKy0jICBkZWZpbmUgRk1UX05PUkVUVVJOIFtbbm9yZXR1cm5dXQorLSNlbHNlCistIyAgZGVm aW5lIEZNVF9OT1JFVFVSTgorLSNlbmRpZgorLQorLSNpZiBfX2NwbHVzcGx1cyA9PSAyMDExMDNM IHx8IF9fY3BsdXNwbHVzID09IDIwMTQwMkwKKy0jICBpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElM RVIpIHx8IGRlZmluZWQoX19QR0kpCistIyAgICBkZWZpbmUgRk1UX0ZBTExUSFJPVUdICistIyAg ZWxpZiBkZWZpbmVkKF9fY2xhbmdfXykKKy0jICAgIGRlZmluZSBGTVRfRkFMTFRIUk9VR0ggW1tj bGFuZzo6ZmFsbHRocm91Z2hdXQorLSMgIGVsaWYgRk1UX0dDQ19WRVJTSU9OID49IDcwMCAmJiBc CistICAgICAgKCFkZWZpbmVkKF9fRURHX1ZFUlNJT05fXykgfHwgX19FREdfVkVSU0lPTl9fID49 IDUyMCkKKy0jICAgIGRlZmluZSBGTVRfRkFMTFRIUk9VR0ggW1tnbnU6OmZhbGx0aHJvdWdoXV0K Ky0jICBlbHNlCistIyAgICBkZWZpbmUgRk1UX0ZBTExUSFJPVUdICistIyAgZW5kaWYKKy0jZWxp ZiBGTVRfSEFTX0NQUDE3X0FUVFJJQlVURShmYWxsdGhyb3VnaCkKKy0jICBkZWZpbmUgRk1UX0ZB TExUSFJPVUdIIFtbZmFsbHRocm91Z2hdXQorLSNlbHNlCistIyAgZGVmaW5lIEZNVF9GQUxMVEhS T1VHSAorLSNlbmRpZgorLQorLSNpZm5kZWYgRk1UX05PRElTQ0FSRAorLSMgIGlmIEZNVF9IQVNf Q1BQMTdfQVRUUklCVVRFKG5vZGlzY2FyZCkKKy0jICAgIGRlZmluZSBGTVRfTk9ESVNDQVJEIFtb bm9kaXNjYXJkXV0KKy0jICBlbHNlCistIyAgICBkZWZpbmUgRk1UX05PRElTQ0FSRAorLSMgIGVu ZGlmCistI2VuZGlmCistCistI2lmbmRlZiBGTVRfVVNFX0ZMT0FUCistIyAgZGVmaW5lIEZNVF9V U0VfRkxPQVQgMQorLSNlbmRpZgorLSNpZm5kZWYgRk1UX1VTRV9ET1VCTEUKKy0jICBkZWZpbmUg Rk1UX1VTRV9ET1VCTEUgMQorLSNlbmRpZgorLSNpZm5kZWYgRk1UX1VTRV9MT05HX0RPVUJMRQor LSMgIGRlZmluZSBGTVRfVVNFX0xPTkdfRE9VQkxFIDEKKy0jZW5kaWYKKy0KKy0jaWZuZGVmIEZN VF9JTkxJTkUKKy0jICBpZiBGTVRfR0NDX1ZFUlNJT04gfHwgRk1UX0NMQU5HX1ZFUlNJT04KKy0j ICAgIGRlZmluZSBGTVRfSU5MSU5FIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l KSkKKy0jICBlbHNlCistIyAgICBkZWZpbmUgRk1UX0lOTElORSBpbmxpbmUKKy0jICBlbmRpZgor LSNlbmRpZgorLQorLSNpZm5kZWYgRk1UX0RFUFJFQ0FURUQKKy0jICBpZiBGTVRfSEFTX0NQUDE0 X0FUVFJJQlVURShkZXByZWNhdGVkKSB8fCBGTVRfTVNDX1ZFUiA+PSAxOTAwCistIyAgICBkZWZp bmUgRk1UX0RFUFJFQ0FURUQgW1tkZXByZWNhdGVkXV0KKy0jICBlbHNlCistIyAgICBpZiAoZGVm aW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19MQ0NfXykpIHx8IGRlZmluZWQoX19jbGFuZ19f KQorLSMgICAgICBkZWZpbmUgRk1UX0RFUFJFQ0FURUQgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRl ZCkpCistIyAgICBlbGlmIEZNVF9NU0NfVkVSCistIyAgICAgIGRlZmluZSBGTVRfREVQUkVDQVRF RCBfX2RlY2xzcGVjKGRlcHJlY2F0ZWQpCistIyAgICBlbHNlCistIyAgICAgIGRlZmluZSBGTVRf REVQUkVDQVRFRCAvKiBkZXByZWNhdGVkICovCistIyAgICBlbmRpZgorLSMgIGVuZGlmCistI2Vu ZGlmCistCistI2lmbmRlZiBGTVRfQkVHSU5fTkFNRVNQQUNFCistIyAgZGVmaW5lIEZNVF9CRUdJ Tl9OQU1FU1BBQ0UgXAorLSAgICBuYW1lc3BhY2UgZm10IHsgICAgICAgICAgIFwKKy0gICAgaW5s aW5lIG5hbWVzcGFjZSB2OCB7CistIyAgZGVmaW5lIEZNVF9FTkRfTkFNRVNQQUNFIFwKKy0gICAg fSAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9CistI2VuZGlmCistCistI2lmbmRlZiBG TVRfTU9EVUxFX0VYUE9SVAorLSMgIGRlZmluZSBGTVRfTU9EVUxFX0VYUE9SVAorLSMgIGRlZmlu ZSBGTVRfTU9EVUxFX0VYUE9SVF9CRUdJTgorLSMgIGRlZmluZSBGTVRfTU9EVUxFX0VYUE9SVF9F TkQKKy0jICBkZWZpbmUgRk1UX0JFR0lOX0RFVEFJTF9OQU1FU1BBQ0UgbmFtZXNwYWNlIGRldGFp bCB7CistIyAgZGVmaW5lIEZNVF9FTkRfREVUQUlMX05BTUVTUEFDRSB9CistI2VuZGlmCistCist I2lmICFkZWZpbmVkKEZNVF9IRUFERVJfT05MWSkgJiYgZGVmaW5lZChfV0lOMzIpCistIyAgZGVm aW5lIEZNVF9DTEFTU19BUEkgRk1UX01TQ19XQVJOSU5HKHN1cHByZXNzIDogNDI3NSkKKy0jICBp ZmRlZiBGTVRfRVhQT1JUCistIyAgICBkZWZpbmUgRk1UX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9y dCkKKy0jICBlbGlmIGRlZmluZWQoRk1UX1NIQVJFRCkKKy0jICAgIGRlZmluZSBGTVRfQVBJIF9f ZGVjbHNwZWMoZGxsaW1wb3J0KQorLSMgIGVuZGlmCistI2Vsc2UKKy0jICBkZWZpbmUgRk1UX0NM QVNTX0FQSQorLSMgIGlmIGRlZmluZWQoRk1UX0VYUE9SVCkgfHwgZGVmaW5lZChGTVRfU0hBUkVE KQorLSMgICAgaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pCistIyAg ICAgIGRlZmluZSBGTVRfQVBJIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkp CistIyAgICBlbmRpZgorLSMgIGVuZGlmCistI2VuZGlmCistI2lmbmRlZiBGTVRfQVBJCistIyAg ZGVmaW5lIEZNVF9BUEkKKy0jZW5kaWYKKy0KKy0vLyBsaWJjKysgc3VwcG9ydHMgc3RyaW5nX3Zp ZXcgaW4gcHJlLWMrKzE3LgorLSNpZiAoRk1UX0hBU19JTkNMVURFKDxzdHJpbmdfdmlldz4pICYm ICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAoX19jcGx1c3BsdXMgPiAyMDE0MDJMIHx8 IGRlZmluZWQoX0xJQkNQUF9WRVJTSU9OKSkpIHx8IFwKKy0gICAgKGRlZmluZWQoX01TVkNfTEFO RykgJiYgX01TVkNfTEFORyA+IDIwMTQwMkwgJiYgX01TQ19WRVIgPj0gMTkxMCkKKy0jICBpbmNs dWRlIDxzdHJpbmdfdmlldz4KKy0jICBkZWZpbmUgRk1UX1VTRV9TVFJJTkdfVklFVworLSNlbGlm IEZNVF9IQVNfSU5DTFVERSgiZXhwZXJpbWVudGFsL3N0cmluZ192aWV3IikgJiYgX19jcGx1c3Bs dXMgPj0gMjAxNDAyTAorLSMgIGluY2x1ZGUgPGV4cGVyaW1lbnRhbC9zdHJpbmdfdmlldz4KKy0j ICBkZWZpbmUgRk1UX1VTRV9FWFBFUklNRU5UQUxfU1RSSU5HX1ZJRVcKKy0jZW5kaWYKKy0KKy0j aWZuZGVmIEZNVF9VTklDT0RFCistIyAgZGVmaW5lIEZNVF9VTklDT0RFICFGTVRfTVNDX1ZFUgor LSNlbmRpZgorLQorLSNpZm5kZWYgRk1UX0NPTlNURVZBTAorLSMgIGlmICgoRk1UX0dDQ19WRVJT SU9OID49IDEwMDAgfHwgRk1UX0NMQU5HX1ZFUlNJT04gPj0gMTEwMSkgJiYgICAgICBcCistICAg ICAgIF9fY3BsdXNwbHVzID4gMjAxNzAzTCAmJiAhZGVmaW5lZChfX2FwcGxlX2J1aWxkX3ZlcnNp b25fXykpIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2NwcF9jb25zdGV2YWwpICYmICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAoIUZNVF9NU0NfVkVSIHx8IF9N U0NfRlVMTF9WRVIgPj0gMTkzMDMwNzA0KSkKKy0vLyBjb25zdGV2YWwgaXMgYnJva2VuIGluIE1T VkMgYmVmb3JlIFZTMjAyMiBhbmQgQXBwbGUgY2xhbmcgMTMuCistIyAgICBkZWZpbmUgRk1UX0NP TlNURVZBTCBjb25zdGV2YWwKKy0jICAgIGRlZmluZSBGTVRfSEFTX0NPTlNURVZBTAorLSMgIGVs c2UKKy0jICAgIGRlZmluZSBGTVRfQ09OU1RFVkFMCistIyAgZW5kaWYKKy0jZW5kaWYKKy0KKy0j aWZuZGVmIEZNVF9VU0VfTk9OVFlQRV9URU1QTEFURV9QQVJBTUVURVJTCistIyAgaWYgZGVmaW5l ZChfX2NwcF9ub250eXBlX3RlbXBsYXRlX2FyZ3MpICYmICAgICAgICAgICAgICAgIFwKKy0gICAg ICAoKEZNVF9HQ0NfVkVSU0lPTiA+PSA5MDMgJiYgX19jcGx1c3BsdXMgPj0gMjAxNzA5TCkgfHwg XAorLSAgICAgICBfX2NwcF9ub250eXBlX3RlbXBsYXRlX2FyZ3MgPj0gMjAxOTExTCkKKy0jICAg IGRlZmluZSBGTVRfVVNFX05PTlRZUEVfVEVNUExBVEVfUEFSQU1FVEVSUyAxCistIyAgZWxzZQor LSMgICAgZGVmaW5lIEZNVF9VU0VfTk9OVFlQRV9URU1QTEFURV9QQVJBTUVURVJTIDAKKy0jICBl bmRpZgorLSNlbmRpZgorLQorLS8vIEVuYWJsZSBtaW5pbWFsIG9wdGltaXphdGlvbnMgZm9yIG1v cmUgY29tcGFjdCBjb2RlIGluIGRlYnVnIG1vZGUuCistRk1UX0dDQ19QUkFHTUEoIkdDQyBwdXNo X29wdGlvbnMiKQorLSNpZm5kZWYgX19PUFRJTUlaRV9fCistRk1UX0dDQ19QUkFHTUEoIkdDQyBv cHRpbWl6ZShcIk9nXCIpIikKKy0jZW5kaWYKKy0KKy1GTVRfQkVHSU5fTkFNRVNQQUNFCistRk1U X01PRFVMRV9FWFBPUlRfQkVHSU4KKy0KKy0vLyBJbXBsZW1lbnRhdGlvbnMgb2YgZW5hYmxlX2lm X3QgYW5kIG90aGVyIG1ldGFmdW5jdGlvbnMgZm9yIG9sZGVyIHN5c3RlbXMuCistdGVtcGxhdGUg PGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+CistdXNpbmcgZW5hYmxlX2lmX3QgPSB0eXBlbmFt ZSBzdGQ6OmVuYWJsZV9pZjxCLCBUPjo6dHlwZTsKKy10ZW1wbGF0ZSA8Ym9vbCBCLCB0eXBlbmFt ZSBULCB0eXBlbmFtZSBGPgorLXVzaW5nIGNvbmRpdGlvbmFsX3QgPSB0eXBlbmFtZSBzdGQ6OmNv bmRpdGlvbmFsPEIsIFQsIEY+Ojp0eXBlOworLXRlbXBsYXRlIDxib29sIEI+IHVzaW5nIGJvb2xf Y29uc3RhbnQgPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIEI+OworLXRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLXVzaW5nIHJlbW92ZV9yZWZlcmVuY2VfdCA9IHR5cGVuYW1lIHN0ZDo6cmVt b3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy11c2luZyBy ZW1vdmVfY29uc3RfdCA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlOworLXRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLXVzaW5nIHJlbW92ZV9jdnJlZl90ID0gdHlwZW5hbWUgc3Rk OjpyZW1vdmVfY3Y8cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Pjo6dHlwZTsKKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gc3RydWN0IHR5cGVfaWRlbnRpdHkgeyB1c2luZyB0eXBlID0gVDsgfTsKKy10ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcgdHlwZV9pZGVudGl0eV90ID0gdHlwZW5hbWUgdHlwZV9p ZGVudGl0eTxUPjo6dHlwZTsKKy0KKy1zdHJ1Y3QgbW9ub3N0YXRlIHsKKy0gIGNvbnN0ZXhwciBt b25vc3RhdGUoKSB7fQorLX07CistCistLy8gQW4gZW5hYmxlX2lmIGhlbHBlciB0byBiZSB1c2Vk IGluIHRlbXBsYXRlIHBhcmFtZXRlcnMgd2hpY2ggcmVzdWx0cyBpbiBtdWNoCistLy8gc2hvcnRl ciBzeW1ib2xzOiBodHRwczovL2dvZGJvbHQub3JnL3ovc1d3NHZQLiBFeHRyYSBwYXJlbnRoZXNl cyBhcmUgbmVlZGVkCistLy8gdG8gd29ya2Fyb3VuZCBhIGJ1ZyBpbiBNU1ZDIDIwMTkgKHNlZSAj MTE0MCBhbmQgIzExODYpLgorLSNpZmRlZiBGTVRfRE9DCistIyAgZGVmaW5lIEZNVF9FTkFCTEVf SUYoLi4uKQorLSNlbHNlCistIyAgZGVmaW5lIEZNVF9FTkFCTEVfSUYoLi4uKSBlbmFibGVfaWZf dDwoX19WQV9BUkdTX18pLCBpbnQ+ID0gMAorLSNlbmRpZgorLQorLUZNVF9CRUdJTl9ERVRBSUxf TkFNRVNQQUNFCistCistLy8gU3VwcHJlc3MgInVudXNlZCB2YXJpYWJsZSIgd2FybmluZ3Mgd2l0 aCB0aGUgbWV0aG9kIGRlc2NyaWJlZCBpbgorLS8vIGh0dHBzOi8vaGVyYnN1dHRlci5jb20vMjAw OS8xMC8xOC9tYWlsYmFnLXNodXR0aW5nLXVwLWNvbXBpbGVyLXdhcm5pbmdzLy4KKy0vLyAodm9p ZCl2YXIgZG9lcyBub3Qgd29yayBvbiBtYW55IEludGVsIGNvbXBpbGVycy4KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUuLi4gVD4gRk1UX0NPTlNURVhQUiB2b2lkIGlnbm9yZV91bnVzZWQoY29uc3QgVCYu Li4pIHt9CistCistY29uc3RleHByIEZNVF9JTkxJTkUgYXV0byBpc19jb25zdGFudF9ldmFsdWF0 ZWQoYm9vbCBkZWZhdWx0X3ZhbHVlID0gZmFsc2UpCistICAgIEZNVF9OT0VYQ0VQVCAtPiBib29s IHsKKy0jaWZkZWYgX19jcHBfbGliX2lzX2NvbnN0YW50X2V2YWx1YXRlZAorLSAgaWdub3JlX3Vu dXNlZChkZWZhdWx0X3ZhbHVlKTsKKy0gIHJldHVybiBzdGQ6OmlzX2NvbnN0YW50X2V2YWx1YXRl ZCgpOworLSNlbHNlCistICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKKy0jZW5kaWYKKy19CistCist Ly8gQSBmdW5jdGlvbiB0byBzdXBwcmVzcyAiY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25z dGFudCIgd2FybmluZ3MuCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBGTVRfSU5M SU5FIGF1dG8gY29uc3RfY2hlY2soVCB2YWx1ZSkgLT4gVCB7CistICByZXR1cm4gdmFsdWU7Cist fQorLQorLUZNVF9OT1JFVFVSTiBGTVRfQVBJIHZvaWQgYXNzZXJ0X2ZhaWwoY29uc3QgY2hhciog ZmlsZSwgaW50IGxpbmUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBtZXNzYWdlKTsKKy0KKy0jaWZuZGVmIEZNVF9BU1NFUlQKKy0jICBpZmRlZiBO REVCVUcKKy0vLyBGTVRfQVNTRVJUIGlzIG5vdCBlbXB0eSB0byBhdm9pZCAtV2Vycm9yPWVtcHR5 LWJvZHkuCistIyAgICBkZWZpbmUgRk1UX0FTU0VSVChjb25kaXRpb24sIG1lc3NhZ2UpIFwKKy0g ICAgICA6OmZtdDo6ZGV0YWlsOjppZ25vcmVfdW51c2VkKChjb25kaXRpb24pLCAobWVzc2FnZSkp CistIyAgZWxzZQorLSMgICAgZGVmaW5lIEZNVF9BU1NFUlQoY29uZGl0aW9uLCBtZXNzYWdlKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAoKGNvbmRpdGlvbikg Lyogdm9pZCgpIGZhaWxzIHdpdGggLVdpbnZhbGlkLWNvbnN0ZXhwciBvbiBjbGFuZyA0LjAuMSAq LyBcCistICAgICAgICAgICA/ICh2b2lkKTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgOiA6OmZtdDo6ZGV0YWls Ojphc3NlcnRfZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIChtZXNzYWdlKSkpCistIyAgZW5kaWYK Ky0jZW5kaWYKKy0KKy0jaWZkZWYgX19jcHBfbGliX2J5dGUKKy11c2luZyBieXRlID0gc3RkOjpi eXRlOworLSNlbHNlCistZW51bSBjbGFzcyBieXRlIDogdW5zaWduZWQgY2hhciB7fTsKKy0jZW5k aWYKKy0KKy0jaWYgZGVmaW5lZChGTVRfVVNFX1NUUklOR19WSUVXKQorLXRlbXBsYXRlIDx0eXBl bmFtZSBDaGFyPiB1c2luZyBzdGRfc3RyaW5nX3ZpZXcgPSBzdGQ6OmJhc2ljX3N0cmluZ192aWV3 PENoYXI+OworLSNlbGlmIGRlZmluZWQoRk1UX1VTRV9FWFBFUklNRU5UQUxfU1RSSU5HX1ZJRVcp CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CistdXNpbmcgc3RkX3N0cmluZ192aWV3ID0gc3Rk OjpleHBlcmltZW50YWw6OmJhc2ljX3N0cmluZ192aWV3PENoYXI+OworLSNlbHNlCistdGVtcGxh dGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBzdGRfc3RyaW5nX3ZpZXcge307CistI2VuZGlmCistCist I2lmZGVmIEZNVF9VU0VfSU5UMTI4CistLy8gRG8gbm90aGluZy4KKy0jZWxpZiBkZWZpbmVkKF9f U0laRU9GX0lOVDEyOF9fKSAmJiAhRk1UX05WQ0MgJiYgXAorLSAgICAhKEZNVF9DTEFOR19WRVJT SU9OICYmIEZNVF9NU0NfVkVSKQorLSMgIGRlZmluZSBGTVRfVVNFX0lOVDEyOCAxCistdXNpbmcg aW50MTI4X3QgPSBfX2ludDEyOF90OworLXVzaW5nIHVpbnQxMjhfdCA9IF9fdWludDEyOF90Owor LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBjb252ZXJ0X2Zvcl92aXNpdChUIHZh bHVlKSAtPiBUIHsKKy0gIHJldHVybiB2YWx1ZTsKKy19CistI2Vsc2UKKy0jICBkZWZpbmUgRk1U X1VTRV9JTlQxMjggMAorLSNlbmRpZgorLSNpZiAhRk1UX1VTRV9JTlQxMjgKKy1lbnVtIGNsYXNz IGludDEyOF90IHt9OworLWVudW0gY2xhc3MgdWludDEyOF90IHt9OworLS8vIFJlZHVjZSB0ZW1w bGF0ZSBpbnN0YW50aWF0aW9ucy4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIGF1dG8g Y29udmVydF9mb3JfdmlzaXQoVCkgLT4gbW9ub3N0YXRlIHsKKy0gIHJldHVybiB7fTsKKy19Cist I2VuZGlmCistCistLy8gQ2FzdHMgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIHRvIHVuc2lnbmVkLgor LXRlbXBsYXRlIDx0eXBlbmFtZSBJbnQ+CistRk1UX0NPTlNURVhQUiBhdXRvIHRvX3Vuc2lnbmVk KEludCB2YWx1ZSkgLT4KKy0gICAgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPEludD46OnR5 cGUgeworLSAgRk1UX0FTU0VSVCh2YWx1ZSA+PSAwLCAibmVnYXRpdmUgdmFsdWUiKTsKKy0gIHJl dHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8SW50Pjo6dHlwZT4o dmFsdWUpOworLX0KKy0KKy1GTVRfTVNDX1dBUk5JTkcoc3VwcHJlc3MgOiA0NTY2KSBjb25zdGV4 cHIgdW5zaWduZWQgY2hhciBtaWNyb1tdID0gIlx1MDBCNSI7CistCistY29uc3RleHByIGF1dG8g aXNfdXRmOCgpIC0+IGJvb2wgeworLSAgLy8gQXZvaWQgYnVnZ3kgc2lnbiBleHRlbnNpb25zIGlu IE1TVkMncyBjb25zdGFudCBldmFsdWF0aW9uIG1vZGUuCistICAvLyBodHRwczovL2RldmVsb3Bl cmNvbW11bml0eS52aXN1YWxzdHVkaW8uY29tL3QvQy1kaWZmZXJlbmNlLWluLWJlaGF2aW9yLWZv ci11bnNpZ25lZC8xMjMzNjEyCistICB1c2luZyB1Y2hhciA9IHVuc2lnbmVkIGNoYXI7CistICBy ZXR1cm4gRk1UX1VOSUNPREUgfHwgKHNpemVvZihtaWNybykgPT0gMyAmJiB1Y2hhcihtaWNyb1sw XSkgPT0gMHhDMiAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgICB1Y2hhcihtaWNyb1sxXSkg PT0gMHhCNSk7CistfQorLUZNVF9FTkRfREVUQUlMX05BTUVTUEFDRQorLQorLS8qKgorLSAgQW4g aW1wbGVtZW50YXRpb24gb2YgYGBzdGQ6OmJhc2ljX3N0cmluZ192aWV3YGAgZm9yIHByZS1DKysx Ny4gSXQgcHJvdmlkZXMgYQorLSAgc3Vic2V0IG9mIHRoZSBBUEkuIGBgZm10OjpiYXNpY19zdHJp bmdfdmlld2BgIGlzIHVzZWQgZm9yIGZvcm1hdCBzdHJpbmdzIGV2ZW4KKy0gIGlmIGBgc3RkOjpz dHJpbmdfdmlld2BgIGlzIGF2YWlsYWJsZSB0byBwcmV2ZW50IGlzc3VlcyB3aGVuIGEgbGlicmFy eSBpcworLSAgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudCBgYC1zdGRgYCBvcHRpb24gdGhhbiB0 aGUgY2xpZW50IGNvZGUgKHdoaWNoIGlzIG5vdAorLSAgcmVjb21tZW5kZWQpLgorLSAqLworLXRl bXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBjbGFzcyBiYXNpY19zdHJpbmdfdmlldyB7CistIHByaXZh dGU6CistICBjb25zdCBDaGFyKiBkYXRhXzsKKy0gIHNpemVfdCBzaXplXzsKKy0KKy0gcHVibGlj OgorLSAgdXNpbmcgdmFsdWVfdHlwZSA9IENoYXI7CistICB1c2luZyBpdGVyYXRvciA9IGNvbnN0 IENoYXIqOworLQorLSAgY29uc3RleHByIGJhc2ljX3N0cmluZ192aWV3KCkgRk1UX05PRVhDRVBU IDogZGF0YV8obnVsbHB0ciksIHNpemVfKDApIHt9CistCistICAvKiogQ29uc3RydWN0cyBhIHN0 cmluZyByZWZlcmVuY2Ugb2JqZWN0IGZyb20gYSBDIHN0cmluZyBhbmQgYSBzaXplLiAqLworLSAg Y29uc3RleHByIGJhc2ljX3N0cmluZ192aWV3KGNvbnN0IENoYXIqIHMsIHNpemVfdCBjb3VudCkg Rk1UX05PRVhDRVBUCistICAgICAgOiBkYXRhXyhzKSwKKy0gICAgICAgIHNpemVfKGNvdW50KSB7 fQorLQorLSAgLyoqCistICAgIFxyc3QKKy0gICAgQ29uc3RydWN0cyBhIHN0cmluZyByZWZlcmVu Y2Ugb2JqZWN0IGZyb20gYSBDIHN0cmluZyBjb21wdXRpbmcKKy0gICAgdGhlIHNpemUgd2l0aCBg YHN0ZDo6Y2hhcl90cmFpdHM8Q2hhcj46Omxlbmd0aGBgLgorLSAgICBcZW5kcnN0CistICAgKi8K Ky0gIEZNVF9DT05TVEVYUFJfQ0hBUl9UUkFJVFMKKy0gIEZNVF9JTkxJTkUKKy0gIGJhc2ljX3N0 cmluZ192aWV3KGNvbnN0IENoYXIqIHMpCistICAgICAgOiBkYXRhXyhzKSwKKy0gICAgICAgIHNp emVfKGRldGFpbDo6Y29uc3RfY2hlY2soc3RkOjppc19zYW1lPENoYXIsIGNoYXI+Ojp2YWx1ZSAm JgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGV0YWlsOjppc19jb25zdGFu dF9ldmFsdWF0ZWQodHJ1ZSkpCistICAgICAgICAgICAgICAgICAgPyBzdGQ6OnN0cmxlbihyZWlu dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzKSkKKy0gICAgICAgICAgICAgICAgICA6IHN0ZDo6 Y2hhcl90cmFpdHM8Q2hhcj46Omxlbmd0aChzKSkge30KKy0KKy0gIC8qKiBDb25zdHJ1Y3RzIGEg c3RyaW5nIHJlZmVyZW5jZSBmcm9tIGEgYGBzdGQ6OmJhc2ljX3N0cmluZ2BgIG9iamVjdC4gKi8K Ky0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorLSAgRk1UX0NP TlNURVhQUiBiYXNpY19zdHJpbmdfdmlldygKKy0gICAgICBjb25zdCBzdGQ6OmJhc2ljX3N0cmlu ZzxDaGFyLCBUcmFpdHMsIEFsbG9jPiYgcykgRk1UX05PRVhDRVBUCistICAgICAgOiBkYXRhXyhz LmRhdGEoKSksCistICAgICAgICBzaXplXyhzLnNpemUoKSkge30KKy0KKy0gIHRlbXBsYXRlIDx0 eXBlbmFtZSBTLCBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfc2FtZTwKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFMsIGRldGFpbDo6c3RkX3N0cmluZ192aWV3PENoYXI+Pjo6 dmFsdWUpPgorLSAgRk1UX0NPTlNURVhQUiBiYXNpY19zdHJpbmdfdmlldyhTIHMpIEZNVF9OT0VY Q0VQVCA6IGRhdGFfKHMuZGF0YSgpKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplXyhzLnNpemUoKSkge30KKy0KKy0gIC8qKiBSZXR1 cm5zIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nIGRhdGEuICovCistICBjb25zdGV4cHIgYXV0byBk YXRhKCkgY29uc3QgRk1UX05PRVhDRVBUIC0+IGNvbnN0IENoYXIqIHsgcmV0dXJuIGRhdGFfOyB9 CistCistICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuICovCistICBjb25zdGV4cHIgYXV0 byBzaXplKCkgY29uc3QgRk1UX05PRVhDRVBUIC0+IHNpemVfdCB7IHJldHVybiBzaXplXzsgfQor LQorLSAgY29uc3RleHByIGF1dG8gYmVnaW4oKSBjb25zdCBGTVRfTk9FWENFUFQgLT4gaXRlcmF0 b3IgeyByZXR1cm4gZGF0YV87IH0KKy0gIGNvbnN0ZXhwciBhdXRvIGVuZCgpIGNvbnN0IEZNVF9O T0VYQ0VQVCAtPiBpdGVyYXRvciB7IHJldHVybiBkYXRhXyArIHNpemVfOyB9CistCistICBjb25z dGV4cHIgYXV0byBvcGVyYXRvcltdKHNpemVfdCBwb3MpIGNvbnN0IEZNVF9OT0VYQ0VQVCAtPiBj b25zdCBDaGFyJiB7CistICAgIHJldHVybiBkYXRhX1twb3NdOworLSAgfQorLQorLSAgRk1UX0NP TlNURVhQUiB2b2lkIHJlbW92ZV9wcmVmaXgoc2l6ZV90IG4pIEZNVF9OT0VYQ0VQVCB7CistICAg IGRhdGFfICs9IG47CistICAgIHNpemVfIC09IG47CistICB9CistCistICAvLyBMZXhpY29ncmFw aGljYWxseSBjb21wYXJlIHRoaXMgc3RyaW5nIHJlZmVyZW5jZSB0byBvdGhlci4KKy0gIEZNVF9D T05TVEVYUFJfQ0hBUl9UUkFJVFMgYXV0byBjb21wYXJlKGJhc2ljX3N0cmluZ192aWV3IG90aGVy KSBjb25zdCAtPiBpbnQgeworLSAgICBzaXplX3Qgc3RyX3NpemUgPSBzaXplXyA8IG90aGVyLnNp emVfID8gc2l6ZV8gOiBvdGhlci5zaXplXzsKKy0gICAgaW50IHJlc3VsdCA9IHN0ZDo6Y2hhcl90 cmFpdHM8Q2hhcj46OmNvbXBhcmUoZGF0YV8sIG90aGVyLmRhdGFfLCBzdHJfc2l6ZSk7CistICAg IGlmIChyZXN1bHQgPT0gMCkKKy0gICAgICByZXN1bHQgPSBzaXplXyA9PSBvdGhlci5zaXplXyA/ IDAgOiAoc2l6ZV8gPCBvdGhlci5zaXplXyA/IC0xIDogMSk7CistICAgIHJldHVybiByZXN1bHQ7 CistICB9CistCistICBGTVRfQ09OU1RFWFBSX0NIQVJfVFJBSVRTIGZyaWVuZCBhdXRvIG9wZXJh dG9yPT0oYmFzaWNfc3RyaW5nX3ZpZXcgbGhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZ192aWV3IHJocykKKy0gICAgICAt PiBib29sIHsKKy0gICAgcmV0dXJuIGxocy5jb21wYXJlKHJocykgPT0gMDsKKy0gIH0KKy0gIGZy aWVuZCBhdXRvIG9wZXJhdG9yIT0oYmFzaWNfc3RyaW5nX3ZpZXcgbGhzLCBiYXNpY19zdHJpbmdf dmlldyByaHMpIC0+IGJvb2wgeworLSAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSAhPSAwOwor LSAgfQorLSAgZnJpZW5kIGF1dG8gb3BlcmF0b3I8KGJhc2ljX3N0cmluZ192aWV3IGxocywgYmFz aWNfc3RyaW5nX3ZpZXcgcmhzKSAtPiBib29sIHsKKy0gICAgcmV0dXJuIGxocy5jb21wYXJlKHJo cykgPCAwOworLSAgfQorLSAgZnJpZW5kIGF1dG8gb3BlcmF0b3I8PShiYXNpY19zdHJpbmdfdmll dyBsaHMsIGJhc2ljX3N0cmluZ192aWV3IHJocykgLT4gYm9vbCB7CistICAgIHJldHVybiBsaHMu Y29tcGFyZShyaHMpIDw9IDA7CistICB9CistICBmcmllbmQgYXV0byBvcGVyYXRvcj4oYmFzaWNf c3RyaW5nX3ZpZXcgbGhzLCBiYXNpY19zdHJpbmdfdmlldyByaHMpIC0+IGJvb2wgeworLSAgICBy ZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA+IDA7CistICB9CistICBmcmllbmQgYXV0byBvcGVyYXRv cj49KGJhc2ljX3N0cmluZ192aWV3IGxocywgYmFzaWNfc3RyaW5nX3ZpZXcgcmhzKSAtPiBib29s IHsKKy0gICAgcmV0dXJuIGxocy5jb21wYXJlKHJocykgPj0gMDsKKy0gIH0KKy19OworLQorLXVz aW5nIHN0cmluZ192aWV3ID0gYmFzaWNfc3RyaW5nX3ZpZXc8Y2hhcj47CistCistLyoqIFNwZWNp ZmllcyBpZiBgYFRgYCBpcyBhIGNoYXJhY3RlciB0eXBlLiBDYW4gYmUgc3BlY2lhbGl6ZWQgYnkg dXNlcnMuICovCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBpc19jaGFyIDogc3RkOjpm YWxzZV90eXBlIHt9OworLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19jaGFyPGNoYXI+IDogc3RkOjp0 cnVlX3R5cGUge307CistCistLy8gUmV0dXJucyBhIHN0cmluZyB2aWV3IG9mIGBzYC4KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgQ2hhciwgRk1UX0VOQUJMRV9JRihpc19jaGFyPENoYXI+Ojp2YWx1ZSk+ CistRk1UX0lOTElORSBhdXRvIHRvX3N0cmluZ192aWV3KGNvbnN0IENoYXIqIHMpIC0+IGJhc2lj X3N0cmluZ192aWV3PENoYXI+IHsKKy0gIHJldHVybiBzOworLX0KKy10ZW1wbGF0ZSA8dHlwZW5h bWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKy1pbmxpbmUgYXV0byB0 b19zdHJpbmdfdmlldyhjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdHMsIEFsbG9j PiYgcykKKy0gICAgLT4gYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4geworLSAgcmV0dXJuIHM7Cist fQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLWNvbnN0ZXhwciBhdXRvIHRvX3N0cmluZ192 aWV3KGJhc2ljX3N0cmluZ192aWV3PENoYXI+IHMpCistICAgIC0+IGJhc2ljX3N0cmluZ192aWV3 PENoYXI+IHsKKy0gIHJldHVybiBzOworLX0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwKKy0g ICAgICAgICAgRk1UX0VOQUJMRV9JRighc3RkOjppc19lbXB0eTxkZXRhaWw6OnN0ZF9zdHJpbmdf dmlldzxDaGFyPj46OnZhbHVlKT4KKy1pbmxpbmUgYXV0byB0b19zdHJpbmdfdmlldyhkZXRhaWw6 OnN0ZF9zdHJpbmdfdmlldzxDaGFyPiBzKQorLSAgICAtPiBiYXNpY19zdHJpbmdfdmlldzxDaGFy PiB7CistICByZXR1cm4gczsKKy19CistCistLy8gQSBiYXNlIGNsYXNzIGZvciBjb21waWxlLXRp bWUgc3RyaW5ncy4gSXQgaXMgZGVmaW5lZCBpbiB0aGUgZm10IG5hbWVzcGFjZSB0bworLS8vIG1h a2UgZm9ybWF0dGluZyBmdW5jdGlvbnMgdmlzaWJsZSB2aWEgQURMLCBlLmcuIGZvcm1hdChGTVRf U1RSSU5HKCJ7fSIpLCA0MikuCistc3RydWN0IGNvbXBpbGVfc3RyaW5nIHt9OworLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBTPgorLXN0cnVjdCBpc19jb21waWxlX3N0cmluZyA6IHN0ZDo6aXNfYmFz ZV9vZjxjb21waWxlX3N0cmluZywgUz4ge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFMsIEZN VF9FTkFCTEVfSUYoaXNfY29tcGlsZV9zdHJpbmc8Uz46OnZhbHVlKT4KKy1jb25zdGV4cHIgYXV0 byB0b19zdHJpbmdfdmlldyhjb25zdCBTJiBzKQorLSAgICAtPiBiYXNpY19zdHJpbmdfdmlldzx0 eXBlbmFtZSBTOjpjaGFyX3R5cGU+IHsKKy0gIHJldHVybiBiYXNpY19zdHJpbmdfdmlldzx0eXBl bmFtZSBTOjpjaGFyX3R5cGU+KHMpOworLX0KKy0KKy1GTVRfQkVHSU5fREVUQUlMX05BTUVTUEFD RQorLQorLXZvaWQgdG9fc3RyaW5nX3ZpZXcoLi4uKTsKKy11c2luZyBmbXQ6OnRvX3N0cmluZ192 aWV3OworLQorLS8vIFNwZWNpZmllcyB3aGV0aGVyIFMgaXMgYSBzdHJpbmcgdHlwZSBjb252ZXJ0 aWJsZSB0byBmbXQ6OmJhc2ljX3N0cmluZ192aWV3LgorLS8vIEl0IHNob3VsZCBiZSBhIGNvbnN0 ZXhwciBmdW5jdGlvbiBidXQgTVNWQyAyMDE3IGZhaWxzIHRvIGNvbXBpbGUgaXQgaW4KKy0vLyBl bmFibGVfaWYgYW5kIE1TVkMgMjAxNSBmYWlscyB0byBjb21waWxlIGl0IGFzIGFuIGFsaWFzIHRl bXBsYXRlLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBTPgorLXN0cnVjdCBpc19zdHJpbmcgOiBzdGQ6 OmlzX2NsYXNzPGRlY2x0eXBlKHRvX3N0cmluZ192aWV3KHN0ZDo6ZGVjbHZhbDxTPigpKSk+IHsK Ky19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSA9IHZvaWQ+IHN0cnVjdCBj aGFyX3RfaW1wbCB7fTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgUz4gc3RydWN0IGNoYXJfdF9pbXBs PFMsIGVuYWJsZV9pZl90PGlzX3N0cmluZzxTPjo6dmFsdWU+PiB7CistICB1c2luZyByZXN1bHQg PSBkZWNsdHlwZSh0b19zdHJpbmdfdmlldyhzdGQ6OmRlY2x2YWw8Uz4oKSkpOworLSAgdXNpbmcg dHlwZSA9IHR5cGVuYW1lIHJlc3VsdDo6dmFsdWVfdHlwZTsKKy19OworLQorLS8vIFJlcG9ydHMg YSBjb21waWxlLXRpbWUgZXJyb3IgaWYgUyBpcyBub3QgYSB2YWxpZCBmb3JtYXQgc3RyaW5nLgor LXRlbXBsYXRlIDx0eXBlbmFtZS4uLiwgdHlwZW5hbWUgUywgRk1UX0VOQUJMRV9JRighaXNfY29t cGlsZV9zdHJpbmc8Uz46OnZhbHVlKT4KKy1GTVRfSU5MSU5FIHZvaWQgY2hlY2tfZm9ybWF0X3N0 cmluZyhjb25zdCBTJikgeworLSNpZmRlZiBGTVRfRU5GT1JDRV9DT01QSUxFX1NUUklORworLSAg c3RhdGljX2Fzc2VydChpc19jb21waWxlX3N0cmluZzxTPjo6dmFsdWUsCistICAgICAgICAgICAg ICAgICJGTVRfRU5GT1JDRV9DT01QSUxFX1NUUklORyByZXF1aXJlcyBhbGwgZm9ybWF0IHN0cmlu Z3MgdG8gdXNlICIKKy0gICAgICAgICAgICAgICAgIkZNVF9TVFJJTkcuIik7CistI2VuZGlmCist fQorLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiwgdHlwZW5hbWUgUywgRk1UX0VOQUJMRV9JRihpc19j b21waWxlX3N0cmluZzxTPjo6dmFsdWUpPgorLXZvaWQgY2hlY2tfZm9ybWF0X3N0cmluZyhTKTsK Ky0KKy1GTVRfTk9SRVRVUk4gRk1UX0FQSSB2b2lkIHRocm93X2Zvcm1hdF9lcnJvcihjb25zdCBj aGFyKiBtZXNzYWdlKTsKKy0KKy1zdHJ1Y3QgZXJyb3JfaGFuZGxlciB7CistICBjb25zdGV4cHIg ZXJyb3JfaGFuZGxlcigpID0gZGVmYXVsdDsKKy0gIGNvbnN0ZXhwciBlcnJvcl9oYW5kbGVyKGNv bnN0IGVycm9yX2hhbmRsZXImKSA9IGRlZmF1bHQ7CistCistICAvLyBUaGlzIGZ1bmN0aW9uIGlz IGludGVudGlvbmFsbHkgbm90IGNvbnN0ZXhwciB0byBnaXZlIGEgY29tcGlsZS10aW1lIGVycm9y LgorLSAgRk1UX05PUkVUVVJOIEZNVF9BUEkgdm9pZCBvbl9lcnJvcihjb25zdCBjaGFyKiBtZXNz YWdlKTsKKy19OworLUZNVF9FTkRfREVUQUlMX05BTUVTUEFDRQorLQorLS8qKiBTdHJpbmcncyBj aGFyYWN0ZXIgdHlwZS4gKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgUz4gdXNpbmcgY2hhcl90ID0g dHlwZW5hbWUgZGV0YWlsOjpjaGFyX3RfaW1wbDxTPjo6dHlwZTsKKy0KKy0vKioKKy0gIFxyc3QK Ky0gIFBhcnNpbmcgY29udGV4dCBjb25zaXN0aW5nIG9mIGEgZm9ybWF0IHN0cmluZyByYW5nZSBi ZWluZyBwYXJzZWQgYW5kIGFuCistICBhcmd1bWVudCBjb3VudGVyIGZvciBhdXRvbWF0aWMgaW5k ZXhpbmcuCistICBZb3UgY2FuIHVzZSB0aGUgYGBmb3JtYXRfcGFyc2VfY29udGV4dGBgIHR5cGUg YWxpYXMgZm9yIGBgY2hhcmBgIGluc3RlYWQuCistICBcZW5kcnN0CistICovCistdGVtcGxhdGUg PHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIEVycm9ySGFuZGxlciA9IGRldGFpbDo6ZXJyb3JfaGFu ZGxlcj4KKy1jbGFzcyBiYXNpY19mb3JtYXRfcGFyc2VfY29udGV4dCA6IHByaXZhdGUgRXJyb3JI YW5kbGVyIHsKKy0gcHJpdmF0ZToKKy0gIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IGZvcm1hdF9z dHJfOworLSAgaW50IG5leHRfYXJnX2lkXzsKKy0KKy0gcHVibGljOgorLSAgdXNpbmcgY2hhcl90 eXBlID0gQ2hhcjsKKy0gIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgYmFzaWNfc3RyaW5nX3Zp ZXc8Q2hhcj46Oml0ZXJhdG9yOworLQorLSAgZXhwbGljaXQgY29uc3RleHByIGJhc2ljX2Zvcm1h dF9wYXJzZV9jb250ZXh0KAorLSAgICAgIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IGZvcm1hdF9z dHIsIEVycm9ySGFuZGxlciBlaCA9IHt9LAorLSAgICAgIGludCBuZXh0X2FyZ19pZCA9IDApCist ICAgICAgOiBFcnJvckhhbmRsZXIoZWgpLCBmb3JtYXRfc3RyXyhmb3JtYXRfc3RyKSwgbmV4dF9h cmdfaWRfKG5leHRfYXJnX2lkKSB7fQorLQorLSAgLyoqCistICAgIFJldHVybnMgYW4gaXRlcmF0 b3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZm9ybWF0IHN0cmluZyByYW5nZSBiZWluZworLSAg ICBwYXJzZWQuCistICAgKi8KKy0gIGNvbnN0ZXhwciBhdXRvIGJlZ2luKCkgY29uc3QgRk1UX05P RVhDRVBUIC0+IGl0ZXJhdG9yIHsKKy0gICAgcmV0dXJuIGZvcm1hdF9zdHJfLmJlZ2luKCk7Cist ICB9CistCistICAvKioKKy0gICAgUmV0dXJucyBhbiBpdGVyYXRvciBwYXN0IHRoZSBlbmQgb2Yg dGhlIGZvcm1hdCBzdHJpbmcgcmFuZ2UgYmVpbmcgcGFyc2VkLgorLSAgICovCistICBjb25zdGV4 cHIgYXV0byBlbmQoKSBjb25zdCBGTVRfTk9FWENFUFQgLT4gaXRlcmF0b3IgeworLSAgICByZXR1 cm4gZm9ybWF0X3N0cl8uZW5kKCk7CistICB9CistCistICAvKiogQWR2YW5jZXMgdGhlIGJlZ2lu IGl0ZXJhdG9yIHRvIGBgaXRgYC4gKi8KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBhZHZhbmNlX3Rv KGl0ZXJhdG9yIGl0KSB7CistICAgIGZvcm1hdF9zdHJfLnJlbW92ZV9wcmVmaXgoZGV0YWlsOjp0 b191bnNpZ25lZChpdCAtIGJlZ2luKCkpKTsKKy0gIH0KKy0KKy0gIC8qKgorLSAgICBSZXBvcnRz IGFuIGVycm9yIGlmIHVzaW5nIHRoZSBtYW51YWwgYXJndW1lbnQgaW5kZXhpbmc7IG90aGVyd2lz ZSByZXR1cm5zCistICAgIHRoZSBuZXh0IGFyZ3VtZW50IGluZGV4IGFuZCBzd2l0Y2hlcyB0byB0 aGUgYXV0b21hdGljIGluZGV4aW5nLgorLSAgICovCistICBGTVRfQ09OU1RFWFBSIGF1dG8gbmV4 dF9hcmdfaWQoKSAtPiBpbnQgeworLSAgICAvLyBEb24ndCBjaGVjayBpZiB0aGUgYXJndW1lbnQg aWQgaXMgdmFsaWQgdG8gYXZvaWQgb3ZlcmhlYWQgYW5kIGJlY2F1c2UgaXQKKy0gICAgLy8gd2ls bCBiZSBjaGVja2VkIGR1cmluZyBmb3JtYXR0aW5nIGFueXdheS4KKy0gICAgaWYgKG5leHRfYXJn X2lkXyA+PSAwKSByZXR1cm4gbmV4dF9hcmdfaWRfKys7CistICAgIG9uX2Vycm9yKCJjYW5ub3Qg c3dpdGNoIGZyb20gbWFudWFsIHRvIGF1dG9tYXRpYyBhcmd1bWVudCBpbmRleGluZyIpOworLSAg ICByZXR1cm4gMDsKKy0gIH0KKy0KKy0gIC8qKgorLSAgICBSZXBvcnRzIGFuIGVycm9yIGlmIHVz aW5nIHRoZSBhdXRvbWF0aWMgYXJndW1lbnQgaW5kZXhpbmc7IG90aGVyd2lzZQorLSAgICBzd2l0 Y2hlcyB0byB0aGUgbWFudWFsIGluZGV4aW5nLgorLSAgICovCistICBGTVRfQ09OU1RFWFBSIHZv aWQgY2hlY2tfYXJnX2lkKGludCkgeworLSAgICBpZiAobmV4dF9hcmdfaWRfID4gMCkKKy0gICAg ICBvbl9lcnJvcigiY2Fubm90IHN3aXRjaCBmcm9tIGF1dG9tYXRpYyB0byBtYW51YWwgYXJndW1l bnQgaW5kZXhpbmciKTsKKy0gICAgZWxzZQorLSAgICAgIG5leHRfYXJnX2lkXyA9IC0xOworLSAg fQorLQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIGNoZWNrX2FyZ19pZChiYXNpY19zdHJpbmdfdmll dzxDaGFyPikge30KKy0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9lcnJvcihjb25zdCBjaGFy KiBtZXNzYWdlKSB7CistICAgIEVycm9ySGFuZGxlcjo6b25fZXJyb3IobWVzc2FnZSk7CistICB9 CistCistICBjb25zdGV4cHIgYXV0byBlcnJvcl9oYW5kbGVyKCkgY29uc3QgLT4gRXJyb3JIYW5k bGVyIHsgcmV0dXJuICp0aGlzOyB9CistfTsKKy0KKy11c2luZyBmb3JtYXRfcGFyc2VfY29udGV4 dCA9IGJhc2ljX2Zvcm1hdF9wYXJzZV9jb250ZXh0PGNoYXI+OworLQorLXRlbXBsYXRlIDx0eXBl bmFtZSBDb250ZXh0PiBjbGFzcyBiYXNpY19mb3JtYXRfYXJnOworLXRlbXBsYXRlIDx0eXBlbmFt ZSBDb250ZXh0PiBjbGFzcyBiYXNpY19mb3JtYXRfYXJnczsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUg Q29udGV4dD4gY2xhc3MgZHluYW1pY19mb3JtYXRfYXJnX3N0b3JlOworLQorLS8vIEEgZm9ybWF0 dGVyIGZvciBvYmplY3RzIG9mIHR5cGUgVC4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h bWUgQ2hhciA9IGNoYXIsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cistc3RydWN0IGZvcm1hdHRl ciB7CistICAvLyBBIGRlbGV0ZWQgZGVmYXVsdCBjb25zdHJ1Y3RvciBpbmRpY2F0ZXMgYSBkaXNh YmxlZCBmb3JtYXR0ZXIuCistICBmb3JtYXR0ZXIoKSA9IGRlbGV0ZTsKKy19OworLQorLS8vIFNw ZWNpZmllcyBpZiBUIGhhcyBhbiBlbmFibGVkIGZvcm1hdHRlciBzcGVjaWFsaXphdGlvbi4gQSB0 eXBlIGNhbiBiZQorLS8vIGZvcm1hdHRhYmxlIGV2ZW4gaWYgaXQgZG9lc24ndCBoYXZlIGEgZm9y bWF0dGVyIGUuZy4gdmlhIGEgY29udmVyc2lvbi4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw ZW5hbWUgQ29udGV4dD4KKy11c2luZyBoYXNfZm9ybWF0dGVyID0KKy0gICAgc3RkOjppc19jb25z dHJ1Y3RpYmxlPHR5cGVuYW1lIENvbnRleHQ6OnRlbXBsYXRlIGZvcm1hdHRlcl90eXBlPFQ+PjsK Ky0KKy0vLyBDaGVja3Mgd2hldGhlciBUIGlzIGEgY29udGFpbmVyIHdpdGggY29udGlndW91cyBz dG9yYWdlLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfY29udGlndW91cyA6IHN0 ZDo6ZmFsc2VfdHlwZSB7fTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy1zdHJ1Y3QgaXNf Y29udGlndW91czxzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsK Ky0KKy1jbGFzcyBhcHBlbmRlcjsKKy0KKy1GTVRfQkVHSU5fREVUQUlMX05BTUVTUEFDRQorLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0LCB0eXBlbmFtZSBUPgorLWNvbnN0ZXhwciBhdXRv IGhhc19jb25zdF9mb3JtYXR0ZXJfaW1wbChUKikKKy0gICAgLT4gZGVjbHR5cGUodHlwZW5hbWUg Q29udGV4dDo6dGVtcGxhdGUgZm9ybWF0dGVyX3R5cGU8VD4oKS5mb3JtYXQoCistICAgICAgICAg ICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Y29uc3QgVCY+KCksIHN0ZDo6ZGVjbHZhbDxDb250ZXh0 Jj4oKSksCistICAgICAgICAgICAgICAgIHRydWUpIHsKKy0gIHJldHVybiB0cnVlOworLX0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGV4dD4KKy1jb25zdGV4cHIgYXV0byBoYXNfY29uc3RfZm9y bWF0dGVyX2ltcGwoLi4uKSAtPiBib29sIHsKKy0gIHJldHVybiBmYWxzZTsKKy19CistdGVtcGxh dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbnRleHQ+CistY29uc3RleHByIGF1dG8gaGFzX2Nv bnN0X2Zvcm1hdHRlcigpIC0+IGJvb2wgeworLSAgcmV0dXJuIGhhc19jb25zdF9mb3JtYXR0ZXJf aW1wbDxDb250ZXh0PihzdGF0aWNfY2FzdDxUKj4obnVsbHB0cikpOworLX0KKy0KKy0vLyBFeHRy YWN0cyBhIHJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyIGZyb20gYmFja19pbnNlcnRfaXRlcmF0 b3IuCistdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRhaW5lcj4KKy1pbmxpbmUgYXV0byBnZXRfY29u dGFpbmVyKHN0ZDo6YmFja19pbnNlcnRfaXRlcmF0b3I8Q29udGFpbmVyPiBpdCkKKy0gICAgLT4g Q29udGFpbmVyJiB7CistICB1c2luZyBiaV9pdGVyYXRvciA9IHN0ZDo6YmFja19pbnNlcnRfaXRl cmF0b3I8Q29udGFpbmVyPjsKKy0gIHN0cnVjdCBhY2Nlc3NvciA6IGJpX2l0ZXJhdG9yIHsKKy0g ICAgYWNjZXNzb3IoYmlfaXRlcmF0b3IgaXRlcikgOiBiaV9pdGVyYXRvcihpdGVyKSB7fQorLSAg ICB1c2luZyBiaV9pdGVyYXRvcjo6Y29udGFpbmVyOworLSAgfTsKKy0gIHJldHVybiAqYWNjZXNz b3IoaXQpLmNvbnRhaW5lcjsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVu YW1lIElucHV0SXQsIHR5cGVuYW1lIE91dHB1dEl0PgorLUZNVF9DT05TVEVYUFIgYXV0byBjb3B5 X3N0cihJbnB1dEl0IGJlZ2luLCBJbnB1dEl0IGVuZCwgT3V0cHV0SXQgb3V0KQorLSAgICAtPiBP dXRwdXRJdCB7CistICB3aGlsZSAoYmVnaW4gIT0gZW5kKSAqb3V0KysgPSBzdGF0aWNfY2FzdDxD aGFyPigqYmVnaW4rKyk7CistICByZXR1cm4gb3V0OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5h bWUgQ2hhciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9J RigKKy0gICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxyZW1vdmVfY29uc3RfdDxUPiwgVT46OnZh bHVlJiYgaXNfY2hhcjxVPjo6dmFsdWUpPgorLUZNVF9DT05TVEVYUFIgYXV0byBjb3B5X3N0cihU KiBiZWdpbiwgVCogZW5kLCBVKiBvdXQpIC0+IFUqIHsKKy0gIGlmIChpc19jb25zdGFudF9ldmFs dWF0ZWQoKSkgcmV0dXJuIGNvcHlfc3RyPENoYXIsIFQqLCBVKj4oYmVnaW4sIGVuZCwgb3V0KTsK Ky0gIGF1dG8gc2l6ZSA9IHRvX3Vuc2lnbmVkKGVuZCAtIGJlZ2luKTsKKy0gIG1lbWNweShvdXQs IGJlZ2luLCBzaXplICogc2l6ZW9mKFUpKTsKKy0gIHJldHVybiBvdXQgKyBzaXplOworLX0KKy0K Ky0vKioKKy0gIFxyc3QKKy0gIEEgY29udGlndW91cyBtZW1vcnkgYnVmZmVyIHdpdGggYW4gb3B0 aW9uYWwgZ3Jvd2luZyBhYmlsaXR5LiBJdCBpcyBhbiBpbnRlcm5hbAorLSAgY2xhc3MgYW5kIHNo b3VsZG4ndCBiZSB1c2VkIGRpcmVjdGx5LCBvbmx5IHZpYSBgfmZtdDo6YmFzaWNfbWVtb3J5X2J1 ZmZlcmAuCistICBcZW5kcnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIGJ1 ZmZlciB7CistIHByaXZhdGU6CistICBUKiBwdHJfOworLSAgc2l6ZV90IHNpemVfOworLSAgc2l6 ZV90IGNhcGFjaXR5XzsKKy0KKy0gcHJvdGVjdGVkOgorLSAgLy8gRG9uJ3QgaW5pdGlhbGl6ZSBw dHJfIHNpbmNlIGl0IGlzIG5vdCBhY2Nlc3NlZCB0byBzYXZlIGEgZmV3IGN5Y2xlcy4KKy0gIEZN VF9NU0NfV0FSTklORyhzdXBwcmVzcyA6IDI2NDk1KQorLSAgYnVmZmVyKHNpemVfdCBzeikgRk1U X05PRVhDRVBUIDogc2l6ZV8oc3opLCBjYXBhY2l0eV8oc3opIHt9CistCistICBGTVRfQ09OU1RF WFBSMjAgYnVmZmVyKFQqIHAgPSBudWxscHRyLCBzaXplX3Qgc3ogPSAwLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgY2FwID0gMCkgRk1UX05PRVhDRVBUIDogcHRyXyhwKSwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfKHN6KSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhcGFjaXR5XyhjYXApIHt9CistCistICBGTVRfQ09OU1RFWFBSMjAgfmJ1ZmZl cigpID0gZGVmYXVsdDsKKy0gIGJ1ZmZlcihidWZmZXImJikgPSBkZWZhdWx0OworLQorLSAgLyoq IFNldHMgdGhlIGJ1ZmZlciBkYXRhIGFuZCBjYXBhY2l0eS4gKi8KKy0gIEZNVF9DT05TVEVYUFIg dm9pZCBzZXQoVCogYnVmX2RhdGEsIHNpemVfdCBidWZfY2FwYWNpdHkpIEZNVF9OT0VYQ0VQVCB7 CistICAgIHB0cl8gPSBidWZfZGF0YTsKKy0gICAgY2FwYWNpdHlfID0gYnVmX2NhcGFjaXR5Owor LSAgfQorLQorLSAgLyoqIEluY3JlYXNlcyB0aGUgYnVmZmVyIGNhcGFjaXR5IHRvIGhvbGQgYXQg bGVhc3QgKmNhcGFjaXR5KiBlbGVtZW50cy4gKi8KKy0gIHZpcnR1YWwgRk1UX0NPTlNURVhQUjIw IHZvaWQgZ3JvdyhzaXplX3QgY2FwYWNpdHkpID0gMDsKKy0KKy0gcHVibGljOgorLSAgdXNpbmcg dmFsdWVfdHlwZSA9IFQ7CistICB1c2luZyBjb25zdF9yZWZlcmVuY2UgPSBjb25zdCBUJjsKKy0K Ky0gIGJ1ZmZlcihjb25zdCBidWZmZXImKSA9IGRlbGV0ZTsKKy0gIHZvaWQgb3BlcmF0b3I9KGNv bnN0IGJ1ZmZlciYpID0gZGVsZXRlOworLQorLSAgYXV0byBiZWdpbigpIEZNVF9OT0VYQ0VQVCAt PiBUKiB7IHJldHVybiBwdHJfOyB9CistICBhdXRvIGVuZCgpIEZNVF9OT0VYQ0VQVCAtPiBUKiB7 IHJldHVybiBwdHJfICsgc2l6ZV87IH0KKy0KKy0gIGF1dG8gYmVnaW4oKSBjb25zdCBGTVRfTk9F WENFUFQgLT4gY29uc3QgVCogeyByZXR1cm4gcHRyXzsgfQorLSAgYXV0byBlbmQoKSBjb25zdCBG TVRfTk9FWENFUFQgLT4gY29uc3QgVCogeyByZXR1cm4gcHRyXyArIHNpemVfOyB9CistCistICAv KiogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlci4gKi8KKy0gIGNvbnN0ZXhwciBhdXRv IHNpemUoKSBjb25zdCBGTVRfTk9FWENFUFQgLT4gc2l6ZV90IHsgcmV0dXJuIHNpemVfOyB9Cist CistICAvKiogUmV0dXJucyB0aGUgY2FwYWNpdHkgb2YgdGhpcyBidWZmZXIuICovCistICBjb25z dGV4cHIgYXV0byBjYXBhY2l0eSgpIGNvbnN0IEZNVF9OT0VYQ0VQVCAtPiBzaXplX3QgeyByZXR1 cm4gY2FwYWNpdHlfOyB9CistCistICAvKiogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZl ciBkYXRhLiAqLworLSAgRk1UX0NPTlNURVhQUiBhdXRvIGRhdGEoKSBGTVRfTk9FWENFUFQgLT4g VCogeyByZXR1cm4gcHRyXzsgfQorLQorLSAgLyoqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBi dWZmZXIgZGF0YS4gKi8KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBkYXRhKCkgY29uc3QgRk1UX05P RVhDRVBUIC0+IGNvbnN0IFQqIHsgcmV0dXJuIHB0cl87IH0KKy0KKy0gIC8qKiBDbGVhcnMgdGhp cyBidWZmZXIuICovCistICB2b2lkIGNsZWFyKCkgeyBzaXplXyA9IDA7IH0KKy0KKy0gIC8vIFRy aWVzIHJlc2l6aW5nIHRoZSBidWZmZXIgdG8gY29udGFpbiAqY291bnQqIGVsZW1lbnRzLiBJZiBU IGlzIGEgUE9EIHR5cGUKKy0gIC8vIHRoZSBuZXcgZWxlbWVudHMgbWF5IG5vdCBiZSBpbml0aWFs aXplZC4KKy0gIEZNVF9DT05TVEVYUFIyMCB2b2lkIHRyeV9yZXNpemUoc2l6ZV90IGNvdW50KSB7 CistICAgIHRyeV9yZXNlcnZlKGNvdW50KTsKKy0gICAgc2l6ZV8gPSBjb3VudCA8PSBjYXBhY2l0 eV8gPyBjb3VudCA6IGNhcGFjaXR5XzsKKy0gIH0KKy0KKy0gIC8vIFRyaWVzIGluY3JlYXNpbmcg dGhlIGJ1ZmZlciBjYXBhY2l0eSB0byAqbmV3X2NhcGFjaXR5Ki4gSXQgY2FuIGluY3JlYXNlIHRo ZQorLSAgLy8gY2FwYWNpdHkgYnkgYSBzbWFsbGVyIGFtb3VudCB0aGFuIHJlcXVlc3RlZCBidXQg Z3VhcmFudGVlcyB0aGVyZSBpcyBzcGFjZQorLSAgLy8gZm9yIGF0IGxlYXN0IG9uZSBhZGRpdGlv bmFsIGVsZW1lbnQgZWl0aGVyIGJ5IGluY3JlYXNpbmcgdGhlIGNhcGFjaXR5IG9yIGJ5CistICAv LyBmbHVzaGluZyB0aGUgYnVmZmVyIGlmIGl0IGlzIGZ1bGwuCistICBGTVRfQ09OU1RFWFBSMjAg dm9pZCB0cnlfcmVzZXJ2ZShzaXplX3QgbmV3X2NhcGFjaXR5KSB7CistICAgIGlmIChuZXdfY2Fw YWNpdHkgPiBjYXBhY2l0eV8pIGdyb3cobmV3X2NhcGFjaXR5KTsKKy0gIH0KKy0KKy0gIEZNVF9D T05TVEVYUFIyMCB2b2lkIHB1c2hfYmFjayhjb25zdCBUJiB2YWx1ZSkgeworLSAgICB0cnlfcmVz ZXJ2ZShzaXplXyArIDEpOworLSAgICBwdHJfW3NpemVfKytdID0gdmFsdWU7CistICB9CistCist ICAvKiogQXBwZW5kcyBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gKi8KKy0gIHRlbXBs YXRlIDx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25zdCBVKiBiZWdpbiwgY29uc3QgVSogZW5k KTsKKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBJPiBGTVRfQ09OU1RFWFBSIGF1dG8gb3BlcmF0 b3JbXShJIGluZGV4KSAtPiBUJiB7CistICAgIHJldHVybiBwdHJfW2luZGV4XTsKKy0gIH0KKy0g IHRlbXBsYXRlIDx0eXBlbmFtZSBJPgorLSAgRk1UX0NPTlNURVhQUiBhdXRvIG9wZXJhdG9yW10o SSBpbmRleCkgY29uc3QgLT4gY29uc3QgVCYgeworLSAgICByZXR1cm4gcHRyX1tpbmRleF07Cist ICB9CistfTsKKy0KKy1zdHJ1Y3QgYnVmZmVyX3RyYWl0cyB7CistICBleHBsaWNpdCBidWZmZXJf dHJhaXRzKHNpemVfdCkge30KKy0gIGF1dG8gY291bnQoKSBjb25zdCAtPiBzaXplX3QgeyByZXR1 cm4gMDsgfQorLSAgYXV0byBsaW1pdChzaXplX3Qgc2l6ZSkgLT4gc2l6ZV90IHsgcmV0dXJuIHNp emU7IH0KKy19OworLQorLWNsYXNzIGZpeGVkX2J1ZmZlcl90cmFpdHMgeworLSBwcml2YXRlOgor LSAgc2l6ZV90IGNvdW50XyA9IDA7CistICBzaXplX3QgbGltaXRfOworLQorLSBwdWJsaWM6Cist ICBleHBsaWNpdCBmaXhlZF9idWZmZXJfdHJhaXRzKHNpemVfdCBsaW1pdCkgOiBsaW1pdF8obGlt aXQpIHt9CistICBhdXRvIGNvdW50KCkgY29uc3QgLT4gc2l6ZV90IHsgcmV0dXJuIGNvdW50Xzsg fQorLSAgYXV0byBsaW1pdChzaXplX3Qgc2l6ZSkgLT4gc2l6ZV90IHsKKy0gICAgc2l6ZV90IG4g PSBsaW1pdF8gPiBjb3VudF8gPyBsaW1pdF8gLSBjb3VudF8gOiAwOworLSAgICBjb3VudF8gKz0g c2l6ZTsKKy0gICAgcmV0dXJuIHNpemUgPCBuID8gc2l6ZSA6IG47CistICB9CistfTsKKy0KKy0v LyBBIGJ1ZmZlciB0aGF0IHdyaXRlcyB0byBhbiBvdXRwdXQgaXRlcmF0b3Igd2hlbiBmbHVzaGVk LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh aXRzID0gYnVmZmVyX3RyYWl0cz4KKy1jbGFzcyBpdGVyYXRvcl9idWZmZXIgZmluYWwgOiBwdWJs aWMgVHJhaXRzLCBwdWJsaWMgYnVmZmVyPFQ+IHsKKy0gcHJpdmF0ZToKKy0gIE91dHB1dEl0IG91 dF87CistICBlbnVtIHsgYnVmZmVyX3NpemUgPSAyNTYgfTsKKy0gIFQgZGF0YV9bYnVmZmVyX3Np emVdOworLQorLSBwcm90ZWN0ZWQ6CistICBGTVRfQ09OU1RFWFBSMjAgdm9pZCBncm93KHNpemVf dCkgb3ZlcnJpZGUgeworLSAgICBpZiAodGhpcy0+c2l6ZSgpID09IGJ1ZmZlcl9zaXplKSBmbHVz aCgpOworLSAgfQorLQorLSAgdm9pZCBmbHVzaCgpIHsKKy0gICAgYXV0byBzaXplID0gdGhpcy0+ c2l6ZSgpOworLSAgICB0aGlzLT5jbGVhcigpOworLSAgICBvdXRfID0gY29weV9zdHI8VD4oZGF0 YV8sIGRhdGFfICsgdGhpcy0+bGltaXQoc2l6ZSksIG91dF8pOworLSAgfQorLQorLSBwdWJsaWM6 CistICBleHBsaWNpdCBpdGVyYXRvcl9idWZmZXIoT3V0cHV0SXQgb3V0LCBzaXplX3QgbiA9IGJ1 ZmZlcl9zaXplKQorLSAgICAgIDogVHJhaXRzKG4pLCBidWZmZXI8VD4oZGF0YV8sIDAsIGJ1ZmZl cl9zaXplKSwgb3V0XyhvdXQpIHt9CistICBpdGVyYXRvcl9idWZmZXIoaXRlcmF0b3JfYnVmZmVy JiYgb3RoZXIpCistICAgICAgOiBUcmFpdHMob3RoZXIpLCBidWZmZXI8VD4oZGF0YV8sIDAsIGJ1 ZmZlcl9zaXplKSwgb3V0XyhvdGhlci5vdXRfKSB7fQorLSAgfml0ZXJhdG9yX2J1ZmZlcigpIHsg Zmx1c2goKTsgfQorLQorLSAgYXV0byBvdXQoKSAtPiBPdXRwdXRJdCB7CistICAgIGZsdXNoKCk7 CistICAgIHJldHVybiBvdXRfOworLSAgfQorLSAgYXV0byBjb3VudCgpIGNvbnN0IC0+IHNpemVf dCB7IHJldHVybiBUcmFpdHM6OmNvdW50KCkgKyB0aGlzLT5zaXplKCk7IH0KKy19OworLQorLXRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIGl0ZXJhdG9yX2J1ZmZlcjxUKiwgVCwgZml4ZWRf YnVmZmVyX3RyYWl0cz4gZmluYWwKKy0gICAgOiBwdWJsaWMgZml4ZWRfYnVmZmVyX3RyYWl0cywK Ky0gICAgICBwdWJsaWMgYnVmZmVyPFQ+IHsKKy0gcHJpdmF0ZToKKy0gIFQqIG91dF87CistICBl bnVtIHsgYnVmZmVyX3NpemUgPSAyNTYgfTsKKy0gIFQgZGF0YV9bYnVmZmVyX3NpemVdOworLQor LSBwcm90ZWN0ZWQ6CistICBGTVRfQ09OU1RFWFBSMjAgdm9pZCBncm93KHNpemVfdCkgb3ZlcnJp ZGUgeworLSAgICBpZiAodGhpcy0+c2l6ZSgpID09IHRoaXMtPmNhcGFjaXR5KCkpIGZsdXNoKCk7 CistICB9CistCistICB2b2lkIGZsdXNoKCkgeworLSAgICBzaXplX3QgbiA9IHRoaXMtPmxpbWl0 KHRoaXMtPnNpemUoKSk7CistICAgIGlmICh0aGlzLT5kYXRhKCkgPT0gb3V0XykgeworLSAgICAg IG91dF8gKz0gbjsKKy0gICAgICB0aGlzLT5zZXQoZGF0YV8sIGJ1ZmZlcl9zaXplKTsKKy0gICAg fQorLSAgICB0aGlzLT5jbGVhcigpOworLSAgfQorLQorLSBwdWJsaWM6CistICBleHBsaWNpdCBp dGVyYXRvcl9idWZmZXIoVCogb3V0LCBzaXplX3QgbiA9IGJ1ZmZlcl9zaXplKQorLSAgICAgIDog Zml4ZWRfYnVmZmVyX3RyYWl0cyhuKSwgYnVmZmVyPFQ+KG91dCwgMCwgbiksIG91dF8ob3V0KSB7 fQorLSAgaXRlcmF0b3JfYnVmZmVyKGl0ZXJhdG9yX2J1ZmZlciYmIG90aGVyKQorLSAgICAgIDog Zml4ZWRfYnVmZmVyX3RyYWl0cyhvdGhlciksCistICAgICAgICBidWZmZXI8VD4oc3RkOjptb3Zl KG90aGVyKSksCistICAgICAgICBvdXRfKG90aGVyLm91dF8pIHsKKy0gICAgaWYgKHRoaXMtPmRh dGEoKSAhPSBvdXRfKSB7CistICAgICAgdGhpcy0+c2V0KGRhdGFfLCBidWZmZXJfc2l6ZSk7Cist ICAgICAgdGhpcy0+Y2xlYXIoKTsKKy0gICAgfQorLSAgfQorLSAgfml0ZXJhdG9yX2J1ZmZlcigp IHsgZmx1c2goKTsgfQorLQorLSAgYXV0byBvdXQoKSAtPiBUKiB7CistICAgIGZsdXNoKCk7Cist ICAgIHJldHVybiBvdXRfOworLSAgfQorLSAgYXV0byBjb3VudCgpIGNvbnN0IC0+IHNpemVfdCB7 CistICAgIHJldHVybiBmaXhlZF9idWZmZXJfdHJhaXRzOjpjb3VudCgpICsgdGhpcy0+c2l6ZSgp OworLSAgfQorLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIGl0ZXJhdG9yX2J1 ZmZlcjxUKiwgVD4gZmluYWwgOiBwdWJsaWMgYnVmZmVyPFQ+IHsKKy0gcHJvdGVjdGVkOgorLSAg Rk1UX0NPTlNURVhQUjIwIHZvaWQgZ3JvdyhzaXplX3QpIG92ZXJyaWRlIHt9CistCistIHB1Ymxp YzoKKy0gIGV4cGxpY2l0IGl0ZXJhdG9yX2J1ZmZlcihUKiBvdXQsIHNpemVfdCA9IDApIDogYnVm ZmVyPFQ+KG91dCwgMCwgfnNpemVfdCgpKSB7fQorLQorLSAgYXV0byBvdXQoKSAtPiBUKiB7IHJl dHVybiAmKnRoaXMtPmVuZCgpOyB9CistfTsKKy0KKy0vLyBBIGJ1ZmZlciB0aGF0IHdyaXRlcyB0 byBhIGNvbnRhaW5lciB3aXRoIHRoZSBjb250aWd1b3VzIHN0b3JhZ2UuCistdGVtcGxhdGUgPHR5 cGVuYW1lIENvbnRhaW5lcj4KKy1jbGFzcyBpdGVyYXRvcl9idWZmZXI8c3RkOjpiYWNrX2luc2Vy dF9pdGVyYXRvcjxDb250YWluZXI+LAorLSAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWZf dDxpc19jb250aWd1b3VzPENvbnRhaW5lcj46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGU+PgorLSAgICBmaW5h bCA6IHB1YmxpYyBidWZmZXI8dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPiB7CistIHBy aXZhdGU6CistICBDb250YWluZXImIGNvbnRhaW5lcl87CistCistIHByb3RlY3RlZDoKKy0gIEZN VF9DT05TVEVYUFIyMCB2b2lkIGdyb3coc2l6ZV90IGNhcGFjaXR5KSBvdmVycmlkZSB7CistICAg IGNvbnRhaW5lcl8ucmVzaXplKGNhcGFjaXR5KTsKKy0gICAgdGhpcy0+c2V0KCZjb250YWluZXJf WzBdLCBjYXBhY2l0eSk7CistICB9CistCistIHB1YmxpYzoKKy0gIGV4cGxpY2l0IGl0ZXJhdG9y X2J1ZmZlcihDb250YWluZXImIGMpCistICAgICAgOiBidWZmZXI8dHlwZW5hbWUgQ29udGFpbmVy Ojp2YWx1ZV90eXBlPihjLnNpemUoKSksIGNvbnRhaW5lcl8oYykge30KKy0gIGV4cGxpY2l0IGl0 ZXJhdG9yX2J1ZmZlcihzdGQ6OmJhY2tfaW5zZXJ0X2l0ZXJhdG9yPENvbnRhaW5lcj4gb3V0LCBz aXplX3QgPSAwKQorLSAgICAgIDogaXRlcmF0b3JfYnVmZmVyKGdldF9jb250YWluZXIob3V0KSkg e30KKy0gIGF1dG8gb3V0KCkgLT4gc3RkOjpiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+ IHsKKy0gICAgcmV0dXJuIHN0ZDo6YmFja19pbnNlcnRlcihjb250YWluZXJfKTsKKy0gIH0KKy19 OworLQorLS8vIEEgYnVmZmVyIHRoYXQgY291bnRzIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB3 cml0dGVuIGRpc2NhcmRpbmcgdGhlIG91dHB1dC4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IGNo YXI+IGNsYXNzIGNvdW50aW5nX2J1ZmZlciBmaW5hbCA6IHB1YmxpYyBidWZmZXI8VD4geworLSBw cml2YXRlOgorLSAgZW51bSB7IGJ1ZmZlcl9zaXplID0gMjU2IH07CistICBUIGRhdGFfW2J1ZmZl cl9zaXplXTsKKy0gIHNpemVfdCBjb3VudF8gPSAwOworLQorLSBwcm90ZWN0ZWQ6CistICBGTVRf Q09OU1RFWFBSMjAgdm9pZCBncm93KHNpemVfdCkgb3ZlcnJpZGUgeworLSAgICBpZiAodGhpcy0+ c2l6ZSgpICE9IGJ1ZmZlcl9zaXplKSByZXR1cm47CistICAgIGNvdW50XyArPSB0aGlzLT5zaXpl KCk7CistICAgIHRoaXMtPmNsZWFyKCk7CistICB9CistCistIHB1YmxpYzoKKy0gIGNvdW50aW5n X2J1ZmZlcigpIDogYnVmZmVyPFQ+KGRhdGFfLCAwLCBidWZmZXJfc2l6ZSkge30KKy0KKy0gIGF1 dG8gY291bnQoKSAtPiBzaXplX3QgeyByZXR1cm4gY291bnRfICsgdGhpcy0+c2l6ZSgpOyB9Cist fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy11c2luZyBidWZmZXJfYXBwZW5kZXIgPSBj b25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZTxULCBjaGFyPjo6dmFsdWUsIGFwcGVuZGVyLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydF9pdGVy YXRvcjxidWZmZXI8VD4+PjsKKy0KKy0vLyBNYXBzIGFuIG91dHB1dCBpdGVyYXRvciB0byBhIGJ1 ZmZlci4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3V0cHV0SXQ+CistYXV0byBn ZXRfYnVmZmVyKE91dHB1dEl0IG91dCkgLT4gaXRlcmF0b3JfYnVmZmVyPE91dHB1dEl0LCBUPiB7 CistICByZXR1cm4gaXRlcmF0b3JfYnVmZmVyPE91dHB1dEl0LCBUPihvdXQpOworLX0KKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgQnVmZmVyPgorLWF1dG8gZ2V0X2l0ZXJhdG9yKEJ1ZmZlciYgYnVm KSAtPiBkZWNsdHlwZShidWYub3V0KCkpIHsKKy0gIHJldHVybiBidWYub3V0KCk7CistfQorLXRl bXBsYXRlIDx0eXBlbmFtZSBUPiBhdXRvIGdldF9pdGVyYXRvcihidWZmZXI8VD4mIGJ1ZikgLT4g YnVmZmVyX2FwcGVuZGVyPFQ+IHsKKy0gIHJldHVybiBidWZmZXJfYXBwZW5kZXI8VD4oYnVmKTsK Ky19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENoYXIgPSBjaGFyLCB0eXBl bmFtZSBFbmFibGUgPSB2b2lkPgorLXN0cnVjdCBmYWxsYmFja19mb3JtYXR0ZXIgeworLSAgZmFs bGJhY2tfZm9ybWF0dGVyKCkgPSBkZWxldGU7CistfTsKKy0KKy0vLyBTcGVjaWZpZXMgaWYgVCBo YXMgYW4gZW5hYmxlZCBmYWxsYmFja19mb3JtYXR0ZXIgc3BlY2lhbGl6YXRpb24uCistdGVtcGxh dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENoYXI+CistdXNpbmcgaGFzX2ZhbGxiYWNrX2Zvcm1h dHRlciA9CistICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxmYWxsYmFja19mb3JtYXR0ZXI8VCwg Q2hhcj4+OworLQorLXN0cnVjdCB2aWV3IHt9OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy LCB0eXBlbmFtZSBUPiBzdHJ1Y3QgbmFtZWRfYXJnIDogdmlldyB7CistICBjb25zdCBDaGFyKiBu YW1lOworLSAgY29uc3QgVCYgdmFsdWU7CistICBuYW1lZF9hcmcoY29uc3QgQ2hhciogbiwgY29u c3QgVCYgdikgOiBuYW1lKG4pLCB2YWx1ZSh2KSB7fQorLX07CistCistdGVtcGxhdGUgPHR5cGVu YW1lIENoYXI+IHN0cnVjdCBuYW1lZF9hcmdfaW5mbyB7CistICBjb25zdCBDaGFyKiBuYW1lOwor LSAgaW50IGlkOworLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENoYXIs IHNpemVfdCBOVU1fQVJHUywgc2l6ZV90IE5VTV9OQU1FRF9BUkdTPgorLXN0cnVjdCBhcmdfZGF0 YSB7CistICAvLyBhcmdzX1swXS5uYW1lZF9hcmdzIHBvaW50cyB0byBuYW1lZF9hcmdzXyB0byBh dm9pZCBibG9hdGluZyBmb3JtYXRfYXJncy4KKy0gIC8vICsxIHRvIHdvcmthcm91bmQgYSBidWcg aW4gZ2NjIDcuNSB0aGF0IGNhdXNlcyBkdXBsaWNhdGVkLWJyYW5jaGVzIHdhcm5pbmcuCistICBU IGFyZ3NfWzEgKyAoTlVNX0FSR1MgIT0gMCA/IE5VTV9BUkdTIDogKzEpXTsKKy0gIG5hbWVkX2Fy Z19pbmZvPENoYXI+IG5hbWVkX2FyZ3NfW05VTV9OQU1FRF9BUkdTXTsKKy0KKy0gIHRlbXBsYXRl IDx0eXBlbmFtZS4uLiBVPgorLSAgYXJnX2RhdGEoY29uc3QgVSYuLi4gaW5pdCkgOiBhcmdzX3tU KG5hbWVkX2FyZ3NfLCBOVU1fTkFNRURfQVJHUyksIGluaXQuLi59IHt9CistICBhcmdfZGF0YShj b25zdCBhcmdfZGF0YSYgb3RoZXIpID0gZGVsZXRlOworLSAgYXV0byBhcmdzKCkgY29uc3QgLT4g Y29uc3QgVCogeyByZXR1cm4gYXJnc18gKyAxOyB9CistICBhdXRvIG5hbWVkX2FyZ3MoKSAtPiBu YW1lZF9hcmdfaW5mbzxDaGFyPiogeyByZXR1cm4gbmFtZWRfYXJnc187IH0KKy19OworLQorLXRl bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBDaGFyLCBzaXplX3QgTlVNX0FSR1M+Cistc3Ry dWN0IGFyZ19kYXRhPFQsIENoYXIsIE5VTV9BUkdTLCAwPiB7CistICAvLyArMSB0byB3b3JrYXJv dW5kIGEgYnVnIGluIGdjYyA3LjUgdGhhdCBjYXVzZXMgZHVwbGljYXRlZC1icmFuY2hlcyB3YXJu aW5nLgorLSAgVCBhcmdzX1tOVU1fQVJHUyAhPSAwID8gTlVNX0FSR1MgOiArMV07CistCistICB0 ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVT4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhcmdf ZGF0YShjb25zdCBVJi4uLiBpbml0KSA6IGFyZ3Nfe2luaXQuLi59IHt9CistICBGTVRfQ09OU1RF WFBSIEZNVF9JTkxJTkUgYXV0byBhcmdzKCkgY29uc3QgLT4gY29uc3QgVCogeyByZXR1cm4gYXJn c187IH0KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG5hbWVkX2FyZ3MoKSAtPiBz dGQ6Om51bGxwdHJfdCB7CistICAgIHJldHVybiBudWxscHRyOworLSAgfQorLX07CistCistdGVt cGxhdGUgPHR5cGVuYW1lIENoYXI+CistaW5saW5lIHZvaWQgaW5pdF9uYW1lZF9hcmdzKG5hbWVk X2FyZ19pbmZvPENoYXI+KiwgaW50LCBpbnQpIHt9CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IHN0cnVjdCBpc19uYW1lZF9hcmcgOiBzdGQ6OmZhbHNlX3R5cGUge307CistdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+IHN0cnVjdCBpc19zdGF0aWNhbGx5X25hbWVkX2FyZyA6IHN0ZDo6ZmFsc2VfdHlw ZSB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ2hhcj4KKy1zdHJ1Y3Qg aXNfbmFtZWRfYXJnPG5hbWVkX2FyZzxDaGFyLCBUPj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVGFpbCwK Ky0gICAgICAgICAgRk1UX0VOQUJMRV9JRighaXNfbmFtZWRfYXJnPFQ+Ojp2YWx1ZSk+Cistdm9p ZCBpbml0X25hbWVkX2FyZ3MobmFtZWRfYXJnX2luZm88Q2hhcj4qIG5hbWVkX2FyZ3MsIGludCBh cmdfY291bnQsCistICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVkX2FyZ19jb3VudCwgY29u c3QgVCYsIGNvbnN0IFRhaWwmLi4uIGFyZ3MpIHsKKy0gIGluaXRfbmFtZWRfYXJncyhuYW1lZF9h cmdzLCBhcmdfY291bnQgKyAxLCBuYW1lZF9hcmdfY291bnQsIGFyZ3MuLi4pOworLX0KKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVGFpbCwKKy0g ICAgICAgICAgRk1UX0VOQUJMRV9JRihpc19uYW1lZF9hcmc8VD46OnZhbHVlKT4KKy12b2lkIGlu aXRfbmFtZWRfYXJncyhuYW1lZF9hcmdfaW5mbzxDaGFyPiogbmFtZWRfYXJncywgaW50IGFyZ19j b3VudCwKKy0gICAgICAgICAgICAgICAgICAgICBpbnQgbmFtZWRfYXJnX2NvdW50LCBjb25zdCBU JiBhcmcsIGNvbnN0IFRhaWwmLi4uIGFyZ3MpIHsKKy0gIG5hbWVkX2FyZ3NbbmFtZWRfYXJnX2Nv dW50KytdID0ge2FyZy5uYW1lLCBhcmdfY291bnR9OworLSAgaW5pdF9uYW1lZF9hcmdzKG5hbWVk X2FyZ3MsIGFyZ19jb3VudCArIDEsIG5hbWVkX2FyZ19jb3VudCwgYXJncy4uLik7CistfQorLQor LXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorLUZNVF9DT05TVEVYUFIgRk1UX0lOTElORSB2 b2lkIGluaXRfbmFtZWRfYXJncyhzdGQ6Om51bGxwdHJfdCwgaW50LCBpbnQsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZ3MmLi4uKSB7fQor LQorLXRlbXBsYXRlIDxib29sIEIgPSBmYWxzZT4gY29uc3RleHByIGF1dG8gY291bnQoKSAtPiBz aXplX3QgeyByZXR1cm4gQiA/IDEgOiAwOyB9CistdGVtcGxhdGUgPGJvb2wgQjEsIGJvb2wgQjIs IGJvb2wuLi4gVGFpbD4gY29uc3RleHByIGF1dG8gY291bnQoKSAtPiBzaXplX3QgeworLSAgcmV0 dXJuIChCMSA/IDEgOiAwKSArIGNvdW50PEIyLCBUYWlsLi4uPigpOworLX0KKy0KKy10ZW1wbGF0 ZSA8dHlwZW5hbWUuLi4gQXJncz4gY29uc3RleHByIGF1dG8gY291bnRfbmFtZWRfYXJncygpIC0+ IHNpemVfdCB7CistICByZXR1cm4gY291bnQ8aXNfbmFtZWRfYXJnPEFyZ3M+Ojp2YWx1ZS4uLj4o KTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CistY29uc3RleHByIGF1dG8g Y291bnRfc3RhdGljYWxseV9uYW1lZF9hcmdzKCkgLT4gc2l6ZV90IHsKKy0gIHJldHVybiBjb3Vu dDxpc19zdGF0aWNhbGx5X25hbWVkX2FyZzxBcmdzPjo6dmFsdWUuLi4+KCk7CistfQorLQorLWVu dW0gY2xhc3MgdHlwZSB7CistICBub25lX3R5cGUsCistICAvLyBJbnRlZ2VyIHR5cGVzIHNob3Vs ZCBnbyBmaXJzdCwKKy0gIGludF90eXBlLAorLSAgdWludF90eXBlLAorLSAgbG9uZ19sb25nX3R5 cGUsCistICB1bG9uZ19sb25nX3R5cGUsCistICBpbnQxMjhfdHlwZSwKKy0gIHVpbnQxMjhfdHlw ZSwKKy0gIGJvb2xfdHlwZSwKKy0gIGNoYXJfdHlwZSwKKy0gIGxhc3RfaW50ZWdlcl90eXBlID0g Y2hhcl90eXBlLAorLSAgLy8gZm9sbG93ZWQgYnkgZmxvYXRpbmctcG9pbnQgdHlwZXMuCistICBm bG9hdF90eXBlLAorLSAgZG91YmxlX3R5cGUsCistICBsb25nX2RvdWJsZV90eXBlLAorLSAgbGFz dF9udW1lcmljX3R5cGUgPSBsb25nX2RvdWJsZV90eXBlLAorLSAgY3N0cmluZ190eXBlLAorLSAg c3RyaW5nX3R5cGUsCistICBwb2ludGVyX3R5cGUsCistICBjdXN0b21fdHlwZQorLX07CistCist Ly8gTWFwcyBjb3JlIHR5cGUgVCB0byB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGVudW0gY29uc3Rh bnQuCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENoYXI+Cistc3RydWN0IHR5cGVf Y29uc3RhbnQgOiBzdGQ6OmludGVncmFsX2NvbnN0YW50PHR5cGUsIHR5cGU6OmN1c3RvbV90eXBl PiB7fTsKKy0KKy0jZGVmaW5lIEZNVF9UWVBFX0NPTlNUQU5UKFR5cGUsIGNvbnN0YW50KSBcCist ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4gICAgICAgICAgICAgICAgXAorLSAgc3RydWN0IHR5 cGVfY29uc3RhbnQ8VHlwZSwgQ2hhcj4gICAgICAgIFwKKy0gICAgICA6IHN0ZDo6aW50ZWdyYWxf Y29uc3RhbnQ8dHlwZSwgdHlwZTo6Y29uc3RhbnQ+IHt9CistCistRk1UX1RZUEVfQ09OU1RBTlQo aW50LCBpbnRfdHlwZSk7CistRk1UX1RZUEVfQ09OU1RBTlQodW5zaWduZWQsIHVpbnRfdHlwZSk7 CistRk1UX1RZUEVfQ09OU1RBTlQobG9uZyBsb25nLCBsb25nX2xvbmdfdHlwZSk7CistRk1UX1RZ UEVfQ09OU1RBTlQodW5zaWduZWQgbG9uZyBsb25nLCB1bG9uZ19sb25nX3R5cGUpOworLUZNVF9U WVBFX0NPTlNUQU5UKGludDEyOF90LCBpbnQxMjhfdHlwZSk7CistRk1UX1RZUEVfQ09OU1RBTlQo dWludDEyOF90LCB1aW50MTI4X3R5cGUpOworLUZNVF9UWVBFX0NPTlNUQU5UKGJvb2wsIGJvb2xf dHlwZSk7CistRk1UX1RZUEVfQ09OU1RBTlQoQ2hhciwgY2hhcl90eXBlKTsKKy1GTVRfVFlQRV9D T05TVEFOVChmbG9hdCwgZmxvYXRfdHlwZSk7CistRk1UX1RZUEVfQ09OU1RBTlQoZG91YmxlLCBk b3VibGVfdHlwZSk7CistRk1UX1RZUEVfQ09OU1RBTlQobG9uZyBkb3VibGUsIGxvbmdfZG91Ymxl X3R5cGUpOworLUZNVF9UWVBFX0NPTlNUQU5UKGNvbnN0IENoYXIqLCBjc3RyaW5nX3R5cGUpOwor LUZNVF9UWVBFX0NPTlNUQU5UKGJhc2ljX3N0cmluZ192aWV3PENoYXI+LCBzdHJpbmdfdHlwZSk7 CistRk1UX1RZUEVfQ09OU1RBTlQoY29uc3Qgdm9pZCosIHBvaW50ZXJfdHlwZSk7CistCistY29u c3RleHByIGJvb2wgaXNfaW50ZWdyYWxfdHlwZSh0eXBlIHQpIHsKKy0gIHJldHVybiB0ID4gdHlw ZTo6bm9uZV90eXBlICYmIHQgPD0gdHlwZTo6bGFzdF9pbnRlZ2VyX3R5cGU7CistfQorLQorLWNv bnN0ZXhwciBib29sIGlzX2FyaXRobWV0aWNfdHlwZSh0eXBlIHQpIHsKKy0gIHJldHVybiB0ID4g dHlwZTo6bm9uZV90eXBlICYmIHQgPD0gdHlwZTo6bGFzdF9udW1lcmljX3R5cGU7CistfQorLQor LXN0cnVjdCB1bmZvcm1hdHRhYmxlIHt9OworLXN0cnVjdCB1bmZvcm1hdHRhYmxlX2NoYXIgOiB1 bmZvcm1hdHRhYmxlIHt9OworLXN0cnVjdCB1bmZvcm1hdHRhYmxlX2NvbnN0IDogdW5mb3JtYXR0 YWJsZSB7fTsKKy1zdHJ1Y3QgdW5mb3JtYXR0YWJsZV9wb2ludGVyIDogdW5mb3JtYXR0YWJsZSB7 fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4gc3RydWN0IHN0cmluZ192YWx1ZSB7Cist ICBjb25zdCBDaGFyKiBkYXRhOworLSAgc2l6ZV90IHNpemU7CistfTsKKy0KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgQ2hhcj4gc3RydWN0IG5hbWVkX2FyZ192YWx1ZSB7CistICBjb25zdCBuYW1lZF9h cmdfaW5mbzxDaGFyPiogZGF0YTsKKy0gIHNpemVfdCBzaXplOworLX07CistCistdGVtcGxhdGUg PHR5cGVuYW1lIENvbnRleHQ+IHN0cnVjdCBjdXN0b21fdmFsdWUgeworLSAgdXNpbmcgcGFyc2Vf Y29udGV4dCA9IHR5cGVuYW1lIENvbnRleHQ6OnBhcnNlX2NvbnRleHRfdHlwZTsKKy0gIHZvaWQq IHZhbHVlOworLSAgdm9pZCAoKmZvcm1hdCkodm9pZCogYXJnLCBwYXJzZV9jb250ZXh0JiBwYXJz ZV9jdHgsIENvbnRleHQmIGN0eCk7CistfTsKKy0KKy0vLyBBIGZvcm1hdHRpbmcgYXJndW1lbnQg dmFsdWUuCistdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRleHQ+IGNsYXNzIHZhbHVlIHsKKy0gcHVi bGljOgorLSAgdXNpbmcgY2hhcl90eXBlID0gdHlwZW5hbWUgQ29udGV4dDo6Y2hhcl90eXBlOwor LQorLSAgdW5pb24geworLSAgICBtb25vc3RhdGUgbm9fdmFsdWU7CistICAgIGludCBpbnRfdmFs dWU7CistICAgIHVuc2lnbmVkIHVpbnRfdmFsdWU7CistICAgIGxvbmcgbG9uZyBsb25nX2xvbmdf dmFsdWU7CistICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bG9uZ19sb25nX3ZhbHVlOworLSAgICBp bnQxMjhfdCBpbnQxMjhfdmFsdWU7CistICAgIHVpbnQxMjhfdCB1aW50MTI4X3ZhbHVlOworLSAg ICBib29sIGJvb2xfdmFsdWU7CistICAgIGNoYXJfdHlwZSBjaGFyX3ZhbHVlOworLSAgICBmbG9h dCBmbG9hdF92YWx1ZTsKKy0gICAgZG91YmxlIGRvdWJsZV92YWx1ZTsKKy0gICAgbG9uZyBkb3Vi bGUgbG9uZ19kb3VibGVfdmFsdWU7CistICAgIGNvbnN0IHZvaWQqIHBvaW50ZXI7CistICAgIHN0 cmluZ192YWx1ZTxjaGFyX3R5cGU+IHN0cmluZzsKKy0gICAgY3VzdG9tX3ZhbHVlPENvbnRleHQ+ IGN1c3RvbTsKKy0gICAgbmFtZWRfYXJnX3ZhbHVlPGNoYXJfdHlwZT4gbmFtZWRfYXJnczsKKy0g IH07CistCistICBjb25zdGV4cHIgRk1UX0lOTElORSB2YWx1ZSgpIDogbm9fdmFsdWUoKSB7fQor LSAgY29uc3RleHByIEZNVF9JTkxJTkUgdmFsdWUoaW50IHZhbCkgOiBpbnRfdmFsdWUodmFsKSB7 fQorLSAgY29uc3RleHByIEZNVF9JTkxJTkUgdmFsdWUodW5zaWduZWQgdmFsKSA6IHVpbnRfdmFs dWUodmFsKSB7fQorLSAgY29uc3RleHByIEZNVF9JTkxJTkUgdmFsdWUobG9uZyBsb25nIHZhbCkg OiBsb25nX2xvbmdfdmFsdWUodmFsKSB7fQorLSAgY29uc3RleHByIEZNVF9JTkxJTkUgdmFsdWUo dW5zaWduZWQgbG9uZyBsb25nIHZhbCkgOiB1bG9uZ19sb25nX3ZhbHVlKHZhbCkge30KKy0gIEZN VF9JTkxJTkUgdmFsdWUoaW50MTI4X3QgdmFsKSA6IGludDEyOF92YWx1ZSh2YWwpIHt9CistICBG TVRfSU5MSU5FIHZhbHVlKHVpbnQxMjhfdCB2YWwpIDogdWludDEyOF92YWx1ZSh2YWwpIHt9Cist ICBjb25zdGV4cHIgRk1UX0lOTElORSB2YWx1ZShmbG9hdCB2YWwpIDogZmxvYXRfdmFsdWUodmFs KSB7fQorLSAgY29uc3RleHByIEZNVF9JTkxJTkUgdmFsdWUoZG91YmxlIHZhbCkgOiBkb3VibGVf dmFsdWUodmFsKSB7fQorLSAgRk1UX0lOTElORSB2YWx1ZShsb25nIGRvdWJsZSB2YWwpIDogbG9u Z19kb3VibGVfdmFsdWUodmFsKSB7fQorLSAgY29uc3RleHByIEZNVF9JTkxJTkUgdmFsdWUoYm9v bCB2YWwpIDogYm9vbF92YWx1ZSh2YWwpIHt9CistICBjb25zdGV4cHIgRk1UX0lOTElORSB2YWx1 ZShjaGFyX3R5cGUgdmFsKSA6IGNoYXJfdmFsdWUodmFsKSB7fQorLSAgRk1UX0NPTlNURVhQUiBG TVRfSU5MSU5FIHZhbHVlKGNvbnN0IGNoYXJfdHlwZSogdmFsKSB7CistICAgIHN0cmluZy5kYXRh ID0gdmFsOworLSAgICBpZiAoaXNfY29uc3RhbnRfZXZhbHVhdGVkKCkpIHN0cmluZy5zaXplID0g e307CistICB9CistICBGTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUgdmFsdWUoYmFzaWNfc3RyaW5n X3ZpZXc8Y2hhcl90eXBlPiB2YWwpIHsKKy0gICAgc3RyaW5nLmRhdGEgPSB2YWwuZGF0YSgpOwor LSAgICBzdHJpbmcuc2l6ZSA9IHZhbC5zaXplKCk7CistICB9CistICBGTVRfSU5MSU5FIHZhbHVl KGNvbnN0IHZvaWQqIHZhbCkgOiBwb2ludGVyKHZhbCkge30KKy0gIEZNVF9JTkxJTkUgdmFsdWUo Y29uc3QgbmFtZWRfYXJnX2luZm88Y2hhcl90eXBlPiogYXJncywgc2l6ZV90IHNpemUpCistICAg ICAgOiBuYW1lZF9hcmdze2FyZ3MsIHNpemV9IHt9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIHZhbHVlKFQmIHZhbCkgeworLSAgICB1c2luZyB2 YWx1ZV90eXBlID0gcmVtb3ZlX2N2cmVmX3Q8VD47CistICAgIGN1c3RvbS52YWx1ZSA9IGNvbnN0 X2Nhc3Q8dmFsdWVfdHlwZSo+KCZ2YWwpOworLSAgICAvLyBHZXQgdGhlIGZvcm1hdHRlciB0eXBl IHRocm91Z2ggdGhlIGNvbnRleHQgdG8gYWxsb3cgZGlmZmVyZW50IGNvbnRleHRzCistICAgIC8v IGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbiBwb2ludHMsIGUuZy4gYGZvcm1hdHRlcjxUPmAgZm9y IGBmb3JtYXRgIGFuZAorLSAgICAvLyBgcHJpbnRmX2Zvcm1hdHRlcjxUPmAgZm9yIGBwcmludGZg LgorLSAgICBjdXN0b20uZm9ybWF0ID0gZm9ybWF0X2N1c3RvbV9hcmc8CistICAgICAgICB2YWx1 ZV90eXBlLAorLSAgICAgICAgY29uZGl0aW9uYWxfdDxoYXNfZm9ybWF0dGVyPHZhbHVlX3R5cGUs IENvbnRleHQ+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgQ29udGV4 dDo6dGVtcGxhdGUgZm9ybWF0dGVyX3R5cGU8dmFsdWVfdHlwZT4sCistICAgICAgICAgICAgICAg ICAgICAgIGZhbGxiYWNrX2Zvcm1hdHRlcjx2YWx1ZV90eXBlLCBjaGFyX3R5cGU+Pj47CistICB9 CistICB2YWx1ZSh1bmZvcm1hdHRhYmxlKTsKKy0gIHZhbHVlKHVuZm9ybWF0dGFibGVfY2hhcik7 CistICB2YWx1ZSh1bmZvcm1hdHRhYmxlX2NvbnN0KTsKKy0gIHZhbHVlKHVuZm9ybWF0dGFibGVf cG9pbnRlcik7CistCistIHByaXZhdGU6CistICAvLyBGb3JtYXRzIGFuIGFyZ3VtZW50IG9mIGEg Y3VzdG9tIHR5cGUsIHN1Y2ggYXMgYSB1c2VyLWRlZmluZWQgY2xhc3MuCistICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVCwgdHlwZW5hbWUgRm9ybWF0dGVyPgorLSAgc3RhdGljIHZvaWQgZm9ybWF0X2N1 c3RvbV9hcmcodm9pZCogYXJnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZW5hbWUgQ29udGV4dDo6cGFyc2VfY29udGV4dF90eXBlJiBwYXJzZV9jdHgsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0JiBjdHgpIHsKKy0gICAgYXV0byBmID0gRm9y bWF0dGVyKCk7CistICAgIHBhcnNlX2N0eC5hZHZhbmNlX3RvKGYucGFyc2UocGFyc2VfY3R4KSk7 CistICAgIHVzaW5nIHF1YWxpZmllZF90eXBlID0KKy0gICAgICAgIGNvbmRpdGlvbmFsX3Q8aGFz X2NvbnN0X2Zvcm1hdHRlcjxULCBDb250ZXh0PigpLCBjb25zdCBULCBUPjsKKy0gICAgY3R4LmFk dmFuY2VfdG8oZi5mb3JtYXQoKnN0YXRpY19jYXN0PHF1YWxpZmllZF90eXBlKj4oYXJnKSwgY3R4 KSk7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGV4dCwgdHlwZW5hbWUg VD4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gbWFrZV9hcmcoY29uc3QgVCYgdmFsdWUpIC0+IGJhc2lj X2Zvcm1hdF9hcmc8Q29udGV4dD47CistCistLy8gVG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB0 eXBlcyB3ZSBuZWVkIHRvIGRlYWwgd2l0aCwgbG9uZyBpcyB0cmFuc2xhdGVkCistLy8gZWl0aGVy IHRvIGludCBvciB0byBsb25nIGxvbmcgZGVwZW5kaW5nIG9uIGl0cyBzaXplLgorLWVudW0geyBs b25nX3Nob3J0ID0gc2l6ZW9mKGxvbmcpID09IHNpemVvZihpbnQpIH07CistdXNpbmcgbG9uZ190 eXBlID0gY29uZGl0aW9uYWxfdDxsb25nX3Nob3J0LCBpbnQsIGxvbmcgbG9uZz47CistdXNpbmcg dWxvbmdfdHlwZSA9IGNvbmRpdGlvbmFsX3Q8bG9uZ19zaG9ydCwgdW5zaWduZWQsIHVuc2lnbmVk IGxvbmcgbG9uZz47CistCistLy8gTWFwcyBmb3JtYXR0aW5nIGFyZ3VtZW50cyB0byBjb3JlIHR5 cGVzLgorLS8vIGFyZ19tYXBwZXIgcmVwb3J0cyBlcnJvcnMgYnkgcmV0dXJuaW5nIHVuZm9ybWF0 dGFibGUgaW5zdGVhZCBvZiB1c2luZworLS8vIHN0YXRpY19hc3NlcnQgYmVjYXVzZSBpdCdzIHVz ZWQgaW4gdGhlIGlzX2Zvcm1hdHRhYmxlIHRyYWl0LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250 ZXh0PiBzdHJ1Y3QgYXJnX21hcHBlciB7CistICB1c2luZyBjaGFyX3R5cGUgPSB0eXBlbmFtZSBD b250ZXh0OjpjaGFyX3R5cGU7CistCistICBGTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUgYXV0byBt YXAoc2lnbmVkIGNoYXIgdmFsKSAtPiBpbnQgeyByZXR1cm4gdmFsOyB9CistICBGTVRfQ09OU1RF WFBSIEZNVF9JTkxJTkUgYXV0byBtYXAodW5zaWduZWQgY2hhciB2YWwpIC0+IHVuc2lnbmVkIHsK Ky0gICAgcmV0dXJuIHZhbDsKKy0gIH0KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRv IG1hcChzaG9ydCB2YWwpIC0+IGludCB7IHJldHVybiB2YWw7IH0KKy0gIEZNVF9DT05TVEVYUFIg Rk1UX0lOTElORSBhdXRvIG1hcCh1bnNpZ25lZCBzaG9ydCB2YWwpIC0+IHVuc2lnbmVkIHsKKy0g ICAgcmV0dXJuIHZhbDsKKy0gIH0KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1h cChpbnQgdmFsKSAtPiBpbnQgeyByZXR1cm4gdmFsOyB9CistICBGTVRfQ09OU1RFWFBSIEZNVF9J TkxJTkUgYXV0byBtYXAodW5zaWduZWQgdmFsKSAtPiB1bnNpZ25lZCB7IHJldHVybiB2YWw7IH0K Ky0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChsb25nIHZhbCkgLT4gbG9uZ190 eXBlIHsgcmV0dXJuIHZhbDsgfQorLSAgRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8gbWFw KHVuc2lnbmVkIGxvbmcgdmFsKSAtPiB1bG9uZ190eXBlIHsKKy0gICAgcmV0dXJuIHZhbDsKKy0g IH0KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChsb25nIGxvbmcgdmFsKSAt PiBsb25nIGxvbmcgeyByZXR1cm4gdmFsOyB9CistICBGTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUg YXV0byBtYXAodW5zaWduZWQgbG9uZyBsb25nIHZhbCkKKy0gICAgICAtPiB1bnNpZ25lZCBsb25n IGxvbmcgeworLSAgICByZXR1cm4gdmFsOworLSAgfQorLSAgRk1UX0NPTlNURVhQUiBGTVRfSU5M SU5FIGF1dG8gbWFwKGludDEyOF90IHZhbCkgLT4gaW50MTI4X3QgeyByZXR1cm4gdmFsOyB9Cist ICBGTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUgYXV0byBtYXAodWludDEyOF90IHZhbCkgLT4gdWlu dDEyOF90IHsgcmV0dXJuIHZhbDsgfQorLSAgRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8g bWFwKGJvb2wgdmFsKSAtPiBib29sIHsgcmV0dXJuIHZhbDsgfQorLQorLSAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoc3RkOjppc19zYW1lPFQsIGNoYXI+Ojp2YWx1ZSB8fAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPFQsIGNo YXJfdHlwZT46OnZhbHVlKT4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChU IHZhbCkgLT4gY2hhcl90eXBlIHsKKy0gICAgcmV0dXJuIHZhbDsKKy0gIH0KKy0gIHRlbXBsYXRl IDx0eXBlbmFtZSBULCBlbmFibGVfaWZfdDwoc3RkOjppc19zYW1lPFQsIHdjaGFyX3Q+Ojp2YWx1 ZSB8fAorLSNpZmRlZiBfX2NwcF9jaGFyOF90CistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0ZDo6aXNfc2FtZTxULCBjaGFyOF90Pjo6dmFsdWUgfHwKKy0jZW5kaWYKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPFQsIGNoYXIx Nl90Pjo6dmFsdWUgfHwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk Ojppc19zYW1lPFQsIGNoYXIzMl90Pjo6dmFsdWUpICYmCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICFzdGQ6OmlzX3NhbWU8VCwgY2hhcl90eXBlPjo6dmFsdWUsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CistICBGTVRfQ09O U1RFWFBSIEZNVF9JTkxJTkUgYXV0byBtYXAoVCkgLT4gdW5mb3JtYXR0YWJsZV9jaGFyIHsKKy0g ICAgcmV0dXJuIHt9OworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8g bWFwKGZsb2F0IHZhbCkgLT4gZmxvYXQgeyByZXR1cm4gdmFsOyB9CistICBGTVRfQ09OU1RFWFBS IEZNVF9JTkxJTkUgYXV0byBtYXAoZG91YmxlIHZhbCkgLT4gZG91YmxlIHsgcmV0dXJuIHZhbDsg fQorLSAgRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8gbWFwKGxvbmcgZG91YmxlIHZhbCkg LT4gbG9uZyBkb3VibGUgeworLSAgICByZXR1cm4gdmFsOworLSAgfQorLQorLSAgRk1UX0NPTlNU RVhQUiBGTVRfSU5MSU5FIGF1dG8gbWFwKGNoYXJfdHlwZSogdmFsKSAtPiBjb25zdCBjaGFyX3R5 cGUqIHsKKy0gICAgcmV0dXJuIHZhbDsKKy0gIH0KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElO RSBhdXRvIG1hcChjb25zdCBjaGFyX3R5cGUqIHZhbCkgLT4gY29uc3QgY2hhcl90eXBlKiB7Cist ICAgIHJldHVybiB2YWw7CistICB9CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKKy0gICAgICAg ICAgICBGTVRfRU5BQkxFX0lGKGlzX3N0cmluZzxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfcG9pbnRl cjxUPjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxj aGFyX3R5cGUsIGNoYXJfdDxUPj46OnZhbHVlKT4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElO RSBhdXRvIG1hcChjb25zdCBUJiB2YWwpCistICAgICAgLT4gYmFzaWNfc3RyaW5nX3ZpZXc8Y2hh cl90eXBlPiB7CistICAgIHJldHVybiB0b19zdHJpbmdfdmlldyh2YWwpOworLSAgfQorLSAgdGVt cGxhdGUgPHR5cGVuYW1lIFQsCistICAgICAgICAgICAgRk1UX0VOQUJMRV9JRihpc19zdHJpbmc8 VD46OnZhbHVlICYmICFzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlICYmCistICAgICAgICAgICAg ICAgICAgICAgICAgICAhc3RkOjppc19zYW1lPGNoYXJfdHlwZSwgY2hhcl90PFQ+Pjo6dmFsdWUp PgorLSAgRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8gbWFwKGNvbnN0IFQmKSAtPiB1bmZv cm1hdHRhYmxlX2NoYXIgeworLSAgICByZXR1cm4ge307CistICB9CistICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVCwKKy0gICAgICAgICAgICBGTVRfRU5BQkxFX0lGKAorLSAgICAgICAgICAgICAgICBz dGQ6OmlzX2NvbnN0cnVjdGlibGU8YmFzaWNfc3RyaW5nX3ZpZXc8Y2hhcl90eXBlPiwgVD46OnZh bHVlICYmCistICAgICAgICAgICAgICAgICFpc19zdHJpbmc8VD46OnZhbHVlICYmICFoYXNfZm9y bWF0dGVyPFQsIENvbnRleHQ+Ojp2YWx1ZSAmJgorLSAgICAgICAgICAgICAgICAhaGFzX2ZhbGxi YWNrX2Zvcm1hdHRlcjxULCBjaGFyX3R5cGU+Ojp2YWx1ZSk+CistICBGTVRfQ09OU1RFWFBSIEZN VF9JTkxJTkUgYXV0byBtYXAoY29uc3QgVCYgdmFsKQorLSAgICAgIC0+IGJhc2ljX3N0cmluZ192 aWV3PGNoYXJfdHlwZT4geworLSAgICByZXR1cm4gYmFzaWNfc3RyaW5nX3ZpZXc8Y2hhcl90eXBl Pih2YWwpOworLSAgfQorLSAgdGVtcGxhdGUgPAorLSAgICAgIHR5cGVuYW1lIFQsCistICAgICAg Rk1UX0VOQUJMRV9JRigKKy0gICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxlPHN0ZF9zdHJp bmdfdmlldzxjaGFyX3R5cGU+LCBUPjo6dmFsdWUgJiYKKy0gICAgICAgICAgIXN0ZDo6aXNfY29u c3RydWN0aWJsZTxiYXNpY19zdHJpbmdfdmlldzxjaGFyX3R5cGU+LCBUPjo6dmFsdWUgJiYKKy0g ICAgICAgICAgIWlzX3N0cmluZzxUPjo6dmFsdWUgJiYgIWhhc19mb3JtYXR0ZXI8VCwgQ29udGV4 dD46OnZhbHVlICYmCistICAgICAgICAgICFoYXNfZmFsbGJhY2tfZm9ybWF0dGVyPFQsIGNoYXJf dHlwZT46OnZhbHVlKT4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChjb25z dCBUJiB2YWwpCistICAgICAgLT4gYmFzaWNfc3RyaW5nX3ZpZXc8Y2hhcl90eXBlPiB7CistICAg IHJldHVybiBzdGRfc3RyaW5nX3ZpZXc8Y2hhcl90eXBlPih2YWwpOworLSAgfQorLQorLSAgdXNp bmcgY3N0cmluZ19yZXN1bHQgPSBjb25kaXRpb25hbF90PHN0ZDo6aXNfc2FtZTxjaGFyX3R5cGUs IGNoYXI+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiwgdW5mb3JtYXR0YWJsZV9wb2ludGVyPjsKKy0KKy0gIEZNVF9ERVBSRUNBVEVE IEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChjb25zdCBzaWduZWQgY2hhciogdmFs KQorLSAgICAgIC0+IGNzdHJpbmdfcmVzdWx0IHsKKy0gICAgcmV0dXJuIG1hcChyZWludGVycHJl dF9jYXN0PGNvbnN0IGNoYXIqPih2YWwpKTsKKy0gIH0KKy0gIEZNVF9ERVBSRUNBVEVEIEZNVF9D T05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChjb25zdCB1bnNpZ25lZCBjaGFyKiB2YWwpCist ICAgICAgLT4gY3N0cmluZ19yZXN1bHQgeworLSAgICByZXR1cm4gbWFwKHJlaW50ZXJwcmV0X2Nh c3Q8Y29uc3QgY2hhcio+KHZhbCkpOworLSAgfQorLSAgRk1UX0RFUFJFQ0FURUQgRk1UX0NPTlNU RVhQUiBGTVRfSU5MSU5FIGF1dG8gbWFwKHNpZ25lZCBjaGFyKiB2YWwpCistICAgICAgLT4gY3N0 cmluZ19yZXN1bHQgeworLSAgICByZXR1cm4gbWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh cio+KHZhbCkpOworLSAgfQorLSAgRk1UX0RFUFJFQ0FURUQgRk1UX0NPTlNURVhQUiBGTVRfSU5M SU5FIGF1dG8gbWFwKHVuc2lnbmVkIGNoYXIqIHZhbCkKKy0gICAgICAtPiBjc3RyaW5nX3Jlc3Vs dCB7CistICAgIHJldHVybiBtYXAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsKSk7 CistICB9CistCistICBGTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUgYXV0byBtYXAodm9pZCogdmFs KSAtPiBjb25zdCB2b2lkKiB7IHJldHVybiB2YWw7IH0KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lO TElORSBhdXRvIG1hcChjb25zdCB2b2lkKiB2YWwpIC0+IGNvbnN0IHZvaWQqIHsKKy0gICAgcmV0 dXJuIHZhbDsKKy0gIH0KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChzdGQ6 Om51bGxwdHJfdCB2YWwpIC0+IGNvbnN0IHZvaWQqIHsKKy0gICAgcmV0dXJuIHZhbDsKKy0gIH0K Ky0KKy0gIC8vIFdlIHVzZSBTRklOQUUgaW5zdGVhZCBvZiBhIGNvbnN0IFQqIHBhcmFtZXRlciB0 byBhdm9pZCBjb25mbGljdGluZyB3aXRoCistICAvLyB0aGUgQyBhcnJheSBvdmVybG9hZC4KKy0g IHRlbXBsYXRlIDwKKy0gICAgICB0eXBlbmFtZSBULAorLSAgICAgIEZNVF9FTkFCTEVfSUYoCist ICAgICAgICAgIHN0ZDo6aXNfbWVtYmVyX3BvaW50ZXI8VD46OnZhbHVlIHx8CistICAgICAgICAg IHN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxUPjo6dHlwZT46 OnZhbHVlIHx8CistICAgICAgICAgIChzdGQ6OmlzX2NvbnZlcnRpYmxlPGNvbnN0IFQmLCBjb25z dCB2b2lkKj46OnZhbHVlICYmCistICAgICAgICAgICAhc3RkOjppc19jb252ZXJ0aWJsZTxjb25z dCBUJiwgY29uc3QgY2hhcl90eXBlKj46OnZhbHVlKSk+CistICBGTVRfQ09OU1RFWFBSIGF1dG8g bWFwKGNvbnN0IFQmKSAtPiB1bmZvcm1hdHRhYmxlX3BvaW50ZXIgeworLSAgICByZXR1cm4ge307 CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTiwKKy0gICAg ICAgICAgICBGTVRfRU5BQkxFX0lGKCFzdGQ6OmlzX3NhbWU8VCwgd2NoYXJfdD46OnZhbHVlKT4K Ky0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChjb25zdCBUICgmdmFsdWVzKVtO XSkgLT4gY29uc3QgVCAoJilbTl0geworLSAgICByZXR1cm4gdmFsdWVzOworLSAgfQorLQorLSAg dGVtcGxhdGUgPHR5cGVuYW1lIFQsCistICAgICAgICAgICAgRk1UX0VOQUJMRV9JRigKKy0gICAg ICAgICAgICAgICAgc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSYmIHN0ZDo6aXNfY29udmVydGlibGU8 VCwgaW50Pjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgICAgIWhhc19mb3JtYXR0ZXI8VCwgQ29u dGV4dD46OnZhbHVlICYmCistICAgICAgICAgICAgICAgICFoYXNfZmFsbGJhY2tfZm9ybWF0dGVy PFQsIGNoYXJfdHlwZT46OnZhbHVlKT4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRv IG1hcChjb25zdCBUJiB2YWwpCistICAgICAgLT4gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGFyZ19t YXBwZXI+KCkubWFwKAorLSAgICAgICAgICBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OnVuZGVy bHlpbmdfdHlwZTxUPjo6dHlwZT4odmFsKSkpIHsKKy0gICAgcmV0dXJuIG1hcChzdGF0aWNfY2Fz dDx0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZT4odmFsKSk7CistICB9Cist CistICBGTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUgYXV0byBtYXAoZGV0YWlsOjpieXRlIHZhbCkg LT4gdW5zaWduZWQgeworLSAgICByZXR1cm4gbWFwKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+ KHZhbCkpOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUgPSBy ZW1vdmVfY3ZyZWZfdDxUPj4KKy0gIHN0cnVjdCBmb3JtYXR0YWJsZQorLSAgICAgIDogYm9vbF9j b25zdGFudDxoYXNfY29uc3RfZm9ybWF0dGVyPFUsIENvbnRleHQ+KCkgfHwKKy0gICAgICAgICAg ICAgICAgICAgICAgIXN0ZDo6aXNfY29uc3Q8cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Pjo6dmFsdWUg fHwKKy0gICAgICAgICAgICAgICAgICAgICAgaGFzX2ZhbGxiYWNrX2Zvcm1hdHRlcjxVLCBjaGFy X3R5cGU+Ojp2YWx1ZT4ge307CistCistI2lmIEZNVF9NU0NfVkVSICE9IDAgJiYgRk1UX01TQ19W RVIgPCAxOTEwCistICAvLyBXb3JrYXJvdW5kIGEgYnVnIGluIE1TVkMuCistICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4gRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8gZG9fbWFwKFQmJiB2YWwp IC0+IFQmIHsKKy0gICAgcmV0dXJuIHZhbDsKKy0gIH0KKy0jZWxzZQorLSAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoZm9ybWF0dGFibGU8VD46OnZhbHVlKT4KKy0gIEZNVF9D T05TVEVYUFIgRk1UX0lOTElORSBhdXRvIGRvX21hcChUJiYgdmFsKSAtPiBUJiB7CistICAgIHJl dHVybiB2YWw7CistICB9CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9JRigh Zm9ybWF0dGFibGU8VD46OnZhbHVlKT4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRv IGRvX21hcChUJiYpIC0+IHVuZm9ybWF0dGFibGVfY29uc3QgeworLSAgICByZXR1cm4ge307Cist ICB9CistI2VuZGlmCistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA9IHJl bW92ZV9jdnJlZl90PFQ+LAorLSAgICAgICAgICAgIEZNVF9FTkFCTEVfSUYoIWlzX3N0cmluZzxV Pjo6dmFsdWUgJiYgIWlzX2NoYXI8VT46OnZhbHVlICYmCistICAgICAgICAgICAgICAgICAgICAg ICAgICAhc3RkOjppc19hcnJheTxVPjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgIChoYXNfZm9ybWF0dGVyPFUsIENvbnRleHQ+Ojp2YWx1ZSB8fAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIGhhc19mYWxsYmFja19mb3JtYXR0ZXI8VSwgY2hhcl90eXBlPjo6dmFsdWUp KT4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChUJiYgdmFsKQorLSAgICAg IC0+IGRlY2x0eXBlKHRoaXMtPmRvX21hcChzdGQ6OmZvcndhcmQ8VD4odmFsKSkpIHsKKy0gICAg cmV0dXJuIGRvX21hcChzdGQ6OmZvcndhcmQ8VD4odmFsKSk7CistICB9CistCistICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9JRihpc19uYW1lZF9hcmc8VD46OnZhbHVlKT4KKy0g IEZNVF9DT05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG1hcChjb25zdCBUJiBuYW1lZF9hcmcpCist ICAgICAgLT4gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGFyZ19tYXBwZXI+KCkubWFwKG5hbWVkX2Fy Zy52YWx1ZSkpIHsKKy0gICAgcmV0dXJuIG1hcChuYW1lZF9hcmcudmFsdWUpOworLSAgfQorLQor LSAgYXV0byBtYXAoLi4uKSAtPiB1bmZvcm1hdHRhYmxlIHsgcmV0dXJuIHt9OyB9CistfTsKKy0K Ky0vLyBBIHR5cGUgY29uc3RhbnQgYWZ0ZXIgYXBwbHlpbmcgYXJnX21hcHBlcjxDb250ZXh0Pi4K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29udGV4dD4KKy11c2luZyBtYXBwZWRf dHlwZV9jb25zdGFudCA9CistICAgIHR5cGVfY29uc3RhbnQ8ZGVjbHR5cGUoYXJnX21hcHBlcjxD b250ZXh0PigpLm1hcChzdGQ6OmRlY2x2YWw8Y29uc3QgVCY+KCkpKSwKKy0gICAgICAgICAgICAg ICAgICB0eXBlbmFtZSBDb250ZXh0OjpjaGFyX3R5cGU+OworLQorLWVudW0geyBwYWNrZWRfYXJn X2JpdHMgPSA0IH07CistLy8gTWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHdpdGggcGFja2Vk IHR5cGVzLgorLWVudW0geyBtYXhfcGFja2VkX2FyZ3MgPSA2MiAvIHBhY2tlZF9hcmdfYml0cyB9 OworLWVudW0gOiB1bnNpZ25lZCBsb25nIGxvbmcgeyBpc191bnBhY2tlZF9iaXQgPSAxVUxMIDw8 IDYzIH07CistZW51bSA6IHVuc2lnbmVkIGxvbmcgbG9uZyB7IGhhc19uYW1lZF9hcmdzX2JpdCA9 IDFVTEwgPDwgNjIgfTsKKy0KKy1GTVRfRU5EX0RFVEFJTF9OQU1FU1BBQ0UKKy0KKy0vLyBBbiBv dXRwdXQgaXRlcmF0b3IgdGhhdCBhcHBlbmRzIHRvIGEgYnVmZmVyLgorLS8vIEl0IGlzIHVzZWQg dG8gcmVkdWNlIHN5bWJvbCBzaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlLgorLWNsYXNzIGFwcGVu ZGVyIDogcHVibGljIHN0ZDo6YmFja19pbnNlcnRfaXRlcmF0b3I8ZGV0YWlsOjpidWZmZXI8Y2hh cj4+IHsKKy0gIHVzaW5nIGJhc2UgPSBzdGQ6OmJhY2tfaW5zZXJ0X2l0ZXJhdG9yPGRldGFpbDo6 YnVmZmVyPGNoYXI+PjsKKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgZnJpZW5kIGF1 dG8gZ2V0X2J1ZmZlcihhcHBlbmRlciBvdXQpIC0+IGRldGFpbDo6YnVmZmVyPGNoYXI+JiB7Cist ICAgIHJldHVybiBkZXRhaWw6OmdldF9jb250YWluZXIob3V0KTsKKy0gIH0KKy0KKy0gcHVibGlj OgorLSAgdXNpbmcgc3RkOjpiYWNrX2luc2VydF9pdGVyYXRvcjxkZXRhaWw6OmJ1ZmZlcjxjaGFy Pj46OmJhY2tfaW5zZXJ0X2l0ZXJhdG9yOworLSAgYXBwZW5kZXIoYmFzZSBpdCkgRk1UX05PRVhD RVBUIDogYmFzZShpdCkge30KKy0gIHVzaW5nIF9VbmNoZWNrZWRfdHlwZSA9IGFwcGVuZGVyOyAg Ly8gTWFyayBpdGVyYXRvciBhcyBjaGVja2VkLgorLQorLSAgYXV0byBvcGVyYXRvcisrKCkgRk1U X05PRVhDRVBUIC0+IGFwcGVuZGVyJiB7IHJldHVybiAqdGhpczsgfQorLQorLSAgYXV0byBvcGVy YXRvcisrKGludCkgRk1UX05PRVhDRVBUIC0+IGFwcGVuZGVyIHsgcmV0dXJuICp0aGlzOyB9Cist fTsKKy0KKy0vLyBBIGZvcm1hdHRpbmcgYXJndW1lbnQuIEl0IGlzIGEgdHJpdmlhbGx5IGNvcHlh YmxlL2NvbnN0cnVjdGlibGUgdHlwZSB0bworLS8vIGFsbG93IHN0b3JhZ2UgaW4gYmFzaWNfbWVt b3J5X2J1ZmZlci4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGV4dD4gY2xhc3MgYmFzaWNfZm9y bWF0X2FyZyB7CistIHByaXZhdGU6CistICBkZXRhaWw6OnZhbHVlPENvbnRleHQ+IHZhbHVlXzsK Ky0gIGRldGFpbDo6dHlwZSB0eXBlXzsKKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0 VHlwZSwgdHlwZW5hbWUgVD4KKy0gIGZyaWVuZCBGTVRfQ09OU1RFWFBSIGF1dG8gZGV0YWlsOjpt YWtlX2FyZyhjb25zdCBUJiB2YWx1ZSkKKy0gICAgICAtPiBiYXNpY19mb3JtYXRfYXJnPENvbnRl eHRUeXBlPjsKKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZSBDdHg+ CistICBmcmllbmQgRk1UX0NPTlNURVhQUiBhdXRvIHZpc2l0X2Zvcm1hdF9hcmcoVmlzaXRvciYm IHZpcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBiYXNpY19mb3JtYXRfYXJnPEN0eD4mIGFyZykKKy0gICAgICAtPiBkZWNsdHlwZSh2aXMoMCkp OworLQorLSAgZnJpZW5kIGNsYXNzIGJhc2ljX2Zvcm1hdF9hcmdzPENvbnRleHQ+OworLSAgZnJp ZW5kIGNsYXNzIGR5bmFtaWNfZm9ybWF0X2FyZ19zdG9yZTxDb250ZXh0PjsKKy0KKy0gIHVzaW5n IGNoYXJfdHlwZSA9IHR5cGVuYW1lIENvbnRleHQ6OmNoYXJfdHlwZTsKKy0KKy0gIHRlbXBsYXRl IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBDaGFyLCBzaXplX3QgTlVNX0FSR1MsIHNpemVfdCBOVU1f TkFNRURfQVJHUz4KKy0gIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjphcmdfZGF0YTsKKy0KKy0gIGJh c2ljX2Zvcm1hdF9hcmcoY29uc3QgZGV0YWlsOjpuYW1lZF9hcmdfaW5mbzxjaGFyX3R5cGU+KiBh cmdzLCBzaXplX3Qgc2l6ZSkKKy0gICAgICA6IHZhbHVlXyhhcmdzLCBzaXplKSB7fQorLQorLSBw dWJsaWM6CistICBjbGFzcyBoYW5kbGUgeworLSAgIHB1YmxpYzoKKy0gICAgZXhwbGljaXQgaGFu ZGxlKGRldGFpbDo6Y3VzdG9tX3ZhbHVlPENvbnRleHQ+IGN1c3RvbSkgOiBjdXN0b21fKGN1c3Rv bSkge30KKy0KKy0gICAgdm9pZCBmb3JtYXQodHlwZW5hbWUgQ29udGV4dDo6cGFyc2VfY29udGV4 dF90eXBlJiBwYXJzZV9jdHgsCistICAgICAgICAgICAgICAgIENvbnRleHQmIGN0eCkgY29uc3Qg eworLSAgICAgIGN1c3RvbV8uZm9ybWF0KGN1c3RvbV8udmFsdWUsIHBhcnNlX2N0eCwgY3R4KTsK Ky0gICAgfQorLQorLSAgIHByaXZhdGU6CistICAgIGRldGFpbDo6Y3VzdG9tX3ZhbHVlPENvbnRl eHQ+IGN1c3RvbV87CistICB9OworLQorLSAgY29uc3RleHByIGJhc2ljX2Zvcm1hdF9hcmcoKSA6 IHR5cGVfKGRldGFpbDo6dHlwZTo6bm9uZV90eXBlKSB7fQorLQorLSAgY29uc3RleHByIGV4cGxp Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBGTVRfTk9FWENFUFQgeworLSAgICByZXR1cm4gdHlw ZV8gIT0gZGV0YWlsOjp0eXBlOjpub25lX3R5cGU7CistICB9CistCistICBhdXRvIHR5cGUoKSBj b25zdCAtPiBkZXRhaWw6OnR5cGUgeyByZXR1cm4gdHlwZV87IH0KKy0KKy0gIGF1dG8gaXNfaW50 ZWdyYWwoKSBjb25zdCAtPiBib29sIHsgcmV0dXJuIGRldGFpbDo6aXNfaW50ZWdyYWxfdHlwZSh0 eXBlXyk7IH0KKy0gIGF1dG8gaXNfYXJpdGhtZXRpYygpIGNvbnN0IC0+IGJvb2wgeworLSAgICBy ZXR1cm4gZGV0YWlsOjppc19hcml0aG1ldGljX3R5cGUodHlwZV8pOworLSAgfQorLX07CistCist LyoqCistICBccnN0CistICBWaXNpdHMgYW4gYXJndW1lbnQgZGlzcGF0Y2hpbmcgdG8gdGhlIGFw cHJvcHJpYXRlIHZpc2l0IG1ldGhvZCBiYXNlZCBvbgorLSAgdGhlIGFyZ3VtZW50IHR5cGUuIEZv ciBleGFtcGxlLCBpZiB0aGUgYXJndW1lbnQgdHlwZSBpcyBgYGRvdWJsZWBgIHRoZW4KKy0gIGBg dmlzKHZhbHVlKWBgIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIHR5cGUgYGBkb3Vi bGVgYC4KKy0gIFxlbmRyc3QKKy0gKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlw ZW5hbWUgQ29udGV4dD4KKy1GTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUgYXV0byB2aXNpdF9mb3Jt YXRfYXJnKAorLSAgICBWaXNpdG9yJiYgdmlzLCBjb25zdCBiYXNpY19mb3JtYXRfYXJnPENvbnRl eHQ+JiBhcmcpIC0+IGRlY2x0eXBlKHZpcygwKSkgeworLSAgc3dpdGNoIChhcmcudHlwZV8pIHsK Ky0gIGNhc2UgZGV0YWlsOjp0eXBlOjpub25lX3R5cGU6CistICAgIGJyZWFrOworLSAgY2FzZSBk ZXRhaWw6OnR5cGU6OmludF90eXBlOgorLSAgICByZXR1cm4gdmlzKGFyZy52YWx1ZV8uaW50X3Zh bHVlKTsKKy0gIGNhc2UgZGV0YWlsOjp0eXBlOjp1aW50X3R5cGU6CistICAgIHJldHVybiB2aXMo YXJnLnZhbHVlXy51aW50X3ZhbHVlKTsKKy0gIGNhc2UgZGV0YWlsOjp0eXBlOjpsb25nX2xvbmdf dHlwZToKKy0gICAgcmV0dXJuIHZpcyhhcmcudmFsdWVfLmxvbmdfbG9uZ192YWx1ZSk7CistICBj YXNlIGRldGFpbDo6dHlwZTo6dWxvbmdfbG9uZ190eXBlOgorLSAgICByZXR1cm4gdmlzKGFyZy52 YWx1ZV8udWxvbmdfbG9uZ192YWx1ZSk7CistICBjYXNlIGRldGFpbDo6dHlwZTo6aW50MTI4X3R5 cGU6CistICAgIHJldHVybiB2aXMoZGV0YWlsOjpjb252ZXJ0X2Zvcl92aXNpdChhcmcudmFsdWVf LmludDEyOF92YWx1ZSkpOworLSAgY2FzZSBkZXRhaWw6OnR5cGU6OnVpbnQxMjhfdHlwZToKKy0g ICAgcmV0dXJuIHZpcyhkZXRhaWw6OmNvbnZlcnRfZm9yX3Zpc2l0KGFyZy52YWx1ZV8udWludDEy OF92YWx1ZSkpOworLSAgY2FzZSBkZXRhaWw6OnR5cGU6OmJvb2xfdHlwZToKKy0gICAgcmV0dXJu IHZpcyhhcmcudmFsdWVfLmJvb2xfdmFsdWUpOworLSAgY2FzZSBkZXRhaWw6OnR5cGU6OmNoYXJf dHlwZToKKy0gICAgcmV0dXJuIHZpcyhhcmcudmFsdWVfLmNoYXJfdmFsdWUpOworLSAgY2FzZSBk ZXRhaWw6OnR5cGU6OmZsb2F0X3R5cGU6CistICAgIHJldHVybiB2aXMoYXJnLnZhbHVlXy5mbG9h dF92YWx1ZSk7CistICBjYXNlIGRldGFpbDo6dHlwZTo6ZG91YmxlX3R5cGU6CistICAgIHJldHVy biB2aXMoYXJnLnZhbHVlXy5kb3VibGVfdmFsdWUpOworLSAgY2FzZSBkZXRhaWw6OnR5cGU6Omxv bmdfZG91YmxlX3R5cGU6CistICAgIHJldHVybiB2aXMoYXJnLnZhbHVlXy5sb25nX2RvdWJsZV92 YWx1ZSk7CistICBjYXNlIGRldGFpbDo6dHlwZTo6Y3N0cmluZ190eXBlOgorLSAgICByZXR1cm4g dmlzKGFyZy52YWx1ZV8uc3RyaW5nLmRhdGEpOworLSAgY2FzZSBkZXRhaWw6OnR5cGU6OnN0cmlu Z190eXBlOgorLSAgICB1c2luZyBzdiA9IGJhc2ljX3N0cmluZ192aWV3PHR5cGVuYW1lIENvbnRl eHQ6OmNoYXJfdHlwZT47CistICAgIHJldHVybiB2aXMoc3YoYXJnLnZhbHVlXy5zdHJpbmcuZGF0 YSwgYXJnLnZhbHVlXy5zdHJpbmcuc2l6ZSkpOworLSAgY2FzZSBkZXRhaWw6OnR5cGU6OnBvaW50 ZXJfdHlwZToKKy0gICAgcmV0dXJuIHZpcyhhcmcudmFsdWVfLnBvaW50ZXIpOworLSAgY2FzZSBk ZXRhaWw6OnR5cGU6OmN1c3RvbV90eXBlOgorLSAgICByZXR1cm4gdmlzKHR5cGVuYW1lIGJhc2lj X2Zvcm1hdF9hcmc8Q29udGV4dD46OmhhbmRsZShhcmcudmFsdWVfLmN1c3RvbSkpOworLSAgfQor LSAgcmV0dXJuIHZpcyhtb25vc3RhdGUoKSk7CistfQorLQorLUZNVF9CRUdJTl9ERVRBSUxfTkFN RVNQQUNFCistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIElucHV0SXQ+Cist YXV0byBjb3B5X3N0cihJbnB1dEl0IGJlZ2luLCBJbnB1dEl0IGVuZCwgYXBwZW5kZXIgb3V0KSAt PiBhcHBlbmRlciB7CistICBnZXRfY29udGFpbmVyKG91dCkuYXBwZW5kKGJlZ2luLCBlbmQpOwor LSAgcmV0dXJuIG91dDsKKy19CistCistI2lmIEZNVF9HQ0NfVkVSU0lPTiAmJiBGTVRfR0NDX1ZF UlNJT04gPCA1MDAKKy0vLyBBIHdvcmthcm91bmQgZm9yIGdjYyA0LjggdG8gbWFrZSB2b2lkX3Qg d29yayBpbiBhIFNGSU5BRSBjb250ZXh0LgorLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gc3Ry dWN0IHZvaWRfdF9pbXBsIHsgdXNpbmcgdHlwZSA9IHZvaWQ7IH07CistdGVtcGxhdGUgPHR5cGVu YW1lLi4uIFRzPgorLXVzaW5nIHZvaWRfdCA9IHR5cGVuYW1lIGRldGFpbDo6dm9pZF90X2ltcGw8 VHMuLi4+Ojp0eXBlOworLSNlbHNlCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uPiB1c2luZyB2b2lk X3QgPSB2b2lkOworLSNlbmRpZgorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBJdCwgdHlwZW5hbWUg VCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKy1zdHJ1Y3QgaXNfb3V0cHV0X2l0ZXJhdG9yIDog c3RkOjpmYWxzZV90eXBlIHt9OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBJdCwgdHlwZW5hbWUg VD4KKy1zdHJ1Y3QgaXNfb3V0cHV0X2l0ZXJhdG9yPAorLSAgICBJdCwgVCwKKy0gICAgdm9pZF90 PHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0Pjo6aXRlcmF0b3JfY2F0ZWdvcnksCist ICAgICAgICAgICBkZWNsdHlwZSgqc3RkOjpkZWNsdmFsPEl0PigpID0gc3RkOjpkZWNsdmFsPFQ+ KCkpPj4KKy0gICAgOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUg T3V0cHV0SXQ+Cistc3RydWN0IGlzX2JhY2tfaW5zZXJ0X2l0ZXJhdG9yIDogc3RkOjpmYWxzZV90 eXBlIHt9OworLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXI+Cistc3RydWN0IGlzX2JhY2tf aW5zZXJ0X2l0ZXJhdG9yPHN0ZDo6YmFja19pbnNlcnRfaXRlcmF0b3I8Q29udGFpbmVyPj4KKy0g ICAgOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQ+ Cistc3RydWN0IGlzX2NvbnRpZ3VvdXNfYmFja19pbnNlcnRfaXRlcmF0b3IgOiBzdGQ6OmZhbHNl X3R5cGUge307CistdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRhaW5lcj4KKy1zdHJ1Y3QgaXNfY29u dGlndW91c19iYWNrX2luc2VydF9pdGVyYXRvcjxzdGQ6OmJhY2tfaW5zZXJ0X2l0ZXJhdG9yPENv bnRhaW5lcj4+CistICAgIDogaXNfY29udGlndW91czxDb250YWluZXI+IHt9OworLXRlbXBsYXRl IDw+Cistc3RydWN0IGlzX2NvbnRpZ3VvdXNfYmFja19pbnNlcnRfaXRlcmF0b3I8YXBwZW5kZXI+ IDogc3RkOjp0cnVlX3R5cGUge307CistCistLy8gQSB0eXBlLWVyYXNlZCByZWZlcmVuY2UgdG8g YW4gc3RkOjpsb2NhbGUgdG8gYXZvaWQgaGVhdnkgPGxvY2FsZT4gaW5jbHVkZS4KKy1jbGFzcyBs b2NhbGVfcmVmIHsKKy0gcHJpdmF0ZToKKy0gIGNvbnN0IHZvaWQqIGxvY2FsZV87ICAvLyBBIHR5 cGUtZXJhc2VkIHBvaW50ZXIgdG8gc3RkOjpsb2NhbGUuCistCistIHB1YmxpYzoKKy0gIGNvbnN0 ZXhwciBsb2NhbGVfcmVmKCkgOiBsb2NhbGVfKG51bGxwdHIpIHt9CistICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgTG9jYWxlPiBleHBsaWNpdCBsb2NhbGVfcmVmKGNvbnN0IExvY2FsZSYgbG9jKTsKKy0K Ky0gIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBGTVRfTk9FWENFUFQgeyByZXR1cm4g bG9jYWxlXyAhPSBudWxscHRyOyB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTG9jYWxlPiBh dXRvIGdldCgpIGNvbnN0IC0+IExvY2FsZTsKKy19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZT4g Y29uc3RleHByIGF1dG8gZW5jb2RlX3R5cGVzKCkgLT4gdW5zaWduZWQgbG9uZyBsb25nIHsKKy0g IHJldHVybiAwOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGV4dCwgdHlwZW5hbWUg QXJnLCB0eXBlbmFtZS4uLiBBcmdzPgorLWNvbnN0ZXhwciBhdXRvIGVuY29kZV90eXBlcygpIC0+ IHVuc2lnbmVkIGxvbmcgbG9uZyB7CistICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1h cHBlZF90eXBlX2NvbnN0YW50PEFyZywgQ29udGV4dD46OnZhbHVlKSB8CistICAgICAgICAgKGVu Y29kZV90eXBlczxDb250ZXh0LCBBcmdzLi4uPigpIDw8IHBhY2tlZF9hcmdfYml0cyk7CistfQor LQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0LCB0eXBlbmFtZSBUPgorLUZNVF9DT05TVEVY UFIgYXV0byBtYWtlX2FyZyhjb25zdCBUJiB2YWx1ZSkgLT4gYmFzaWNfZm9ybWF0X2FyZzxDb250 ZXh0PiB7CistICBiYXNpY19mb3JtYXRfYXJnPENvbnRleHQ+IGFyZzsKKy0gIGFyZy50eXBlXyA9 IG1hcHBlZF90eXBlX2NvbnN0YW50PFQsIENvbnRleHQ+Ojp2YWx1ZTsKKy0gIGFyZy52YWx1ZV8g PSBhcmdfbWFwcGVyPENvbnRleHQ+KCkubWFwKHZhbHVlKTsKKy0gIHJldHVybiBhcmc7CistfQor LQorLS8vIFRoZSB0eXBlIHRlbXBsYXRlIHBhcmFtZXRlciBpcyB0aGVyZSB0byBhdm9pZCBhbiBP RFIgdmlvbGF0aW9uIHdoZW4gdXNpbmcKKy0vLyBhIGZhbGxiYWNrIGZvcm1hdHRlciBpbiBvbmUg dHJhbnNsYXRpb24gdW5pdCBhbmQgYW4gaW1wbGljaXQgY29udmVyc2lvbiBpbgorLS8vIGFub3Ro ZXIgKG5vdCByZWNvbW1lbmRlZCkuCistdGVtcGxhdGUgPGJvb2wgSVNfUEFDS0VELCB0eXBlbmFt ZSBDb250ZXh0LCB0eXBlLCB0eXBlbmFtZSBULAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKElT X1BBQ0tFRCk+CistRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8gbWFrZV9hcmcoVCYmIHZh bCkgLT4gdmFsdWU8Q29udGV4dD4geworLSAgY29uc3QgYXV0byYgYXJnID0gYXJnX21hcHBlcjxD b250ZXh0PigpLm1hcChzdGQ6OmZvcndhcmQ8VD4odmFsKSk7CistCistICBjb25zdGV4cHIgYm9v bCBmb3JtYXR0YWJsZV9jaGFyID0KKy0gICAgICAhc3RkOjppc19zYW1lPGRlY2x0eXBlKGFyZyks IGNvbnN0IHVuZm9ybWF0dGFibGVfY2hhciY+Ojp2YWx1ZTsKKy0gIHN0YXRpY19hc3NlcnQoZm9y bWF0dGFibGVfY2hhciwgIk1peGluZyBjaGFyYWN0ZXIgdHlwZXMgaXMgZGlzYWxsb3dlZC4iKTsK Ky0KKy0gIGNvbnN0ZXhwciBib29sIGZvcm1hdHRhYmxlX2NvbnN0ID0KKy0gICAgICAhc3RkOjpp c19zYW1lPGRlY2x0eXBlKGFyZyksIGNvbnN0IHVuZm9ybWF0dGFibGVfY29uc3QmPjo6dmFsdWU7 CistICBzdGF0aWNfYXNzZXJ0KGZvcm1hdHRhYmxlX2NvbnN0LCAiQ2Fubm90IGZvcm1hdCBhIGNv bnN0IGFyZ3VtZW50LiIpOworLQorLSAgLy8gRm9ybWF0dGluZyBvZiBhcmJpdHJhcnkgcG9pbnRl cnMgaXMgZGlzYWxsb3dlZC4gSWYgeW91IHdhbnQgdG8gb3V0cHV0CistICAvLyBhIHBvaW50ZXIg Y2FzdCBpdCB0byAidm9pZCAqIiBvciAiY29uc3Qgdm9pZCAqIi4gSW4gcGFydGljdWxhciwgdGhp cworLSAgLy8gZm9yYmlkcyBmb3JtYXR0aW5nIG9mICJbY29uc3RdIHZvbGF0aWxlIGNoYXIgKiIg d2hpY2ggaXMgcHJpbnRlZCBhcyBib29sCistICAvLyBieSBpb3N0cmVhbXMuCistICBjb25zdGV4 cHIgYm9vbCBmb3JtYXR0YWJsZV9wb2ludGVyID0KKy0gICAgICAhc3RkOjppc19zYW1lPGRlY2x0 eXBlKGFyZyksIGNvbnN0IHVuZm9ybWF0dGFibGVfcG9pbnRlciY+Ojp2YWx1ZTsKKy0gIHN0YXRp Y19hc3NlcnQoZm9ybWF0dGFibGVfcG9pbnRlciwKKy0gICAgICAgICAgICAgICAgIkZvcm1hdHRp bmcgb2Ygbm9uLXZvaWQgcG9pbnRlcnMgaXMgZGlzYWxsb3dlZC4iKTsKKy0KKy0gIGNvbnN0ZXhw ciBib29sIGZvcm1hdHRhYmxlID0KKy0gICAgICAhc3RkOjppc19zYW1lPGRlY2x0eXBlKGFyZyks IGNvbnN0IHVuZm9ybWF0dGFibGUmPjo6dmFsdWU7CistICBzdGF0aWNfYXNzZXJ0KAorLSAgICAg IGZvcm1hdHRhYmxlLAorLSAgICAgICJDYW5ub3QgZm9ybWF0IGFuIGFyZ3VtZW50LiBUbyBtYWtl IHR5cGUgVCBmb3JtYXR0YWJsZSBwcm92aWRlIGEgIgorLSAgICAgICJmb3JtYXR0ZXI8VD4gc3Bl Y2lhbGl6YXRpb246IGh0dHBzOi8vZm10LmRldi9sYXRlc3QvYXBpLmh0bWwjdWR0Iik7CistICBy ZXR1cm4ge2FyZ307CistfQorLQorLXRlbXBsYXRlIDxib29sIElTX1BBQ0tFRCwgdHlwZW5hbWUg Q29udGV4dCwgdHlwZSwgdHlwZW5hbWUgVCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRighSVNf UEFDS0VEKT4KKy1pbmxpbmUgYXV0byBtYWtlX2FyZyhjb25zdCBUJiB2YWx1ZSkgLT4gYmFzaWNf Zm9ybWF0X2FyZzxDb250ZXh0PiB7CistICByZXR1cm4gbWFrZV9hcmc8Q29udGV4dD4odmFsdWUp OworLX0KKy1GTVRfRU5EX0RFVEFJTF9OQU1FU1BBQ0UKKy0KKy0vLyBGb3JtYXR0aW5nIGNvbnRl eHQuCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBDaGFyPiBjbGFzcyBi YXNpY19mb3JtYXRfY29udGV4dCB7CistIHB1YmxpYzoKKy0gIC8qKiBUaGUgY2hhcmFjdGVyIHR5 cGUgZm9yIHRoZSBvdXRwdXQuICovCistICB1c2luZyBjaGFyX3R5cGUgPSBDaGFyOworLQorLSBw cml2YXRlOgorLSAgT3V0cHV0SXQgb3V0XzsKKy0gIGJhc2ljX2Zvcm1hdF9hcmdzPGJhc2ljX2Zv cm1hdF9jb250ZXh0PiBhcmdzXzsKKy0gIGRldGFpbDo6bG9jYWxlX3JlZiBsb2NfOworLQorLSBw dWJsaWM6CistICB1c2luZyBpdGVyYXRvciA9IE91dHB1dEl0OworLSAgdXNpbmcgZm9ybWF0X2Fy ZyA9IGJhc2ljX2Zvcm1hdF9hcmc8YmFzaWNfZm9ybWF0X2NvbnRleHQ+OworLSAgdXNpbmcgcGFy c2VfY29udGV4dF90eXBlID0gYmFzaWNfZm9ybWF0X3BhcnNlX2NvbnRleHQ8Q2hhcj47CistICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcgZm9ybWF0dGVyX3R5cGUgPSBmb3JtYXR0ZXI8VCwg Y2hhcl90eXBlPjsKKy0KKy0gIGJhc2ljX2Zvcm1hdF9jb250ZXh0KGJhc2ljX2Zvcm1hdF9jb250 ZXh0JiYpID0gZGVmYXVsdDsKKy0gIGJhc2ljX2Zvcm1hdF9jb250ZXh0KGNvbnN0IGJhc2ljX2Zv cm1hdF9jb250ZXh0JikgPSBkZWxldGU7CistICB2b2lkIG9wZXJhdG9yPShjb25zdCBiYXNpY19m b3JtYXRfY29udGV4dCYpID0gZGVsZXRlOworLSAgLyoqCistICAgQ29uc3RydWN0cyBhIGBgYmFz aWNfZm9ybWF0X2NvbnRleHRgYCBvYmplY3QuIFJlZmVyZW5jZXMgdG8gdGhlIGFyZ3VtZW50cyBh cmUKKy0gICBzdG9yZWQgaW4gdGhlIG9iamVjdCBzbyBtYWtlIHN1cmUgdGhleSBoYXZlIGFwcHJv cHJpYXRlIGxpZmV0aW1lcy4KKy0gICAqLworLSAgY29uc3RleHByIGJhc2ljX2Zvcm1hdF9jb250 ZXh0KAorLSAgICAgIE91dHB1dEl0IG91dCwgYmFzaWNfZm9ybWF0X2FyZ3M8YmFzaWNfZm9ybWF0 X2NvbnRleHQ+IGN0eF9hcmdzLAorLSAgICAgIGRldGFpbDo6bG9jYWxlX3JlZiBsb2MgPSBkZXRh aWw6OmxvY2FsZV9yZWYoKSkKKy0gICAgICA6IG91dF8ob3V0KSwgYXJnc18oY3R4X2FyZ3MpLCBs b2NfKGxvYykge30KKy0KKy0gIGNvbnN0ZXhwciBhdXRvIGFyZyhpbnQgaWQpIGNvbnN0IC0+IGZv cm1hdF9hcmcgeyByZXR1cm4gYXJnc18uZ2V0KGlkKTsgfQorLSAgRk1UX0NPTlNURVhQUiBhdXRv IGFyZyhiYXNpY19zdHJpbmdfdmlldzxjaGFyX3R5cGU+IG5hbWUpIC0+IGZvcm1hdF9hcmcgewor LSAgICByZXR1cm4gYXJnc18uZ2V0KG5hbWUpOworLSAgfQorLSAgRk1UX0NPTlNURVhQUiBhdXRv IGFyZ19pZChiYXNpY19zdHJpbmdfdmlldzxjaGFyX3R5cGU+IG5hbWUpIC0+IGludCB7CistICAg IHJldHVybiBhcmdzXy5nZXRfaWQobmFtZSk7CistICB9CistICBhdXRvIGFyZ3MoKSBjb25zdCAt PiBjb25zdCBiYXNpY19mb3JtYXRfYXJnczxiYXNpY19mb3JtYXRfY29udGV4dD4mIHsKKy0gICAg cmV0dXJuIGFyZ3NfOworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUiBhdXRvIGVycm9yX2hhbmRs ZXIoKSAtPiBkZXRhaWw6OmVycm9yX2hhbmRsZXIgeyByZXR1cm4ge307IH0KKy0gIHZvaWQgb25f ZXJyb3IoY29uc3QgY2hhciogbWVzc2FnZSkgeyBlcnJvcl9oYW5kbGVyKCkub25fZXJyb3IobWVz c2FnZSk7IH0KKy0KKy0gIC8vIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZyBv ZiB0aGUgb3V0cHV0IHJhbmdlLgorLSAgRk1UX0NPTlNURVhQUiBhdXRvIG91dCgpIC0+IGl0ZXJh dG9yIHsgcmV0dXJuIG91dF87IH0KKy0KKy0gIC8vIEFkdmFuY2VzIHRoZSBiZWdpbiBpdGVyYXRv ciB0byBgYGl0YGAuCistICB2b2lkIGFkdmFuY2VfdG8oaXRlcmF0b3IgaXQpIHsKKy0gICAgaWYg KCFkZXRhaWw6OmlzX2JhY2tfaW5zZXJ0X2l0ZXJhdG9yPGl0ZXJhdG9yPigpKSBvdXRfID0gaXQ7 CistICB9CistCistICBGTVRfQ09OU1RFWFBSIGF1dG8gbG9jYWxlKCkgLT4gZGV0YWlsOjpsb2Nh bGVfcmVmIHsgcmV0dXJuIGxvY187IH0KKy19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy PgorLXVzaW5nIGJ1ZmZlcl9jb250ZXh0ID0KKy0gICAgYmFzaWNfZm9ybWF0X2NvbnRleHQ8ZGV0 YWlsOjpidWZmZXJfYXBwZW5kZXI8Q2hhcj4sIENoYXI+OworLXVzaW5nIGZvcm1hdF9jb250ZXh0 ID0gYnVmZmVyX2NvbnRleHQ8Y2hhcj47CistCistLy8gV29ya2Fyb3VuZCBhbiBhbGlhcyBpc3N1 ZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzYyNzY3NTQ0LzQ3MTE2NC4KKy0jZGVmaW5l IEZNVF9CVUZGRVJfQ09OVEVYVChDaGFyKSBcCistICBiYXNpY19mb3JtYXRfY29udGV4dDxkZXRh aWw6OmJ1ZmZlcl9hcHBlbmRlcjxDaGFyPiwgQ2hhcj4KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUg VCwgdHlwZW5hbWUgQ2hhciA9IGNoYXI+CistdXNpbmcgaXNfZm9ybWF0dGFibGUgPSBib29sX2Nv bnN0YW50PAorLSAgICAhc3RkOjppc19iYXNlX29mPGRldGFpbDo6dW5mb3JtYXR0YWJsZSwKKy0g ICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShkZXRhaWw6OmFyZ19tYXBwZXI8YnVmZmVyX2Nv bnRleHQ8Q2hhcj4+KCkubWFwKAorLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2 YWw8VD4oKSkpPjo6dmFsdWUgJiYKKy0gICAgIWRldGFpbDo6aGFzX2ZhbGxiYWNrX2Zvcm1hdHRl cjxULCBDaGFyPjo6dmFsdWU+OworLQorLS8qKgorLSAgXHJzdAorLSAgQW4gYXJyYXkgb2YgcmVm ZXJlbmNlcyB0byBhcmd1bWVudHMuIEl0IGNhbiBiZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCBpbnRv CistICBgfmZtdDo6YmFzaWNfZm9ybWF0X2FyZ3NgIGZvciBwYXNzaW5nIGludG8gdHlwZS1lcmFz ZWQgZm9ybWF0dGluZyBmdW5jdGlvbnMKKy0gIHN1Y2ggYXMgYH5mbXQ6OnZmb3JtYXRgLgorLSAg XGVuZHJzdAorLSAqLworLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0LCB0eXBlbmFtZS4uLiBB cmdzPgorLWNsYXNzIGZvcm1hdF9hcmdfc3RvcmUKKy0jaWYgRk1UX0dDQ19WRVJTSU9OICYmIEZN VF9HQ0NfVkVSU0lPTiA8IDQwOQorLSAgICAvLyBXb3JrYXJvdW5kIGEgR0NDIHRlbXBsYXRlIGFy Z3VtZW50IHN1YnN0aXR1dGlvbiBidWcuCistICAgIDogcHVibGljIGJhc2ljX2Zvcm1hdF9hcmdz PENvbnRleHQ+CistI2VuZGlmCisteworLSBwcml2YXRlOgorLSAgc3RhdGljIGNvbnN0IHNpemVf dCBudW1fYXJncyA9IHNpemVvZi4uLihBcmdzKTsKKy0gIHN0YXRpYyBjb25zdCBzaXplX3QgbnVt X25hbWVkX2FyZ3MgPSBkZXRhaWw6OmNvdW50X25hbWVkX2FyZ3M8QXJncy4uLj4oKTsKKy0gIHN0 YXRpYyBjb25zdCBib29sIGlzX3BhY2tlZCA9IG51bV9hcmdzIDw9IGRldGFpbDo6bWF4X3BhY2tl ZF9hcmdzOworLQorLSAgdXNpbmcgdmFsdWVfdHlwZSA9IGNvbmRpdGlvbmFsX3Q8aXNfcGFja2Vk LCBkZXRhaWw6OnZhbHVlPENvbnRleHQ+LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYmFzaWNfZm9ybWF0X2FyZzxDb250ZXh0Pj47CistCistICBkZXRhaWw6OmFyZ19kYXRh PHZhbHVlX3R5cGUsIHR5cGVuYW1lIENvbnRleHQ6OmNoYXJfdHlwZSwgbnVtX2FyZ3MsCistICAg ICAgICAgICAgICAgICAgIG51bV9uYW1lZF9hcmdzPgorLSAgICAgIGRhdGFfOworLQorLSAgZnJp ZW5kIGNsYXNzIGJhc2ljX2Zvcm1hdF9hcmdzPENvbnRleHQ+OworLQorLSAgc3RhdGljIGNvbnN0 ZXhwciB1bnNpZ25lZCBsb25nIGxvbmcgZGVzYyA9CistICAgICAgKGlzX3BhY2tlZCA/IGRldGFp bDo6ZW5jb2RlX3R5cGVzPENvbnRleHQsIEFyZ3MuLi4+KCkKKy0gICAgICAgICAgICAgICAgIDog ZGV0YWlsOjppc191bnBhY2tlZF9iaXQgfCBudW1fYXJncykgfAorLSAgICAgIChudW1fbmFtZWRf YXJncyAhPSAwCistICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o ZGV0YWlsOjpoYXNfbmFtZWRfYXJnc19iaXQpCistICAgICAgICAgICA6IDApOworLQorLSBwdWJs aWM6CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVD4KKy0gIEZNVF9DT05TVEVYUFIgRk1UX0lO TElORSBmb3JtYXRfYXJnX3N0b3JlKFQmJi4uLiBhcmdzKQorLSAgICAgIDoKKy0jaWYgRk1UX0dD Q19WRVJTSU9OICYmIEZNVF9HQ0NfVkVSU0lPTiA8IDQwOQorLSAgICAgICAgYmFzaWNfZm9ybWF0 X2FyZ3M8Q29udGV4dD4oKnRoaXMpLAorLSNlbmRpZgorLSAgICAgICAgZGF0YV97ZGV0YWlsOjpt YWtlX2FyZzwKKy0gICAgICAgICAgICBpc19wYWNrZWQsIENvbnRleHQsCistICAgICAgICAgICAg ZGV0YWlsOjptYXBwZWRfdHlwZV9jb25zdGFudDxyZW1vdmVfY3ZyZWZfdDxUPiwgQ29udGV4dD46 OnZhbHVlPigKKy0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8VD4oYXJncykpLi4ufSB7CistICAg IGRldGFpbDo6aW5pdF9uYW1lZF9hcmdzKGRhdGFfLm5hbWVkX2FyZ3MoKSwgMCwgMCwgYXJncy4u Lik7CistICB9CistfTsKKy0KKy0vKioKKy0gIFxyc3QKKy0gIENvbnN0cnVjdHMgYSBgfmZtdDo6 Zm9ybWF0X2FyZ19zdG9yZWAgb2JqZWN0IHRoYXQgY29udGFpbnMgcmVmZXJlbmNlcyB0bworLSAg YXJndW1lbnRzIGFuZCBjYW4gYmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gYH5mbXQ6OmZvcm1h dF9hcmdzYC4gYENvbnRleHRgCistICBjYW4gYmUgb21pdHRlZCBpbiB3aGljaCBjYXNlIGl0IGRl ZmF1bHRzIHRvIGB+Zm10Ojpjb250ZXh0YC4KKy0gIFNlZSBgfmZtdDo6YXJnYCBmb3IgbGlmZXRp bWUgY29uc2lkZXJhdGlvbnMuCistICBcZW5kcnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1l IENvbnRleHQgPSBmb3JtYXRfY29udGV4dCwgdHlwZW5hbWUuLi4gQXJncz4KKy1jb25zdGV4cHIg YXV0byBtYWtlX2Zvcm1hdF9hcmdzKEFyZ3MmJi4uLiBhcmdzKQorLSAgICAtPiBmb3JtYXRfYXJn X3N0b3JlPENvbnRleHQsIHJlbW92ZV9jdnJlZl90PEFyZ3M+Li4uPiB7CistICByZXR1cm4ge3N0 ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLn07CistfQorLQorLS8qKgorLSAgXHJzdAorLSAgUmV0 dXJucyBhIG5hbWVkIGFyZ3VtZW50IHRvIGJlIHVzZWQgaW4gYSBmb3JtYXR0aW5nIGZ1bmN0aW9u LgorLSAgSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBhIGNhbGwgdG8gYSBmb3JtYXR0aW5nIGZ1 bmN0aW9uIG9yCistICBgZHluYW1pY19mb3JtYXRfYXJnX3N0b3JlOjpwdXNoX2JhY2tgLgorLQor LSAgKipFeGFtcGxlKio6OgorLQorLSAgICBmbXQ6OnByaW50KCJFbGFwc2VkIHRpbWU6IHtzOi4y Zn0gc2Vjb25kcyIsIGZtdDo6YXJnKCJzIiwgMS4yMykpOworLSAgXGVuZHJzdAorLSAqLworLXRl bXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUPgorLWlubGluZSBhdXRvIGFyZyhjb25z dCBDaGFyKiBuYW1lLCBjb25zdCBUJiBhcmcpIC0+IGRldGFpbDo6bmFtZWRfYXJnPENoYXIsIFQ+ IHsKKy0gIHN0YXRpY19hc3NlcnQoIWRldGFpbDo6aXNfbmFtZWRfYXJnPFQ+KCksICJuZXN0ZWQg bmFtZWQgYXJndW1lbnRzIik7CistICByZXR1cm4ge25hbWUsIGFyZ307CistfQorLQorLS8qKgor LSAgXHJzdAorLSAgQSB2aWV3IG9mIGEgY29sbGVjdGlvbiBvZiBmb3JtYXR0aW5nIGFyZ3VtZW50 cy4gVG8gYXZvaWQgbGlmZXRpbWUgaXNzdWVzIGl0CistICBzaG91bGQgb25seSBiZSB1c2VkIGFz IGEgcGFyYW1ldGVyIHR5cGUgaW4gdHlwZS1lcmFzZWQgZnVuY3Rpb25zIHN1Y2ggYXMKKy0gIGBg dmZvcm1hdGBgOjoKKy0KKy0gICAgdm9pZCB2bG9nKHN0cmluZ192aWV3IGZvcm1hdF9zdHIsIGZv cm1hdF9hcmdzIGFyZ3MpOyAgLy8gT0sKKy0gICAgZm9ybWF0X2FyZ3MgYXJncyA9IG1ha2VfZm9y bWF0X2FyZ3MoNDIpOyAgLy8gRXJyb3I6IGRhbmdsaW5nIHJlZmVyZW5jZQorLSAgXGVuZHJzdAor LSAqLworLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250ZXh0PiBjbGFzcyBiYXNpY19mb3JtYXRfYXJn cyB7CistIHB1YmxpYzoKKy0gIHVzaW5nIHNpemVfdHlwZSA9IGludDsKKy0gIHVzaW5nIGZvcm1h dF9hcmcgPSBiYXNpY19mb3JtYXRfYXJnPENvbnRleHQ+OworLQorLSBwcml2YXRlOgorLSAgLy8g QSBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgZm9ybWF0dGluZyBh cmd1bWVudHMuCistICAvLyBJZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBsZXNzIG9yIGVx dWFsIHRvIG1heF9wYWNrZWRfYXJncyB0aGVuCistICAvLyBhcmd1bWVudCB0eXBlcyBhcmUgcGFz c2VkIGluIHRoZSBkZXNjcmlwdG9yLiBUaGlzIHJlZHVjZXMgYmluYXJ5IGNvZGUgc2l6ZQorLSAg Ly8gcGVyIGZvcm1hdHRpbmcgZnVuY3Rpb24gY2FsbC4KKy0gIHVuc2lnbmVkIGxvbmcgbG9uZyBk ZXNjXzsKKy0gIHVuaW9uIHsKKy0gICAgLy8gSWYgaXNfcGFja2VkKCkgcmV0dXJucyB0cnVlIHRo ZW4gYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdmFsdWVzXzsKKy0gICAgLy8gb3RoZXJ3 aXNlIHRoZXkgYXJlIHN0b3JlZCBpbiBhcmdzXy4gVGhpcyBpcyBkb25lIHRvIGltcHJvdmUgY2Fj aGUKKy0gICAgLy8gbG9jYWxpdHkgYW5kIHJlZHVjZSBjb21waWxlZCBjb2RlIHNpemUgc2luY2Ug c3RvcmluZyBsYXJnZXIgb2JqZWN0cworLSAgICAvLyBtYXkgcmVxdWlyZSBtb3JlIGNvZGUgKGF0 IGxlYXN0IG9uIHg4Ni02NCkgZXZlbiBpZiB0aGUgc2FtZSBhbW91bnQgb2YKKy0gICAgLy8gZGF0 YSBpcyBhY3R1YWxseSBjb3BpZWQgdG8gc3RhY2suIEl0IHNhdmVzIH4xMCUgb24gdGhlIGJsb2F0 IHRlc3QuCistICAgIGNvbnN0IGRldGFpbDo6dmFsdWU8Q29udGV4dD4qIHZhbHVlc187CistICAg IGNvbnN0IGZvcm1hdF9hcmcqIGFyZ3NfOworLSAgfTsKKy0KKy0gIGNvbnN0ZXhwciBhdXRvIGlz X3BhY2tlZCgpIGNvbnN0IC0+IGJvb2wgeworLSAgICByZXR1cm4gKGRlc2NfICYgZGV0YWlsOjpp c191bnBhY2tlZF9iaXQpID09IDA7CistICB9CistICBhdXRvIGhhc19uYW1lZF9hcmdzKCkgY29u c3QgLT4gYm9vbCB7CistICAgIHJldHVybiAoZGVzY18gJiBkZXRhaWw6Omhhc19uYW1lZF9hcmdz X2JpdCkgIT0gMDsKKy0gIH0KKy0KKy0gIEZNVF9DT05TVEVYUFIgYXV0byB0eXBlKGludCBpbmRl eCkgY29uc3QgLT4gZGV0YWlsOjp0eXBlIHsKKy0gICAgaW50IHNoaWZ0ID0gaW5kZXggKiBkZXRh aWw6OnBhY2tlZF9hcmdfYml0czsKKy0gICAgdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBkZXRh aWw6OnBhY2tlZF9hcmdfYml0cykgLSAxOworLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGV0YWls Ojp0eXBlPigoZGVzY18gPj4gc2hpZnQpICYgbWFzayk7CistICB9CistCistICBjb25zdGV4cHIg Rk1UX0lOTElORSBiYXNpY19mb3JtYXRfYXJncyh1bnNpZ25lZCBsb25nIGxvbmcgZGVzYywKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGFpbDo6dmFs dWU8Q29udGV4dD4qIHZhbHVlcykKKy0gICAgICA6IGRlc2NfKGRlc2MpLCB2YWx1ZXNfKHZhbHVl cykge30KKy0gIGNvbnN0ZXhwciBiYXNpY19mb3JtYXRfYXJncyh1bnNpZ25lZCBsb25nIGxvbmcg ZGVzYywgY29uc3QgZm9ybWF0X2FyZyogYXJncykKKy0gICAgICA6IGRlc2NfKGRlc2MpLCBhcmdz XyhhcmdzKSB7fQorLQorLSBwdWJsaWM6CistICBjb25zdGV4cHIgYmFzaWNfZm9ybWF0X2FyZ3Mo KSA6IGRlc2NfKDApLCBhcmdzXyhudWxscHRyKSB7fQorLQorLSAgLyoqCistICAgXHJzdAorLSAg IENvbnN0cnVjdHMgYSBgYmFzaWNfZm9ybWF0X2FyZ3NgIG9iamVjdCBmcm9tIGB+Zm10Ojpmb3Jt YXRfYXJnX3N0b3JlYC4KKy0gICBcZW5kcnN0CistICAgKi8KKy0gIHRlbXBsYXRlIDx0eXBlbmFt ZS4uLiBBcmdzPgorLSAgY29uc3RleHByIEZNVF9JTkxJTkUgYmFzaWNfZm9ybWF0X2FyZ3MoCist ICAgICAgY29uc3QgZm9ybWF0X2FyZ19zdG9yZTxDb250ZXh0LCBBcmdzLi4uPiYgc3RvcmUpCist ICAgICAgOiBiYXNpY19mb3JtYXRfYXJncyhmb3JtYXRfYXJnX3N0b3JlPENvbnRleHQsIEFyZ3Mu Li4+OjpkZXNjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuZGF0YV8uYXJncygp KSB7fQorLQorLSAgLyoqCistICAgXHJzdAorLSAgIENvbnN0cnVjdHMgYSBgYmFzaWNfZm9ybWF0 X2FyZ3NgIG9iamVjdCBmcm9tCistICAgYH5mbXQ6OmR5bmFtaWNfZm9ybWF0X2FyZ19zdG9yZWAu CistICAgXGVuZHJzdAorLSAgICovCistICBjb25zdGV4cHIgRk1UX0lOTElORSBiYXNpY19mb3Jt YXRfYXJncygKKy0gICAgICBjb25zdCBkeW5hbWljX2Zvcm1hdF9hcmdfc3RvcmU8Q29udGV4dD4m IHN0b3JlKQorLSAgICAgIDogYmFzaWNfZm9ybWF0X2FyZ3Moc3RvcmUuZ2V0X3R5cGVzKCksIHN0 b3JlLmRhdGEoKSkge30KKy0KKy0gIC8qKgorLSAgIFxyc3QKKy0gICBDb25zdHJ1Y3RzIGEgYGJh c2ljX2Zvcm1hdF9hcmdzYCBvYmplY3QgZnJvbSBhIGR5bmFtaWMgc2V0IG9mIGFyZ3VtZW50cy4K Ky0gICBcZW5kcnN0CistICAgKi8KKy0gIGNvbnN0ZXhwciBiYXNpY19mb3JtYXRfYXJncyhjb25z dCBmb3JtYXRfYXJnKiBhcmdzLCBpbnQgY291bnQpCistICAgICAgOiBiYXNpY19mb3JtYXRfYXJn cyhkZXRhaWw6OmlzX3VucGFja2VkX2JpdCB8IGRldGFpbDo6dG9fdW5zaWduZWQoY291bnQpLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncykge30KKy0KKy0gIC8qKiBSZXR1cm5zIHRo ZSBhcmd1bWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuICovCistICBGTVRfQ09OU1RFWFBSIGF1 dG8gZ2V0KGludCBpZCkgY29uc3QgLT4gZm9ybWF0X2FyZyB7CistICAgIGZvcm1hdF9hcmcgYXJn OworLSAgICBpZiAoIWlzX3BhY2tlZCgpKSB7CistICAgICAgaWYgKGlkIDwgbWF4X3NpemUoKSkg YXJnID0gYXJnc19baWRdOworLSAgICAgIHJldHVybiBhcmc7CistICAgIH0KKy0gICAgaWYgKGlk ID49IGRldGFpbDo6bWF4X3BhY2tlZF9hcmdzKSByZXR1cm4gYXJnOworLSAgICBhcmcudHlwZV8g PSB0eXBlKGlkKTsKKy0gICAgaWYgKGFyZy50eXBlXyA9PSBkZXRhaWw6OnR5cGU6Om5vbmVfdHlw ZSkgcmV0dXJuIGFyZzsKKy0gICAgYXJnLnZhbHVlXyA9IHZhbHVlc19baWRdOworLSAgICByZXR1 cm4gYXJnOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CistICBhdXRvIGdl dChiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBuYW1lKSBjb25zdCAtPiBmb3JtYXRfYXJnIHsKKy0g ICAgaW50IGlkID0gZ2V0X2lkKG5hbWUpOworLSAgICByZXR1cm4gaWQgPj0gMCA/IGdldChpZCkg OiBmb3JtYXRfYXJnKCk7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy0g IGF1dG8gZ2V0X2lkKGJhc2ljX3N0cmluZ192aWV3PENoYXI+IG5hbWUpIGNvbnN0IC0+IGludCB7 CistICAgIGlmICghaGFzX25hbWVkX2FyZ3MoKSkgcmV0dXJuIC0xOworLSAgICBjb25zdCBhdXRv JiBuYW1lZF9hcmdzID0KKy0gICAgICAgIChpc19wYWNrZWQoKSA/IHZhbHVlc19bLTFdIDogYXJn c19bLTFdLnZhbHVlXykubmFtZWRfYXJnczsKKy0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu YW1lZF9hcmdzLnNpemU7ICsraSkgeworLSAgICAgIGlmIChuYW1lZF9hcmdzLmRhdGFbaV0ubmFt ZSA9PSBuYW1lKSByZXR1cm4gbmFtZWRfYXJncy5kYXRhW2ldLmlkOworLSAgICB9CistICAgIHJl dHVybiAtMTsKKy0gIH0KKy0KKy0gIGF1dG8gbWF4X3NpemUoKSBjb25zdCAtPiBpbnQgeworLSAg ICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3BhY2tlZCA9IGRldGFpbDo6bWF4X3BhY2tlZF9hcmdz OworLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihpc19wYWNrZWQoKSA/IG1heF9wYWNrZWQK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXNjXyAmIH5kZXRh aWw6OmlzX3VucGFja2VkX2JpdCk7CistICB9CistfTsKKy0KKy0vKiogQW4gYWxpYXMgdG8gYGBi YXNpY19mb3JtYXRfYXJnczxmb3JtYXRfY29udGV4dD5gYC4gKi8KKy0vLyBBIHNlcGFyYXRlIHR5 cGUgd291bGQgcmVzdWx0IGluIHNob3J0ZXIgc3ltYm9scyBidXQgYnJlYWsgQUJJIGNvbXBhdGli aWxpdHkKKy0vLyBiZXR3ZWVuIGNsYW5nIGFuZCBnY2Mgb24gQVJNICgjMTkxOSkuCistdXNpbmcg Zm9ybWF0X2FyZ3MgPSBiYXNpY19mb3JtYXRfYXJnczxmb3JtYXRfY29udGV4dD47CistCistLy8g V2UgY2Fubm90IHVzZSBlbnVtIGNsYXNzZXMgYXMgYml0IGZpZWxkcyBiZWNhdXNlIG9mIGEgZ2Nj IGJ1ZworLS8vIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYx NDE0LgorLW5hbWVzcGFjZSBhbGlnbiB7CistZW51bSB0eXBlIHsgbm9uZSwgbGVmdCwgcmlnaHQs IGNlbnRlciwgbnVtZXJpYyB9OworLX0KKy11c2luZyBhbGlnbl90ID0gYWxpZ246OnR5cGU7Cist bmFtZXNwYWNlIHNpZ24geworLWVudW0gdHlwZSB7IG5vbmUsIG1pbnVzLCBwbHVzLCBzcGFjZSB9 OworLX0KKy11c2luZyBzaWduX3QgPSBzaWduOjp0eXBlOworLQorLUZNVF9CRUdJTl9ERVRBSUxf TkFNRVNQQUNFCistCistLy8gV29ya2Fyb3VuZCBhbiBhcnJheSBpbml0aWFsaXphdGlvbiBpc3N1 ZSBpbiBnY2MgNC44LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBzdHJ1Y3QgZmlsbF90IHsK Ky0gcHJpdmF0ZToKKy0gIGVudW0geyBtYXhfc2l6ZSA9IDQgfTsKKy0gIENoYXIgZGF0YV9bbWF4 X3NpemVdID0ge0NoYXIoJyAnKSwgQ2hhcigwKSwgQ2hhcigwKSwgQ2hhcigwKX07CistICB1bnNp Z25lZCBjaGFyIHNpemVfID0gMTsKKy0KKy0gcHVibGljOgorLSAgRk1UX0NPTlNURVhQUiB2b2lk IG9wZXJhdG9yPShiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBzKSB7CistICAgIGF1dG8gc2l6ZSA9 IHMuc2l6ZSgpOworLSAgICBpZiAoc2l6ZSA+IG1heF9zaXplKSByZXR1cm4gdGhyb3dfZm9ybWF0 X2Vycm9yKCJpbnZhbGlkIGZpbGwiKTsKKy0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl OyArK2kpIGRhdGFfW2ldID0gc1tpXTsKKy0gICAgc2l6ZV8gPSBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBjaGFyPihzaXplKTsKKy0gIH0KKy0KKy0gIGNvbnN0ZXhwciBhdXRvIHNpemUoKSBjb25zdCAt PiBzaXplX3QgeyByZXR1cm4gc2l6ZV87IH0KKy0gIGNvbnN0ZXhwciBhdXRvIGRhdGEoKSBjb25z dCAtPiBjb25zdCBDaGFyKiB7IHJldHVybiBkYXRhXzsgfQorLQorLSAgRk1UX0NPTlNURVhQUiBh dXRvIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSAtPiBDaGFyJiB7IHJldHVybiBkYXRhX1tpbmRl eF07IH0KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29u c3QgLT4gY29uc3QgQ2hhciYgeworLSAgICByZXR1cm4gZGF0YV9baW5kZXhdOworLSAgfQorLX07 CistRk1UX0VORF9ERVRBSUxfTkFNRVNQQUNFCistCistZW51bSBjbGFzcyBwcmVzZW50YXRpb25f dHlwZSA6IHVuc2lnbmVkIGNoYXIgeworLSAgbm9uZSwKKy0gIC8vIEludGVnZXIgdHlwZXMgc2hv dWxkIGdvIGZpcnN0LAorLSAgZGVjLCAgICAgICAgICAgICAvLyAnZCcKKy0gIG9jdCwgICAgICAg ICAgICAgLy8gJ28nCistICBoZXhfbG93ZXIsICAgICAgIC8vICd4JworLSAgaGV4X3VwcGVyLCAg ICAgICAvLyAnWCcKKy0gIGJpbl9sb3dlciwgICAgICAgLy8gJ2InCistICBiaW5fdXBwZXIsICAg ICAgIC8vICdCJworLSAgaGV4ZmxvYXRfbG93ZXIsICAvLyAnYScKKy0gIGhleGZsb2F0X3VwcGVy LCAgLy8gJ0EnCistICBleHBfbG93ZXIsICAgICAgIC8vICdlJworLSAgZXhwX3VwcGVyLCAgICAg ICAvLyAnRScKKy0gIGZpeGVkX2xvd2VyLCAgICAgLy8gJ2YnCistICBmaXhlZF91cHBlciwgICAg IC8vICdGJworLSAgZ2VuZXJhbF9sb3dlciwgICAvLyAnZycKKy0gIGdlbmVyYWxfdXBwZXIsICAg Ly8gJ0cnCistICBjaHIsICAgICAgICAgICAgIC8vICdjJworLSAgc3RyaW5nLCAgICAgICAgICAv LyAncycKKy0gIHBvaW50ZXIgICAgICAgICAgLy8gJ3AnCistfTsKKy0KKy0vLyBGb3JtYXQgc3Bl Y2lmaWVycyBmb3IgYnVpbHQtaW4gYW5kIHN0cmluZyB0eXBlcy4KKy10ZW1wbGF0ZSA8dHlwZW5h bWUgQ2hhcj4gc3RydWN0IGJhc2ljX2Zvcm1hdF9zcGVjcyB7CistICBpbnQgd2lkdGg7CistICBp bnQgcHJlY2lzaW9uOworLSAgcHJlc2VudGF0aW9uX3R5cGUgdHlwZTsKKy0gIGFsaWduX3QgYWxp Z24gOiA0OworLSAgc2lnbl90IHNpZ24gOiAzOworLSAgYm9vbCBhbHQgOiAxOyAgLy8gQWx0ZXJu YXRlIGZvcm0gKCcjJykuCistICBib29sIGxvY2FsaXplZCA6IDE7CistICBkZXRhaWw6OmZpbGxf dDxDaGFyPiBmaWxsOworLQorLSAgY29uc3RleHByIGJhc2ljX2Zvcm1hdF9zcGVjcygpCistICAg ICAgOiB3aWR0aCgwKSwKKy0gICAgICAgIHByZWNpc2lvbigtMSksCistICAgICAgICB0eXBlKHBy ZXNlbnRhdGlvbl90eXBlOjpub25lKSwKKy0gICAgICAgIGFsaWduKGFsaWduOjpub25lKSwKKy0g ICAgICAgIHNpZ24oc2lnbjo6bm9uZSksCistICAgICAgICBhbHQoZmFsc2UpLAorLSAgICAgICAg bG9jYWxpemVkKGZhbHNlKSB7fQorLX07CistCistdXNpbmcgZm9ybWF0X3NwZWNzID0gYmFzaWNf Zm9ybWF0X3NwZWNzPGNoYXI+OworLQorLUZNVF9CRUdJTl9ERVRBSUxfTkFNRVNQQUNFCistCist ZW51bSBjbGFzcyBhcmdfaWRfa2luZCB7IG5vbmUsIGluZGV4LCBuYW1lIH07CistCistLy8gQW4g YXJndW1lbnQgcmVmZXJlbmNlLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBzdHJ1Y3QgYXJn X3JlZiB7CistICBGTVRfQ09OU1RFWFBSIGFyZ19yZWYoKSA6IGtpbmQoYXJnX2lkX2tpbmQ6Om5v bmUpLCB2YWwoKSB7fQorLQorLSAgRk1UX0NPTlNURVhQUiBleHBsaWNpdCBhcmdfcmVmKGludCBp bmRleCkKKy0gICAgICA6IGtpbmQoYXJnX2lkX2tpbmQ6OmluZGV4KSwgdmFsKGluZGV4KSB7fQor LSAgRk1UX0NPTlNURVhQUiBleHBsaWNpdCBhcmdfcmVmKGJhc2ljX3N0cmluZ192aWV3PENoYXI+ IG5hbWUpCistICAgICAgOiBraW5kKGFyZ19pZF9raW5kOjpuYW1lKSwgdmFsKG5hbWUpIHt9Cist CistICBGTVRfQ09OU1RFWFBSIGF1dG8gb3BlcmF0b3I9KGludCBpZHgpIC0+IGFyZ19yZWYmIHsK Ky0gICAga2luZCA9IGFyZ19pZF9raW5kOjppbmRleDsKKy0gICAgdmFsLmluZGV4ID0gaWR4Owor LSAgICByZXR1cm4gKnRoaXM7CistICB9CistCistICBhcmdfaWRfa2luZCBraW5kOworLSAgdW5p b24gdmFsdWUgeworLSAgICBGTVRfQ09OU1RFWFBSIHZhbHVlKGludCBpZCA9IDApIDogaW5kZXh7 aWR9IHt9CistICAgIEZNVF9DT05TVEVYUFIgdmFsdWUoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4g bikgOiBuYW1lKG4pIHt9CistCistICAgIGludCBpbmRleDsKKy0gICAgYmFzaWNfc3RyaW5nX3Zp ZXc8Q2hhcj4gbmFtZTsKKy0gIH0gdmFsOworLX07CistCistLy8gRm9ybWF0IHNwZWNpZmllcnMg d2l0aCB3aWR0aCBhbmQgcHJlY2lzaW9uIHJlc29sdmVkIGF0IGZvcm1hdHRpbmcgcmF0aGVyCist Ly8gdGhhbiBwYXJzaW5nIHRpbWUgdG8gYWxsb3cgcmUtdXNpbmcgdGhlIHNhbWUgcGFyc2VkIHNw ZWNpZmllcnMgd2l0aAorLS8vIGRpZmZlcmVudCBzZXRzIG9mIGFyZ3VtZW50cyAocHJlY29tcGls YXRpb24gb2YgZm9ybWF0IHN0cmluZ3MpLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLXN0 cnVjdCBkeW5hbWljX2Zvcm1hdF9zcGVjcyA6IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiB7Cist ICBhcmdfcmVmPENoYXI+IHdpZHRoX3JlZjsKKy0gIGFyZ19yZWY8Q2hhcj4gcHJlY2lzaW9uX3Jl ZjsKKy19OworLQorLXN0cnVjdCBhdXRvX2lkIHt9OworLQorLS8vIEEgZm9ybWF0IHNwZWNpZmll ciBoYW5kbGVyIHRoYXQgc2V0cyBmaWVsZHMgaW4gYmFzaWNfZm9ybWF0X3NwZWNzLgorLXRlbXBs YXRlIDx0eXBlbmFtZSBDaGFyPiBjbGFzcyBzcGVjc19zZXR0ZXIgeworLSBwcm90ZWN0ZWQ6Cist ICBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNzXzsKKy0KKy0gcHVibGljOgorLSAgZXhw bGljaXQgRk1UX0NPTlNURVhQUiBzcGVjc19zZXR0ZXIoYmFzaWNfZm9ybWF0X3NwZWNzPENoYXI+ JiBzcGVjcykKKy0gICAgICA6IHNwZWNzXyhzcGVjcykge30KKy0KKy0gIEZNVF9DT05TVEVYUFIg c3BlY3Nfc2V0dGVyKGNvbnN0IHNwZWNzX3NldHRlciYgb3RoZXIpCistICAgICAgOiBzcGVjc18o b3RoZXIuc3BlY3NfKSB7fQorLQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2FsaWduKGFsaWdu X3QgYWxpZ24pIHsgc3BlY3NfLmFsaWduID0gYWxpZ247IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9p ZCBvbl9maWxsKGJhc2ljX3N0cmluZ192aWV3PENoYXI+IGZpbGwpIHsKKy0gICAgc3BlY3NfLmZp bGwgPSBmaWxsOworLSAgfQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3NpZ24oc2lnbl90IHMp IHsgc3BlY3NfLnNpZ24gPSBzOyB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25faGFzaCgpIHsg c3BlY3NfLmFsdCA9IHRydWU7IH0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9sb2NhbGl6ZWQo KSB7IHNwZWNzXy5sb2NhbGl6ZWQgPSB0cnVlOyB9CistCistICBGTVRfQ09OU1RFWFBSIHZvaWQg b25femVybygpIHsKKy0gICAgaWYgKHNwZWNzXy5hbGlnbiA9PSBhbGlnbjo6bm9uZSkgc3BlY3Nf LmFsaWduID0gYWxpZ246Om51bWVyaWM7CistICAgIHNwZWNzXy5maWxsWzBdID0gQ2hhcignMCcp OworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3dpZHRoKGludCB3aWR0aCkgeyBz cGVjc18ud2lkdGggPSB3aWR0aDsgfQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3ByZWNpc2lv bihpbnQgcHJlY2lzaW9uKSB7CistICAgIHNwZWNzXy5wcmVjaXNpb24gPSBwcmVjaXNpb247Cist ICB9CistICBGTVRfQ09OU1RFWFBSIHZvaWQgZW5kX3ByZWNpc2lvbigpIHt9CistCistICBGTVRf Q09OU1RFWFBSIHZvaWQgb25fdHlwZShwcmVzZW50YXRpb25fdHlwZSB0eXBlKSB7IHNwZWNzXy50 eXBlID0gdHlwZTsgfQorLX07CistCistLy8gRm9ybWF0IHNwZWMgaGFuZGxlciB0aGF0IHNhdmVz IHJlZmVyZW5jZXMgdG8gYXJndW1lbnRzIHJlcHJlc2VudGluZyBkeW5hbWljCistLy8gd2lkdGgg YW5kIHByZWNpc2lvbiB0byBiZSByZXNvbHZlZCBhdCBmb3JtYXR0aW5nIHRpbWUuCistdGVtcGxh dGUgPHR5cGVuYW1lIFBhcnNlQ29udGV4dD4KKy1jbGFzcyBkeW5hbWljX3NwZWNzX2hhbmRsZXIK Ky0gICAgOiBwdWJsaWMgc3BlY3Nfc2V0dGVyPHR5cGVuYW1lIFBhcnNlQ29udGV4dDo6Y2hhcl90 eXBlPiB7CistIHB1YmxpYzoKKy0gIHVzaW5nIGNoYXJfdHlwZSA9IHR5cGVuYW1lIFBhcnNlQ29u dGV4dDo6Y2hhcl90eXBlOworLQorLSAgRk1UX0NPTlNURVhQUiBkeW5hbWljX3NwZWNzX2hhbmRs ZXIoZHluYW1pY19mb3JtYXRfc3BlY3M8Y2hhcl90eXBlPiYgc3BlY3MsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZUNvbnRleHQmIGN0eCkKKy0gICAgICA6IHNw ZWNzX3NldHRlcjxjaGFyX3R5cGU+KHNwZWNzKSwgc3BlY3NfKHNwZWNzKSwgY29udGV4dF8oY3R4 KSB7fQorLQorLSAgRk1UX0NPTlNURVhQUiBkeW5hbWljX3NwZWNzX2hhbmRsZXIoY29uc3QgZHlu YW1pY19zcGVjc19oYW5kbGVyJiBvdGhlcikKKy0gICAgICA6IHNwZWNzX3NldHRlcjxjaGFyX3R5 cGU+KG90aGVyKSwKKy0gICAgICAgIHNwZWNzXyhvdGhlci5zcGVjc18pLAorLSAgICAgICAgY29u dGV4dF8ob3RoZXIuY29udGV4dF8pIHt9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSWQ+IEZN VF9DT05TVEVYUFIgdm9pZCBvbl9keW5hbWljX3dpZHRoKElkIGFyZ19pZCkgeworLSAgICBzcGVj c18ud2lkdGhfcmVmID0gbWFrZV9hcmdfcmVmKGFyZ19pZCk7CistICB9CistCistICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgSWQ+IEZNVF9DT05TVEVYUFIgdm9pZCBvbl9keW5hbWljX3ByZWNpc2lvbihJ ZCBhcmdfaWQpIHsKKy0gICAgc3BlY3NfLnByZWNpc2lvbl9yZWYgPSBtYWtlX2FyZ19yZWYoYXJn X2lkKTsKKy0gIH0KKy0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9lcnJvcihjb25zdCBjaGFy KiBtZXNzYWdlKSB7CistICAgIGNvbnRleHRfLm9uX2Vycm9yKG1lc3NhZ2UpOworLSAgfQorLQor LSBwcml2YXRlOgorLSAgZHluYW1pY19mb3JtYXRfc3BlY3M8Y2hhcl90eXBlPiYgc3BlY3NfOwor LSAgUGFyc2VDb250ZXh0JiBjb250ZXh0XzsKKy0KKy0gIHVzaW5nIGFyZ19yZWZfdHlwZSA9IGFy Z19yZWY8Y2hhcl90eXBlPjsKKy0KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBtYWtlX2FyZ19yZWYo aW50IGFyZ19pZCkgLT4gYXJnX3JlZl90eXBlIHsKKy0gICAgY29udGV4dF8uY2hlY2tfYXJnX2lk KGFyZ19pZCk7CistICAgIHJldHVybiBhcmdfcmVmX3R5cGUoYXJnX2lkKTsKKy0gIH0KKy0KKy0g IEZNVF9DT05TVEVYUFIgYXV0byBtYWtlX2FyZ19yZWYoYXV0b19pZCkgLT4gYXJnX3JlZl90eXBl IHsKKy0gICAgcmV0dXJuIGFyZ19yZWZfdHlwZShjb250ZXh0Xy5uZXh0X2FyZ19pZCgpKTsKKy0g IH0KKy0KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBtYWtlX2FyZ19yZWYoYmFzaWNfc3RyaW5nX3Zp ZXc8Y2hhcl90eXBlPiBhcmdfaWQpCistICAgICAgLT4gYXJnX3JlZl90eXBlIHsKKy0gICAgY29u dGV4dF8uY2hlY2tfYXJnX2lkKGFyZ19pZCk7CistICAgIGJhc2ljX3N0cmluZ192aWV3PGNoYXJf dHlwZT4gZm9ybWF0X3N0cigKKy0gICAgICAgIGNvbnRleHRfLmJlZ2luKCksIHRvX3Vuc2lnbmVk KGNvbnRleHRfLmVuZCgpIC0gY29udGV4dF8uYmVnaW4oKSkpOworLSAgICByZXR1cm4gYXJnX3Jl Zl90eXBlKGFyZ19pZCk7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4g Y29uc3RleHByIGJvb2wgaXNfYXNjaWlfbGV0dGVyKENoYXIgYykgeworLSAgcmV0dXJuIChjID49 ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKTsKKy19CistCistLy8g Q29udmVydHMgYSBjaGFyYWN0ZXIgdG8gQVNDSUkuIFJldHVybnMgYSBudW1iZXIgPiAxMjcgb24g Y29udmVyc2lvbiBmYWlsdXJlLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCBGTVRfRU5BQkxF X0lGKHN0ZDo6aXNfaW50ZWdyYWw8Q2hhcj46OnZhbHVlKT4KKy1jb25zdGV4cHIgYXV0byB0b19h c2NpaShDaGFyIHZhbHVlKSAtPiBDaGFyIHsKKy0gIHJldHVybiB2YWx1ZTsKKy19CistdGVtcGxh dGUgPHR5cGVuYW1lIENoYXIsIEZNVF9FTkFCTEVfSUYoc3RkOjppc19lbnVtPENoYXI+Ojp2YWx1 ZSk+CistY29uc3RleHByIGF1dG8gdG9fYXNjaWkoQ2hhciB2YWx1ZSkgLT4KKy0gICAgdHlwZW5h bWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8Q2hhcj46OnR5cGUgeworLSAgcmV0dXJuIHZhbHVlOwor LX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gY29k ZV9wb2ludF9sZW5ndGgoY29uc3QgQ2hhciogYmVnaW4pIC0+IGludCB7CistICBpZiAoY29uc3Rf Y2hlY2soc2l6ZW9mKENoYXIpICE9IDEpKSByZXR1cm4gMTsKKy0gIGF1dG8gbGVuZ3RocyA9Cist ICAgICAgIlwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDBcMFwwXDBcMFwwXDBcMFwy XDJcMlwyXDNcM1w0IjsKKy0gIGludCBsZW4gPSBsZW5ndGhzW3N0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KCpiZWdpbikgPj4gM107CistCistICAvLyBDb21wdXRlIHRoZSBwb2ludGVyIHRvIHRo ZSBuZXh0IGNoYXJhY3RlciBlYXJseSBzbyB0aGF0IHRoZSBuZXh0CistICAvLyBpdGVyYXRpb24g Y2FuIHN0YXJ0IHdvcmtpbmcgb24gdGhlIG5leHQgY2hhcmFjdGVyLiBOZWl0aGVyIENsYW5nCist ICAvLyBub3IgR0NDIGZpZ3VyZSBvdXQgdGhpcyByZW9yZGVyaW5nIG9uIHRoZWlyIG93bi4KKy0g IHJldHVybiBsZW4gKyAhbGVuOworLX0KKy0KKy0vLyBSZXR1cm4gdGhlIHJlc3VsdCB2aWEgdGhl IG91dCBwYXJhbSB0byB3b3JrYXJvdW5kIGdjYyBidWcgNzc1MzkuCistdGVtcGxhdGUgPGJvb2wg SVNfQ09OU1RFWFBSLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHIgPSBjb25zdCBUKj4KKy1GTVRf Q09OU1RFWFBSIGF1dG8gZmluZChQdHIgZmlyc3QsIFB0ciBsYXN0LCBUIHZhbHVlLCBQdHImIG91 dCkgLT4gYm9vbCB7CistICBmb3IgKG91dCA9IGZpcnN0OyBvdXQgIT0gbGFzdDsgKytvdXQpIHsK Ky0gICAgaWYgKCpvdXQgPT0gdmFsdWUpIHJldHVybiB0cnVlOworLSAgfQorLSAgcmV0dXJuIGZh bHNlOworLX0KKy0KKy10ZW1wbGF0ZSA8PgorLWlubGluZSBhdXRvIGZpbmQ8ZmFsc2UsIGNoYXI+ KGNvbnN0IGNoYXIqIGZpcnN0LCBjb25zdCBjaGFyKiBsYXN0LCBjaGFyIHZhbHVlLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqJiBvdXQpIC0+IGJvb2wgeworLSAg b3V0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KAorLSAgICAgIHN0ZDo6bWVtY2hyKGZpcnN0 LCB2YWx1ZSwgdG9fdW5zaWduZWQobGFzdCAtIGZpcnN0KSkpOworLSAgcmV0dXJuIG91dCAhPSBu dWxscHRyOworLX0KKy0KKy0vLyBQYXJzZXMgdGhlIHJhbmdlIFtiZWdpbiwgZW5kKSBhcyBhbiB1 bnNpZ25lZCBpbnRlZ2VyLiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMKKy0vLyB0aGF0IHRoZSByYW5n ZSBpcyBub24tZW1wdHkgYW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYSBkaWdpdC4KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gcGFyc2Vfbm9ubmVnYXRp dmVfaW50KGNvbnN0IENoYXIqJiBiZWdpbiwgY29uc3QgQ2hhciogZW5kLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVycm9yX3ZhbHVlKSBub2V4Y2VwdCAt PiBpbnQgeworLSAgRk1UX0FTU0VSVChiZWdpbiAhPSBlbmQgJiYgJzAnIDw9ICpiZWdpbiAmJiAq YmVnaW4gPD0gJzknLCAiIik7CistICB1bnNpZ25lZCB2YWx1ZSA9IDAsIHByZXYgPSAwOworLSAg YXV0byBwID0gYmVnaW47CistICBkbyB7CistICAgIHByZXYgPSB2YWx1ZTsKKy0gICAgdmFsdWUg PSB2YWx1ZSAqIDEwICsgdW5zaWduZWQoKnAgLSAnMCcpOworLSAgICArK3A7CistICB9IHdoaWxl IChwICE9IGVuZCAmJiAnMCcgPD0gKnAgJiYgKnAgPD0gJzknKTsKKy0gIGF1dG8gbnVtX2RpZ2l0 cyA9IHAgLSBiZWdpbjsKKy0gIGJlZ2luID0gcDsKKy0gIGlmIChudW1fZGlnaXRzIDw9IHN0ZDo6 bnVtZXJpY19saW1pdHM8aW50Pjo6ZGlnaXRzMTApCistICAgIHJldHVybiBzdGF0aWNfY2FzdDxp bnQ+KHZhbHVlKTsKKy0gIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KKy0gIGNvbnN0IHVuc2lnbmVk IG1heCA9IHRvX3Vuc2lnbmVkKChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCkoKSk7Cist ICByZXR1cm4gbnVtX2RpZ2l0cyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46OmRpZ2l0czEw ICsgMSAmJgorLSAgICAgICAgICAgICAgICAgcHJldiAqIDEwdWxsICsgdW5zaWduZWQocFstMV0g LSAnMCcpIDw9IG1heAorLSAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGludD4odmFsdWUpCist ICAgICAgICAgICAgIDogZXJyb3JfdmFsdWU7CistfQorLQorLS8vIFBhcnNlcyBmaWxsIGFuZCBh bGlnbm1lbnQuCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIEhhbmRsZXI+Cist Rk1UX0NPTlNURVhQUiBhdXRvIHBhcnNlX2FsaWduKGNvbnN0IENoYXIqIGJlZ2luLCBjb25zdCBD aGFyKiBlbmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXImJiBoYW5k bGVyKSAtPiBjb25zdCBDaGFyKiB7CistICBGTVRfQVNTRVJUKGJlZ2luICE9IGVuZCwgIiIpOwor LSAgYXV0byBhbGlnbiA9IGFsaWduOjpub25lOworLSAgYXV0byBwID0gYmVnaW4gKyBjb2RlX3Bv aW50X2xlbmd0aChiZWdpbik7CistICBpZiAocCA+PSBlbmQpIHAgPSBiZWdpbjsKKy0gIGZvciAo OzspIHsKKy0gICAgc3dpdGNoICh0b19hc2NpaSgqcCkpIHsKKy0gICAgY2FzZSAnPCc6CistICAg ICAgYWxpZ24gPSBhbGlnbjo6bGVmdDsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAnPic6Cist ICAgICAgYWxpZ24gPSBhbGlnbjo6cmlnaHQ7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgJ14n OgorLSAgICAgIGFsaWduID0gYWxpZ246OmNlbnRlcjsKKy0gICAgICBicmVhazsKKy0gICAgZGVm YXVsdDoKKy0gICAgICBicmVhazsKKy0gICAgfQorLSAgICBpZiAoYWxpZ24gIT0gYWxpZ246Om5v bmUpIHsKKy0gICAgICBpZiAocCAhPSBiZWdpbikgeworLSAgICAgICAgYXV0byBjID0gKmJlZ2lu OworLSAgICAgICAgaWYgKGMgPT0gJ3snKQorLSAgICAgICAgICByZXR1cm4gaGFuZGxlci5vbl9l cnJvcigiaW52YWxpZCBmaWxsIGNoYXJhY3RlciAneyciKSwgYmVnaW47CistICAgICAgICBoYW5k bGVyLm9uX2ZpbGwoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4oYmVnaW4sIHRvX3Vuc2lnbmVkKHAg LSBiZWdpbikpKTsKKy0gICAgICAgIGJlZ2luID0gcCArIDE7CistICAgICAgfSBlbHNlCistICAg ICAgICArK2JlZ2luOworLSAgICAgIGhhbmRsZXIub25fYWxpZ24oYWxpZ24pOworLSAgICAgIGJy ZWFrOworLSAgICB9IGVsc2UgaWYgKHAgPT0gYmVnaW4pIHsKKy0gICAgICBicmVhazsKKy0gICAg fQorLSAgICBwID0gYmVnaW47CistICB9CistICByZXR1cm4gYmVnaW47CistfQorLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBDaGFyPiBGTVRfQ09OU1RFWFBSIGJvb2wgaXNfbmFtZV9zdGFydChDaGFy IGMpIHsKKy0gIHJldHVybiAoJ2EnIDw9IGMgJiYgYyA8PSAneicpIHx8ICgnQScgPD0gYyAmJiBj IDw9ICdaJykgfHwgJ18nID09IGM7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0 eXBlbmFtZSBJREhhbmRsZXI+CistRk1UX0NPTlNURVhQUiBhdXRvIGRvX3BhcnNlX2FyZ19pZChj b25zdCBDaGFyKiBiZWdpbiwgY29uc3QgQ2hhciogZW5kLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSURIYW5kbGVyJiYgaGFuZGxlcikgLT4gY29uc3QgQ2hhciogeworLSAg Rk1UX0FTU0VSVChiZWdpbiAhPSBlbmQsICIiKTsKKy0gIENoYXIgYyA9ICpiZWdpbjsKKy0gIGlm IChjID49ICcwJyAmJiBjIDw9ICc5JykgeworLSAgICBpbnQgaW5kZXggPSAwOworLSAgICBpZiAo YyAhPSAnMCcpCistICAgICAgaW5kZXggPQorLSAgICAgICAgICBwYXJzZV9ub25uZWdhdGl2ZV9p bnQoYmVnaW4sIGVuZCwgKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KSgpKTsKKy0gICAg ZWxzZQorLSAgICAgICsrYmVnaW47CistICAgIGlmIChiZWdpbiA9PSBlbmQgfHwgKCpiZWdpbiAh PSAnfScgJiYgKmJlZ2luICE9ICc6JykpCistICAgICAgaGFuZGxlci5vbl9lcnJvcigiaW52YWxp ZCBmb3JtYXQgc3RyaW5nIik7CistICAgIGVsc2UKKy0gICAgICBoYW5kbGVyKGluZGV4KTsKKy0g ICAgcmV0dXJuIGJlZ2luOworLSAgfQorLSAgaWYgKCFpc19uYW1lX3N0YXJ0KGMpKSB7CistICAg IGhhbmRsZXIub25fZXJyb3IoImludmFsaWQgZm9ybWF0IHN0cmluZyIpOworLSAgICByZXR1cm4g YmVnaW47CistICB9CistICBhdXRvIGl0ID0gYmVnaW47CistICBkbyB7CistICAgICsraXQ7Cist ICB9IHdoaWxlIChpdCAhPSBlbmQgJiYgKGlzX25hbWVfc3RhcnQoYyA9ICppdCkgfHwgKCcwJyA8 PSBjICYmIGMgPD0gJzknKSkpOworLSAgaGFuZGxlcihiYXNpY19zdHJpbmdfdmlldzxDaGFyPihi ZWdpbiwgdG9fdW5zaWduZWQoaXQgLSBiZWdpbikpKTsKKy0gIHJldHVybiBpdDsKKy19CistCist dGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIElESGFuZGxlcj4KKy1GTVRfQ09OU1RF WFBSIEZNVF9JTkxJTkUgYXV0byBwYXJzZV9hcmdfaWQoY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0 IENoYXIqIGVuZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SURIYW5kbGVyJiYgaGFuZGxlcikgLT4gY29uc3QgQ2hhciogeworLSAgQ2hhciBjID0gKmJlZ2lu OworLSAgaWYgKGMgIT0gJ30nICYmIGMgIT0gJzonKSByZXR1cm4gZG9fcGFyc2VfYXJnX2lkKGJl Z2luLCBlbmQsIGhhbmRsZXIpOworLSAgaGFuZGxlcigpOworLSAgcmV0dXJuIGJlZ2luOworLX0K Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgSGFuZGxlcj4KKy1GTVRfQ09O U1RFWFBSIGF1dG8gcGFyc2Vfd2lkdGgoY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0IENoYXIqIGVu ZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlciYmIGhhbmRsZXIpIC0+ IGNvbnN0IENoYXIqIHsKKy0gIHVzaW5nIGRldGFpbDo6YXV0b19pZDsKKy0gIHN0cnVjdCB3aWR0 aF9hZGFwdGVyIHsKKy0gICAgSGFuZGxlciYgaGFuZGxlcjsKKy0KKy0gICAgRk1UX0NPTlNURVhQ UiB2b2lkIG9wZXJhdG9yKCkoKSB7IGhhbmRsZXIub25fZHluYW1pY193aWR0aChhdXRvX2lkKCkp OyB9CistICAgIEZNVF9DT05TVEVYUFIgdm9pZCBvcGVyYXRvcigpKGludCBpZCkgeyBoYW5kbGVy Lm9uX2R5bmFtaWNfd2lkdGgoaWQpOyB9CistICAgIEZNVF9DT05TVEVYUFIgdm9pZCBvcGVyYXRv cigpKGJhc2ljX3N0cmluZ192aWV3PENoYXI+IGlkKSB7CistICAgICAgaGFuZGxlci5vbl9keW5h bWljX3dpZHRoKGlkKTsKKy0gICAgfQorLSAgICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZXJyb3Io Y29uc3QgY2hhciogbWVzc2FnZSkgeworLSAgICAgIGlmIChtZXNzYWdlKSBoYW5kbGVyLm9uX2Vy cm9yKG1lc3NhZ2UpOworLSAgICB9CistICB9OworLQorLSAgRk1UX0FTU0VSVChiZWdpbiAhPSBl bmQsICIiKTsKKy0gIGlmICgnMCcgPD0gKmJlZ2luICYmICpiZWdpbiA8PSAnOScpIHsKKy0gICAg aW50IHdpZHRoID0gcGFyc2Vfbm9ubmVnYXRpdmVfaW50KGJlZ2luLCBlbmQsIC0xKTsKKy0gICAg aWYgKHdpZHRoICE9IC0xKQorLSAgICAgIGhhbmRsZXIub25fd2lkdGgod2lkdGgpOworLSAgICBl bHNlCistICAgICAgaGFuZGxlci5vbl9lcnJvcigibnVtYmVyIGlzIHRvbyBiaWciKTsKKy0gIH0g ZWxzZSBpZiAoKmJlZ2luID09ICd7JykgeworLSAgICArK2JlZ2luOworLSAgICBpZiAoYmVnaW4g IT0gZW5kKSBiZWdpbiA9IHBhcnNlX2FyZ19pZChiZWdpbiwgZW5kLCB3aWR0aF9hZGFwdGVye2hh bmRsZXJ9KTsKKy0gICAgaWYgKGJlZ2luID09IGVuZCB8fCAqYmVnaW4gIT0gJ30nKQorLSAgICAg IHJldHVybiBoYW5kbGVyLm9uX2Vycm9yKCJpbnZhbGlkIGZvcm1hdCBzdHJpbmciKSwgYmVnaW47 CistICAgICsrYmVnaW47CistICB9CistICByZXR1cm4gYmVnaW47CistfQorLQorLXRlbXBsYXRl IDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBIYW5kbGVyPgorLUZNVF9DT05TVEVYUFIgYXV0byBw YXJzZV9wcmVjaXNpb24oY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0IENoYXIqIGVuZCwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXImJiBoYW5kbGVyKSAtPiBjb25z dCBDaGFyKiB7CistICB1c2luZyBkZXRhaWw6OmF1dG9faWQ7CistICBzdHJ1Y3QgcHJlY2lzaW9u X2FkYXB0ZXIgeworLSAgICBIYW5kbGVyJiBoYW5kbGVyOworLQorLSAgICBGTVRfQ09OU1RFWFBS IHZvaWQgb3BlcmF0b3IoKSgpIHsgaGFuZGxlci5vbl9keW5hbWljX3ByZWNpc2lvbihhdXRvX2lk KCkpOyB9CistICAgIEZNVF9DT05TVEVYUFIgdm9pZCBvcGVyYXRvcigpKGludCBpZCkgeyBoYW5k bGVyLm9uX2R5bmFtaWNfcHJlY2lzaW9uKGlkKTsgfQorLSAgICBGTVRfQ09OU1RFWFBSIHZvaWQg b3BlcmF0b3IoKShiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBpZCkgeworLSAgICAgIGhhbmRsZXIu b25fZHluYW1pY19wcmVjaXNpb24oaWQpOworLSAgICB9CistICAgIEZNVF9DT05TVEVYUFIgdm9p ZCBvbl9lcnJvcihjb25zdCBjaGFyKiBtZXNzYWdlKSB7CistICAgICAgaWYgKG1lc3NhZ2UpIGhh bmRsZXIub25fZXJyb3IobWVzc2FnZSk7CistICAgIH0KKy0gIH07CistCistICArK2JlZ2luOwor LSAgYXV0byBjID0gYmVnaW4gIT0gZW5kID8gKmJlZ2luIDogQ2hhcigpOworLSAgaWYgKCcwJyA8 PSBjICYmIGMgPD0gJzknKSB7CistICAgIGF1dG8gcHJlY2lzaW9uID0gcGFyc2Vfbm9ubmVnYXRp dmVfaW50KGJlZ2luLCBlbmQsIC0xKTsKKy0gICAgaWYgKHByZWNpc2lvbiAhPSAtMSkKKy0gICAg ICBoYW5kbGVyLm9uX3ByZWNpc2lvbihwcmVjaXNpb24pOworLSAgICBlbHNlCistICAgICAgaGFu ZGxlci5vbl9lcnJvcigibnVtYmVyIGlzIHRvbyBiaWciKTsKKy0gIH0gZWxzZSBpZiAoYyA9PSAn eycpIHsKKy0gICAgKytiZWdpbjsKKy0gICAgaWYgKGJlZ2luICE9IGVuZCkKKy0gICAgICBiZWdp biA9IHBhcnNlX2FyZ19pZChiZWdpbiwgZW5kLCBwcmVjaXNpb25fYWRhcHRlcntoYW5kbGVyfSk7 CistICAgIGlmIChiZWdpbiA9PSBlbmQgfHwgKmJlZ2luKysgIT0gJ30nKQorLSAgICAgIHJldHVy biBoYW5kbGVyLm9uX2Vycm9yKCJpbnZhbGlkIGZvcm1hdCBzdHJpbmciKSwgYmVnaW47CistICB9 IGVsc2UgeworLSAgICByZXR1cm4gaGFuZGxlci5vbl9lcnJvcigibWlzc2luZyBwcmVjaXNpb24g c3BlY2lmaWVyIiksIGJlZ2luOworLSAgfQorLSAgaGFuZGxlci5lbmRfcHJlY2lzaW9uKCk7Cist ICByZXR1cm4gYmVnaW47CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLUZNVF9D T05TVEVYUFIgYXV0byBwYXJzZV9wcmVzZW50YXRpb25fdHlwZShDaGFyIHR5cGUpIC0+IHByZXNl bnRhdGlvbl90eXBlIHsKKy0gIHN3aXRjaCAodG9fYXNjaWkodHlwZSkpIHsKKy0gIGNhc2UgJ2Qn OgorLSAgICByZXR1cm4gcHJlc2VudGF0aW9uX3R5cGU6OmRlYzsKKy0gIGNhc2UgJ28nOgorLSAg ICByZXR1cm4gcHJlc2VudGF0aW9uX3R5cGU6Om9jdDsKKy0gIGNhc2UgJ3gnOgorLSAgICByZXR1 cm4gcHJlc2VudGF0aW9uX3R5cGU6OmhleF9sb3dlcjsKKy0gIGNhc2UgJ1gnOgorLSAgICByZXR1 cm4gcHJlc2VudGF0aW9uX3R5cGU6OmhleF91cHBlcjsKKy0gIGNhc2UgJ2InOgorLSAgICByZXR1 cm4gcHJlc2VudGF0aW9uX3R5cGU6OmJpbl9sb3dlcjsKKy0gIGNhc2UgJ0InOgorLSAgICByZXR1 cm4gcHJlc2VudGF0aW9uX3R5cGU6OmJpbl91cHBlcjsKKy0gIGNhc2UgJ2EnOgorLSAgICByZXR1 cm4gcHJlc2VudGF0aW9uX3R5cGU6OmhleGZsb2F0X2xvd2VyOworLSAgY2FzZSAnQSc6CistICAg IHJldHVybiBwcmVzZW50YXRpb25fdHlwZTo6aGV4ZmxvYXRfdXBwZXI7CistICBjYXNlICdlJzoK Ky0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90eXBlOjpleHBfbG93ZXI7CistICBjYXNlICdFJzoK Ky0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90eXBlOjpleHBfdXBwZXI7CistICBjYXNlICdmJzoK Ky0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90eXBlOjpmaXhlZF9sb3dlcjsKKy0gIGNhc2UgJ0Yn OgorLSAgICByZXR1cm4gcHJlc2VudGF0aW9uX3R5cGU6OmZpeGVkX3VwcGVyOworLSAgY2FzZSAn Zyc6CistICAgIHJldHVybiBwcmVzZW50YXRpb25fdHlwZTo6Z2VuZXJhbF9sb3dlcjsKKy0gIGNh c2UgJ0cnOgorLSAgICByZXR1cm4gcHJlc2VudGF0aW9uX3R5cGU6OmdlbmVyYWxfdXBwZXI7Cist ICBjYXNlICdjJzoKKy0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90eXBlOjpjaHI7CistICBjYXNl ICdzJzoKKy0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90eXBlOjpzdHJpbmc7CistICBjYXNlICdw JzoKKy0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90eXBlOjpwb2ludGVyOworLSAgZGVmYXVsdDoK Ky0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90eXBlOjpub25lOworLSAgfQorLX0KKy0KKy0vLyBQ YXJzZXMgc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllcnMgYW5kIHNlbmRzIG5vdGlmaWNhdGlvbnMg YWJvdXQgcGFyc2VkCistLy8gY29tcG9uZW50cyB0byBoYW5kbGVyLgorLXRlbXBsYXRlIDx0eXBl bmFtZSBDaGFyLCB0eXBlbmFtZSBTcGVjSGFuZGxlcj4KKy1GTVRfQ09OU1RFWFBSIEZNVF9JTkxJ TkUgYXV0byBwYXJzZV9mb3JtYXRfc3BlY3MoY29uc3QgQ2hhciogYmVnaW4sCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENoYXIqIGVuZCwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY0hh bmRsZXImJiBoYW5kbGVyKQorLSAgICAtPiBjb25zdCBDaGFyKiB7CistICBpZiAoMSA8IGVuZCAt IGJlZ2luICYmIGJlZ2luWzFdID09ICd9JyAmJiBpc19hc2NpaV9sZXR0ZXIoKmJlZ2luKSAmJgor LSAgICAgICpiZWdpbiAhPSAnTCcpIHsKKy0gICAgcHJlc2VudGF0aW9uX3R5cGUgdHlwZSA9IHBh cnNlX3ByZXNlbnRhdGlvbl90eXBlKCpiZWdpbisrKTsKKy0gICAgaWYgKHR5cGUgPT0gcHJlc2Vu dGF0aW9uX3R5cGU6Om5vbmUpCistICAgICAgaGFuZGxlci5vbl9lcnJvcigiaW52YWxpZCB0eXBl IHNwZWNpZmllciIpOworLSAgICBoYW5kbGVyLm9uX3R5cGUodHlwZSk7CistICAgIHJldHVybiBi ZWdpbjsKKy0gIH0KKy0KKy0gIGlmIChiZWdpbiA9PSBlbmQpIHJldHVybiBiZWdpbjsKKy0KKy0g IGJlZ2luID0gcGFyc2VfYWxpZ24oYmVnaW4sIGVuZCwgaGFuZGxlcik7CistICBpZiAoYmVnaW4g PT0gZW5kKSByZXR1cm4gYmVnaW47CistCistICAvLyBQYXJzZSBzaWduLgorLSAgc3dpdGNoICh0 b19hc2NpaSgqYmVnaW4pKSB7CistICBjYXNlICcrJzoKKy0gICAgaGFuZGxlci5vbl9zaWduKHNp Z246OnBsdXMpOworLSAgICArK2JlZ2luOworLSAgICBicmVhazsKKy0gIGNhc2UgJy0nOgorLSAg ICBoYW5kbGVyLm9uX3NpZ24oc2lnbjo6bWludXMpOworLSAgICArK2JlZ2luOworLSAgICBicmVh azsKKy0gIGNhc2UgJyAnOgorLSAgICBoYW5kbGVyLm9uX3NpZ24oc2lnbjo6c3BhY2UpOworLSAg ICArK2JlZ2luOworLSAgICBicmVhazsKKy0gIGRlZmF1bHQ6CistICAgIGJyZWFrOworLSAgfQor LSAgaWYgKGJlZ2luID09IGVuZCkgcmV0dXJuIGJlZ2luOworLQorLSAgaWYgKCpiZWdpbiA9PSAn IycpIHsKKy0gICAgaGFuZGxlci5vbl9oYXNoKCk7CistICAgIGlmICgrK2JlZ2luID09IGVuZCkg cmV0dXJuIGJlZ2luOworLSAgfQorLQorLSAgLy8gUGFyc2UgemVybyBmbGFnLgorLSAgaWYgKCpi ZWdpbiA9PSAnMCcpIHsKKy0gICAgaGFuZGxlci5vbl96ZXJvKCk7CistICAgIGlmICgrK2JlZ2lu ID09IGVuZCkgcmV0dXJuIGJlZ2luOworLSAgfQorLQorLSAgYmVnaW4gPSBwYXJzZV93aWR0aChi ZWdpbiwgZW5kLCBoYW5kbGVyKTsKKy0gIGlmIChiZWdpbiA9PSBlbmQpIHJldHVybiBiZWdpbjsK Ky0KKy0gIC8vIFBhcnNlIHByZWNpc2lvbi4KKy0gIGlmICgqYmVnaW4gPT0gJy4nKSB7CistICAg IGJlZ2luID0gcGFyc2VfcHJlY2lzaW9uKGJlZ2luLCBlbmQsIGhhbmRsZXIpOworLSAgICBpZiAo YmVnaW4gPT0gZW5kKSByZXR1cm4gYmVnaW47CistICB9CistCistICBpZiAoKmJlZ2luID09ICdM JykgeworLSAgICBoYW5kbGVyLm9uX2xvY2FsaXplZCgpOworLSAgICArK2JlZ2luOworLSAgfQor LQorLSAgLy8gUGFyc2UgdHlwZS4KKy0gIGlmIChiZWdpbiAhPSBlbmQgJiYgKmJlZ2luICE9ICd9 JykgeworLSAgICBwcmVzZW50YXRpb25fdHlwZSB0eXBlID0gcGFyc2VfcHJlc2VudGF0aW9uX3R5 cGUoKmJlZ2luKyspOworLSAgICBpZiAodHlwZSA9PSBwcmVzZW50YXRpb25fdHlwZTo6bm9uZSkK Ky0gICAgICBoYW5kbGVyLm9uX2Vycm9yKCJpbnZhbGlkIHR5cGUgc3BlY2lmaWVyIik7CistICAg IGhhbmRsZXIub25fdHlwZSh0eXBlKTsKKy0gIH0KKy0gIHJldHVybiBiZWdpbjsKKy19CistCist dGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIEhhbmRsZXI+CistRk1UX0NPTlNURVhQ UiBhdXRvIHBhcnNlX3JlcGxhY2VtZW50X2ZpZWxkKGNvbnN0IENoYXIqIGJlZ2luLCBjb25zdCBD aGFyKiBlbmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhh bmRsZXImJiBoYW5kbGVyKSAtPiBjb25zdCBDaGFyKiB7CistICBzdHJ1Y3QgaWRfYWRhcHRlciB7 CistICAgIEhhbmRsZXImIGhhbmRsZXI7CistICAgIGludCBhcmdfaWQ7CistCistICAgIEZNVF9D T05TVEVYUFIgdm9pZCBvcGVyYXRvcigpKCkgeyBhcmdfaWQgPSBoYW5kbGVyLm9uX2FyZ19pZCgp OyB9CistICAgIEZNVF9DT05TVEVYUFIgdm9pZCBvcGVyYXRvcigpKGludCBpZCkgeyBhcmdfaWQg PSBoYW5kbGVyLm9uX2FyZ19pZChpZCk7IH0KKy0gICAgRk1UX0NPTlNURVhQUiB2b2lkIG9wZXJh dG9yKCkoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gaWQpIHsKKy0gICAgICBhcmdfaWQgPSBoYW5k bGVyLm9uX2FyZ19pZChpZCk7CistICAgIH0KKy0gICAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX2Vy cm9yKGNvbnN0IGNoYXIqIG1lc3NhZ2UpIHsKKy0gICAgICBpZiAobWVzc2FnZSkgaGFuZGxlci5v bl9lcnJvcihtZXNzYWdlKTsKKy0gICAgfQorLSAgfTsKKy0KKy0gICsrYmVnaW47CistICBpZiAo YmVnaW4gPT0gZW5kKSByZXR1cm4gaGFuZGxlci5vbl9lcnJvcigiaW52YWxpZCBmb3JtYXQgc3Ry aW5nIiksIGVuZDsKKy0gIGlmICgqYmVnaW4gPT0gJ30nKSB7CistICAgIGhhbmRsZXIub25fcmVw bGFjZW1lbnRfZmllbGQoaGFuZGxlci5vbl9hcmdfaWQoKSwgYmVnaW4pOworLSAgfSBlbHNlIGlm ICgqYmVnaW4gPT0gJ3snKSB7CistICAgIGhhbmRsZXIub25fdGV4dChiZWdpbiwgYmVnaW4gKyAx KTsKKy0gIH0gZWxzZSB7CistICAgIGF1dG8gYWRhcHRlciA9IGlkX2FkYXB0ZXJ7aGFuZGxlciwg MH07CistICAgIGJlZ2luID0gcGFyc2VfYXJnX2lkKGJlZ2luLCBlbmQsIGFkYXB0ZXIpOworLSAg ICBDaGFyIGMgPSBiZWdpbiAhPSBlbmQgPyAqYmVnaW4gOiBDaGFyKCk7CistICAgIGlmIChjID09 ICd9JykgeworLSAgICAgIGhhbmRsZXIub25fcmVwbGFjZW1lbnRfZmllbGQoYWRhcHRlci5hcmdf aWQsIGJlZ2luKTsKKy0gICAgfSBlbHNlIGlmIChjID09ICc6JykgeworLSAgICAgIGJlZ2luID0g aGFuZGxlci5vbl9mb3JtYXRfc3BlY3MoYWRhcHRlci5hcmdfaWQsIGJlZ2luICsgMSwgZW5kKTsK Ky0gICAgICBpZiAoYmVnaW4gPT0gZW5kIHx8ICpiZWdpbiAhPSAnfScpCistICAgICAgICByZXR1 cm4gaGFuZGxlci5vbl9lcnJvcigidW5rbm93biBmb3JtYXQgc3BlY2lmaWVyIiksIGVuZDsKKy0g ICAgfSBlbHNlIHsKKy0gICAgICByZXR1cm4gaGFuZGxlci5vbl9lcnJvcigibWlzc2luZyAnfScg aW4gZm9ybWF0IHN0cmluZyIpLCBlbmQ7CistICAgIH0KKy0gIH0KKy0gIHJldHVybiBiZWdpbiAr IDE7CistfQorLQorLXRlbXBsYXRlIDxib29sIElTX0NPTlNURVhQUiwgdHlwZW5hbWUgQ2hhciwg dHlwZW5hbWUgSGFuZGxlcj4KKy1GTVRfQ09OU1RFWFBSIEZNVF9JTkxJTkUgdm9pZCBwYXJzZV9m b3JtYXRfc3RyaW5nKAorLSAgICBiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBmb3JtYXRfc3RyLCBI YW5kbGVyJiYgaGFuZGxlcikgeworLSAgLy8gV29ya2Fyb3VuZCBhIG5hbWUtbG9va3VwIGJ1ZyBp biBNU1ZDJ3MgbW9kdWxlcyBpbXBsZW1lbnRhdGlvbi4KKy0gIHVzaW5nIGRldGFpbDo6ZmluZDsK Ky0KKy0gIGF1dG8gYmVnaW4gPSBmb3JtYXRfc3RyLmRhdGEoKTsKKy0gIGF1dG8gZW5kID0gYmVn aW4gKyBmb3JtYXRfc3RyLnNpemUoKTsKKy0gIGlmIChlbmQgLSBiZWdpbiA8IDMyKSB7CistICAg IC8vIFVzZSBhIHNpbXBsZSBsb29wIGluc3RlYWQgb2YgbWVtY2hyIGZvciBzbWFsbCBzdHJpbmdz LgorLSAgICBjb25zdCBDaGFyKiBwID0gYmVnaW47CistICAgIHdoaWxlIChwICE9IGVuZCkgewor LSAgICAgIGF1dG8gYyA9ICpwKys7CistICAgICAgaWYgKGMgPT0gJ3snKSB7CistICAgICAgICBo YW5kbGVyLm9uX3RleHQoYmVnaW4sIHAgLSAxKTsKKy0gICAgICAgIGJlZ2luID0gcCA9IHBhcnNl X3JlcGxhY2VtZW50X2ZpZWxkKHAgLSAxLCBlbmQsIGhhbmRsZXIpOworLSAgICAgIH0gZWxzZSBp ZiAoYyA9PSAnfScpIHsKKy0gICAgICAgIGlmIChwID09IGVuZCB8fCAqcCAhPSAnfScpCistICAg ICAgICAgIHJldHVybiBoYW5kbGVyLm9uX2Vycm9yKCJ1bm1hdGNoZWQgJ30nIGluIGZvcm1hdCBz dHJpbmciKTsKKy0gICAgICAgIGhhbmRsZXIub25fdGV4dChiZWdpbiwgcCk7CistICAgICAgICBi ZWdpbiA9ICsrcDsKKy0gICAgICB9CistICAgIH0KKy0gICAgaGFuZGxlci5vbl90ZXh0KGJlZ2lu LCBlbmQpOworLSAgICByZXR1cm47CistICB9CistICBzdHJ1Y3Qgd3JpdGVyIHsKKy0gICAgRk1U X0NPTlNURVhQUiB2b2lkIG9wZXJhdG9yKCkoY29uc3QgQ2hhciogcGJlZ2luLCBjb25zdCBDaGFy KiBwZW5kKSB7CistICAgICAgaWYgKHBiZWdpbiA9PSBwZW5kKSByZXR1cm47CistICAgICAgZm9y ICg7OykgeworLSAgICAgICAgY29uc3QgQ2hhciogcCA9IG51bGxwdHI7CistICAgICAgICBpZiAo IWZpbmQ8SVNfQ09OU1RFWFBSPihwYmVnaW4sIHBlbmQsIENoYXIoJ30nKSwgcCkpCistICAgICAg ICAgIHJldHVybiBoYW5kbGVyXy5vbl90ZXh0KHBiZWdpbiwgcGVuZCk7CistICAgICAgICArK3A7 CistICAgICAgICBpZiAocCA9PSBwZW5kIHx8ICpwICE9ICd9JykKKy0gICAgICAgICAgcmV0dXJu IGhhbmRsZXJfLm9uX2Vycm9yKCJ1bm1hdGNoZWQgJ30nIGluIGZvcm1hdCBzdHJpbmciKTsKKy0g ICAgICAgIGhhbmRsZXJfLm9uX3RleHQocGJlZ2luLCBwKTsKKy0gICAgICAgIHBiZWdpbiA9IHAg KyAxOworLSAgICAgIH0KKy0gICAgfQorLSAgICBIYW5kbGVyJiBoYW5kbGVyXzsKKy0gIH0gd3Jp dGV7aGFuZGxlcn07CistICB3aGlsZSAoYmVnaW4gIT0gZW5kKSB7CistICAgIC8vIERvaW5nIHR3 byBwYXNzZXMgd2l0aCBtZW1jaHIgKG9uZSBmb3IgJ3snIGFuZCBhbm90aGVyIGZvciAnfScpIGlz IHVwIHRvCistICAgIC8vIDIuNXggZmFzdGVyIHRoYW4gdGhlIG5haXZlIG9uZS1wYXNzIGltcGxl bWVudGF0aW9uIG9uIGJpZyBmb3JtYXQgc3RyaW5ncy4KKy0gICAgY29uc3QgQ2hhciogcCA9IGJl Z2luOworLSAgICBpZiAoKmJlZ2luICE9ICd7JyAmJiAhZmluZDxJU19DT05TVEVYUFI+KGJlZ2lu ICsgMSwgZW5kLCBDaGFyKCd7JyksIHApKQorLSAgICAgIHJldHVybiB3cml0ZShiZWdpbiwgZW5k KTsKKy0gICAgd3JpdGUoYmVnaW4sIHApOworLSAgICBiZWdpbiA9IHBhcnNlX3JlcGxhY2VtZW50 X2ZpZWxkKHAsIGVuZCwgaGFuZGxlcik7CistICB9CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFt ZSBULCB0eXBlbmFtZSBQYXJzZUNvbnRleHQ+CistRk1UX0NPTlNURVhQUiBhdXRvIHBhcnNlX2Zv cm1hdF9zcGVjcyhQYXJzZUNvbnRleHQmIGN0eCkKKy0gICAgLT4gZGVjbHR5cGUoY3R4LmJlZ2lu KCkpIHsKKy0gIHVzaW5nIGNoYXJfdHlwZSA9IHR5cGVuYW1lIFBhcnNlQ29udGV4dDo6Y2hhcl90 eXBlOworLSAgdXNpbmcgY29udGV4dCA9IGJ1ZmZlcl9jb250ZXh0PGNoYXJfdHlwZT47CistICB1 c2luZyBtYXBwZWRfdHlwZSA9IGNvbmRpdGlvbmFsX3Q8CistICAgICAgbWFwcGVkX3R5cGVfY29u c3RhbnQ8VCwgY29udGV4dD46OnZhbHVlICE9IHR5cGU6OmN1c3RvbV90eXBlLAorLSAgICAgIGRl Y2x0eXBlKGFyZ19tYXBwZXI8Y29udGV4dD4oKS5tYXAoc3RkOjpkZWNsdmFsPGNvbnN0IFQmPigp KSksIFQ+OworLSAgYXV0byBmID0gY29uZGl0aW9uYWxfdDxoYXNfZm9ybWF0dGVyPG1hcHBlZF90 eXBlLCBjb250ZXh0Pjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRl cjxtYXBwZWRfdHlwZSwgY2hhcl90eXBlPiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgZmFs bGJhY2tfZm9ybWF0dGVyPFQsIGNoYXJfdHlwZT4+KCk7CistICByZXR1cm4gZi5wYXJzZShjdHgp OworLX0KKy0KKy0vLyBBIHBhcnNlIGNvbnRleHQgd2l0aCBleHRyYSBhcmd1bWVudCBpZCBjaGVj a3MuIEl0IGlzIG9ubHkgdXNlZCBhdCBjb21waWxlCistLy8gdGltZSBiZWNhdXNlIGFkZGluZyBj aGVja3MgYXQgcnVudGltZSB3b3VsZCBpbnRyb2R1Y2Ugc3Vic3RhbnRpYWwgb3ZlcmhlYWQKKy0v LyBhbmQgd291bGQgYmUgcmVkdW5kYW50IHNpbmNlIGFyZ3VtZW50IGlkcyBhcmUgY2hlY2tlZCB3 aGVuIGFyZ3VtZW50cyBhcmUKKy0vLyByZXRyaWV2ZWQgYW55d2F5LgorLXRlbXBsYXRlIDx0eXBl bmFtZSBDaGFyLCB0eXBlbmFtZSBFcnJvckhhbmRsZXIgPSBlcnJvcl9oYW5kbGVyPgorLWNsYXNz IGNvbXBpbGVfcGFyc2VfY29udGV4dAorLSAgICA6IHB1YmxpYyBiYXNpY19mb3JtYXRfcGFyc2Vf Y29udGV4dDxDaGFyLCBFcnJvckhhbmRsZXI+IHsKKy0gcHJpdmF0ZToKKy0gIGludCBudW1fYXJn c187CistICB1c2luZyBiYXNlID0gYmFzaWNfZm9ybWF0X3BhcnNlX2NvbnRleHQ8Q2hhciwgRXJy b3JIYW5kbGVyPjsKKy0KKy0gcHVibGljOgorLSAgZXhwbGljaXQgRk1UX0NPTlNURVhQUiBjb21w aWxlX3BhcnNlX2NvbnRleHQoCistICAgICAgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gZm9ybWF0 X3N0ciwKKy0gICAgICBpbnQgbnVtX2FyZ3MgPSAoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt YXgpKCksIEVycm9ySGFuZGxlciBlaCA9IHt9KQorLSAgICAgIDogYmFzZShmb3JtYXRfc3RyLCBl aCksIG51bV9hcmdzXyhudW1fYXJncykge30KKy0KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBuZXh0 X2FyZ19pZCgpIC0+IGludCB7CistICAgIGludCBpZCA9IGJhc2U6Om5leHRfYXJnX2lkKCk7Cist ICAgIGlmIChpZCA+PSBudW1fYXJnc18pIHRoaXMtPm9uX2Vycm9yKCJhcmd1bWVudCBub3QgZm91 bmQiKTsKKy0gICAgcmV0dXJuIGlkOworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIGNo ZWNrX2FyZ19pZChpbnQgaWQpIHsKKy0gICAgYmFzZTo6Y2hlY2tfYXJnX2lkKGlkKTsKKy0gICAg aWYgKGlkID49IG51bV9hcmdzXykgdGhpcy0+b25fZXJyb3IoImFyZ3VtZW50IG5vdCBmb3VuZCIp OworLSAgfQorLSAgdXNpbmcgYmFzZTo6Y2hlY2tfYXJnX2lkOworLX07CistCistdGVtcGxhdGUg PHR5cGVuYW1lIEVycm9ySGFuZGxlcj4KKy1GTVRfQ09OU1RFWFBSIHZvaWQgY2hlY2tfaW50X3R5 cGVfc3BlYyhwcmVzZW50YXRpb25fdHlwZSB0eXBlLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVycm9ySGFuZGxlciYmIGVoKSB7CistICBpZiAodHlwZSA+IHByZXNl bnRhdGlvbl90eXBlOjpiaW5fdXBwZXIgJiYgdHlwZSAhPSBwcmVzZW50YXRpb25fdHlwZTo6Y2hy KQorLSAgICBlaC5vbl9lcnJvcigiaW52YWxpZCB0eXBlIHNwZWNpZmllciIpOworLX0KKy0KKy0v LyBDaGVja3MgY2hhciBzcGVjcyBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSB0eXBlIHNwZWMgaXMg Y2hhciAoYW5kIG5vdCBpbnQpLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBF cnJvckhhbmRsZXIgPSBlcnJvcl9oYW5kbGVyPgorLUZNVF9DT05TVEVYUFIgYXV0byBjaGVja19j aGFyX3NwZWNzKGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3MsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JIYW5kbGVyJiYgZWggPSB7fSkgLT4g Ym9vbCB7CistICBpZiAoc3BlY3MudHlwZSAhPSBwcmVzZW50YXRpb25fdHlwZTo6bm9uZSAmJgor LSAgICAgIHNwZWNzLnR5cGUgIT0gcHJlc2VudGF0aW9uX3R5cGU6OmNocikgeworLSAgICBjaGVj a19pbnRfdHlwZV9zcGVjKHNwZWNzLnR5cGUsIGVoKTsKKy0gICAgcmV0dXJuIGZhbHNlOworLSAg fQorLSAgaWYgKHNwZWNzLmFsaWduID09IGFsaWduOjpudW1lcmljIHx8IHNwZWNzLnNpZ24gIT0g c2lnbjo6bm9uZSB8fCBzcGVjcy5hbHQpCistICAgIGVoLm9uX2Vycm9yKCJpbnZhbGlkIGZvcm1h dCBzcGVjaWZpZXIgZm9yIGNoYXIiKTsKKy0gIHJldHVybiB0cnVlOworLX0KKy0KKy0vLyBBIGZs b2F0aW5nLXBvaW50IHByZXNlbnRhdGlvbiBmb3JtYXQuCistZW51bSBjbGFzcyBmbG9hdF9mb3Jt YXQgOiB1bnNpZ25lZCBjaGFyIHsKKy0gIGdlbmVyYWwsICAvLyBHZW5lcmFsOiBleHBvbmVudCBu b3RhdGlvbiBvciBmaXhlZCBwb2ludCBiYXNlZCBvbiBtYWduaXR1ZGUuCistICBleHAsICAgICAg Ly8gRXhwb25lbnQgbm90YXRpb24gd2l0aCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gb2YgNiwgZS5n LiAxLjJlLTMuCistICBmaXhlZCwgICAgLy8gRml4ZWQgcG9pbnQgd2l0aCB0aGUgZGVmYXVsdCBw cmVjaXNpb24gb2YgNiwgZS5nLiAwLjAwMTIuCistICBoZXgKKy19OworLQorLXN0cnVjdCBmbG9h dF9zcGVjcyB7CistICBpbnQgcHJlY2lzaW9uOworLSAgZmxvYXRfZm9ybWF0IGZvcm1hdCA6IDg7 CistICBzaWduX3Qgc2lnbiA6IDg7CistICBib29sIHVwcGVyIDogMTsKKy0gIGJvb2wgbG9jYWxl IDogMTsKKy0gIGJvb2wgYmluYXJ5MzIgOiAxOworLSAgYm9vbCBmYWxsYmFjayA6IDE7CistICBi b29sIHNob3dwb2ludCA6IDE7CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgRXJyb3JIYW5k bGVyID0gZXJyb3JfaGFuZGxlciwgdHlwZW5hbWUgQ2hhcj4KKy1GTVRfQ09OU1RFWFBSIGF1dG8g cGFyc2VfZmxvYXRfdHlwZV9zcGVjKGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3Bl Y3MsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvckhhbmRs ZXImJiBlaCA9IHt9KQorLSAgICAtPiBmbG9hdF9zcGVjcyB7CistICBhdXRvIHJlc3VsdCA9IGZs b2F0X3NwZWNzKCk7CistICByZXN1bHQuc2hvd3BvaW50ID0gc3BlY3MuYWx0OworLSAgcmVzdWx0 LmxvY2FsZSA9IHNwZWNzLmxvY2FsaXplZDsKKy0gIHN3aXRjaCAoc3BlY3MudHlwZSkgeworLSAg Y2FzZSBwcmVzZW50YXRpb25fdHlwZTo6bm9uZToKKy0gICAgcmVzdWx0LmZvcm1hdCA9IGZsb2F0 X2Zvcm1hdDo6Z2VuZXJhbDsKKy0gICAgYnJlYWs7CistICBjYXNlIHByZXNlbnRhdGlvbl90eXBl OjpnZW5lcmFsX3VwcGVyOgorLSAgICByZXN1bHQudXBwZXIgPSB0cnVlOworLSAgICBGTVRfRkFM TFRIUk9VR0g7CistICBjYXNlIHByZXNlbnRhdGlvbl90eXBlOjpnZW5lcmFsX2xvd2VyOgorLSAg ICByZXN1bHQuZm9ybWF0ID0gZmxvYXRfZm9ybWF0OjpnZW5lcmFsOworLSAgICBicmVhazsKKy0g IGNhc2UgcHJlc2VudGF0aW9uX3R5cGU6OmV4cF91cHBlcjoKKy0gICAgcmVzdWx0LnVwcGVyID0g dHJ1ZTsKKy0gICAgRk1UX0ZBTExUSFJPVUdIOworLSAgY2FzZSBwcmVzZW50YXRpb25fdHlwZTo6 ZXhwX2xvd2VyOgorLSAgICByZXN1bHQuZm9ybWF0ID0gZmxvYXRfZm9ybWF0OjpleHA7CistICAg IHJlc3VsdC5zaG93cG9pbnQgfD0gc3BlY3MucHJlY2lzaW9uICE9IDA7CistICAgIGJyZWFrOwor LSAgY2FzZSBwcmVzZW50YXRpb25fdHlwZTo6Zml4ZWRfdXBwZXI6CistICAgIHJlc3VsdC51cHBl ciA9IHRydWU7CistICAgIEZNVF9GQUxMVEhST1VHSDsKKy0gIGNhc2UgcHJlc2VudGF0aW9uX3R5 cGU6OmZpeGVkX2xvd2VyOgorLSAgICByZXN1bHQuZm9ybWF0ID0gZmxvYXRfZm9ybWF0OjpmaXhl ZDsKKy0gICAgcmVzdWx0LnNob3dwb2ludCB8PSBzcGVjcy5wcmVjaXNpb24gIT0gMDsKKy0gICAg YnJlYWs7CistICBjYXNlIHByZXNlbnRhdGlvbl90eXBlOjpoZXhmbG9hdF91cHBlcjoKKy0gICAg cmVzdWx0LnVwcGVyID0gdHJ1ZTsKKy0gICAgRk1UX0ZBTExUSFJPVUdIOworLSAgY2FzZSBwcmVz ZW50YXRpb25fdHlwZTo6aGV4ZmxvYXRfbG93ZXI6CistICAgIHJlc3VsdC5mb3JtYXQgPSBmbG9h dF9mb3JtYXQ6OmhleDsKKy0gICAgYnJlYWs7CistICBkZWZhdWx0OgorLSAgICBlaC5vbl9lcnJv cigiaW52YWxpZCB0eXBlIHNwZWNpZmllciIpOworLSAgICBicmVhazsKKy0gIH0KKy0gIHJldHVy biByZXN1bHQ7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBFcnJvckhhbmRsZXIgPSBlcnJv cl9oYW5kbGVyPgorLUZNVF9DT05TVEVYUFIgYXV0byBjaGVja19jc3RyaW5nX3R5cGVfc3BlYyhw cmVzZW50YXRpb25fdHlwZSB0eXBlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFcnJvckhhbmRsZXImJiBlaCA9IHt9KSAtPiBib29sIHsKKy0gIGlmICh0eXBl ID09IHByZXNlbnRhdGlvbl90eXBlOjpub25lIHx8IHR5cGUgPT0gcHJlc2VudGF0aW9uX3R5cGU6 OnN0cmluZykKKy0gICAgcmV0dXJuIHRydWU7CistICBpZiAodHlwZSAhPSBwcmVzZW50YXRpb25f dHlwZTo6cG9pbnRlcikgZWgub25fZXJyb3IoImludmFsaWQgdHlwZSBzcGVjaWZpZXIiKTsKKy0g IHJldHVybiBmYWxzZTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIEVycm9ySGFuZGxlciA9 IGVycm9yX2hhbmRsZXI+CistRk1UX0NPTlNURVhQUiB2b2lkIGNoZWNrX3N0cmluZ190eXBlX3Nw ZWMocHJlc2VudGF0aW9uX3R5cGUgdHlwZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFcnJvckhhbmRsZXImJiBlaCA9IHt9KSB7CistICBpZiAodHlwZSAhPSBw cmVzZW50YXRpb25fdHlwZTo6bm9uZSAmJiB0eXBlICE9IHByZXNlbnRhdGlvbl90eXBlOjpzdHJp bmcpCistICAgIGVoLm9uX2Vycm9yKCJpbnZhbGlkIHR5cGUgc3BlY2lmaWVyIik7CistfQorLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBFcnJvckhhbmRsZXI+CistRk1UX0NPTlNURVhQUiB2b2lkIGNo ZWNrX3BvaW50ZXJfdHlwZV9zcGVjKHByZXNlbnRhdGlvbl90eXBlIHR5cGUsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9ySGFuZGxlciYmIGVoKSB7Cist ICBpZiAodHlwZSAhPSBwcmVzZW50YXRpb25fdHlwZTo6bm9uZSAmJiB0eXBlICE9IHByZXNlbnRh dGlvbl90eXBlOjpwb2ludGVyKQorLSAgICBlaC5vbl9lcnJvcigiaW52YWxpZCB0eXBlIHNwZWNp ZmllciIpOworLX0KKy0KKy0vLyBBIHBhcnNlX2Zvcm1hdF9zcGVjcyBoYW5kbGVyIHRoYXQgY2hl Y2tzIGlmIHNwZWNpZmllcnMgYXJlIGNvbnNpc3RlbnQgd2l0aAorLS8vIHRoZSBhcmd1bWVudCB0 eXBlLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBIYW5kbGVyPiBjbGFzcyBzcGVjc19jaGVja2VyIDog cHVibGljIEhhbmRsZXIgeworLSBwcml2YXRlOgorLSAgZGV0YWlsOjp0eXBlIGFyZ190eXBlXzsK Ky0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCByZXF1aXJlX251bWVyaWNfYXJndW1lbnQoKSB7Cist ICAgIGlmICghaXNfYXJpdGhtZXRpY190eXBlKGFyZ190eXBlXykpCistICAgICAgdGhpcy0+b25f ZXJyb3IoImZvcm1hdCBzcGVjaWZpZXIgcmVxdWlyZXMgbnVtZXJpYyBhcmd1bWVudCIpOworLSAg fQorLQorLSBwdWJsaWM6CistICBGTVRfQ09OU1RFWFBSIHNwZWNzX2NoZWNrZXIoY29uc3QgSGFu ZGxlciYgaGFuZGxlciwgZGV0YWlsOjp0eXBlIGFyZ190eXBlKQorLSAgICAgIDogSGFuZGxlciho YW5kbGVyKSwgYXJnX3R5cGVfKGFyZ190eXBlKSB7fQorLQorLSAgRk1UX0NPTlNURVhQUiB2b2lk IG9uX2FsaWduKGFsaWduX3QgYWxpZ24pIHsKKy0gICAgaWYgKGFsaWduID09IGFsaWduOjpudW1l cmljKSByZXF1aXJlX251bWVyaWNfYXJndW1lbnQoKTsKKy0gICAgSGFuZGxlcjo6b25fYWxpZ24o YWxpZ24pOworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9uX3NpZ24oc2lnbl90IHMp IHsKKy0gICAgcmVxdWlyZV9udW1lcmljX2FyZ3VtZW50KCk7CistICAgIGlmIChpc19pbnRlZ3Jh bF90eXBlKGFyZ190eXBlXykgJiYgYXJnX3R5cGVfICE9IHR5cGU6OmludF90eXBlICYmCistICAg ICAgICBhcmdfdHlwZV8gIT0gdHlwZTo6bG9uZ19sb25nX3R5cGUgJiYgYXJnX3R5cGVfICE9IHR5 cGU6OmNoYXJfdHlwZSkgeworLSAgICAgIHRoaXMtPm9uX2Vycm9yKCJmb3JtYXQgc3BlY2lmaWVy IHJlcXVpcmVzIHNpZ25lZCBhcmd1bWVudCIpOworLSAgICB9CistICAgIEhhbmRsZXI6Om9uX3Np Z24ocyk7CistICB9CistCistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25faGFzaCgpIHsKKy0gICAg cmVxdWlyZV9udW1lcmljX2FyZ3VtZW50KCk7CistICAgIEhhbmRsZXI6Om9uX2hhc2goKTsKKy0g IH0KKy0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl9sb2NhbGl6ZWQoKSB7CistICAgIHJlcXVp cmVfbnVtZXJpY19hcmd1bWVudCgpOworLSAgICBIYW5kbGVyOjpvbl9sb2NhbGl6ZWQoKTsKKy0g IH0KKy0KKy0gIEZNVF9DT05TVEVYUFIgdm9pZCBvbl96ZXJvKCkgeworLSAgICByZXF1aXJlX251 bWVyaWNfYXJndW1lbnQoKTsKKy0gICAgSGFuZGxlcjo6b25femVybygpOworLSAgfQorLQorLSAg Rk1UX0NPTlNURVhQUiB2b2lkIGVuZF9wcmVjaXNpb24oKSB7CistICAgIGlmIChpc19pbnRlZ3Jh bF90eXBlKGFyZ190eXBlXykgfHwgYXJnX3R5cGVfID09IHR5cGU6OnBvaW50ZXJfdHlwZSkKKy0g ICAgICB0aGlzLT5vbl9lcnJvcigicHJlY2lzaW9uIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFyZ3Vt ZW50IHR5cGUiKTsKKy0gIH0KKy19OworLQorLWNvbnN0ZXhwciBpbnQgaW52YWxpZF9hcmdfaW5k ZXggPSAtMTsKKy0KKy0jaWYgRk1UX1VTRV9OT05UWVBFX1RFTVBMQVRFX1BBUkFNRVRFUlMKKy10 ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3MsIHR5cGVuYW1lIENo YXI+CistY29uc3RleHByIGF1dG8gZ2V0X2FyZ19pbmRleF9ieV9uYW1lKGJhc2ljX3N0cmluZ192 aWV3PENoYXI+IG5hbWUpIC0+IGludCB7CistICBpZiBjb25zdGV4cHIgKGRldGFpbDo6aXNfc3Rh dGljYWxseV9uYW1lZF9hcmc8VD4oKSkgeworLSAgICBpZiAobmFtZSA9PSBUOjpuYW1lKSByZXR1 cm4gTjsKKy0gIH0KKy0gIGlmIGNvbnN0ZXhwciAoc2l6ZW9mLi4uKEFyZ3MpID4gMCkKKy0gICAg cmV0dXJuIGdldF9hcmdfaW5kZXhfYnlfbmFtZTxOICsgMSwgQXJncy4uLj4obmFtZSk7CistICAo dm9pZCluYW1lOyAgLy8gV29ya2Fyb3VuZCBhbiBNU1ZDIGJ1ZyBhYm91dCAidW51c2VkIiBwYXJh bWV0ZXIuCistICByZXR1cm4gaW52YWxpZF9hcmdfaW5kZXg7CistfQorLSNlbmRpZgorLQorLXRl bXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzLCB0eXBlbmFtZSBDaGFyPgorLUZNVF9DT05TVEVYUFIg YXV0byBnZXRfYXJnX2luZGV4X2J5X25hbWUoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gbmFtZSkg LT4gaW50IHsKKy0jaWYgRk1UX1VTRV9OT05UWVBFX1RFTVBMQVRFX1BBUkFNRVRFUlMKKy0gIGlm IGNvbnN0ZXhwciAoc2l6ZW9mLi4uKEFyZ3MpID4gMCkKKy0gICAgcmV0dXJuIGdldF9hcmdfaW5k ZXhfYnlfbmFtZTwwLCBBcmdzLi4uPihuYW1lKTsKKy0jZW5kaWYKKy0gICh2b2lkKW5hbWU7Cist ICByZXR1cm4gaW52YWxpZF9hcmdfaW5kZXg7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBD aGFyLCB0eXBlbmFtZSBFcnJvckhhbmRsZXIsIHR5cGVuYW1lLi4uIEFyZ3M+CistY2xhc3MgZm9y bWF0X3N0cmluZ19jaGVja2VyIHsKKy0gcHJpdmF0ZToKKy0gIHVzaW5nIHBhcnNlX2NvbnRleHRf dHlwZSA9IGNvbXBpbGVfcGFyc2VfY29udGV4dDxDaGFyLCBFcnJvckhhbmRsZXI+OworLSAgZW51 bSB7IG51bV9hcmdzID0gc2l6ZW9mLi4uKEFyZ3MpIH07CistCistICAvLyBGb3JtYXQgc3BlY2lm aWVyIHBhcnNpbmcgZnVuY3Rpb24uCistICB1c2luZyBwYXJzZV9mdW5jID0gY29uc3QgQ2hhciog KCopKHBhcnNlX2NvbnRleHRfdHlwZSYpOworLQorLSAgcGFyc2VfY29udGV4dF90eXBlIGNvbnRl eHRfOworLSAgcGFyc2VfZnVuYyBwYXJzZV9mdW5jc19bbnVtX2FyZ3MgPiAwID8gbnVtX2FyZ3Mg OiAxXTsKKy0KKy0gcHVibGljOgorLSAgZXhwbGljaXQgRk1UX0NPTlNURVhQUiBmb3JtYXRfc3Ry aW5nX2NoZWNrZXIoCistICAgICAgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gZm9ybWF0X3N0ciwg RXJyb3JIYW5kbGVyIGVoKQorLSAgICAgIDogY29udGV4dF8oZm9ybWF0X3N0ciwgbnVtX2FyZ3Ms IGVoKSwKKy0gICAgICAgIHBhcnNlX2Z1bmNzX3smcGFyc2VfZm9ybWF0X3NwZWNzPEFyZ3MsIHBh cnNlX2NvbnRleHRfdHlwZT4uLi59IHt9CistCistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fdGV4 dChjb25zdCBDaGFyKiwgY29uc3QgQ2hhciopIHt9CistCistICBGTVRfQ09OU1RFWFBSIGF1dG8g b25fYXJnX2lkKCkgLT4gaW50IHsgcmV0dXJuIGNvbnRleHRfLm5leHRfYXJnX2lkKCk7IH0KKy0g IEZNVF9DT05TVEVYUFIgYXV0byBvbl9hcmdfaWQoaW50IGlkKSAtPiBpbnQgeworLSAgICByZXR1 cm4gY29udGV4dF8uY2hlY2tfYXJnX2lkKGlkKSwgaWQ7CistICB9CistICBGTVRfQ09OU1RFWFBS IGF1dG8gb25fYXJnX2lkKGJhc2ljX3N0cmluZ192aWV3PENoYXI+IGlkKSAtPiBpbnQgeworLSNp ZiBGTVRfVVNFX05PTlRZUEVfVEVNUExBVEVfUEFSQU1FVEVSUworLSAgICBhdXRvIGluZGV4ID0g Z2V0X2FyZ19pbmRleF9ieV9uYW1lPEFyZ3MuLi4+KGlkKTsKKy0gICAgaWYgKGluZGV4ID09IGlu dmFsaWRfYXJnX2luZGV4KSBvbl9lcnJvcigibmFtZWQgYXJndW1lbnQgaXMgbm90IGZvdW5kIik7 CistICAgIHJldHVybiBjb250ZXh0Xy5jaGVja19hcmdfaWQoaW5kZXgpLCBpbmRleDsKKy0jZWxz ZQorLSAgICAodm9pZClpZDsKKy0gICAgb25fZXJyb3IoImNvbXBpbGUtdGltZSBjaGVja3MgZm9y IG5hbWVkIGFyZ3VtZW50cyByZXF1aXJlIEMrKzIwIHN1cHBvcnQiKTsKKy0gICAgcmV0dXJuIDA7 CistI2VuZGlmCistICB9CistCistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fcmVwbGFjZW1lbnRf ZmllbGQoaW50LCBjb25zdCBDaGFyKikge30KKy0KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBvbl9m b3JtYXRfc3BlY3MoaW50IGlkLCBjb25zdCBDaGFyKiBiZWdpbiwgY29uc3QgQ2hhciopCistICAg ICAgLT4gY29uc3QgQ2hhciogeworLSAgICBjb250ZXh0Xy5hZHZhbmNlX3RvKGNvbnRleHRfLmJl Z2luKCkgKyAoYmVnaW4gLSAmKmNvbnRleHRfLmJlZ2luKCkpKTsKKy0gICAgLy8gaWQgPj0gMCBj aGVjayBpcyBhIHdvcmthcm91bmQgZm9yIGdjYyAxMCBidWcgKCMyMDY1KS4KKy0gICAgcmV0dXJu IGlkID49IDAgJiYgaWQgPCBudW1fYXJncyA/IHBhcnNlX2Z1bmNzX1tpZF0oY29udGV4dF8pIDog YmVnaW47CistICB9CistCistICBGTVRfQ09OU1RFWFBSIHZvaWQgb25fZXJyb3IoY29uc3QgY2hh ciogbWVzc2FnZSkgeworLSAgICBjb250ZXh0Xy5vbl9lcnJvcihtZXNzYWdlKTsKKy0gIH0KKy19 OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzLCB0eXBlbmFtZSBTLAorLSAgICAgICAg ICBlbmFibGVfaWZfdDwoaXNfY29tcGlsZV9zdHJpbmc8Uz46OnZhbHVlKSwgaW50Pj4KKy12b2lk IGNoZWNrX2Zvcm1hdF9zdHJpbmcoUyBmb3JtYXRfc3RyKSB7CistICBGTVRfQ09OU1RFWFBSIGF1 dG8gcyA9IHRvX3N0cmluZ192aWV3KGZvcm1hdF9zdHIpOworLSAgdXNpbmcgY2hlY2tlciA9IGZv cm1hdF9zdHJpbmdfY2hlY2tlcjx0eXBlbmFtZSBTOjpjaGFyX3R5cGUsIGVycm9yX2hhbmRsZXIs CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jdnJlZl90 PEFyZ3M+Li4uPjsKKy0gIEZNVF9DT05TVEVYUFIgYm9vbCBpbnZhbGlkX2Zvcm1hdCA9CistICAg ICAgKHBhcnNlX2Zvcm1hdF9zdHJpbmc8dHJ1ZT4ocywgY2hlY2tlcihzLCB7fSkpLCB0cnVlKTsK Ky0gIGlnbm9yZV91bnVzZWQoaW52YWxpZF9mb3JtYXQpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgQ2hhcj4KKy12b2lkIHZmb3JtYXRfdG8oCistICAgIGJ1ZmZlcjxDaGFyPiYgYnVmLCBi YXNpY19zdHJpbmdfdmlldzxDaGFyPiBmbXQsCistICAgIGJhc2ljX2Zvcm1hdF9hcmdzPEZNVF9C VUZGRVJfQ09OVEVYVCh0eXBlX2lkZW50aXR5X3Q8Q2hhcj4pPiBhcmdzLAorLSAgICBsb2NhbGVf cmVmIGxvYyA9IHt9KTsKKy0KKy1GTVRfQVBJIHZvaWQgdnByaW50X21vamliYWtlKHN0ZDo6RklM RSosIHN0cmluZ192aWV3LCBmb3JtYXRfYXJncyk7CistI2lmbmRlZiBfV0lOMzIKKy1pbmxpbmUg dm9pZCB2cHJpbnRfbW9qaWJha2Uoc3RkOjpGSUxFKiwgc3RyaW5nX3ZpZXcsIGZvcm1hdF9hcmdz KSB7fQorLSNlbmRpZgorLUZNVF9FTkRfREVUQUlMX05BTUVTUEFDRQorLQorLS8vIEEgZm9ybWF0 dGVyIHNwZWNpYWxpemF0aW9uIGZvciB0aGUgY29yZSB0eXBlcyBjb3JyZXNwb25kaW5nIHRvIGRl dGFpbDo6dHlwZQorLS8vIGNvbnN0YW50cy4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h bWUgQ2hhcj4KKy1zdHJ1Y3QgZm9ybWF0dGVyPFQsIENoYXIsCistICAgICAgICAgICAgICAgICBl bmFibGVfaWZfdDxkZXRhaWw6OnR5cGVfY29uc3RhbnQ8VCwgQ2hhcj46OnZhbHVlICE9CistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6OnR5cGU6OmN1c3RvbV90eXBlPj4gewor LSBwcml2YXRlOgorLSAgZGV0YWlsOjpkeW5hbWljX2Zvcm1hdF9zcGVjczxDaGFyPiBzcGVjc187 CistCistIHB1YmxpYzoKKy0gIC8vIFBhcnNlcyBmb3JtYXQgc3BlY2lmaWVycyBzdG9wcGluZyBl aXRoZXIgYXQgdGhlIGVuZCBvZiB0aGUgcmFuZ2Ugb3IgYXQgdGhlCistICAvLyB0ZXJtaW5hdGlu ZyAnfScuCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VDb250ZXh0PgorLSAgRk1UX0NPTlNU RVhQUiBhdXRvIHBhcnNlKFBhcnNlQ29udGV4dCYgY3R4KSAtPiBkZWNsdHlwZShjdHguYmVnaW4o KSkgeworLSAgICBhdXRvIGJlZ2luID0gY3R4LmJlZ2luKCksIGVuZCA9IGN0eC5lbmQoKTsKKy0g ICAgaWYgKGJlZ2luID09IGVuZCkgcmV0dXJuIGJlZ2luOworLSAgICB1c2luZyBoYW5kbGVyX3R5 cGUgPSBkZXRhaWw6OmR5bmFtaWNfc3BlY3NfaGFuZGxlcjxQYXJzZUNvbnRleHQ+OworLSAgICBh dXRvIHR5cGUgPSBkZXRhaWw6OnR5cGVfY29uc3RhbnQ8VCwgQ2hhcj46OnZhbHVlOworLSAgICBh dXRvIGNoZWNrZXIgPQorLSAgICAgICAgZGV0YWlsOjpzcGVjc19jaGVja2VyPGhhbmRsZXJfdHlw ZT4oaGFuZGxlcl90eXBlKHNwZWNzXywgY3R4KSwgdHlwZSk7CistICAgIGF1dG8gaXQgPSBkZXRh aWw6OnBhcnNlX2Zvcm1hdF9zcGVjcyhiZWdpbiwgZW5kLCBjaGVja2VyKTsKKy0gICAgYXV0byBl aCA9IGN0eC5lcnJvcl9oYW5kbGVyKCk7CistICAgIHN3aXRjaCAodHlwZSkgeworLSAgICBjYXNl IGRldGFpbDo6dHlwZTo6bm9uZV90eXBlOgorLSAgICAgIEZNVF9BU1NFUlQoZmFsc2UsICJpbnZh bGlkIGFyZ3VtZW50IHR5cGUiKTsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSBkZXRhaWw6OnR5 cGU6OmJvb2xfdHlwZToKKy0gICAgICBpZiAoc3BlY3NfLnR5cGUgPT0gcHJlc2VudGF0aW9uX3R5 cGU6Om5vbmUgfHwKKy0gICAgICAgICAgc3BlY3NfLnR5cGUgPT0gcHJlc2VudGF0aW9uX3R5cGU6 OnN0cmluZykgeworLSAgICAgICAgYnJlYWs7CistICAgICAgfQorLSAgICAgIEZNVF9GQUxMVEhS T1VHSDsKKy0gICAgY2FzZSBkZXRhaWw6OnR5cGU6OmludF90eXBlOgorLSAgICBjYXNlIGRldGFp bDo6dHlwZTo6dWludF90eXBlOgorLSAgICBjYXNlIGRldGFpbDo6dHlwZTo6bG9uZ19sb25nX3R5 cGU6CistICAgIGNhc2UgZGV0YWlsOjp0eXBlOjp1bG9uZ19sb25nX3R5cGU6CistICAgIGNhc2Ug ZGV0YWlsOjp0eXBlOjppbnQxMjhfdHlwZToKKy0gICAgY2FzZSBkZXRhaWw6OnR5cGU6OnVpbnQx MjhfdHlwZToKKy0gICAgICBkZXRhaWw6OmNoZWNrX2ludF90eXBlX3NwZWMoc3BlY3NfLnR5cGUs IGVoKTsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSBkZXRhaWw6OnR5cGU6OmNoYXJfdHlwZToK Ky0gICAgICBkZXRhaWw6OmNoZWNrX2NoYXJfc3BlY3Moc3BlY3NfLCBlaCk7CistICAgICAgYnJl YWs7CistICAgIGNhc2UgZGV0YWlsOjp0eXBlOjpmbG9hdF90eXBlOgorLSAgICAgIGlmIChkZXRh aWw6OmNvbnN0X2NoZWNrKEZNVF9VU0VfRkxPQVQpKQorLSAgICAgICAgZGV0YWlsOjpwYXJzZV9m bG9hdF90eXBlX3NwZWMoc3BlY3NfLCBlaCk7CistICAgICAgZWxzZQorLSAgICAgICAgRk1UX0FT U0VSVChmYWxzZSwgImZsb2F0IHN1cHBvcnQgZGlzYWJsZWQiKTsKKy0gICAgICBicmVhazsKKy0g ICAgY2FzZSBkZXRhaWw6OnR5cGU6OmRvdWJsZV90eXBlOgorLSAgICAgIGlmIChkZXRhaWw6OmNv bnN0X2NoZWNrKEZNVF9VU0VfRE9VQkxFKSkKKy0gICAgICAgIGRldGFpbDo6cGFyc2VfZmxvYXRf dHlwZV9zcGVjKHNwZWNzXywgZWgpOworLSAgICAgIGVsc2UKKy0gICAgICAgIEZNVF9BU1NFUlQo ZmFsc2UsICJkb3VibGUgc3VwcG9ydCBkaXNhYmxlZCIpOworLSAgICAgIGJyZWFrOworLSAgICBj YXNlIGRldGFpbDo6dHlwZTo6bG9uZ19kb3VibGVfdHlwZToKKy0gICAgICBpZiAoZGV0YWlsOjpj b25zdF9jaGVjayhGTVRfVVNFX0xPTkdfRE9VQkxFKSkKKy0gICAgICAgIGRldGFpbDo6cGFyc2Vf ZmxvYXRfdHlwZV9zcGVjKHNwZWNzXywgZWgpOworLSAgICAgIGVsc2UKKy0gICAgICAgIEZNVF9B U1NFUlQoZmFsc2UsICJsb25nIGRvdWJsZSBzdXBwb3J0IGRpc2FibGVkIik7CistICAgICAgYnJl YWs7CistICAgIGNhc2UgZGV0YWlsOjp0eXBlOjpjc3RyaW5nX3R5cGU6CistICAgICAgZGV0YWls OjpjaGVja19jc3RyaW5nX3R5cGVfc3BlYyhzcGVjc18udHlwZSwgZWgpOworLSAgICAgIGJyZWFr OworLSAgICBjYXNlIGRldGFpbDo6dHlwZTo6c3RyaW5nX3R5cGU6CistICAgICAgZGV0YWlsOjpj aGVja19zdHJpbmdfdHlwZV9zcGVjKHNwZWNzXy50eXBlLCBlaCk7CistICAgICAgYnJlYWs7Cist ICAgIGNhc2UgZGV0YWlsOjp0eXBlOjpwb2ludGVyX3R5cGU6CistICAgICAgZGV0YWlsOjpjaGVj a19wb2ludGVyX3R5cGVfc3BlYyhzcGVjc18udHlwZSwgZWgpOworLSAgICAgIGJyZWFrOworLSAg ICBjYXNlIGRldGFpbDo6dHlwZTo6Y3VzdG9tX3R5cGU6CistICAgICAgLy8gQ3VzdG9tIGZvcm1h dCBzcGVjaWZpZXJzIGFyZSBjaGVja2VkIGluIHBhcnNlIGZ1bmN0aW9ucyBvZgorLSAgICAgIC8v IGZvcm1hdHRlciBzcGVjaWFsaXphdGlvbnMuCistICAgICAgYnJlYWs7CistICAgIH0KKy0gICAg cmV0dXJuIGl0OworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZvcm1hdENvbnRleHQ+ CistICBGTVRfQ09OU1RFWFBSIGF1dG8gZm9ybWF0KGNvbnN0IFQmIHZhbCwgRm9ybWF0Q29udGV4 dCYgY3R4KSBjb25zdAorLSAgICAgIC0+IGRlY2x0eXBlKGN0eC5vdXQoKSk7CistfTsKKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4gc3RydWN0IGJhc2ljX3J1bnRpbWUgeyBiYXNpY19zdHJp bmdfdmlldzxDaGFyPiBzdHI7IH07CistCistLyoqIEEgY29tcGlsZS10aW1lIGZvcm1hdCBzdHJp bmcuICovCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lLi4uIEFyZ3M+IGNsYXNz IGJhc2ljX2Zvcm1hdF9zdHJpbmcgeworLSBwcml2YXRlOgorLSAgYmFzaWNfc3RyaW5nX3ZpZXc8 Q2hhcj4gc3RyXzsKKy0KKy0gcHVibGljOgorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsCistICAg ICAgICAgICAgRk1UX0VOQUJMRV9JRigKKy0gICAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0 aWJsZTxjb25zdCBTJiwgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4+Ojp2YWx1ZSk+CistICBGTVRf Q09OU1RFVkFMIEZNVF9JTkxJTkUgYmFzaWNfZm9ybWF0X3N0cmluZyhjb25zdCBTJiBzKSA6IHN0 cl8ocykgeworLSAgICBzdGF0aWNfYXNzZXJ0KAorLSAgICAgICAgZGV0YWlsOjpjb3VudDwKKy0g ICAgICAgICAgICAoc3RkOjppc19iYXNlX29mPGRldGFpbDo6dmlldywgcmVtb3ZlX3JlZmVyZW5j ZV90PEFyZ3M+Pjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgc3RkOjppc19yZWZlcmVuY2U8QXJn cz46OnZhbHVlKS4uLj4oKSA9PSAwLAorLSAgICAgICAgInBhc3Npbmcgdmlld3MgYXMgbHZhbHVl cyBpcyBkaXNhbGxvd2VkIik7CistI2lmZGVmIEZNVF9IQVNfQ09OU1RFVkFMCistICAgIGlmIGNv bnN0ZXhwciAoZGV0YWlsOjpjb3VudF9uYW1lZF9hcmdzPEFyZ3MuLi4+KCkgPT0KKy0gICAgICAg ICAgICAgICAgICBkZXRhaWw6OmNvdW50X3N0YXRpY2FsbHlfbmFtZWRfYXJnczxBcmdzLi4uPigp KSB7CistICAgICAgdXNpbmcgY2hlY2tlciA9IGRldGFpbDo6Zm9ybWF0X3N0cmluZ19jaGVja2Vy PENoYXIsIGRldGFpbDo6ZXJyb3JfaGFuZGxlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX2N2cmVmX3Q8QXJncz4uLi4+OworLSAg ICAgIGRldGFpbDo6cGFyc2VfZm9ybWF0X3N0cmluZzx0cnVlPihzdHJfLCBjaGVja2VyKHMsIHt9 KSk7CistICAgIH0KKy0jZWxzZQorLSAgICBkZXRhaWw6OmNoZWNrX2Zvcm1hdF9zdHJpbmc8QXJn cy4uLj4ocyk7CistI2VuZGlmCistICB9CistICBiYXNpY19mb3JtYXRfc3RyaW5nKGJhc2ljX3J1 bnRpbWU8Q2hhcj4gcikgOiBzdHJfKHIuc3RyKSB7fQorLQorLSAgRk1UX0lOTElORSBvcGVyYXRv ciBiYXNpY19zdHJpbmdfdmlldzxDaGFyPigpIGNvbnN0IHsgcmV0dXJuIHN0cl87IH0KKy19Owor LQorLSNpZiBGTVRfR0NDX1ZFUlNJT04gJiYgRk1UX0dDQ19WRVJTSU9OIDwgNDA5CistLy8gV29y a2Fyb3VuZCBicm9rZW4gY29udmVyc2lvbiBvbiBvbGRlciBnY2MuCistdGVtcGxhdGUgPHR5cGVu YW1lLi4uIEFyZ3M+IHVzaW5nIGZvcm1hdF9zdHJpbmcgPSBzdHJpbmdfdmlldzsKKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgUz4gYXV0byBydW50aW1lKGNvbnN0IFMmIHMpIC0+IGJhc2ljX3N0cmluZ192 aWV3PGNoYXJfdDxTPj4geworLSAgcmV0dXJuIHM7CistfQorLSNlbHNlCistdGVtcGxhdGUgPHR5 cGVuYW1lLi4uIEFyZ3M+CistdXNpbmcgZm9ybWF0X3N0cmluZyA9IGJhc2ljX2Zvcm1hdF9zdHJp bmc8Y2hhciwgdHlwZV9pZGVudGl0eV90PEFyZ3M+Li4uPjsKKy0vKioKKy0gIFxyc3QKKy0gIENy ZWF0ZXMgYSBydW50aW1lIGZvcm1hdCBzdHJpbmcuCistCistICAqKkV4YW1wbGUqKjo6CistCist ICAgIC8vIENoZWNrIGZvcm1hdCBzdHJpbmcgYXQgcnVudGltZSBpbnN0ZWFkIG9mIGNvbXBpbGUt dGltZS4KKy0gICAgZm10OjpwcmludChmbXQ6OnJ1bnRpbWUoIns6ZH0iKSwgIkkgYW0gbm90IGEg bnVtYmVyIik7CistICBcZW5kcnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1lIFM+IGF1dG8g cnVudGltZShjb25zdCBTJiBzKSAtPiBiYXNpY19ydW50aW1lPGNoYXJfdDxTPj4geworLSAgcmV0 dXJuIHt7c319OworLX0KKy0jZW5kaWYKKy0KKy1GTVRfQVBJIGF1dG8gdmZvcm1hdChzdHJpbmdf dmlldyBmbXQsIGZvcm1hdF9hcmdzIGFyZ3MpIC0+IHN0ZDo6c3RyaW5nOworLQorLS8qKgorLSAg XHJzdAorLSAgRm9ybWF0cyBgYGFyZ3NgYCBhY2NvcmRpbmcgdG8gc3BlY2lmaWNhdGlvbnMgaW4g YGBmbXRgYCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0CistICBhcyBhIHN0cmluZy4KKy0KKy0gICoq RXhhbXBsZSoqOjoKKy0KKy0gICAgI2luY2x1ZGUgPGZtdC9jb3JlLmg+CistICAgIHN0ZDo6c3Ry aW5nIG1lc3NhZ2UgPSBmbXQ6OmZvcm1hdCgiVGhlIGFuc3dlciBpcyB7fS4iLCA0Mik7CistICBc ZW5kcnN0CistKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVD4KKy1GTVRfTk9ESVNDQVJEIEZN VF9JTkxJTkUgYXV0byBmb3JtYXQoZm9ybWF0X3N0cmluZzxULi4uPiBmbXQsIFQmJi4uLiBhcmdz KQorLSAgICAtPiBzdGQ6OnN0cmluZyB7CistICByZXR1cm4gdmZvcm1hdChmbXQsIGZtdDo6bWFr ZV9mb3JtYXRfYXJncyhhcmdzLi4uKSk7CistfQorLQorLS8qKiBGb3JtYXRzIGEgc3RyaW5nIGFu ZCB3cml0ZXMgdGhlIG91dHB1dCB0byBgYG91dGBgLiAqLworLXRlbXBsYXRlIDx0eXBlbmFtZSBP dXRwdXRJdCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRihkZXRhaWw6OmlzX291dHB1dF9pdGVy YXRvcjxPdXRwdXRJdCwgY2hhcj46OnZhbHVlKT4KKy1hdXRvIHZmb3JtYXRfdG8oT3V0cHV0SXQg b3V0LCBzdHJpbmdfdmlldyBmbXQsIGZvcm1hdF9hcmdzIGFyZ3MpIC0+IE91dHB1dEl0IHsKKy0g IHVzaW5nIGRldGFpbDo6Z2V0X2J1ZmZlcjsKKy0gIGF1dG8mJiBidWYgPSBnZXRfYnVmZmVyPGNo YXI+KG91dCk7CistICBkZXRhaWw6OnZmb3JtYXRfdG8oYnVmLCBmbXQsIGFyZ3MsIHt9KTsKKy0g IHJldHVybiBkZXRhaWw6OmdldF9pdGVyYXRvcihidWYpOworLX0KKy0KKy0vKioKKy0gXHJzdAor LSBGb3JtYXRzIGBgYXJnc2BgIGFjY29yZGluZyB0byBzcGVjaWZpY2F0aW9ucyBpbiBgYGZtdGBg LCB3cml0ZXMgdGhlIHJlc3VsdCB0bworLSB0aGUgb3V0cHV0IGl0ZXJhdG9yIGBgb3V0YGAgYW5k IHJldHVybnMgdGhlIGl0ZXJhdG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgb3V0cHV0CistIHJhbmdl LiBgZm9ybWF0X3RvYCBkb2VzIG5vdCBhcHBlbmQgYSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rl ci4KKy0KKy0gKipFeGFtcGxlKio6OgorLQorLSAgIGF1dG8gb3V0ID0gc3RkOjp2ZWN0b3I8Y2hh cj4oKTsKKy0gICBmbXQ6OmZvcm1hdF90byhzdGQ6OmJhY2tfaW5zZXJ0ZXIob3V0KSwgInt9Iiwg NDIpOworLSBcZW5kcnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0LCB0eXBl bmFtZS4uLiBULAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNfb3V0cHV0X2l0 ZXJhdG9yPE91dHB1dEl0LCBjaGFyPjo6dmFsdWUpPgorLUZNVF9JTkxJTkUgYXV0byBmb3JtYXRf dG8oT3V0cHV0SXQgb3V0LCBmb3JtYXRfc3RyaW5nPFQuLi4+IGZtdCwgVCYmLi4uIGFyZ3MpCist ICAgIC0+IE91dHB1dEl0IHsKKy0gIHJldHVybiB2Zm9ybWF0X3RvKG91dCwgZm10LCBmbXQ6Om1h a2VfZm9ybWF0X2FyZ3MoYXJncy4uLikpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0 cHV0SXQ+IHN0cnVjdCBmb3JtYXRfdG9fbl9yZXN1bHQgeworLSAgLyoqIEl0ZXJhdG9yIHBhc3Qg dGhlIGVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlLiAqLworLSAgT3V0cHV0SXQgb3V0OworLSAgLyoq IFRvdGFsIChub3QgdHJ1bmNhdGVkKSBvdXRwdXQgc2l6ZS4gKi8KKy0gIHNpemVfdCBzaXplOwor LX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZS4uLiBULAorLSAg ICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNfb3V0cHV0X2l0ZXJhdG9yPE91dHB1dEl0 LCBjaGFyPjo6dmFsdWUpPgorLWF1dG8gdmZvcm1hdF90b19uKE91dHB1dEl0IG91dCwgc2l6ZV90 IG4sIHN0cmluZ192aWV3IGZtdCwgZm9ybWF0X2FyZ3MgYXJncykKKy0gICAgLT4gZm9ybWF0X3Rv X25fcmVzdWx0PE91dHB1dEl0PiB7CistICB1c2luZyB0cmFpdHMgPSBkZXRhaWw6OmZpeGVkX2J1 ZmZlcl90cmFpdHM7CistICBhdXRvIGJ1ZiA9IGRldGFpbDo6aXRlcmF0b3JfYnVmZmVyPE91dHB1 dEl0LCBjaGFyLCB0cmFpdHM+KG91dCwgbik7CistICBkZXRhaWw6OnZmb3JtYXRfdG8oYnVmLCBm bXQsIGFyZ3MsIHt9KTsKKy0gIHJldHVybiB7YnVmLm91dCgpLCBidWYuY291bnQoKX07CistfQor LQorLS8qKgorLSAgXHJzdAorLSAgRm9ybWF0cyBgYGFyZ3NgYCBhY2NvcmRpbmcgdG8gc3BlY2lm aWNhdGlvbnMgaW4gYGBmbXRgYCwgd3JpdGVzIHVwIHRvIGBgbmBgCistICBjaGFyYWN0ZXJzIG9m IHRoZSByZXN1bHQgdG8gdGhlIG91dHB1dCBpdGVyYXRvciBgYG91dGBgIGFuZCByZXR1cm5zIHRo ZSB0b3RhbAorLSAgKG5vdCB0cnVuY2F0ZWQpIG91dHB1dCBzaXplIGFuZCB0aGUgaXRlcmF0b3Ig cGFzdCB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCistICBgZm9ybWF0X3RvX25gIGRvZXMg bm90IGFwcGVuZCBhIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgorLSAgXGVuZHJzdAorLSAq LworLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUuLi4gVCwKKy0gICAgICAg ICAgRk1UX0VOQUJMRV9JRihkZXRhaWw6OmlzX291dHB1dF9pdGVyYXRvcjxPdXRwdXRJdCwgY2hh cj46OnZhbHVlKT4KKy1GTVRfSU5MSU5FIGF1dG8gZm9ybWF0X3RvX24oT3V0cHV0SXQgb3V0LCBz aXplX3QgbiwgZm9ybWF0X3N0cmluZzxULi4uPiBmbXQsCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFQmJi4uLiBhcmdzKSAtPiBmb3JtYXRfdG9fbl9yZXN1bHQ8T3V0cHV0SXQ+IHsKKy0g IHJldHVybiB2Zm9ybWF0X3RvX24ob3V0LCBuLCBmbXQsIGZtdDo6bWFrZV9mb3JtYXRfYXJncyhh cmdzLi4uKSk7CistfQorLQorLS8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcnMgaW4gdGhl IG91dHB1dCBvZiBgYGZvcm1hdChmbXQsIGFyZ3MuLi4pYGAuICovCistdGVtcGxhdGUgPHR5cGVu YW1lLi4uIFQ+CistRk1UX05PRElTQ0FSRCBGTVRfSU5MSU5FIGF1dG8gZm9ybWF0dGVkX3NpemUo Zm9ybWF0X3N0cmluZzxULi4uPiBmbXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVCYmLi4uIGFyZ3MpIC0+IHNpemVfdCB7CistICBhdXRvIGJ1ZiA9IGRl dGFpbDo6Y291bnRpbmdfYnVmZmVyPD4oKTsKKy0gIGRldGFpbDo6dmZvcm1hdF90byhidWYsIHN0 cmluZ192aWV3KGZtdCksIGZtdDo6bWFrZV9mb3JtYXRfYXJncyhhcmdzLi4uKSwge30pOworLSAg cmV0dXJuIGJ1Zi5jb3VudCgpOworLX0KKy0KKy1GTVRfQVBJIHZvaWQgdnByaW50KHN0cmluZ192 aWV3IGZtdCwgZm9ybWF0X2FyZ3MgYXJncyk7CistRk1UX0FQSSB2b2lkIHZwcmludChzdGQ6OkZJ TEUqIGYsIHN0cmluZ192aWV3IGZtdCwgZm9ybWF0X2FyZ3MgYXJncyk7CistCistLyoqCistICBc cnN0CistICBGb3JtYXRzIGBgYXJnc2BgIGFjY29yZGluZyB0byBzcGVjaWZpY2F0aW9ucyBpbiBg YGZtdGBgIGFuZCB3cml0ZXMgdGhlIG91dHB1dAorLSAgdG8gYGBzdGRvdXRgYC4KKy0KKy0gICoq RXhhbXBsZSoqOjoKKy0KKy0gICAgZm10OjpwcmludCgiRWxhcHNlZCB0aW1lOiB7MDouMmZ9IHNl Y29uZHMiLCAxLjIzKTsKKy0gIFxlbmRyc3QKKy0gKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g VD4KKy1GTVRfSU5MSU5FIHZvaWQgcHJpbnQoZm9ybWF0X3N0cmluZzxULi4uPiBmbXQsIFQmJi4u LiBhcmdzKSB7CistICBjb25zdCBhdXRvJiB2YXJncyA9IGZtdDo6bWFrZV9mb3JtYXRfYXJncyhh cmdzLi4uKTsKKy0gIHJldHVybiBkZXRhaWw6OmlzX3V0ZjgoKSA/IHZwcmludChmbXQsIHZhcmdz KQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjp2cHJpbnRfbW9qaWJha2Uo c3Rkb3V0LCBmbXQsIHZhcmdzKTsKKy19CistCistLyoqCistICBccnN0CistICBGb3JtYXRzIGBg YXJnc2BgIGFjY29yZGluZyB0byBzcGVjaWZpY2F0aW9ucyBpbiBgYGZtdGBgIGFuZCB3cml0ZXMg dGhlCistICBvdXRwdXQgdG8gdGhlIGZpbGUgYGBmYGAuCistCistICAqKkV4YW1wbGUqKjo6Cist CistICAgIGZtdDo6cHJpbnQoc3RkZXJyLCAiRG9uJ3Qge30hIiwgInBhbmljIik7CistICBcZW5k cnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFQ+CistRk1UX0lOTElORSB2b2lkIHBy aW50KHN0ZDo6RklMRSogZiwgZm9ybWF0X3N0cmluZzxULi4uPiBmbXQsIFQmJi4uLiBhcmdzKSB7 CistICBjb25zdCBhdXRvJiB2YXJncyA9IGZtdDo6bWFrZV9mb3JtYXRfYXJncyhhcmdzLi4uKTsK Ky0gIHJldHVybiBkZXRhaWw6OmlzX3V0ZjgoKSA/IHZwcmludChmLCBmbXQsIHZhcmdzKQorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjp2cHJpbnRfbW9qaWJha2UoZiwgZm10 LCB2YXJncyk7CistfQorLQorLUZNVF9NT0RVTEVfRVhQT1JUX0VORAorLUZNVF9HQ0NfUFJBR01B KCJHQ0MgcG9wX29wdGlvbnMiKQorLUZNVF9FTkRfTkFNRVNQQUNFCistCistI2lmZGVmIEZNVF9I RUFERVJfT05MWQorLSMgIGluY2x1ZGUgImZvcm1hdC5oIgorLSNlbmRpZgorLSNlbmRpZiAgLy8g Rk1UX0NPUkVfSF8KK2RpZmYgLS1naXQgYS9pbmNsdWRlL2RwcC9mbXQvZm9ybWF0LWlubC5oIGIv aW5jbHVkZS9kcHAvZm10L2Zvcm1hdC1pbmwuaAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCA1OTAyYmYxLi4wMDAwMDAwCistLS0gYS9pbmNsdWRlL2RwcC9mbXQvZm9ybWF0LWlubC5o CisrKysgL2Rldi9udWxsCitAQCAtMSwyNjQzICswLDAgQEAKKy0vLyBGb3JtYXR0aW5nIGxpYnJh cnkgZm9yIEMrKyAtIGltcGxlbWVudGF0aW9uCistLy8KKy0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg LSAyMDE2LCBWaWN0b3IgWnZlcm92aWNoCistLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0vLwor LS8vIEZvciB0aGUgbGljZW5zZSBpbmZvcm1hdGlvbiByZWZlciB0byBmb3JtYXQuaC4KKy0KKy0j aWZuZGVmIEZNVF9GT1JNQVRfSU5MX0hfCistI2RlZmluZSBGTVRfRk9STUFUX0lOTF9IXworLQor LSNpbmNsdWRlIDxhbGdvcml0aG0+CistI2luY2x1ZGUgPGNjdHlwZT4KKy0jaW5jbHVkZSA8Y2Vy cm5vPiAgLy8gZXJybm8KKy0jaW5jbHVkZSA8Y2xpbWl0cz4KKy0jaW5jbHVkZSA8Y21hdGg+Cist I2luY2x1ZGUgPGNzdGRhcmc+CistI2luY2x1ZGUgPGNzdHJpbmc+ICAvLyBzdGQ6Om1lbW1vdmUK Ky0jaW5jbHVkZSA8Y3djaGFyPgorLSNpbmNsdWRlIDxleGNlcHRpb24+CistCistI2lmbmRlZiBG TVRfU1RBVElDX1RIT1VTQU5EU19TRVBBUkFUT1IKKy0jICBpbmNsdWRlIDxsb2NhbGU+CistI2Vu ZGlmCistCistI2lmZGVmIF9XSU4zMgorLSMgIGluY2x1ZGUgPGlvLmg+ICAvLyBfaXNhdHR5Cist I2VuZGlmCistCistI2luY2x1ZGUgImZvcm1hdC5oIgorLQorLUZNVF9CRUdJTl9OQU1FU1BBQ0UK Ky1uYW1lc3BhY2UgZGV0YWlsIHsKKy0KKy1GTVRfRlVOQyB2b2lkIGFzc2VydF9mYWlsKGNvbnN0 IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlKSB7CistICAvLyBVc2Ug dW5jaGVja2VkIHN0ZDo6ZnByaW50ZiB0byBhdm9pZCB0cmlnZ2VyaW5nIGFub3RoZXIgYXNzZXJ0 aW9uIHdoZW4KKy0gIC8vIHdyaXRpbmcgdG8gc3RkZXJyIGZhaWxzCistICBzdGQ6OmZwcmludGYo c3RkZXJyLCAiJXM6JWQ6IGFzc2VydGlvbiBmYWlsZWQ6ICVzIiwgZmlsZSwgbGluZSwgbWVzc2Fn ZSk7CistICAvLyBDaG9zZW4gaW5zdGVhZCBvZiBzdGQ6OmFib3J0IHRvIHNhdGlzZnkgQ2xhbmcg aW4gQ1VEQSBtb2RlIGR1cmluZyBkZXZpY2UKKy0gIC8vIGNvZGUgcGFzcy4KKy0gIHN0ZDo6dGVy bWluYXRlKCk7CistfQorLQorLUZNVF9GVU5DIHZvaWQgdGhyb3dfZm9ybWF0X2Vycm9yKGNvbnN0 IGNoYXIqIG1lc3NhZ2UpIHsKKy0gIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IobWVzc2FnZSkpOwor LX0KKy0KKy0jaWZuZGVmIF9NU0NfVkVSCistIyAgZGVmaW5lIEZNVF9TTlBSSU5URiBzbnByaW50 ZgorLSNlbHNlICAvLyBfTVNDX1ZFUgorLWlubGluZSBpbnQgZm10X3NucHJpbnRmKGNoYXIqIGJ1 ZmZlciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7CistICB2YV9saXN0 IGFyZ3M7CistICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworLSAgaW50IHJlc3VsdCA9IHZzbnBy aW50Zl9zKGJ1ZmZlciwgc2l6ZSwgX1RSVU5DQVRFLCBmb3JtYXQsIGFyZ3MpOworLSAgdmFfZW5k KGFyZ3MpOworLSAgcmV0dXJuIHJlc3VsdDsKKy19CistIyAgZGVmaW5lIEZNVF9TTlBSSU5URiBm bXRfc25wcmludGYKKy0jZW5kaWYgIC8vIF9NU0NfVkVSCistCistRk1UX0ZVTkMgdm9pZCBmb3Jt YXRfZXJyb3JfY29kZShkZXRhaWw6OmJ1ZmZlcjxjaGFyPiYgb3V0LCBpbnQgZXJyb3JfY29kZSwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ192aWV3IG1lc3NhZ2UpIEZN VF9OT0VYQ0VQVCB7CistICAvLyBSZXBvcnQgZXJyb3IgY29kZSBtYWtpbmcgc3VyZSB0aGF0IHRo ZSBvdXRwdXQgZml0cyBpbnRvCistICAvLyBpbmxpbmVfYnVmZmVyX3NpemUgdG8gYXZvaWQgZHlu YW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsCistICAvLyBiYWRfYWxsb2MuCist ICBvdXQudHJ5X3Jlc2l6ZSgwKTsKKy0gIHN0YXRpYyBjb25zdCBjaGFyIFNFUFtdID0gIjogIjsK Ky0gIHN0YXRpYyBjb25zdCBjaGFyIEVSUk9SX1NUUltdID0gImVycm9yICI7CistICAvLyBTdWJ0 cmFjdCAyIHRvIGFjY291bnQgZm9yIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVycyBpbiBTRVAg YW5kIEVSUk9SX1NUUi4KKy0gIHNpemVfdCBlcnJvcl9jb2RlX3NpemUgPSBzaXplb2YoU0VQKSAr IHNpemVvZihFUlJPUl9TVFIpIC0gMjsKKy0gIGF1dG8gYWJzX3ZhbHVlID0gc3RhdGljX2Nhc3Q8 dWludDMyX29yXzY0X29yXzEyOF90PGludD4+KGVycm9yX2NvZGUpOworLSAgaWYgKGRldGFpbDo6 aXNfbmVnYXRpdmUoZXJyb3JfY29kZSkpIHsKKy0gICAgYWJzX3ZhbHVlID0gMCAtIGFic192YWx1 ZTsKKy0gICAgKytlcnJvcl9jb2RlX3NpemU7CistICB9CistICBlcnJvcl9jb2RlX3NpemUgKz0g ZGV0YWlsOjp0b191bnNpZ25lZChkZXRhaWw6OmNvdW50X2RpZ2l0cyhhYnNfdmFsdWUpKTsKKy0g IGF1dG8gaXQgPSBidWZmZXJfYXBwZW5kZXI8Y2hhcj4ob3V0KTsKKy0gIGlmIChtZXNzYWdlLnNp emUoKSA8PSBpbmxpbmVfYnVmZmVyX3NpemUgLSBlcnJvcl9jb2RlX3NpemUpCistICAgIGZvcm1h dF90byhpdCwgRk1UX1NUUklORygie317fSIpLCBtZXNzYWdlLCBTRVApOworLSAgZm9ybWF0X3Rv KGl0LCBGTVRfU1RSSU5HKCJ7fXt9IiksIEVSUk9SX1NUUiwgZXJyb3JfY29kZSk7CistICBGTVRf QVNTRVJUKG91dC5zaXplKCkgPD0gaW5saW5lX2J1ZmZlcl9zaXplLCAiIik7CistfQorLQorLUZN VF9GVU5DIHZvaWQgcmVwb3J0X2Vycm9yKGZvcm1hdF9mdW5jIGZ1bmMsIGludCBlcnJvcl9jb2Rl LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UpIEZNVF9O T0VYQ0VQVCB7CistICBtZW1vcnlfYnVmZmVyIGZ1bGxfbWVzc2FnZTsKKy0gIGZ1bmMoZnVsbF9t ZXNzYWdlLCBlcnJvcl9jb2RlLCBtZXNzYWdlKTsKKy0gIC8vIERvbid0IHVzZSBmd3JpdGVfZnVs bHkgYmVjYXVzZSB0aGUgbGF0dGVyIG1heSB0aHJvdy4KKy0gIGlmIChzdGQ6OmZ3cml0ZShmdWxs X21lc3NhZ2UuZGF0YSgpLCBmdWxsX21lc3NhZ2Uuc2l6ZSgpLCAxLCBzdGRlcnIpID4gMCkKKy0g ICAgc3RkOjpmcHV0YygnXG4nLCBzdGRlcnIpOworLX0KKy0KKy0vLyBBIHdyYXBwZXIgYXJvdW5k IGZ3cml0ZSB0aGF0IHRocm93cyBvbiBlcnJvci4KKy1pbmxpbmUgdm9pZCBmd3JpdGVfZnVsbHko Y29uc3Qgdm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGNvdW50LAorLSAgICAgICAgICAg ICAgICAgICAgICAgICBGSUxFKiBzdHJlYW0pIHsKKy0gIHNpemVfdCB3cml0dGVuID0gc3RkOjpm d3JpdGUocHRyLCBzaXplLCBjb3VudCwgc3RyZWFtKTsKKy0gIGlmICh3cml0dGVuIDwgY291bnQp IEZNVF9USFJPVyhzeXN0ZW1fZXJyb3IoZXJybm8sICJjYW5ub3Qgd3JpdGUgdG8gZmlsZSIpKTsK Ky19CistCistI2lmbmRlZiBGTVRfU1RBVElDX1RIT1VTQU5EU19TRVBBUkFUT1IKKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgTG9jYWxlPgorLWxvY2FsZV9yZWY6OmxvY2FsZV9yZWYoY29uc3QgTG9jYWxl JiBsb2MpIDogbG9jYWxlXygmbG9jKSB7CistICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxM b2NhbGUsIHN0ZDo6bG9jYWxlPjo6dmFsdWUsICIiKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVu YW1lIExvY2FsZT4gTG9jYWxlIGxvY2FsZV9yZWY6OmdldCgpIGNvbnN0IHsKKy0gIHN0YXRpY19h c3NlcnQoc3RkOjppc19zYW1lPExvY2FsZSwgc3RkOjpsb2NhbGU+Ojp2YWx1ZSwgIiIpOworLSAg cmV0dXJuIGxvY2FsZV8gPyAqc3RhdGljX2Nhc3Q8Y29uc3Qgc3RkOjpsb2NhbGUqPihsb2NhbGVf KSA6IHN0ZDo6bG9jYWxlKCk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLUZN VF9GVU5DIGF1dG8gdGhvdXNhbmRzX3NlcF9pbXBsKGxvY2FsZV9yZWYgbG9jKSAtPiB0aG91c2Fu ZHNfc2VwX3Jlc3VsdDxDaGFyPiB7CistICBhdXRvJiBmYWNldCA9IHN0ZDo6dXNlX2ZhY2V0PHN0 ZDo6bnVtcHVuY3Q8Q2hhcj4+KGxvYy5nZXQ8c3RkOjpsb2NhbGU+KCkpOworLSAgYXV0byBncm91 cGluZyA9IGZhY2V0Lmdyb3VwaW5nKCk7CistICBhdXRvIHRob3VzYW5kc19zZXAgPSBncm91cGlu Zy5lbXB0eSgpID8gQ2hhcigpIDogZmFjZXQudGhvdXNhbmRzX3NlcCgpOworLSAgcmV0dXJuIHtz dGQ6Om1vdmUoZ3JvdXBpbmcpLCB0aG91c2FuZHNfc2VwfTsKKy19CistdGVtcGxhdGUgPHR5cGVu YW1lIENoYXI+IEZNVF9GVU5DIENoYXIgZGVjaW1hbF9wb2ludF9pbXBsKGxvY2FsZV9yZWYgbG9j KSB7CistICByZXR1cm4gc3RkOjp1c2VfZmFjZXQ8c3RkOjpudW1wdW5jdDxDaGFyPj4obG9jLmdl dDxzdGQ6OmxvY2FsZT4oKSkKKy0gICAgICAuZGVjaW1hbF9wb2ludCgpOworLX0KKy0jZWxzZQor LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLUZNVF9GVU5DIGF1dG8gdGhvdXNhbmRzX3NlcF9p bXBsKGxvY2FsZV9yZWYpIC0+IHRob3VzYW5kc19zZXBfcmVzdWx0PENoYXI+IHsKKy0gIHJldHVy biB7IlwwMyIsIEZNVF9TVEFUSUNfVEhPVVNBTkRTX1NFUEFSQVRPUn07CistfQorLXRlbXBsYXRl IDx0eXBlbmFtZSBDaGFyPiBGTVRfRlVOQyBDaGFyIGRlY2ltYWxfcG9pbnRfaW1wbChsb2NhbGVf cmVmKSB7CistICByZXR1cm4gJy4nOworLX0KKy0jZW5kaWYKKy19ICAvLyBuYW1lc3BhY2UgZGV0 YWlsCistCistI2lmICFGTVRfTVNDX1ZFUgorLUZNVF9BUEkgRk1UX0ZVTkMgZm9ybWF0X2Vycm9y Ojp+Zm9ybWF0X2Vycm9yKCkgRk1UX05PRVhDRVBUID0gZGVmYXVsdDsKKy0jZW5kaWYKKy0KKy1G TVRfRlVOQyBzdGQ6OnN5c3RlbV9lcnJvciB2c3lzdGVtX2Vycm9yKGludCBlcnJvcl9jb2RlLCBz dHJpbmdfdmlldyBmb3JtYXRfc3RyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9ybWF0X2FyZ3MgYXJncykgeworLSAgYXV0byBlYyA9IHN0ZDo6ZXJyb3JfY29k ZShlcnJvcl9jb2RlLCBzdGQ6OmdlbmVyaWNfY2F0ZWdvcnkoKSk7CistICByZXR1cm4gc3RkOjpz eXN0ZW1fZXJyb3IoZWMsIHZmb3JtYXQoZm9ybWF0X3N0ciwgYXJncykpOworLX0KKy0KKy1uYW1l c3BhY2UgZGV0YWlsIHsKKy0KKy10ZW1wbGF0ZSA8PiBGTVRfRlVOQyBpbnQgY291bnRfZGlnaXRz PDQ+KGRldGFpbDo6ZmFsbGJhY2tfdWludHB0ciBuKSB7CistICAvLyBmYWxsYmFja191aW50cHRy IGlzIGFsd2F5cyBzdG9yZWQgaW4gbGl0dGxlIGVuZGlhbi4KKy0gIGludCBpID0gc3RhdGljX2Nh c3Q8aW50PihzaXplb2Yodm9pZCopKSAtIDE7CistICB3aGlsZSAoaSA+IDAgJiYgbi52YWx1ZVtp XSA9PSAwKSAtLWk7CistICBhdXRvIGNoYXJfZGlnaXRzID0gc3RkOjpudW1lcmljX2xpbWl0czx1 bnNpZ25lZCBjaGFyPjo6ZGlnaXRzIC8gNDsKKy0gIHJldHVybiBpID49IDAgPyBpICogY2hhcl9k aWdpdHMgKyBjb3VudF9kaWdpdHM8NCwgdW5zaWduZWQ+KG4udmFsdWVbaV0pIDogMTsKKy19Cist CistLy8gbG9nMTAoMikgPSAweDAuNGQxMDRkNDI3ZGU3ZmJjYy4uLgorLXN0YXRpYyBjb25zdGV4 cHIgdWludDY0X3QgbG9nMTBfMl9zaWduaWZpY2FuZCA9IDB4NGQxMDRkNDI3ZGU3ZmJjYzsKKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IHZvaWQ+IHN0cnVjdCBiYXNpY19pbXBsX2RhdGEgewor LSAgLy8gTm9ybWFsaXplZCA2NC1iaXQgc2lnbmlmaWNhbmRzIG9mIHBvdygxMCwgayksIGZvciBr ID0gLTM0OCwgLTM0MCwgLi4uLCAzNDAuCistICAvLyBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJ5IHN1 cHBvcnQvY29tcHV0ZS1wb3dlcnMucHkuCistICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHBv dzEwX3NpZ25pZmljYW5kc1s4N10gPSB7CistICAgICAgMHhmYThmZDVhMDA4MWMwMjg4LCAweGJh YWVlMTdmYTIzZWJmNzYsIDB4OGIxNmZiMjAzMDU1YWM3NiwKKy0gICAgICAweGNmNDI4OTRhNWRj ZTM1ZWEsIDB4OWE2YmIwYWE1NTY1M2IyZCwgMHhlNjFhY2YwMzNkMWE0NWRmLAorLSAgICAgIDB4 YWI3MGZlMTdjNzlhYzZjYSwgMHhmZjc3YjFmY2JlYmNkYzRmLCAweGJlNTY5MWVmNDE2YmQ2MGMs CistICAgICAgMHg4ZGQwMWZhZDkwN2ZmYzNjLCAweGQzNTE1YzI4MzE1NTlhODMsIDB4OWQ3MWFj OGZhZGE2YzliNSwKKy0gICAgICAweGVhOWMyMjc3MjNlZThiY2IsIDB4YWVjYzQ5OTE0MDc4NTM2 ZCwgMHg4MjNjMTI3OTVkYjZjZTU3LAorLSAgICAgIDB4YzIxMDk0MzY0ZGZiNTYzNywgMHg5MDk2 ZWE2ZjM4NDg5ODRmLCAweGQ3NzQ4NWNiMjU4MjNhYzcsCistICAgICAgMHhhMDg2Y2ZjZDk3YmY5 N2Y0LCAweGVmMzQwYTk4MTcyYWFjZTUsIDB4YjIzODY3ZmIyYTM1YjI4ZSwKKy0gICAgICAweDg0 YzhkNGRmZDJjNjNmM2IsIDB4YzVkZDQ0MjcxYWQzY2RiYSwgMHg5MzZiOWZjZWJiMjVjOTk2LAor LSAgICAgIDB4ZGJhYzZjMjQ3ZDYyYTU4NCwgMHhhM2FiNjY1ODBkNWZkYWY2LCAweGYzZTJmODkz ZGVjM2YxMjYsCistICAgICAgMHhiNWI1YWRhOGFhZmY4MGI4LCAweDg3NjI1ZjA1NmM3YzRhOGIs IDB4YzliY2ZmNjAzNGMxMzA1MywKKy0gICAgICAweDk2NGU4NThjOTFiYTI2NTUsIDB4ZGZmOTc3 MjQ3MDI5N2ViZCwgMHhhNmRmYmQ5ZmI4ZTViODhmLAorLSAgICAgIDB4ZjhhOTVmY2Y4ODc0N2Q5 NCwgMHhiOTQ0NzA5MzhmYTg5YmNmLCAweDhhMDhmMGY4YmYwZjE1NmIsCistICAgICAgMHhjZGIw MjU1NTY1MzEzMWI2LCAweDk5M2ZlMmM2ZDA3YjdmYWMsIDB4ZTQ1YzEwYzQyYTJiM2IwNiwKKy0g ICAgICAweGFhMjQyNDk5Njk3MzkyZDMsIDB4ZmQ4N2I1ZjI4MzAwY2EwZSwgMHhiY2U1MDg2NDky MTExYWViLAorLSAgICAgIDB4OGNiY2NjMDk2ZjUwODhjYywgMHhkMWI3MTc1OGUyMTk2NTJjLCAw eDljNDAwMDAwMDAwMDAwMDAsCistICAgICAgMHhlOGQ0YTUxMDAwMDAwMDAwLCAweGFkNzhlYmM1 YWM2MjAwMDAsIDB4ODEzZjM5NzhmODk0MDk4NCwKKy0gICAgICAweGMwOTdjZTdiYzkwNzE1YjMs IDB4OGY3ZTMyY2U3YmVhNWM3MCwgMHhkNWQyMzhhNGFiZTk4MDY4LAorLSAgICAgIDB4OWY0ZjI3 MjYxNzlhMjI0NSwgMHhlZDYzYTIzMWQ0YzRmYjI3LCAweGIwZGU2NTM4OGNjOGFkYTgsCistICAg ICAgMHg4M2M3MDg4ZTFhYWI2NWRiLCAweGM0NWQxZGY5NDI3MTFkOWEsIDB4OTI0ZDY5MmNhNjFi ZTc1OCwKKy0gICAgICAweGRhMDFlZTY0MWE3MDhkZWEsIDB4YTI2ZGEzOTk5YWVmNzc0YSwgMHhm MjA5Nzg3YmI0N2Q2Yjg1LAorLSAgICAgIDB4YjQ1NGU0YTE3OWRkMTg3NywgMHg4NjViODY5MjVi OWJjNWMyLCAweGM4MzU1M2M1Yzg5NjVkM2QsCistICAgICAgMHg5NTJhYjQ1Y2ZhOTdhMGIzLCAw eGRlNDY5ZmJkOTlhMDVmZTMsIDB4YTU5YmMyMzRkYjM5OGMyNSwKKy0gICAgICAweGY2YzY5YTcy YTM5ODlmNWMsIDB4YjdkY2JmNTM1NGU5YmVjZSwgMHg4OGZjZjMxN2YyMjI0MWUyLAorLSAgICAg IDB4Y2MyMGNlOWJkMzVjNzhhNSwgMHg5ODE2NWFmMzdiMjE1M2RmLCAweGUyYTBiNWRjOTcxZjMw M2EsCistICAgICAgMHhhOGQ5ZDE1MzVjZTNiMzk2LCAweGZiOWI3Y2Q5YTRhNzQ0M2MsIDB4YmI3 NjRjNGNhN2E0NDQxMCwKKy0gICAgICAweDhiYWI4ZWVmYjY0MDljMWEsIDB4ZDAxZmVmMTBhNjU3 ODQyYywgMHg5YjEwYTRlNWU5OTEzMTI5LAorLSAgICAgIDB4ZTcxMDliZmJhMTljMGM5ZCwgMHhh YzI4MjBkOTYyM2JmNDI5LCAweDgwNDQ0YjVlN2FhN2NmODUsCistICAgICAgMHhiZjIxZTQ0MDAz YWNkZDJkLCAweDhlNjc5YzJmNWU0NGZmOGYsIDB4ZDQzMzE3OWQ5YzhjYjg0MSwKKy0gICAgICAw eDllMTlkYjkyYjRlMzFiYTksIDB4ZWI5NmJmNmViYWRmNzdkOSwgMHhhZjg3MDIzYjliZjBlZTZi LAorLSAgfTsKKy0KKy0jaWYgRk1UX0dDQ19WRVJTSU9OICYmIEZNVF9HQ0NfVkVSU0lPTiA8IDQw OQorLSMgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCistIyAgcHJhZ21hIEdDQyBkaWFnbm9z dGljIGlnbm9yZWQgIi1XbmFycm93aW5nIgorLSNlbmRpZgorLSAgLy8gQmluYXJ5IGV4cG9uZW50 cyBvZiBwb3coMTAsIGspLCBmb3IgayA9IC0zNDgsIC0zNDAsIC4uLiwgMzQwLCBjb3JyZXNwb25k aW5nCistICAvLyB0byBzaWduaWZpY2FuZHMgYWJvdmUuCistICBzdGF0aWMgY29uc3RleHByIGlu dDE2X3QgcG93MTBfZXhwb25lbnRzWzg3XSA9IHsKKy0gICAgICAtMTIyMCwgLTExOTMsIC0xMTY2 LCAtMTE0MCwgLTExMTMsIC0xMDg3LCAtMTA2MCwgLTEwMzQsIC0xMDA3LCAtOTgwLCAtOTU0LAor LSAgICAgIC05MjcsICAtOTAxLCAgLTg3NCwgIC04NDcsICAtODIxLCAgLTc5NCwgIC03NjgsICAt NzQxLCAgLTcxNSwgIC02ODgsIC02NjEsCistICAgICAgLTYzNSwgIC02MDgsICAtNTgyLCAgLTU1 NSwgIC01MjksICAtNTAyLCAgLTQ3NSwgIC00NDksICAtNDIyLCAgLTM5NiwgLTM2OSwKKy0gICAg ICAtMzQzLCAgLTMxNiwgIC0yODksICAtMjYzLCAgLTIzNiwgIC0yMTAsICAtMTgzLCAgLTE1Nywg IC0xMzAsICAtMTAzLCAtNzcsCistICAgICAgLTUwLCAgIC0yNCwgICAzLCAgICAgMzAsICAgIDU2 LCAgICA4MywgICAgMTA5LCAgIDEzNiwgICAxNjIsICAgMTg5LCAgMjE2LAorLSAgICAgIDI0Miwg ICAyNjksICAgMjk1LCAgIDMyMiwgICAzNDgsICAgMzc1LCAgIDQwMiwgICA0MjgsICAgNDU1LCAg IDQ4MSwgIDUwOCwKKy0gICAgICA1MzQsICAgNTYxLCAgIDU4OCwgICA2MTQsICAgNjQxLCAgIDY2 NywgICA2OTQsICAgNzIwLCAgIDc0NywgICA3NzQsICA4MDAsCistICAgICAgODI3LCAgIDg1Mywg ICA4ODAsICAgOTA3LCAgIDkzMywgICA5NjAsICAgOTg2LCAgIDEwMTMsICAxMDM5LCAgMTA2Nn07 CistI2lmIEZNVF9HQ0NfVkVSU0lPTiAmJiBGTVRfR0NDX1ZFUlNJT04gPCA0MDkKKy0jICBwcmFn bWEgR0NDIGRpYWdub3N0aWMgcG9wCistI2VuZGlmCistCistICBzdGF0aWMgY29uc3RleHByIHVp bnQ2NF90IHBvd2VyX29mXzEwXzY0WzIwXSA9IHsKKy0gICAgICAxLCBGTVRfUE9XRVJTX09GXzEw KDFVTEwpLCBGTVRfUE9XRVJTX09GXzEwKDEwMDAwMDAwMDBVTEwpLAorLSAgICAgIDEwMDAwMDAw MDAwMDAwMDAwMDAwVUxMfTsKKy19OworLQorLS8vIFRoaXMgaXMgYSBzdHJ1Y3QgcmF0aGVyIHRo YW4gYW4gYWxpYXMgdG8gYXZvaWQgc2hhZG93aW5nIHdhcm5pbmdzIGluIGdjYy4KKy1zdHJ1Y3Qg aW1wbF9kYXRhIDogYmFzaWNfaW1wbF9kYXRhPD4ge307CistCistI2lmIF9fY3BsdXNwbHVzIDwg MjAxNzAzTAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNvbnN0ZXhwciB1aW50NjRfdCBiYXNp Y19pbXBsX2RhdGE8VD46OnBvdzEwX3NpZ25pZmljYW5kc1tdOworLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPiBjb25zdGV4cHIgaW50MTZfdCBiYXNpY19pbXBsX2RhdGE8VD46OnBvdzEwX2V4cG9uZW50 c1tdOworLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjb25zdGV4cHIgdWludDY0X3QgYmFzaWNfaW1w bF9kYXRhPFQ+Ojpwb3dlcl9vZl8xMF82NFtdOworLSNlbmRpZgorLQorLXRlbXBsYXRlIDx0eXBl bmFtZSBUPiBzdHJ1Y3QgYml0cyB7CistICBzdGF0aWMgRk1UX0NPTlNURVhQUl9ERUNMIGNvbnN0 IGludCB2YWx1ZSA9CistICAgICAgc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoVCkgKiBzdGQ6Om51 bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+OjpkaWdpdHMpOworLX07CistCistLy8gUmV0dXJu cyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW5kIGJpdHMgaW4gRmxvYXQgZXhjbHVkaW5nIHRoZSBp bXBsaWNpdCBiaXQuCistdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0PiBjb25zdGV4cHIgaW50IG51 bV9zaWduaWZpY2FuZF9iaXRzKCkgeworLSAgLy8gU3VidHJhY3QgMSB0byBhY2NvdW50IGZvciBh biBpbXBsaWNpdCBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUKKy0gIC8vIG5vcm1hbGl6ZWQg Zm9ybS4KKy0gIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0Pjo6ZGlnaXRzIC0gMTsK Ky19CistCistLy8gQSBmbG9hdGluZy1wb2ludCBudW1iZXIgZiAqIHBvdygyLCBlKS4KKy1zdHJ1 Y3QgZnAgeworLSAgdWludDY0X3QgZjsKKy0gIGludCBlOworLQorLSAgc3RhdGljIGNvbnN0ZXhw ciBjb25zdCBpbnQgbnVtX3NpZ25pZmljYW5kX2JpdHMgPSBiaXRzPGRlY2x0eXBlKGYpPjo6dmFs dWU7CistCistICBjb25zdGV4cHIgZnAoKSA6IGYoMCksIGUoMCkge30KKy0gIGNvbnN0ZXhwciBm cCh1aW50NjRfdCBmX3ZhbCwgaW50IGVfdmFsKSA6IGYoZl92YWwpLCBlKGVfdmFsKSB7fQorLQor LSAgLy8gQ29uc3RydWN0cyBmcCBmcm9tIGFuIElFRUU3NTQgZmxvYXRpbmctcG9pbnQgbnVtYmVy LiBJdCBpcyBhIHRlbXBsYXRlIHRvCistICAvLyBwcmV2ZW50IGNvbXBpbGUgZXJyb3JzIG9uIHN5 c3RlbXMgd2hlcmUgbiBpcyBub3QgSUVFRTc1NC4KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGbG9h dD4gZXhwbGljaXQgRk1UX0NPTlNURVhQUiBmcChGbG9hdCBuKSB7IGFzc2lnbihuKTsgfQorLQor LSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0PgorLSAgdXNpbmcgaXNfc3VwcG9ydGVkID0gYm9v bF9jb25zdGFudDxzaXplb2YoRmxvYXQpID09IHNpemVvZih1aW50NjRfdCkgfHwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEZsb2F0KSA9PSBzaXplb2YodWlu dDMyX3QpPjsKKy0KKy0gIC8vIEFzc2lnbnMgZCB0byB0aGlzIGFuZCByZXR1cm4gdHJ1ZSBpZmYg cHJlZGVjZXNzb3IgaXMgY2xvc2VyIHRoYW4gc3VjY2Vzc29yLgorLSAgdGVtcGxhdGUgPHR5cGVu YW1lIEZsb2F0LCBGTVRfRU5BQkxFX0lGKGlzX3N1cHBvcnRlZDxGbG9hdD46OnZhbHVlKT4KKy0g IEZNVF9DT05TVEVYUFIgYm9vbCBhc3NpZ24oRmxvYXQgbikgeworLSAgICAvLyBBc3N1bWUgZmxv YXQgaXMgaW4gdGhlIGZvcm1hdCBbc2lnbl1bZXhwb25lbnRdW3NpZ25pZmljYW5kXS4KKy0gICAg Y29uc3QgaW50IG51bV9mbG9hdF9zaWduaWZpY2FuZF9iaXRzID0KKy0gICAgICAgIGRldGFpbDo6 bnVtX3NpZ25pZmljYW5kX2JpdHM8RmxvYXQ+KCk7CistICAgIGNvbnN0IHVpbnQ2NF90IGltcGxp Y2l0X2JpdCA9IDFVTEwgPDwgbnVtX2Zsb2F0X3NpZ25pZmljYW5kX2JpdHM7CistICAgIGNvbnN0 IHVpbnQ2NF90IHNpZ25pZmljYW5kX21hc2sgPSBpbXBsaWNpdF9iaXQgLSAxOworLSAgICBjb25z dGV4cHIgYm9vbCBpc19kb3VibGUgPSBzaXplb2YoRmxvYXQpID09IHNpemVvZih1aW50NjRfdCk7 CistICAgIGF1dG8gdSA9IGJpdF9jYXN0PGNvbmRpdGlvbmFsX3Q8aXNfZG91YmxlLCB1aW50NjRf dCwgdWludDMyX3Q+PihuKTsKKy0gICAgZiA9IHUgJiBzaWduaWZpY2FuZF9tYXNrOworLSAgICBj b25zdCB1aW50NjRfdCBleHBvbmVudF9tYXNrID0gKH4wVUxMID4+IDEpICYgfnNpZ25pZmljYW5k X21hc2s7CistICAgIGludCBiaWFzZWRfZSA9CistICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KCh1 ICYgZXhwb25lbnRfbWFzaykgPj4gbnVtX2Zsb2F0X3NpZ25pZmljYW5kX2JpdHMpOworLSAgICAv LyBUaGUgcHJlZGVjZXNzb3IgaXMgY2xvc2VyIGlmIG4gaXMgYSBub3JtYWxpemVkIHBvd2VyIG9m IDIgKGYgPT0gMCkgb3RoZXIKKy0gICAgLy8gdGhhbiB0aGUgc21hbGxlc3Qgbm9ybWFsaXplZCBu dW1iZXIgKGJpYXNlZF9lID4gMSkuCistICAgIGJvb2wgaXNfcHJlZGVjZXNzb3JfY2xvc2VyID0g ZiA9PSAwICYmIGJpYXNlZF9lID4gMTsKKy0gICAgaWYgKGJpYXNlZF9lICE9IDApCistICAgICAg ZiArPSBpbXBsaWNpdF9iaXQ7CistICAgIGVsc2UKKy0gICAgICBiaWFzZWRfZSA9IDE7ICAvLyBT dWJub3JtYWxzIHVzZSBiaWFzZWQgZXhwb25lbnQgMSAobWluIGV4cG9uZW50KS4KKy0gICAgY29u c3QgaW50IGV4cG9uZW50X2JpYXMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0Pjo6bWF4X2V4 cG9uZW50IC0gMTsKKy0gICAgZSA9IGJpYXNlZF9lIC0gZXhwb25lbnRfYmlhcyAtIG51bV9mbG9h dF9zaWduaWZpY2FuZF9iaXRzOworLSAgICByZXR1cm4gaXNfcHJlZGVjZXNzb3JfY2xvc2VyOwor LSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0LCBGTVRfRU5BQkxFX0lGKCFpc19z dXBwb3J0ZWQ8RmxvYXQ+Ojp2YWx1ZSk+CistICBib29sIGFzc2lnbihGbG9hdCkgeworLSAgICBG TVRfQVNTRVJUKGZhbHNlLCAiIik7CistICAgIHJldHVybiBmYWxzZTsKKy0gIH0KKy19OworLQor LS8vIE5vcm1hbGl6ZXMgdGhlIHZhbHVlIGNvbnZlcnRlZCBmcm9tIGRvdWJsZSBhbmQgbXVsdGlw bGllZCBieSAoMSA8PCBTSElGVCkuCistdGVtcGxhdGUgPGludCBTSElGVCA9IDA+IEZNVF9DT05T VEVYUFIgZnAgbm9ybWFsaXplKGZwIHZhbHVlKSB7CistICAvLyBIYW5kbGUgc3Vibm9ybWFscy4K Ky0gIGNvbnN0IHVpbnQ2NF90IGltcGxpY2l0X2JpdCA9IDFVTEwgPDwgbnVtX3NpZ25pZmljYW5k X2JpdHM8ZG91YmxlPigpOworLSAgY29uc3QgYXV0byBzaGlmdGVkX2ltcGxpY2l0X2JpdCA9IGlt cGxpY2l0X2JpdCA8PCBTSElGVDsKKy0gIHdoaWxlICgodmFsdWUuZiAmIHNoaWZ0ZWRfaW1wbGlj aXRfYml0KSA9PSAwKSB7CistICAgIHZhbHVlLmYgPDw9IDE7CistICAgIC0tdmFsdWUuZTsKKy0g IH0KKy0gIC8vIFN1YnRyYWN0IDEgdG8gYWNjb3VudCBmb3IgaGlkZGVuIGJpdC4KKy0gIGNvbnN0 IGF1dG8gb2Zmc2V0ID0KKy0gICAgICBmcDo6bnVtX3NpZ25pZmljYW5kX2JpdHMgLSBudW1fc2ln bmlmaWNhbmRfYml0czxkb3VibGU+KCkgLSBTSElGVCAtIDE7CistICB2YWx1ZS5mIDw8PSBvZmZz ZXQ7CistICB2YWx1ZS5lIC09IG9mZnNldDsKKy0gIHJldHVybiB2YWx1ZTsKKy19CistCistaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShmcCB4LCBmcCB5KSB7IHJldHVybiB4LmYgPT0geS5mICYmIHgu ZSA9PSB5LmU7IH0KKy0KKy0vLyBDb21wdXRlcyBsaHMgKiByaHMgLyBwb3coMiwgNjQpIHJvdW5k ZWQgdG8gbmVhcmVzdCB3aXRoIGhhbGYtdXAgdGllIGJyZWFraW5nLgorLUZNVF9DT05TVEVYUFIg aW5saW5lIHVpbnQ2NF90IG11bHRpcGx5KHVpbnQ2NF90IGxocywgdWludDY0X3QgcmhzKSB7Cist I2lmIEZNVF9VU0VfSU5UMTI4CistICBhdXRvIHByb2R1Y3QgPSBzdGF0aWNfY2FzdDxfX3VpbnQx MjhfdD4obGhzKSAqIHJoczsKKy0gIGF1dG8gZiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihwcm9k dWN0ID4+IDY0KTsKKy0gIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHByb2R1Y3QpICYg KDFVTEwgPDwgNjMpKSAhPSAwID8gZiArIDEgOiBmOworLSNlbHNlCistICAvLyBNdWx0aXBseSAz Mi1iaXQgcGFydHMgb2Ygc2lnbmlmaWNhbmRzLgorLSAgdWludDY0X3QgbWFzayA9ICgxVUxMIDw8 IDMyKSAtIDE7CistICB1aW50NjRfdCBhID0gbGhzID4+IDMyLCBiID0gbGhzICYgbWFzazsKKy0g IHVpbnQ2NF90IGMgPSByaHMgPj4gMzIsIGQgPSByaHMgJiBtYXNrOworLSAgdWludDY0X3QgYWMg PSBhICogYywgYmMgPSBiICogYywgYWQgPSBhICogZCwgYmQgPSBiICogZDsKKy0gIC8vIENvbXB1 dGUgbWlkIDY0LWJpdCBvZiByZXN1bHQgYW5kIHJvdW5kLgorLSAgdWludDY0X3QgbWlkID0gKGJk ID4+IDMyKSArIChhZCAmIG1hc2spICsgKGJjICYgbWFzaykgKyAoMVUgPDwgMzEpOworLSAgcmV0 dXJuIGFjICsgKGFkID4+IDMyKSArIChiYyA+PiAzMikgKyAobWlkID4+IDMyKTsKKy0jZW5kaWYK Ky19CistCistRk1UX0NPTlNURVhQUiBpbmxpbmUgZnAgb3BlcmF0b3IqKGZwIHgsIGZwIHkpIHsK Ky0gIHJldHVybiB7bXVsdGlwbHkoeC5mLCB5LmYpLCB4LmUgKyB5LmUgKyA2NH07CistfQorLQor LS8vIFJldHVybnMgYSBjYWNoZWQgcG93ZXIgb2YgMTAgYGNfayA9IGNfay5mICogcG93KDIsIGNf ay5lKWAgc3VjaCB0aGF0IGl0cworLS8vIChiaW5hcnkpIGV4cG9uZW50IHNhdGlzZmllcyBgbWlu X2V4cG9uZW50IDw9IGNfay5lIDw9IG1pbl9leHBvbmVudCArIDI4YC4KKy1GTVRfQ09OU1RFWFBS IGlubGluZSBmcCBnZXRfY2FjaGVkX3Bvd2VyKGludCBtaW5fZXhwb25lbnQsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHBvdzEwX2V4cG9uZW50KSB7Cist ICBjb25zdCBpbnQgc2hpZnQgPSAzMjsKKy0gIGNvbnN0IGF1dG8gc2lnbmlmaWNhbmQgPSBzdGF0 aWNfY2FzdDxpbnQ2NF90Pihsb2cxMF8yX3NpZ25pZmljYW5kKTsKKy0gIGludCBpbmRleCA9IHN0 YXRpY19jYXN0PGludD4oCistICAgICAgKChtaW5fZXhwb25lbnQgKyBmcDo6bnVtX3NpZ25pZmlj YW5kX2JpdHMgLSAxKSAqIChzaWduaWZpY2FuZCA+PiBzaGlmdCkgKworLSAgICAgICAoKGludDY0 X3QoMSkgPDwgc2hpZnQpIC0gMSkpICAvLyBjZWlsCistICAgICAgPj4gMzIgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGFyaXRobWV0aWMgc2hpZnQKKy0gICk7CistICAvLyBEZWNpbWFsIGV4 cG9uZW50IG9mIHRoZSBmaXJzdCAoc21hbGxlc3QpIGNhY2hlZCBwb3dlciBvZiAxMC4KKy0gIGNv bnN0IGludCBmaXJzdF9kZWNfZXhwID0gLTM0ODsKKy0gIC8vIERpZmZlcmVuY2UgYmV0d2VlbiAy IGNvbnNlY3V0aXZlIGRlY2ltYWwgZXhwb25lbnRzIGluIGNhY2hlZCBwb3dlcnMgb2YgMTAuCist ICBjb25zdCBpbnQgZGVjX2V4cF9zdGVwID0gODsKKy0gIGluZGV4ID0gKGluZGV4IC0gZmlyc3Rf ZGVjX2V4cCAtIDEpIC8gZGVjX2V4cF9zdGVwICsgMTsKKy0gIHBvdzEwX2V4cG9uZW50ID0gZmly c3RfZGVjX2V4cCArIGluZGV4ICogZGVjX2V4cF9zdGVwOworLSAgcmV0dXJuIHtpbXBsX2RhdGE6 OnBvdzEwX3NpZ25pZmljYW5kc1tpbmRleF0sCistICAgICAgICAgIGltcGxfZGF0YTo6cG93MTBf ZXhwb25lbnRzW2luZGV4XX07CistfQorLQorLS8vIEEgc2ltcGxlIGFjY3VtdWxhdG9yIHRvIGhv bGQgdGhlIHN1bXMgb2YgdGVybXMgaW4gYmlnaW50OjpzcXVhcmUgaWYgdWludDEyOF90CistLy8g aXMgbm90IGF2YWlsYWJsZS4KKy1zdHJ1Y3QgYWNjdW11bGF0b3IgeworLSAgdWludDY0X3QgbG93 ZXI7CistICB1aW50NjRfdCB1cHBlcjsKKy0KKy0gIGNvbnN0ZXhwciBhY2N1bXVsYXRvcigpIDog bG93ZXIoMCksIHVwcGVyKDApIHt9CistICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdWlu dDMyX3QoKSBjb25zdCB7CistICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG93ZXIp OworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUiB2b2lkIG9wZXJhdG9yKz0odWludDY0X3Qgbikg eworLSAgICBsb3dlciArPSBuOworLSAgICBpZiAobG93ZXIgPCBuKSArK3VwcGVyOworLSAgfQor LSAgRk1UX0NPTlNURVhQUiB2b2lkIG9wZXJhdG9yPj49KGludCBzaGlmdCkgeworLSAgICBGTVRf QVNTRVJUKHNoaWZ0ID09IDMyLCAiIik7CistICAgICh2b2lkKXNoaWZ0OworLSAgICBsb3dlciA9 ICh1cHBlciA8PCAzMikgfCAobG93ZXIgPj4gMzIpOworLSAgICB1cHBlciA+Pj0gMzI7CistICB9 CistfTsKKy0KKy1jbGFzcyBiaWdpbnQgeworLSBwcml2YXRlOgorLSAgLy8gQSBiaWdpbnQgaXMg c3RvcmVkIGFzIGFuIGFycmF5IG9mIGJpZ2l0cyAoYmlnIGRpZ2l0cyksIHdpdGggYmlnaXQgYXQg aW5kZXgKKy0gIC8vIDAgYmVpbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50IG9uZS4KKy0gIHVzaW5n IGJpZ2l0ID0gdWludDMyX3Q7CistICB1c2luZyBkb3VibGVfYmlnaXQgPSB1aW50NjRfdDsKKy0g IGVudW0geyBiaWdpdHNfY2FwYWNpdHkgPSAzMiB9OworLSAgYmFzaWNfbWVtb3J5X2J1ZmZlcjxi aWdpdCwgYmlnaXRzX2NhcGFjaXR5PiBiaWdpdHNfOworLSAgaW50IGV4cF87CistCistICBGTVRf Q09OU1RFWFBSMjAgYmlnaXQgb3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0IHsKKy0gICAgcmV0 dXJuIGJpZ2l0c19bdG9fdW5zaWduZWQoaW5kZXgpXTsKKy0gIH0KKy0gIEZNVF9DT05TVEVYUFIy MCBiaWdpdCYgb3BlcmF0b3JbXShpbnQgaW5kZXgpIHsKKy0gICAgcmV0dXJuIGJpZ2l0c19bdG9f dW5zaWduZWQoaW5kZXgpXTsKKy0gIH0KKy0KKy0gIHN0YXRpYyBGTVRfQ09OU1RFWFBSX0RFQ0wg Y29uc3QgaW50IGJpZ2l0X2JpdHMgPSBiaXRzPGJpZ2l0Pjo6dmFsdWU7CistCistICBmcmllbmQg c3RydWN0IGZvcm1hdHRlcjxiaWdpbnQ+OworLQorLSAgRk1UX0NPTlNURVhQUjIwIHZvaWQgc3Vi dHJhY3RfYmlnaXRzKGludCBpbmRleCwgYmlnaXQgb3RoZXIsIGJpZ2l0JiBib3Jyb3cpIHsKKy0g ICAgYXV0byByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGVfYmlnaXQ+KCgqdGhpcylbaW5kZXhd KSAtIG90aGVyIC0gYm9ycm93OworLSAgICAoKnRoaXMpW2luZGV4XSA9IHN0YXRpY19jYXN0PGJp Z2l0PihyZXN1bHQpOworLSAgICBib3Jyb3cgPSBzdGF0aWNfY2FzdDxiaWdpdD4ocmVzdWx0ID4+ IChiaWdpdF9iaXRzICogMiAtIDEpKTsKKy0gIH0KKy0KKy0gIEZNVF9DT05TVEVYUFIyMCB2b2lk IHJlbW92ZV9sZWFkaW5nX3plcm9zKCkgeworLSAgICBpbnQgbnVtX2JpZ2l0cyA9IHN0YXRpY19j YXN0PGludD4oYmlnaXRzXy5zaXplKCkpIC0gMTsKKy0gICAgd2hpbGUgKG51bV9iaWdpdHMgPiAw ICYmICgqdGhpcylbbnVtX2JpZ2l0c10gPT0gMCkgLS1udW1fYmlnaXRzOworLSAgICBiaWdpdHNf LnJlc2l6ZSh0b191bnNpZ25lZChudW1fYmlnaXRzICsgMSkpOworLSAgfQorLQorLSAgLy8gQ29t cHV0ZXMgKnRoaXMgLT0gb3RoZXIgYXNzdW1pbmcgYWxpZ25lZCBiaWdpbnRzIGFuZCAqdGhpcyA+ PSBvdGhlci4KKy0gIEZNVF9DT05TVEVYUFIyMCB2b2lkIHN1YnRyYWN0X2FsaWduZWQoY29uc3Qg YmlnaW50JiBvdGhlcikgeworLSAgICBGTVRfQVNTRVJUKG90aGVyLmV4cF8gPj0gZXhwXywgInVu YWxpZ25lZCBiaWdpbnRzIik7CistICAgIEZNVF9BU1NFUlQoY29tcGFyZSgqdGhpcywgb3RoZXIp ID49IDAsICIiKTsKKy0gICAgYmlnaXQgYm9ycm93ID0gMDsKKy0gICAgaW50IGkgPSBvdGhlci5l eHBfIC0gZXhwXzsKKy0gICAgZm9yIChzaXplX3QgaiA9IDAsIG4gPSBvdGhlci5iaWdpdHNfLnNp emUoKTsgaiAhPSBuOyArK2ksICsraikKKy0gICAgICBzdWJ0cmFjdF9iaWdpdHMoaSwgb3RoZXIu YmlnaXRzX1tqXSwgYm9ycm93KTsKKy0gICAgd2hpbGUgKGJvcnJvdyA+IDApIHN1YnRyYWN0X2Jp Z2l0cyhpLCAwLCBib3Jyb3cpOworLSAgICByZW1vdmVfbGVhZGluZ196ZXJvcygpOworLSAgfQor LQorLSAgRk1UX0NPTlNURVhQUjIwIHZvaWQgbXVsdGlwbHkodWludDMyX3QgdmFsdWUpIHsKKy0g ICAgY29uc3QgZG91YmxlX2JpZ2l0IHdpZGVfdmFsdWUgPSB2YWx1ZTsKKy0gICAgYmlnaXQgY2Fy cnkgPSAwOworLSAgICBmb3IgKHNpemVfdCBpID0gMCwgbiA9IGJpZ2l0c18uc2l6ZSgpOyBpIDwg bjsgKytpKSB7CistICAgICAgZG91YmxlX2JpZ2l0IHJlc3VsdCA9IGJpZ2l0c19baV0gKiB3aWRl X3ZhbHVlICsgY2Fycnk7CistICAgICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PGJpZ2l0Pihy ZXN1bHQpOworLSAgICAgIGNhcnJ5ID0gc3RhdGljX2Nhc3Q8YmlnaXQ+KHJlc3VsdCA+PiBiaWdp dF9iaXRzKTsKKy0gICAgfQorLSAgICBpZiAoY2FycnkgIT0gMCkgYmlnaXRzXy5wdXNoX2JhY2so Y2FycnkpOworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUjIwIHZvaWQgbXVsdGlwbHkodWludDY0 X3QgdmFsdWUpIHsKKy0gICAgY29uc3QgYmlnaXQgbWFzayA9IH5iaWdpdCgwKTsKKy0gICAgY29u c3QgZG91YmxlX2JpZ2l0IGxvd2VyID0gdmFsdWUgJiBtYXNrOworLSAgICBjb25zdCBkb3VibGVf YmlnaXQgdXBwZXIgPSB2YWx1ZSA+PiBiaWdpdF9iaXRzOworLSAgICBkb3VibGVfYmlnaXQgY2Fy cnkgPSAwOworLSAgICBmb3IgKHNpemVfdCBpID0gMCwgbiA9IGJpZ2l0c18uc2l6ZSgpOyBpIDwg bjsgKytpKSB7CistICAgICAgZG91YmxlX2JpZ2l0IHJlc3VsdCA9IGJpZ2l0c19baV0gKiBsb3dl ciArIChjYXJyeSAmIG1hc2spOworLSAgICAgIGNhcnJ5ID0KKy0gICAgICAgICAgYmlnaXRzX1tp XSAqIHVwcGVyICsgKHJlc3VsdCA+PiBiaWdpdF9iaXRzKSArIChjYXJyeSA+PiBiaWdpdF9iaXRz KTsKKy0gICAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8YmlnaXQ+KHJlc3VsdCk7CistICAg IH0KKy0gICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKKy0gICAgICBiaWdpdHNfLnB1c2hfYmFjayhj YXJyeSAmIG1hc2spOworLSAgICAgIGNhcnJ5ID4+PSBiaWdpdF9iaXRzOworLSAgICB9CistICB9 CistCistIHB1YmxpYzoKKy0gIEZNVF9DT05TVEVYUFIyMCBiaWdpbnQoKSA6IGV4cF8oMCkge30K Ky0gIGV4cGxpY2l0IGJpZ2ludCh1aW50NjRfdCBuKSB7IGFzc2lnbihuKTsgfQorLSAgRk1UX0NP TlNURVhQUjIwIH5iaWdpbnQoKSB7CistICAgIEZNVF9BU1NFUlQoYmlnaXRzXy5jYXBhY2l0eSgp IDw9IGJpZ2l0c19jYXBhY2l0eSwgIiIpOworLSAgfQorLQorLSAgYmlnaW50KGNvbnN0IGJpZ2lu dCYpID0gZGVsZXRlOworLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgYmlnaW50JikgPSBkZWxldGU7 CistCistICBGTVRfQ09OU1RFWFBSMjAgdm9pZCBhc3NpZ24oY29uc3QgYmlnaW50JiBvdGhlcikg eworLSAgICBhdXRvIHNpemUgPSBvdGhlci5iaWdpdHNfLnNpemUoKTsKKy0gICAgYmlnaXRzXy5y ZXNpemUoc2l6ZSk7CistICAgIGF1dG8gZGF0YSA9IG90aGVyLmJpZ2l0c18uZGF0YSgpOworLSAg ICBzdGQ6OmNvcHkoZGF0YSwgZGF0YSArIHNpemUsIG1ha2VfY2hlY2tlZChiaWdpdHNfLmRhdGEo KSwgc2l6ZSkpOworLSAgICBleHBfID0gb3RoZXIuZXhwXzsKKy0gIH0KKy0KKy0gIEZNVF9DT05T VEVYUFIyMCB2b2lkIGFzc2lnbih1aW50NjRfdCBuKSB7CistICAgIHNpemVfdCBudW1fYmlnaXRz ID0gMDsKKy0gICAgZG8geworLSAgICAgIGJpZ2l0c19bbnVtX2JpZ2l0cysrXSA9IG4gJiB+Ymln aXQoMCk7CistICAgICAgbiA+Pj0gYmlnaXRfYml0czsKKy0gICAgfSB3aGlsZSAobiAhPSAwKTsK Ky0gICAgYmlnaXRzXy5yZXNpemUobnVtX2JpZ2l0cyk7CistICAgIGV4cF8gPSAwOworLSAgfQor LQorLSAgRk1UX0NPTlNURVhQUjIwIGludCBudW1fYmlnaXRzKCkgY29uc3QgeworLSAgICByZXR1 cm4gc3RhdGljX2Nhc3Q8aW50PihiaWdpdHNfLnNpemUoKSkgKyBleHBfOworLSAgfQorLQorLSAg Rk1UX05PSU5MSU5FIEZNVF9DT05TVEVYUFIyMCBiaWdpbnQmIG9wZXJhdG9yPDw9KGludCBzaGlm dCkgeworLSAgICBGTVRfQVNTRVJUKHNoaWZ0ID49IDAsICIiKTsKKy0gICAgZXhwXyArPSBzaGlm dCAvIGJpZ2l0X2JpdHM7CistICAgIHNoaWZ0ICU9IGJpZ2l0X2JpdHM7CistICAgIGlmIChzaGlm dCA9PSAwKSByZXR1cm4gKnRoaXM7CistICAgIGJpZ2l0IGNhcnJ5ID0gMDsKKy0gICAgZm9yIChz aXplX3QgaSA9IDAsIG4gPSBiaWdpdHNfLnNpemUoKTsgaSA8IG47ICsraSkgeworLSAgICAgIGJp Z2l0IGMgPSBiaWdpdHNfW2ldID4+IChiaWdpdF9iaXRzIC0gc2hpZnQpOworLSAgICAgIGJpZ2l0 c19baV0gPSAoYmlnaXRzX1tpXSA8PCBzaGlmdCkgKyBjYXJyeTsKKy0gICAgICBjYXJyeSA9IGM7 CistICAgIH0KKy0gICAgaWYgKGNhcnJ5ICE9IDApIGJpZ2l0c18ucHVzaF9iYWNrKGNhcnJ5KTsK Ky0gICAgcmV0dXJuICp0aGlzOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEludD4g Rk1UX0NPTlNURVhQUjIwIGJpZ2ludCYgb3BlcmF0b3IqPShJbnQgdmFsdWUpIHsKKy0gICAgRk1U X0FTU0VSVCh2YWx1ZSA+IDAsICIiKTsKKy0gICAgbXVsdGlwbHkodWludDMyX29yXzY0X29yXzEy OF90PEludD4odmFsdWUpKTsKKy0gICAgcmV0dXJuICp0aGlzOworLSAgfQorLQorLSAgZnJpZW5k IEZNVF9DT05TVEVYUFIyMCBpbnQgY29tcGFyZShjb25zdCBiaWdpbnQmIGxocywgY29uc3QgYmln aW50JiByaHMpIHsKKy0gICAgaW50IG51bV9saHNfYmlnaXRzID0gbGhzLm51bV9iaWdpdHMoKSwg bnVtX3Joc19iaWdpdHMgPSByaHMubnVtX2JpZ2l0cygpOworLSAgICBpZiAobnVtX2xoc19iaWdp dHMgIT0gbnVtX3Joc19iaWdpdHMpCistICAgICAgcmV0dXJuIG51bV9saHNfYmlnaXRzID4gbnVt X3Joc19iaWdpdHMgPyAxIDogLTE7CistICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihsaHMu YmlnaXRzXy5zaXplKCkpIC0gMTsKKy0gICAgaW50IGogPSBzdGF0aWNfY2FzdDxpbnQ+KHJocy5i aWdpdHNfLnNpemUoKSkgLSAxOworLSAgICBpbnQgZW5kID0gaSAtIGo7CistICAgIGlmIChlbmQg PCAwKSBlbmQgPSAwOworLSAgICBmb3IgKDsgaSA+PSBlbmQ7IC0taSwgLS1qKSB7CistICAgICAg YmlnaXQgbGhzX2JpZ2l0ID0gbGhzW2ldLCByaHNfYmlnaXQgPSByaHNbal07CistICAgICAgaWYg KGxoc19iaWdpdCAhPSByaHNfYmlnaXQpIHJldHVybiBsaHNfYmlnaXQgPiByaHNfYmlnaXQgPyAx IDogLTE7CistICAgIH0KKy0gICAgaWYgKGkgIT0gaikgcmV0dXJuIGkgPiBqID8gMSA6IC0xOwor LSAgICByZXR1cm4gMDsKKy0gIH0KKy0KKy0gIC8vIFJldHVybnMgY29tcGFyZShsaHMxICsgbGhz MiwgcmhzKS4KKy0gIGZyaWVuZCBGTVRfQ09OU1RFWFBSMjAgaW50IGFkZF9jb21wYXJlKGNvbnN0 IGJpZ2ludCYgbGhzMSwgY29uc3QgYmlnaW50JiBsaHMyLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmlnaW50JiByaHMpIHsKKy0gICAgaW50IG1heF9s aHNfYmlnaXRzID0gKHN0ZDo6bWF4KShsaHMxLm51bV9iaWdpdHMoKSwgbGhzMi5udW1fYmlnaXRz KCkpOworLSAgICBpbnQgbnVtX3Joc19iaWdpdHMgPSByaHMubnVtX2JpZ2l0cygpOworLSAgICBp ZiAobWF4X2xoc19iaWdpdHMgKyAxIDwgbnVtX3Joc19iaWdpdHMpIHJldHVybiAtMTsKKy0gICAg aWYgKG1heF9saHNfYmlnaXRzID4gbnVtX3Joc19iaWdpdHMpIHJldHVybiAxOworLSAgICBhdXRv IGdldF9iaWdpdCA9IFtdKGNvbnN0IGJpZ2ludCYgbiwgaW50IGkpIC0+IGJpZ2l0IHsKKy0gICAg ICByZXR1cm4gaSA+PSBuLmV4cF8gJiYgaSA8IG4ubnVtX2JpZ2l0cygpID8gbltpIC0gbi5leHBf XSA6IDA7CistICAgIH07CistICAgIGRvdWJsZV9iaWdpdCBib3Jyb3cgPSAwOworLSAgICBpbnQg bWluX2V4cCA9IChzdGQ6Om1pbikoKHN0ZDo6bWluKShsaHMxLmV4cF8sIGxoczIuZXhwXyksIHJo cy5leHBfKTsKKy0gICAgZm9yIChpbnQgaSA9IG51bV9yaHNfYmlnaXRzIC0gMTsgaSA+PSBtaW5f ZXhwOyAtLWkpIHsKKy0gICAgICBkb3VibGVfYmlnaXQgc3VtID0KKy0gICAgICAgICAgc3RhdGlj X2Nhc3Q8ZG91YmxlX2JpZ2l0PihnZXRfYmlnaXQobGhzMSwgaSkpICsgZ2V0X2JpZ2l0KGxoczIs IGkpOworLSAgICAgIGJpZ2l0IHJoc19iaWdpdCA9IGdldF9iaWdpdChyaHMsIGkpOworLSAgICAg IGlmIChzdW0gPiByaHNfYmlnaXQgKyBib3Jyb3cpIHJldHVybiAxOworLSAgICAgIGJvcnJvdyA9 IHJoc19iaWdpdCArIGJvcnJvdyAtIHN1bTsKKy0gICAgICBpZiAoYm9ycm93ID4gMSkgcmV0dXJu IC0xOworLSAgICAgIGJvcnJvdyA8PD0gYmlnaXRfYml0czsKKy0gICAgfQorLSAgICByZXR1cm4g Ym9ycm93ICE9IDAgPyAtMSA6IDA7CistICB9CistCistICAvLyBBc3NpZ25zIHBvdygxMCwgZXhw KSB0byB0aGlzIGJpZ2ludC4KKy0gIEZNVF9DT05TVEVYUFIyMCB2b2lkIGFzc2lnbl9wb3cxMChp bnQgZXhwKSB7CistICAgIEZNVF9BU1NFUlQoZXhwID49IDAsICIiKTsKKy0gICAgaWYgKGV4cCA9 PSAwKSByZXR1cm4gYXNzaWduKDEpOworLSAgICAvLyBGaW5kIHRoZSB0b3AgYml0LgorLSAgICBp bnQgYml0bWFzayA9IDE7CistICAgIHdoaWxlIChleHAgPj0gYml0bWFzaykgYml0bWFzayA8PD0g MTsKKy0gICAgYml0bWFzayA+Pj0gMTsKKy0gICAgLy8gcG93KDEwLCBleHApID0gcG93KDUsIGV4 cCkgKiBwb3coMiwgZXhwKS4gRmlyc3QgY29tcHV0ZSBwb3coNSwgZXhwKSBieQorLSAgICAvLyBy ZXBlYXRlZCBzcXVhcmluZyBhbmQgbXVsdGlwbGljYXRpb24uCistICAgIGFzc2lnbig1KTsKKy0g ICAgYml0bWFzayA+Pj0gMTsKKy0gICAgd2hpbGUgKGJpdG1hc2sgIT0gMCkgeworLSAgICAgIHNx dWFyZSgpOworLSAgICAgIGlmICgoZXhwICYgYml0bWFzaykgIT0gMCkgKnRoaXMgKj0gNTsKKy0g ICAgICBiaXRtYXNrID4+PSAxOworLSAgICB9CistICAgICp0aGlzIDw8PSBleHA7ICAvLyBNdWx0 aXBseSBieSBwb3coMiwgZXhwKSBieSBzaGlmdGluZy4KKy0gIH0KKy0KKy0gIEZNVF9DT05TVEVY UFIyMCB2b2lkIHNxdWFyZSgpIHsKKy0gICAgaW50IG51bV9iaWdpdHMgPSBzdGF0aWNfY2FzdDxp bnQ+KGJpZ2l0c18uc2l6ZSgpKTsKKy0gICAgaW50IG51bV9yZXN1bHRfYmlnaXRzID0gMiAqIG51 bV9iaWdpdHM7CistICAgIGJhc2ljX21lbW9yeV9idWZmZXI8YmlnaXQsIGJpZ2l0c19jYXBhY2l0 eT4gbihzdGQ6Om1vdmUoYmlnaXRzXykpOworLSAgICBiaWdpdHNfLnJlc2l6ZSh0b191bnNpZ25l ZChudW1fcmVzdWx0X2JpZ2l0cykpOworLSAgICB1c2luZyBhY2N1bXVsYXRvcl90ID0gY29uZGl0 aW9uYWxfdDxGTVRfVVNFX0lOVDEyOCwgdWludDEyOF90LCBhY2N1bXVsYXRvcj47CistICAgIGF1 dG8gc3VtID0gYWNjdW11bGF0b3JfdCgpOworLSAgICBmb3IgKGludCBiaWdpdF9pbmRleCA9IDA7 IGJpZ2l0X2luZGV4IDwgbnVtX2JpZ2l0czsgKytiaWdpdF9pbmRleCkgeworLSAgICAgIC8vIENv bXB1dGUgYmlnaXQgYXQgcG9zaXRpb24gYmlnaXRfaW5kZXggb2YgdGhlIHJlc3VsdCBieSBhZGRp bmcKKy0gICAgICAvLyBjcm9zcy1wcm9kdWN0IHRlcm1zIG5baV0gKiBuW2pdIHN1Y2ggdGhhdCBp ICsgaiA9PSBiaWdpdF9pbmRleC4KKy0gICAgICBmb3IgKGludCBpID0gMCwgaiA9IGJpZ2l0X2lu ZGV4OyBqID49IDA7ICsraSwgLS1qKSB7CistICAgICAgICAvLyBNb3N0IHRlcm1zIGFyZSBtdWx0 aXBsaWVkIHR3aWNlIHdoaWNoIGNhbiBiZSBvcHRpbWl6ZWQgaW4gdGhlIGZ1dHVyZS4KKy0gICAg ICAgIHN1bSArPSBzdGF0aWNfY2FzdDxkb3VibGVfYmlnaXQ+KG5baV0pICogbltqXTsKKy0gICAg ICB9CistICAgICAgKCp0aGlzKVtiaWdpdF9pbmRleF0gPSBzdGF0aWNfY2FzdDxiaWdpdD4oc3Vt KTsKKy0gICAgICBzdW0gPj49IGJpdHM8YmlnaXQ+Ojp2YWx1ZTsgIC8vIENvbXB1dGUgdGhlIGNh cnJ5LgorLSAgICB9CistICAgIC8vIERvIHRoZSBzYW1lIGZvciB0aGUgdG9wIGhhbGYuCistICAg IGZvciAoaW50IGJpZ2l0X2luZGV4ID0gbnVtX2JpZ2l0czsgYmlnaXRfaW5kZXggPCBudW1fcmVz dWx0X2JpZ2l0czsKKy0gICAgICAgICArK2JpZ2l0X2luZGV4KSB7CistICAgICAgZm9yIChpbnQg aiA9IG51bV9iaWdpdHMgLSAxLCBpID0gYmlnaXRfaW5kZXggLSBqOyBpIDwgbnVtX2JpZ2l0czsp CistICAgICAgICBzdW0gKz0gc3RhdGljX2Nhc3Q8ZG91YmxlX2JpZ2l0PihuW2krK10pICogbltq LS1dOworLSAgICAgICgqdGhpcylbYmlnaXRfaW5kZXhdID0gc3RhdGljX2Nhc3Q8YmlnaXQ+KHN1 bSk7CistICAgICAgc3VtID4+PSBiaXRzPGJpZ2l0Pjo6dmFsdWU7CistICAgIH0KKy0gICAgcmVt b3ZlX2xlYWRpbmdfemVyb3MoKTsKKy0gICAgZXhwXyAqPSAyOworLSAgfQorLQorLSAgLy8gSWYg dGhpcyBiaWdpbnQgaGFzIGEgYmlnZ2VyIGV4cG9uZW50IHRoYW4gb3RoZXIsIGFkZHMgdHJhaWxp bmcgemVybyB0byBtYWtlCistICAvLyBleHBvbmVudHMgZXF1YWwuIFRoaXMgc2ltcGxpZmllcyBz b21lIG9wZXJhdGlvbnMgc3VjaCBhcyBzdWJ0cmFjdGlvbi4KKy0gIEZNVF9DT05TVEVYUFIyMCB2 b2lkIGFsaWduKGNvbnN0IGJpZ2ludCYgb3RoZXIpIHsKKy0gICAgaW50IGV4cF9kaWZmZXJlbmNl ID0gZXhwXyAtIG90aGVyLmV4cF87CistICAgIGlmIChleHBfZGlmZmVyZW5jZSA8PSAwKSByZXR1 cm47CistICAgIGludCBudW1fYmlnaXRzID0gc3RhdGljX2Nhc3Q8aW50PihiaWdpdHNfLnNpemUo KSk7CistICAgIGJpZ2l0c18ucmVzaXplKHRvX3Vuc2lnbmVkKG51bV9iaWdpdHMgKyBleHBfZGlm ZmVyZW5jZSkpOworLSAgICBmb3IgKGludCBpID0gbnVtX2JpZ2l0cyAtIDEsIGogPSBpICsgZXhw X2RpZmZlcmVuY2U7IGkgPj0gMDsgLS1pLCAtLWopCistICAgICAgYmlnaXRzX1tqXSA9IGJpZ2l0 c19baV07CistICAgIHN0ZDo6dW5pbml0aWFsaXplZF9maWxsX24oYmlnaXRzXy5kYXRhKCksIGV4 cF9kaWZmZXJlbmNlLCAwKTsKKy0gICAgZXhwXyAtPSBleHBfZGlmZmVyZW5jZTsKKy0gIH0KKy0K Ky0gIC8vIERpdmlkZXMgdGhpcyBiaWdudW0gYnkgZGl2aXNvciwgYXNzaWduaW5nIHRoZSByZW1h aW5kZXIgdG8gdGhpcyBhbmQKKy0gIC8vIHJldHVybmluZyB0aGUgcXVvdGllbnQuCistICBGTVRf Q09OU1RFWFBSMjAgaW50IGRpdm1vZF9hc3NpZ24oY29uc3QgYmlnaW50JiBkaXZpc29yKSB7Cist ICAgIEZNVF9BU1NFUlQodGhpcyAhPSAmZGl2aXNvciwgIiIpOworLSAgICBpZiAoY29tcGFyZSgq dGhpcywgZGl2aXNvcikgPCAwKSByZXR1cm4gMDsKKy0gICAgRk1UX0FTU0VSVChkaXZpc29yLmJp Z2l0c19bZGl2aXNvci5iaWdpdHNfLnNpemUoKSAtIDF1XSAhPSAwLCAiIik7CistICAgIGFsaWdu KGRpdmlzb3IpOworLSAgICBpbnQgcXVvdGllbnQgPSAwOworLSAgICBkbyB7CistICAgICAgc3Vi dHJhY3RfYWxpZ25lZChkaXZpc29yKTsKKy0gICAgICArK3F1b3RpZW50OworLSAgICB9IHdoaWxl IChjb21wYXJlKCp0aGlzLCBkaXZpc29yKSA+PSAwKTsKKy0gICAgcmV0dXJuIHF1b3RpZW50Owor LSAgfQorLX07CistCistZW51bSBjbGFzcyByb3VuZF9kaXJlY3Rpb24geyB1bmtub3duLCB1cCwg ZG93biB9OworLQorLS8vIEdpdmVuIHRoZSBkaXZpc29yIChub3JtYWxseSBhIHBvd2VyIG9mIDEw KSwgdGhlIHJlbWFpbmRlciA9IHYgJSBkaXZpc29yIGZvcgorLS8vIHNvbWUgbnVtYmVyIHYgYW5k IHRoZSBlcnJvciwgcmV0dXJucyB3aGV0aGVyIHYgc2hvdWxkIGJlIHJvdW5kZWQgdXAsIGRvd24s IG9yCistLy8gd2hldGhlciB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbid0IGJlIGRldGVybWlu ZWQgZHVlIHRvIGVycm9yLgorLS8vIGVycm9yIHNob3VsZCBiZSBsZXNzIHRoYW4gZGl2aXNvciAv IDIuCistRk1UX0NPTlNURVhQUiBpbmxpbmUgcm91bmRfZGlyZWN0aW9uIGdldF9yb3VuZF9kaXJl Y3Rpb24odWludDY0X3QgZGl2aXNvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZW1haW5kZXIsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg ZXJyb3IpIHsKKy0gIEZNVF9BU1NFUlQocmVtYWluZGVyIDwgZGl2aXNvciwgIiIpOyAgLy8gZGl2 aXNvciAtIHJlbWFpbmRlciB3b24ndCBvdmVyZmxvdy4KKy0gIEZNVF9BU1NFUlQoZXJyb3IgPCBk aXZpc29yLCAiIik7ICAgICAgLy8gZGl2aXNvciAtIGVycm9yIHdvbid0IG92ZXJmbG93LgorLSAg Rk1UX0FTU0VSVChlcnJvciA8IGRpdmlzb3IgLSBlcnJvciwgIiIpOyAgLy8gZXJyb3IgKiAyIHdv bid0IG92ZXJmbG93LgorLSAgLy8gUm91bmQgZG93biBpZiAocmVtYWluZGVyICsgZXJyb3IpICog MiA8PSBkaXZpc29yLgorLSAgaWYgKHJlbWFpbmRlciA8PSBkaXZpc29yIC0gcmVtYWluZGVyICYm IGVycm9yICogMiA8PSBkaXZpc29yIC0gcmVtYWluZGVyICogMikKKy0gICAgcmV0dXJuIHJvdW5k X2RpcmVjdGlvbjo6ZG93bjsKKy0gIC8vIFJvdW5kIHVwIGlmIChyZW1haW5kZXIgLSBlcnJvcikg KiAyID49IGRpdmlzb3IuCistICBpZiAocmVtYWluZGVyID49IGVycm9yICYmCistICAgICAgcmVt YWluZGVyIC0gZXJyb3IgPj0gZGl2aXNvciAtIChyZW1haW5kZXIgLSBlcnJvcikpIHsKKy0gICAg cmV0dXJuIHJvdW5kX2RpcmVjdGlvbjo6dXA7CistICB9CistICByZXR1cm4gcm91bmRfZGlyZWN0 aW9uOjp1bmtub3duOworLX0KKy0KKy1uYW1lc3BhY2UgZGlnaXRzIHsKKy1lbnVtIHJlc3VsdCB7 CistICBtb3JlLCAgLy8gR2VuZXJhdGUgbW9yZSBkaWdpdHMuCistICBkb25lLCAgLy8gRG9uZSBn ZW5lcmF0aW5nIGRpZ2l0cy4KKy0gIGVycm9yICAvLyBEaWdpdCBnZW5lcmF0aW9uIGNhbmNlbGxl ZCBkdWUgdG8gYW4gZXJyb3IuCistfTsKKy19CistCistc3RydWN0IGdlbl9kaWdpdHNfaGFuZGxl ciB7CistICBjaGFyKiBidWY7CistICBpbnQgc2l6ZTsKKy0gIGludCBwcmVjaXNpb247CistICBp bnQgZXhwMTA7CistICBib29sIGZpeGVkOworLQorLSAgRk1UX0NPTlNURVhQUiBkaWdpdHM6OnJl c3VsdCBvbl9kaWdpdChjaGFyIGRpZ2l0LCB1aW50NjRfdCBkaXZpc29yLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZW1haW5kZXIsIHVpbnQ2NF90 IGVycm9yLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlu dGVncmFsKSB7CistICAgIEZNVF9BU1NFUlQocmVtYWluZGVyIDwgZGl2aXNvciwgIiIpOworLSAg ICBidWZbc2l6ZSsrXSA9IGRpZ2l0OworLSAgICBpZiAoIWludGVncmFsICYmIGVycm9yID49IHJl bWFpbmRlcikgcmV0dXJuIGRpZ2l0czo6ZXJyb3I7CistICAgIGlmIChzaXplIDwgcHJlY2lzaW9u KSByZXR1cm4gZGlnaXRzOjptb3JlOworLSAgICBpZiAoIWludGVncmFsKSB7CistICAgICAgLy8g Q2hlY2sgaWYgZXJyb3IgKiAyIDwgZGl2aXNvciB3aXRoIG92ZXJmbG93IHByZXZlbnRpb24uCist ICAgICAgLy8gVGhlIGNoZWNrIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBpbnRlZ3JhbCBwYXJ0IGJl Y2F1c2UgZXJyb3IgPSAxCistICAgICAgLy8gYW5kIGRpdmlzb3IgPiAoMSA8PCAzMikgdGhlcmUu CistICAgICAgaWYgKGVycm9yID49IGRpdmlzb3IgfHwgZXJyb3IgPj0gZGl2aXNvciAtIGVycm9y KSByZXR1cm4gZGlnaXRzOjplcnJvcjsKKy0gICAgfSBlbHNlIHsKKy0gICAgICBGTVRfQVNTRVJU KGVycm9yID09IDEgJiYgZGl2aXNvciA+IDIsICIiKTsKKy0gICAgfQorLSAgICBhdXRvIGRpciA9 IGdldF9yb3VuZF9kaXJlY3Rpb24oZGl2aXNvciwgcmVtYWluZGVyLCBlcnJvcik7CistICAgIGlm IChkaXIgIT0gcm91bmRfZGlyZWN0aW9uOjp1cCkKKy0gICAgICByZXR1cm4gZGlyID09IHJvdW5k X2RpcmVjdGlvbjo6ZG93biA/IGRpZ2l0czo6ZG9uZSA6IGRpZ2l0czo6ZXJyb3I7CistICAgICsr YnVmW3NpemUgLSAxXTsKKy0gICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID4gMCAmJiBidWZb aV0gPiAnOSc7IC0taSkgeworLSAgICAgIGJ1ZltpXSA9ICcwJzsKKy0gICAgICArK2J1ZltpIC0g MV07CistICAgIH0KKy0gICAgaWYgKGJ1ZlswXSA+ICc5JykgeworLSAgICAgIGJ1ZlswXSA9ICcx JzsKKy0gICAgICBpZiAoZml4ZWQpCistICAgICAgICBidWZbc2l6ZSsrXSA9ICcwJzsKKy0gICAg ICBlbHNlCistICAgICAgICArK2V4cDEwOworLSAgICB9CistICAgIHJldHVybiBkaWdpdHM6OmRv bmU7CistICB9CistfTsKKy0KKy0vLyBHZW5lcmF0ZXMgb3V0cHV0IHVzaW5nIHRoZSBHcmlzdSBk aWdpdC1nZW4gYWxnb3JpdGhtLgorLS8vIGVycm9yOiB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uIChs b3dlciwgdXBwZXIpIG91dHNpZGUgb2Ygd2hpY2ggbnVtYmVycworLS8vIGRlZmluaXRlbHkgZG8g bm90IHJvdW5kIHRvIHZhbHVlIChEZWx0YSBpbiBHcmlzdTMpLgorLUZNVF9JTkxJTkUgRk1UX0NP TlNURVhQUjIwIGRpZ2l0czo6cmVzdWx0IGdyaXN1X2dlbl9kaWdpdHMoCistICAgIGZwIHZhbHVl LCB1aW50NjRfdCBlcnJvciwgaW50JiBleHAsIGdlbl9kaWdpdHNfaGFuZGxlciYgaGFuZGxlcikg eworLSAgY29uc3QgZnAgb25lKDFVTEwgPDwgLXZhbHVlLmUsIHZhbHVlLmUpOworLSAgLy8gVGhl IGludGVncmFsIHBhcnQgb2Ygc2NhbGVkIHZhbHVlIChwMSBpbiBHcmlzdSkgPSB2YWx1ZSAvIG9u ZS4gSXQgY2Fubm90IGJlCistICAvLyB6ZXJvIGJlY2F1c2UgaXQgY29udGFpbnMgYSBwcm9kdWN0 IG9mIHR3byA2NC1iaXQgbnVtYmVycyB3aXRoIE1TQiBzZXQgKGR1ZQorLSAgLy8gdG8gbm9ybWFs aXphdGlvbikgLSAxLCBzaGlmdGVkIHJpZ2h0IGJ5IGF0IG1vc3QgNjAgYml0cy4KKy0gIGF1dG8g aW50ZWdyYWwgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUuZiA+PiAtb25lLmUpOworLSAg Rk1UX0FTU0VSVChpbnRlZ3JhbCAhPSAwLCAiIik7CistICBGTVRfQVNTRVJUKGludGVncmFsID09 IHZhbHVlLmYgPj4gLW9uZS5lLCAiIik7CistICAvLyBUaGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHNj YWxlZCB2YWx1ZSAocDIgaW4gR3Jpc3UpIGMgPSB2YWx1ZSAlIG9uZS4KKy0gIHVpbnQ2NF90IGZy YWN0aW9uYWwgPSB2YWx1ZS5mICYgKG9uZS5mIC0gMSk7CistICBleHAgPSBjb3VudF9kaWdpdHMo aW50ZWdyYWwpOyAgLy8ga2FwcGEgaW4gR3Jpc3UuCistICAvLyBOb24tZml4ZWQgZm9ybWF0cyBy ZXF1aXJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhbmQgbm8gcHJlY2lzaW9uIGFkanVzdG1lbnQuCist ICBpZiAoaGFuZGxlci5maXhlZCkgeworLSAgICAvLyBBZGp1c3QgZml4ZWQgcHJlY2lzaW9uIGJ5 IGV4cG9uZW50IGJlY2F1c2UgaXQgaXMgcmVsYXRpdmUgdG8gZGVjaW1hbAorLSAgICAvLyBwb2lu dC4KKy0gICAgaW50IHByZWNpc2lvbl9vZmZzZXQgPSBleHAgKyBoYW5kbGVyLmV4cDEwOworLSAg ICBpZiAocHJlY2lzaW9uX29mZnNldCA+IDAgJiYKKy0gICAgICAgIGhhbmRsZXIucHJlY2lzaW9u ID4gbWF4X3ZhbHVlPGludD4oKSAtIHByZWNpc2lvbl9vZmZzZXQpIHsKKy0gICAgICBGTVRfVEhS T1coZm9ybWF0X2Vycm9yKCJudW1iZXIgaXMgdG9vIGJpZyIpKTsKKy0gICAgfQorLSAgICBoYW5k bGVyLnByZWNpc2lvbiArPSBwcmVjaXNpb25fb2Zmc2V0OworLSAgICAvLyBDaGVjayBpZiBwcmVj aXNpb24gaXMgc2F0aXNmaWVkIGp1c3QgYnkgbGVhZGluZyB6ZXJvcywgZS5nLgorLSAgICAvLyBm b3JtYXQoIns6LjJmfSIsIDAuMDAxKSBnaXZlcyAiMC4wMCIgd2l0aG91dCBnZW5lcmF0aW5nIGFu eSBkaWdpdHMuCistICAgIGlmIChoYW5kbGVyLnByZWNpc2lvbiA8PSAwKSB7CistICAgICAgaWYg KGhhbmRsZXIucHJlY2lzaW9uIDwgMCkgcmV0dXJuIGRpZ2l0czo6ZG9uZTsKKy0gICAgICAvLyBE aXZpZGUgYnkgMTAgdG8gcHJldmVudCBvdmVyZmxvdy4KKy0gICAgICB1aW50NjRfdCBkaXZpc29y ID0gaW1wbF9kYXRhOjpwb3dlcl9vZl8xMF82NFtleHAgLSAxXSA8PCAtb25lLmU7CistICAgICAg YXV0byBkaXIgPSBnZXRfcm91bmRfZGlyZWN0aW9uKGRpdmlzb3IsIHZhbHVlLmYgLyAxMCwgZXJy b3IgKiAxMCk7CistICAgICAgaWYgKGRpciA9PSByb3VuZF9kaXJlY3Rpb246OnVua25vd24pIHJl dHVybiBkaWdpdHM6OmVycm9yOworLSAgICAgIGhhbmRsZXIuYnVmW2hhbmRsZXIuc2l6ZSsrXSA9 IGRpciA9PSByb3VuZF9kaXJlY3Rpb246OnVwID8gJzEnIDogJzAnOworLSAgICAgIHJldHVybiBk aWdpdHM6OmRvbmU7CistICAgIH0KKy0gIH0KKy0gIC8vIEdlbmVyYXRlIGRpZ2l0cyBmb3IgdGhl IGludGVncmFsIHBhcnQuIFRoaXMgY2FuIHByb2R1Y2UgdXAgdG8gMTAgZGlnaXRzLgorLSAgZG8g eworLSAgICB1aW50MzJfdCBkaWdpdCA9IDA7CistICAgIGF1dG8gZGl2bW9kX2ludGVncmFsID0g WyZdKHVpbnQzMl90IGRpdmlzb3IpIHsKKy0gICAgICBkaWdpdCA9IGludGVncmFsIC8gZGl2aXNv cjsKKy0gICAgICBpbnRlZ3JhbCAlPSBkaXZpc29yOworLSAgICB9OworLSAgICAvLyBUaGlzIG9w dGltaXphdGlvbiBieSBNaWxvIFlpcCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgaW50ZWdlciBkaXZp c2lvbnMgYnkKKy0gICAgLy8gb25lIHBlciBpdGVyYXRpb24uCistICAgIHN3aXRjaCAoZXhwKSB7 CistICAgIGNhc2UgMTA6CistICAgICAgZGl2bW9kX2ludGVncmFsKDEwMDAwMDAwMDApOworLSAg ICAgIGJyZWFrOworLSAgICBjYXNlIDk6CistICAgICAgZGl2bW9kX2ludGVncmFsKDEwMDAwMDAw MCk7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgODoKKy0gICAgICBkaXZtb2RfaW50ZWdyYWwo MTAwMDAwMDApOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlIDc6CistICAgICAgZGl2bW9kX2lu dGVncmFsKDEwMDAwMDApOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlIDY6CistICAgICAgZGl2 bW9kX2ludGVncmFsKDEwMDAwMCk7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgNToKKy0gICAg ICBkaXZtb2RfaW50ZWdyYWwoMTAwMDApOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlIDQ6Cist ICAgICAgZGl2bW9kX2ludGVncmFsKDEwMDApOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6 CistICAgICAgZGl2bW9kX2ludGVncmFsKDEwMCk7CistICAgICAgYnJlYWs7CistICAgIGNhc2Ug MjoKKy0gICAgICBkaXZtb2RfaW50ZWdyYWwoMTApOworLSAgICAgIGJyZWFrOworLSAgICBjYXNl IDE6CistICAgICAgZGlnaXQgPSBpbnRlZ3JhbDsKKy0gICAgICBpbnRlZ3JhbCA9IDA7CistICAg ICAgYnJlYWs7CistICAgIGRlZmF1bHQ6CistICAgICAgRk1UX0FTU0VSVChmYWxzZSwgImludmFs aWQgbnVtYmVyIG9mIGRpZ2l0cyIpOworLSAgICB9CistICAgIC0tZXhwOworLSAgICBhdXRvIHJl bWFpbmRlciA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW50ZWdyYWwpIDw8IC1vbmUuZSkgKyBm cmFjdGlvbmFsOworLSAgICBhdXRvIHJlc3VsdCA9IGhhbmRsZXIub25fZGlnaXQoc3RhdGljX2Nh c3Q8Y2hhcj4oJzAnICsgZGlnaXQpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW1wbF9kYXRhOjpwb3dlcl9vZl8xMF82NFtleHBdIDw8IC1vbmUuZSwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmRlciwgZXJyb3IsIHRydWUpOworLSAgICBp ZiAocmVzdWx0ICE9IGRpZ2l0czo6bW9yZSkgcmV0dXJuIHJlc3VsdDsKKy0gIH0gd2hpbGUgKGV4 cCA+IDApOworLSAgLy8gR2VuZXJhdGUgZGlnaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0Lgor LSAgZm9yICg7OykgeworLSAgICBmcmFjdGlvbmFsICo9IDEwOworLSAgICBlcnJvciAqPSAxMDsK Ky0gICAgY2hhciBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIChmcmFjdGlvbmFsID4+ IC1vbmUuZSkpOworLSAgICBmcmFjdGlvbmFsICY9IG9uZS5mIC0gMTsKKy0gICAgLS1leHA7Cist ICAgIGF1dG8gcmVzdWx0ID0gaGFuZGxlci5vbl9kaWdpdChkaWdpdCwgb25lLmYsIGZyYWN0aW9u YWwsIGVycm9yLCBmYWxzZSk7CistICAgIGlmIChyZXN1bHQgIT0gZGlnaXRzOjptb3JlKSByZXR1 cm4gcmVzdWx0OworLSAgfQorLX0KKy0KKy0vLyBBIDEyOC1iaXQgaW50ZWdlciB0eXBlIHVzZWQg aW50ZXJuYWxseSwKKy1zdHJ1Y3QgdWludDEyOF93cmFwcGVyIHsKKy0gIHVpbnQxMjhfd3JhcHBl cigpID0gZGVmYXVsdDsKKy0KKy0jaWYgRk1UX1VTRV9JTlQxMjgKKy0gIHVpbnQxMjhfdCBpbnRl cm5hbF87CistCistICBjb25zdGV4cHIgdWludDEyOF93cmFwcGVyKHVpbnQ2NF90IGhpZ2gsIHVp bnQ2NF90IGxvdykgRk1UX05PRVhDRVBUCistICAgICAgOiBpbnRlcm5hbF97c3RhdGljX2Nhc3Q8 dWludDEyOF90Pihsb3cpIHwKKy0gICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDEy OF90PihoaWdoKSA8PCA2NCl9IHt9CistCistICBjb25zdGV4cHIgdWludDEyOF93cmFwcGVyKHVp bnQxMjhfdCB1KSA6IGludGVybmFsX3t1fSB7fQorLQorLSAgY29uc3RleHByIHVpbnQ2NF90IGhp Z2goKSBjb25zdCBGTVRfTk9FWENFUFQgeworLSAgICByZXR1cm4gdWludDY0X3QoaW50ZXJuYWxf ID4+IDY0KTsKKy0gIH0KKy0gIGNvbnN0ZXhwciB1aW50NjRfdCBsb3coKSBjb25zdCBGTVRfTk9F WENFUFQgeyByZXR1cm4gdWludDY0X3QoaW50ZXJuYWxfKTsgfQorLQorLSAgdWludDEyOF93cmFw cGVyJiBvcGVyYXRvcis9KHVpbnQ2NF90IG4pIEZNVF9OT0VYQ0VQVCB7CistICAgIGludGVybmFs XyArPSBuOworLSAgICByZXR1cm4gKnRoaXM7CistICB9CistI2Vsc2UKKy0gIHVpbnQ2NF90IGhp Z2hfOworLSAgdWludDY0X3QgbG93XzsKKy0KKy0gIGNvbnN0ZXhwciB1aW50MTI4X3dyYXBwZXIo dWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSBGTVRfTk9FWENFUFQKKy0gICAgICA6IGhpZ2hf e2hpZ2h9LAorLSAgICAgICAgbG93X3tsb3d9IHt9CistCistICBjb25zdGV4cHIgdWludDY0X3Qg aGlnaCgpIGNvbnN0IEZNVF9OT0VYQ0VQVCB7IHJldHVybiBoaWdoXzsgfQorLSAgY29uc3RleHBy IHVpbnQ2NF90IGxvdygpIGNvbnN0IEZNVF9OT0VYQ0VQVCB7IHJldHVybiBsb3dfOyB9CistCist ICB1aW50MTI4X3dyYXBwZXImIG9wZXJhdG9yKz0odWludDY0X3QgbikgRk1UX05PRVhDRVBUIHsK Ky0jICBpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9NX1g2NCkKKy0gICAgdW5zaWdu ZWQgY2hhciBjYXJyeSA9IF9hZGRjYXJyeV91NjQoMCwgbG93XywgbiwgJmxvd18pOworLSAgICBf YWRkY2FycnlfdTY0KGNhcnJ5LCBoaWdoXywgMCwgJmhpZ2hfKTsKKy0gICAgcmV0dXJuICp0aGlz OworLSMgIGVsc2UKKy0gICAgdWludDY0X3Qgc3VtID0gbG93XyArIG47CistICAgIGhpZ2hfICs9 IChzdW0gPCBsb3dfID8gMSA6IDApOworLSAgICBsb3dfID0gc3VtOworLSAgICByZXR1cm4gKnRo aXM7CistIyAgZW5kaWYKKy0gIH0KKy0jZW5kaWYKKy19OworLQorLS8vIEltcGxlbWVudGF0aW9u IG9mIERyYWdvbmJveCBhbGdvcml0aG06IGh0dHBzOi8vZ2l0aHViLmNvbS9qay1qZW9uL2RyYWdv bmJveC4KKy1uYW1lc3BhY2UgZHJhZ29uYm94IHsKKy0vLyBDb21wdXRlcyAxMjgtYml0IHJlc3Vs dCBvZiBtdWx0aXBsaWNhdGlvbiBvZiB0d28gNjQtYml0IHVuc2lnbmVkIGludGVnZXJzLgorLWlu bGluZSB1aW50MTI4X3dyYXBwZXIgdW11bDEyOCh1aW50NjRfdCB4LCB1aW50NjRfdCB5KSBGTVRf Tk9FWENFUFQgeworLSNpZiBGTVRfVVNFX0lOVDEyOAorLSAgcmV0dXJuIHN0YXRpY19jYXN0PHVp bnQxMjhfdD4oeCkgKiBzdGF0aWNfY2FzdDx1aW50MTI4X3Q+KHkpOworLSNlbGlmIGRlZmluZWQo X01TQ19WRVIpICYmIGRlZmluZWQoX01fWDY0KQorLSAgdWludDEyOF93cmFwcGVyIHJlc3VsdDsK Ky0gIHJlc3VsdC5sb3dfID0gX3VtdWwxMjgoeCwgeSwgJnJlc3VsdC5oaWdoXyk7CistICByZXR1 cm4gcmVzdWx0OworLSNlbHNlCistICBjb25zdCB1aW50NjRfdCBtYXNrID0gKHVpbnQ2NF90KDEp IDw8IDMyKSAtIHVpbnQ2NF90KDEpOworLQorLSAgdWludDY0X3QgYSA9IHggPj4gMzI7CistICB1 aW50NjRfdCBiID0geCAmIG1hc2s7CistICB1aW50NjRfdCBjID0geSA+PiAzMjsKKy0gIHVpbnQ2 NF90IGQgPSB5ICYgbWFzazsKKy0KKy0gIHVpbnQ2NF90IGFjID0gYSAqIGM7CistICB1aW50NjRf dCBiYyA9IGIgKiBjOworLSAgdWludDY0X3QgYWQgPSBhICogZDsKKy0gIHVpbnQ2NF90IGJkID0g YiAqIGQ7CistCistICB1aW50NjRfdCBpbnRlcm1lZGlhdGUgPSAoYmQgPj4gMzIpICsgKGFkICYg bWFzaykgKyAoYmMgJiBtYXNrKTsKKy0KKy0gIHJldHVybiB7YWMgKyAoaW50ZXJtZWRpYXRlID4+ IDMyKSArIChhZCA+PiAzMikgKyAoYmMgPj4gMzIpLAorLSAgICAgICAgICAoaW50ZXJtZWRpYXRl IDw8IDMyKSArIChiZCAmIG1hc2spfTsKKy0jZW5kaWYKKy19CistCistLy8gQ29tcHV0ZXMgdXBw ZXIgNjQgYml0cyBvZiBtdWx0aXBsaWNhdGlvbiBvZiB0d28gNjQtYml0IHVuc2lnbmVkIGludGVn ZXJzLgorLWlubGluZSB1aW50NjRfdCB1bXVsMTI4X3VwcGVyNjQodWludDY0X3QgeCwgdWludDY0 X3QgeSkgRk1UX05PRVhDRVBUIHsKKy0jaWYgRk1UX1VTRV9JTlQxMjgKKy0gIGF1dG8gcCA9IHN0 YXRpY19jYXN0PHVpbnQxMjhfdD4oeCkgKiBzdGF0aWNfY2FzdDx1aW50MTI4X3Q+KHkpOworLSAg cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihwID4+IDY0KTsKKy0jZWxpZiBkZWZpbmVkKF9N U0NfVkVSKSAmJiBkZWZpbmVkKF9NX1g2NCkKKy0gIHJldHVybiBfX3VtdWxoKHgsIHkpOworLSNl bHNlCistICByZXR1cm4gdW11bDEyOCh4LCB5KS5oaWdoKCk7CistI2VuZGlmCistfQorLQorLS8v IENvbXB1dGVzIHVwcGVyIDY0IGJpdHMgb2YgbXVsdGlwbGljYXRpb24gb2YgYSA2NC1iaXQgdW5z aWduZWQgaW50ZWdlciBhbmQgYQorLS8vIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlci4KKy1pbmxp bmUgdWludDY0X3QgdW11bDE5Ml91cHBlcjY0KHVpbnQ2NF90IHgsIHVpbnQxMjhfd3JhcHBlciB5 KSBGTVRfTk9FWENFUFQgeworLSAgdWludDEyOF93cmFwcGVyIGcwID0gdW11bDEyOCh4LCB5Lmhp Z2goKSk7CistICBnMCArPSB1bXVsMTI4X3VwcGVyNjQoeCwgeS5sb3coKSk7CistICByZXR1cm4g ZzAuaGlnaCgpOworLX0KKy0KKy0vLyBDb21wdXRlcyB1cHBlciAzMiBiaXRzIG9mIG11bHRpcGxp Y2F0aW9uIG9mIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgYW5kIGEKKy0vLyA2NC1iaXQgdW5z aWduZWQgaW50ZWdlci4KKy1pbmxpbmUgdWludDMyX3QgdW11bDk2X3VwcGVyMzIodWludDMyX3Qg eCwgdWludDY0X3QgeSkgRk1UX05PRVhDRVBUIHsKKy0gIHJldHVybiBzdGF0aWNfY2FzdDx1aW50 MzJfdD4odW11bDEyOF91cHBlcjY0KHgsIHkpKTsKKy19CistCistLy8gQ29tcHV0ZXMgbWlkZGxl IDY0IGJpdHMgb2YgbXVsdGlwbGljYXRpb24gb2YgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBh bmQgYQorLS8vIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlci4KKy1pbmxpbmUgdWludDY0X3QgdW11 bDE5Ml9taWRkbGU2NCh1aW50NjRfdCB4LCB1aW50MTI4X3dyYXBwZXIgeSkgRk1UX05PRVhDRVBU IHsKKy0gIHVpbnQ2NF90IGcwMSA9IHggKiB5LmhpZ2goKTsKKy0gIHVpbnQ2NF90IGcxMCA9IHVt dWwxMjhfdXBwZXI2NCh4LCB5LmxvdygpKTsKKy0gIHJldHVybiBnMDEgKyBnMTA7CistfQorLQor LS8vIENvbXB1dGVzIGxvd2VyIDY0IGJpdHMgb2YgbXVsdGlwbGljYXRpb24gb2YgYSAzMi1iaXQg dW5zaWduZWQgaW50ZWdlciBhbmQgYQorLS8vIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgorLWlu bGluZSB1aW50NjRfdCB1bXVsOTZfbG93ZXI2NCh1aW50MzJfdCB4LCB1aW50NjRfdCB5KSBGTVRf Tk9FWENFUFQgeworLSAgcmV0dXJuIHggKiB5OworLX0KKy0KKy0vLyBDb21wdXRlcyBmbG9vcihs b2cxMChwb3coMiwgZSkpKSBmb3IgZSBpbiBbLTE3MDAsIDE3MDBdIHVzaW5nIHRoZSBtZXRob2Qg ZnJvbQorLS8vIGh0dHBzOi8vZm10LmRldi9wYXBlcnMvR3Jpc3UtRXhhY3QucGRmI3BhZ2U9NSwg c2VjdGlvbiAzLjQuCistaW5saW5lIGludCBmbG9vcl9sb2cxMF9wb3cyKGludCBlKSBGTVRfTk9F WENFUFQgeworLSAgRk1UX0FTU0VSVChlIDw9IDE3MDAgJiYgZSA+PSAtMTcwMCwgInRvbyBsYXJn ZSBleHBvbmVudCIpOworLSAgY29uc3QgaW50IHNoaWZ0ID0gMjI7CistICByZXR1cm4gKGUgKiBz dGF0aWNfY2FzdDxpbnQ+KGxvZzEwXzJfc2lnbmlmaWNhbmQgPj4gKDY0IC0gc2hpZnQpKSkgPj4g c2hpZnQ7CistfQorLQorLS8vIFZhcmlvdXMgZmFzdCBsb2cgY29tcHV0YXRpb25zLgorLWlubGlu ZSBpbnQgZmxvb3JfbG9nMl9wb3cxMChpbnQgZSkgRk1UX05PRVhDRVBUIHsKKy0gIEZNVF9BU1NF UlQoZSA8PSAxMjMzICYmIGUgPj0gLTEyMzMsICJ0b28gbGFyZ2UgZXhwb25lbnQiKTsKKy0gIGNv bnN0IHVpbnQ2NF90IGxvZzJfMTBfaW50ZWdlcl9wYXJ0ID0gMzsKKy0gIGNvbnN0IHVpbnQ2NF90 IGxvZzJfMTBfZnJhY3Rpb25hbF9kaWdpdHMgPSAweDUyNjllMTJmMzQ2ZTJiZjk7CistICBjb25z dCBpbnQgc2hpZnRfYW1vdW50ID0gMTk7CistICByZXR1cm4gKGUgKiBzdGF0aWNfY2FzdDxpbnQ+ KAorLSAgICAgICAgICAgICAgICAgIChsb2cyXzEwX2ludGVnZXJfcGFydCA8PCBzaGlmdF9hbW91 bnQpIHwKKy0gICAgICAgICAgICAgICAgICAobG9nMl8xMF9mcmFjdGlvbmFsX2RpZ2l0cyA+PiAo NjQgLSBzaGlmdF9hbW91bnQpKSkpID4+CistICAgICAgICAgc2hpZnRfYW1vdW50OworLX0KKy1p bmxpbmUgaW50IGZsb29yX2xvZzEwX3BvdzJfbWludXNfbG9nMTBfNF9vdmVyXzMoaW50IGUpIEZN VF9OT0VYQ0VQVCB7CistICBGTVRfQVNTRVJUKGUgPD0gMTcwMCAmJiBlID49IC0xNzAwLCAidG9v IGxhcmdlIGV4cG9uZW50Iik7CistICBjb25zdCB1aW50NjRfdCBsb2cxMF80X292ZXJfM19mcmFj dGlvbmFsX2RpZ2l0cyA9IDB4MWZmYmZjMmJiYzc4MDM3NTsKKy0gIGNvbnN0IGludCBzaGlmdF9h bW91bnQgPSAyMjsKKy0gIHJldHVybiAoZSAqIHN0YXRpY19jYXN0PGludD4obG9nMTBfMl9zaWdu aWZpY2FuZCA+PiAoNjQgLSBzaGlmdF9hbW91bnQpKSAtCistICAgICAgICAgIHN0YXRpY19jYXN0 PGludD4obG9nMTBfNF9vdmVyXzNfZnJhY3Rpb25hbF9kaWdpdHMgPj4KKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAoNjQgLSBzaGlmdF9hbW91bnQpKSkgPj4KKy0gICAgICAgICBzaGlmdF9h bW91bnQ7CistfQorLQorLS8vIFJldHVybnMgdHJ1ZSBpZmYgeCBpcyBkaXZpc2libGUgYnkgcG93 KDIsIGV4cCkuCistaW5saW5lIGJvb2wgZGl2aXNpYmxlX2J5X3Bvd2VyX29mXzIodWludDMyX3Qg eCwgaW50IGV4cCkgRk1UX05PRVhDRVBUIHsKKy0gIEZNVF9BU1NFUlQoZXhwID49IDEsICIiKTsK Ky0gIEZNVF9BU1NFUlQoeCAhPSAwLCAiIik7CistI2lmZGVmIEZNVF9CVUlMVElOX0NUWgorLSAg cmV0dXJuIEZNVF9CVUlMVElOX0NUWih4KSA+PSBleHA7CistI2Vsc2UKKy0gIHJldHVybiBleHAg PCBudW1fYml0czx1aW50MzJfdD4oKSAmJiB4ID09ICgoeCA+PiBleHApIDw8IGV4cCk7CistI2Vu ZGlmCistfQorLWlubGluZSBib29sIGRpdmlzaWJsZV9ieV9wb3dlcl9vZl8yKHVpbnQ2NF90IHgs IGludCBleHApIEZNVF9OT0VYQ0VQVCB7CistICBGTVRfQVNTRVJUKGV4cCA+PSAxLCAiIik7Cist ICBGTVRfQVNTRVJUKHggIT0gMCwgIiIpOworLSNpZmRlZiBGTVRfQlVJTFRJTl9DVFpMTAorLSAg cmV0dXJuIEZNVF9CVUlMVElOX0NUWkxMKHgpID49IGV4cDsKKy0jZWxzZQorLSAgcmV0dXJuIGV4 cCA8IG51bV9iaXRzPHVpbnQ2NF90PigpICYmIHggPT0gKCh4ID4+IGV4cCkgPDwgZXhwKTsKKy0j ZW5kaWYKKy19CistCistLy8gVGFibGUgZW50cnkgdHlwZSBmb3IgZGl2aXNpYmlsaXR5IHRlc3Qu CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBkaXZ0ZXN0X3RhYmxlX2VudHJ5IHsKKy0g IFQgbW9kX2ludjsKKy0gIFQgbWF4X3F1b3RpZW50OworLX07CistCistLy8gUmV0dXJucyB0cnVl IGlmZiB4IGlzIGRpdmlzaWJsZSBieSBwb3coNSwgZXhwKS4KKy1pbmxpbmUgYm9vbCBkaXZpc2li bGVfYnlfcG93ZXJfb2ZfNSh1aW50MzJfdCB4LCBpbnQgZXhwKSBGTVRfTk9FWENFUFQgeworLSAg Rk1UX0FTU0VSVChleHAgPD0gMTAsICJ0b28gbGFyZ2UgZXhwb25lbnQiKTsKKy0gIHN0YXRpYyBj b25zdGV4cHIgY29uc3QgZGl2dGVzdF90YWJsZV9lbnRyeTx1aW50MzJfdD4gZGl2dGVzdF90YWJs ZVtdID0geworLSAgICAgIHsweDAwMDAwMDAxLCAweGZmZmZmZmZmfSwgezB4Y2NjY2NjY2QsIDB4 MzMzMzMzMzN9LAorLSAgICAgIHsweGMyOGY1YzI5LCAweDBhM2Q3MGEzfSwgezB4MjZlOTc4ZDUs IDB4MDIwYzQ5YmF9LAorLSAgICAgIHsweDNhZmI3ZTkxLCAweDAwNjhkYjhifSwgezB4MGJjYmU2 MWQsIDB4MDAxNGY4YjV9LAorLSAgICAgIHsweDY4YzI2MTM5LCAweDAwMDQzMWJkfSwgezB4YWU4 ZDQ2YTUsIDB4MDAwMGQ2YmZ9LAorLSAgICAgIHsweDIyZTkwZTIxLCAweDAwMDAyYWYzfSwgezB4 M2EyZTljNmQsIDB4MDAwMDA4OTd9LAorLSAgICAgIHsweDNlZDYxZjQ5LCAweDAwMDAwMWI3fX07 CistICByZXR1cm4geCAqIGRpdnRlc3RfdGFibGVbZXhwXS5tb2RfaW52IDw9IGRpdnRlc3RfdGFi bGVbZXhwXS5tYXhfcXVvdGllbnQ7CistfQorLWlubGluZSBib29sIGRpdmlzaWJsZV9ieV9wb3dl cl9vZl81KHVpbnQ2NF90IHgsIGludCBleHApIEZNVF9OT0VYQ0VQVCB7CistICBGTVRfQVNTRVJU KGV4cCA8PSAyMywgInRvbyBsYXJnZSBleHBvbmVudCIpOworLSAgc3RhdGljIGNvbnN0ZXhwciBj b25zdCBkaXZ0ZXN0X3RhYmxlX2VudHJ5PHVpbnQ2NF90PiBkaXZ0ZXN0X3RhYmxlW10gPSB7Cist ICAgICAgezB4MDAwMDAwMDAwMDAwMDAwMSwgMHhmZmZmZmZmZmZmZmZmZmZmfSwKKy0gICAgICB7 MHhjY2NjY2NjY2NjY2NjY2NkLCAweDMzMzMzMzMzMzMzMzMzMzN9LAorLSAgICAgIHsweDhmNWMy OGY1YzI4ZjVjMjksIDB4MGEzZDcwYTNkNzBhM2Q3MH0sCistICAgICAgezB4MWNhYzA4MzEyNmU5 NzhkNSwgMHgwMjBjNDliYTVlMzUzZjdjfSwKKy0gICAgICB7MHhkMjg4Y2U3MDNhZmI3ZTkxLCAw eDAwNjhkYjhiYWM3MTBjYjJ9LAorLSAgICAgIHsweDVkNGU4ZmIwMGJjYmU2MWQsIDB4MDAxNGY4 YjU4OGUzNjhmMH0sCistICAgICAgezB4NzkwZmI2NTY2OGMyNjEzOSwgMHgwMDA0MzFiZGU4MmQ3 YjYzfSwKKy0gICAgICB7MHhlNTAzMjQ3N2FlOGQ0NmE1LCAweDAwMDBkNmJmOTRkNWU1N2F9LAor LSAgICAgIHsweGM3NjcwNzRiMjJlOTBlMjEsIDB4MDAwMDJhZjMxZGM0NjExOH0sCistICAgICAg ezB4OGU0N2NlNDIzYTJlOWM2ZCwgMHgwMDAwMDg5NzA1ZjQxMzZifSwKKy0gICAgICB7MHg0ZmE3 ZjYwZDNlZDYxZjQ5LCAweDAwMDAwMWI3Y2RmZDlkN2J9LAorLSAgICAgIHsweDBmZWU2NDY5MGM5 MTM5NzUsIDB4MDAwMDAwNTdmNWZmODVlNX0sCistICAgICAgezB4MzY2MmUwZTFjZjUwM2ViMSwg MHgwMDAwMDAxMTk3OTk4MTJkfSwKKy0gICAgICB7MHhhNDdhMmNmOWY2NDMzZmJkLCAweDAwMDAw MDAzODRiODRkMDl9LAorLSAgICAgIHsweDU0MTg2ZjY1MzE0MGE2NTksIDB4MDAwMDAwMDBiNDI0 ZGMzNX0sCistICAgICAgezB4NzczODE2NDc3MDQwMjE0NSwgMHgwMDAwMDAwMDI0MDc1ZjNkfSwK Ky0gICAgICB7MHhlNGE0ZDE0MTdjZDlhMDQxLCAweDAwMDAwMDAwMDczNGFjYTV9LAorLSAgICAg IHsweGM3NTQyOWQ5ZTVjNTIwMGQsIDB4MDAwMDAwMDAwMTcwZWY1NH0sCistICAgICAgezB4YzE3 NzNiOTFmYWMxMDY2OSwgMHgwMDAwMDAwMDAwNDljOTc3fSwKKy0gICAgICB7MHgyNmIxNzI1MDY1 NTljZTE1LCAweDAwMDAwMDAwMDAwZWMxZTR9LAorLSAgICAgIHsweGQ0ODllM2E5YWRkZWMyZDEs IDB4MDAwMDAwMDAwMDAyZjM5NH0sCistICAgICAgezB4OTBlODYwYmI4OTJjOGQ1ZCwgMHgwMDAw MDAwMDAwMDA5NzFkfSwKKy0gICAgICB7MHg1MDJlNzliZjFiNmY0Zjc5LCAweDAwMDAwMDAwMDAw MDFlMzl9LAorLSAgICAgIHsweGRjZDYxODU5NmJlMzBmZTUsIDB4MDAwMDAwMDAwMDAwMDYwYn19 OworLSAgcmV0dXJuIHggKiBkaXZ0ZXN0X3RhYmxlW2V4cF0ubW9kX2ludiA8PSBkaXZ0ZXN0X3Rh YmxlW2V4cF0ubWF4X3F1b3RpZW50OworLX0KKy0KKy0vLyBSZXBsYWNlcyBuIGJ5IGZsb29yKG4g LyBwb3coNSwgTikpIHJldHVybmluZyB0cnVlIGlmIGFuZCBvbmx5IGlmIG4gaXMKKy0vLyBkaXZp c2libGUgYnkgcG93KDUsIE4pLgorLS8vIFByZWNvbmRpdGlvbjogbiA8PSAyICogcG93KDUsIE4g KyAxKS4KKy10ZW1wbGF0ZSA8aW50IE4+CistYm9vbCBjaGVja19kaXZpc2liaWxpdHlfYW5kX2Rp dmlkZV9ieV9wb3c1KHVpbnQzMl90JiBuKSBGTVRfTk9FWENFUFQgeworLSAgc3RhdGljIGNvbnN0 ZXhwciBzdHJ1Y3QgeworLSAgICB1aW50MzJfdCBtYWdpY19udW1iZXI7CistICAgIGludCBiaXRz X2Zvcl9jb21wYXJpc29uOworLSAgICB1aW50MzJfdCB0aHJlc2hvbGQ7CistICAgIGludCBzaGlm dF9hbW91bnQ7CistICB9IGluZm9zW10gPSB7ezB4Y2NjZCwgMTYsIDB4MzMzMywgMTh9LCB7MHhh NDI5LCA4LCAweDBhLCAyMH19OworLSAgY29uc3RleHByIGF1dG8gaW5mbyA9IGluZm9zW04gLSAx XTsKKy0gIG4gKj0gaW5mby5tYWdpY19udW1iZXI7CistICBjb25zdCB1aW50MzJfdCBjb21wYXJp c29uX21hc2sgPSAoMXUgPDwgaW5mby5iaXRzX2Zvcl9jb21wYXJpc29uKSAtIDE7CistICBib29s IHJlc3VsdCA9IChuICYgY29tcGFyaXNvbl9tYXNrKSA8PSBpbmZvLnRocmVzaG9sZDsKKy0gIG4g Pj49IGluZm8uc2hpZnRfYW1vdW50OworLSAgcmV0dXJuIHJlc3VsdDsKKy19CistCistLy8gQ29t cHV0ZXMgZmxvb3IobiAvIHBvdygxMCwgTikpIGZvciBzbWFsbCBuIGFuZCBOLgorLS8vIFByZWNv bmRpdGlvbjogbiA8PSBwb3coMTAsIE4gKyAxKS4KKy10ZW1wbGF0ZSA8aW50IE4+IHVpbnQzMl90 IHNtYWxsX2RpdmlzaW9uX2J5X3BvdzEwKHVpbnQzMl90IG4pIEZNVF9OT0VYQ0VQVCB7CistICBz dGF0aWMgY29uc3RleHByIHN0cnVjdCB7CistICAgIHVpbnQzMl90IG1hZ2ljX251bWJlcjsKKy0g ICAgaW50IHNoaWZ0X2Ftb3VudDsKKy0gICAgdWludDMyX3QgZGl2aXNvcl90aW1lc18xMDsKKy0g IH0gaW5mb3NbXSA9IHt7MHhjY2NkLCAxOSwgMTAwfSwgezB4YTNkOCwgMjIsIDEwMDB9fTsKKy0g IGNvbnN0ZXhwciBhdXRvIGluZm8gPSBpbmZvc1tOIC0gMV07CistICBGTVRfQVNTRVJUKG4gPD0g aW5mby5kaXZpc29yX3RpbWVzXzEwLCAibiBpcyB0b28gbGFyZ2UiKTsKKy0gIHJldHVybiBuICog aW5mby5tYWdpY19udW1iZXIgPj4gaW5mby5zaGlmdF9hbW91bnQ7CistfQorLQorLS8vIENvbXB1 dGVzIGZsb29yKG4gLyAxMF4oa2FwcGEgKyAxKSkgKGZsb2F0KQorLWlubGluZSB1aW50MzJfdCBk aXZpZGVfYnlfMTBfdG9fa2FwcGFfcGx1c18xKHVpbnQzMl90IG4pIEZNVF9OT0VYQ0VQVCB7Cist ICByZXR1cm4gbiAvIGZsb2F0X2luZm88ZmxvYXQ+OjpiaWdfZGl2aXNvcjsKKy19CistLy8gQ29t cHV0ZXMgZmxvb3IobiAvIDEwXihrYXBwYSArIDEpKSAoZG91YmxlKQorLWlubGluZSB1aW50NjRf dCBkaXZpZGVfYnlfMTBfdG9fa2FwcGFfcGx1c18xKHVpbnQ2NF90IG4pIEZNVF9OT0VYQ0VQVCB7 CistICByZXR1cm4gdW11bDEyOF91cHBlcjY0KG4sIDB4ODMxMjZlOTc4ZDRmZGYzYykgPj4gOTsK Ky19CistCistLy8gVmFyaW91cyBzdWJyb3V0aW5lcyB1c2luZyBwb3cxMCBjYWNoZQorLXRlbXBs YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgY2FjaGVfYWNjZXNzb3I7CistCistdGVtcGxhdGUgPD4gc3Ry dWN0IGNhY2hlX2FjY2Vzc29yPGZsb2F0PiB7CistICB1c2luZyBjYXJyaWVyX3VpbnQgPSBmbG9h dF9pbmZvPGZsb2F0Pjo6Y2Fycmllcl91aW50OworLSAgdXNpbmcgY2FjaGVfZW50cnlfdHlwZSA9 IHVpbnQ2NF90OworLQorLSAgc3RhdGljIHVpbnQ2NF90IGdldF9jYWNoZWRfcG93ZXIoaW50IGsp IEZNVF9OT0VYQ0VQVCB7CistICAgIEZNVF9BU1NFUlQoayA+PSBmbG9hdF9pbmZvPGZsb2F0Pjo6 bWluX2sgJiYgayA8PSBmbG9hdF9pbmZvPGZsb2F0Pjo6bWF4X2ssCistICAgICAgICAgICAgICAg ImsgaXMgb3V0IG9mIHJhbmdlIik7CistICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdWludDY0 X3QgcG93MTBfc2lnbmlmaWNhbmRzW10gPSB7CistICAgICAgICAweDgxY2ViMzJjNGI0M2ZjZjUs IDB4YTI0MjVmZjc1ZTE0ZmMzMiwgMHhjYWQyZjdmNTM1OWEzYjNmLAorLSAgICAgICAgMHhmZDg3 YjVmMjgzMDBjYTBlLCAweDllNzRkMWI3OTFlMDdlNDksIDB4YzYxMjA2MjU3NjU4OWRkYiwKKy0g ICAgICAgIDB4Zjc5Njg3YWVkM2VlYzU1MiwgMHg5YWJlMTRjZDQ0NzUzYjUzLCAweGMxNmQ5YTAw OTU5MjhhMjgsCistICAgICAgICAweGYxYzkwMDgwYmFmNzJjYjIsIDB4OTcxZGEwNTA3NGRhN2Jl ZiwgMHhiY2U1MDg2NDkyMTExYWViLAorLSAgICAgICAgMHhlYzFlNGE3ZGI2OTU2MWE2LCAweDkz OTJlZThlOTIxZDVkMDgsIDB4Yjg3N2FhMzIzNmE0YjQ0YSwKKy0gICAgICAgIDB4ZTY5NTk0YmVj NDRkZTE1YywgMHg5MDFkN2NmNzNhYjBhY2RhLCAweGI0MjRkYzM1MDk1Y2Q4MTAsCistICAgICAg ICAweGUxMmUxMzQyNGJiNDBlMTQsIDB4OGNiY2NjMDk2ZjUwODhjYywgMHhhZmViZmYwYmNiMjRh YWZmLAorLSAgICAgICAgMHhkYmU2ZmVjZWJkZWRkNWJmLCAweDg5NzA1ZjQxMzZiNGE1OTgsIDB4 YWJjYzc3MTE4NDYxY2VmZCwKKy0gICAgICAgIDB4ZDZiZjk0ZDVlNTdhNDJiZCwgMHg4NjM3YmQw NWFmNmM2OWI2LCAweGE3YzVhYzQ3MWI0Nzg0MjQsCistICAgICAgICAweGQxYjcxNzU4ZTIxOTY1 MmMsIDB4ODMxMjZlOTc4ZDRmZGYzYywgMHhhM2Q3MGEzZDcwYTNkNzBiLAorLSAgICAgICAgMHhj Y2NjY2NjY2NjY2NjY2NkLCAweDgwMDAwMDAwMDAwMDAwMDAsIDB4YTAwMDAwMDAwMDAwMDAwMCwK Ky0gICAgICAgIDB4YzgwMDAwMDAwMDAwMDAwMCwgMHhmYTAwMDAwMDAwMDAwMDAwLCAweDljNDAw MDAwMDAwMDAwMDAsCistICAgICAgICAweGMzNTAwMDAwMDAwMDAwMDAsIDB4ZjQyNDAwMDAwMDAw MDAwMCwgMHg5ODk2ODAwMDAwMDAwMDAwLAorLSAgICAgICAgMHhiZWJjMjAwMDAwMDAwMDAwLCAw eGVlNmIyODAwMDAwMDAwMDAsIDB4OTUwMmY5MDAwMDAwMDAwMCwKKy0gICAgICAgIDB4YmE0M2I3 NDAwMDAwMDAwMCwgMHhlOGQ0YTUxMDAwMDAwMDAwLCAweDkxODRlNzJhMDAwMDAwMDAsCistICAg ICAgICAweGI1ZTYyMGY0ODAwMDAwMDAsIDB4ZTM1ZmE5MzFhMDAwMDAwMCwgMHg4ZTFiYzliZjA0 MDAwMDAwLAorLSAgICAgICAgMHhiMWEyYmMyZWM1MDAwMDAwLCAweGRlMGI2YjNhNzY0MDAwMDAs IDB4OGFjNzIzMDQ4OWU4MDAwMCwKKy0gICAgICAgIDB4YWQ3OGViYzVhYzYyMDAwMCwgMHhkOGQ3 MjZiNzE3N2E4MDAwLCAweDg3ODY3ODMyNmVhYzkwMDAsCistICAgICAgICAweGE5NjgxNjNmMGE1 N2I0MDAsIDB4ZDNjMjFiY2VjY2VkYTEwMCwgMHg4NDU5NTE2MTQwMTQ4NGEwLAorLSAgICAgICAg MHhhNTZmYTViOTkwMTlhNWM4LCAweGNlY2I4ZjI3ZjQyMDBmM2EsIDB4ODEzZjM5NzhmODk0MDk4 NCwKKy0gICAgICAgIDB4YTE4ZjA3ZDczNmI5MGJlNSwgMHhjOWYyYzljZDA0Njc0ZWRlLCAweGZj NmY3YzQwNDU4MTIyOTYsCistICAgICAgICAweDlkYzVhZGE4MmI3MGI1OWQsIDB4YzUzNzE5MTIz NjRjZTMwNSwgMHhmNjg0ZGY1NmMzZTAxYmM2LAorLSAgICAgICAgMHg5YTEzMGI5NjNhNmMxMTVj LCAweGMwOTdjZTdiYzkwNzE1YjMsIDB4ZjBiZGMyMWFiYjQ4ZGIyMCwKKy0gICAgICAgIDB4OTY3 Njk5NTBiNTBkODhmNCwgMHhiYzE0M2ZhNGUyNTBlYjMxLCAweGViMTk0ZjhlMWFlNTI1ZmQsCist ICAgICAgICAweDkyZWZkMWI4ZDBjZjM3YmUsIDB4YjdhYmM2MjcwNTAzMDVhZCwgMHhlNTk2Yjdi MGM2NDNjNzE5LAorLSAgICAgICAgMHg4ZjdlMzJjZTdiZWE1YzZmLCAweGIzNWRiZjgyMWFlNGYz OGIsIDB4ZTAzNTJmNjJhMTllMzA2ZX07CistICAgIHJldHVybiBwb3cxMF9zaWduaWZpY2FuZHNb ayAtIGZsb2F0X2luZm88ZmxvYXQ+OjptaW5fa107CistICB9CistCistICBzdGF0aWMgY2Fycmll cl91aW50IGNvbXB1dGVfbXVsKGNhcnJpZXJfdWludCB1LAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjYWNoZV9lbnRyeV90eXBlJiBjYWNoZSkgRk1UX05PRVhDRVBU IHsKKy0gICAgcmV0dXJuIHVtdWw5Nl91cHBlcjMyKHUsIGNhY2hlKTsKKy0gIH0KKy0KKy0gIHN0 YXRpYyB1aW50MzJfdCBjb21wdXRlX2RlbHRhKGNvbnN0IGNhY2hlX2VudHJ5X3R5cGUmIGNhY2hl LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJldGFfbWludXNfMSkgRk1U X05PRVhDRVBUIHsKKy0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90PihjYWNoZSA+PiAo NjQgLSAxIC0gYmV0YV9taW51c18xKSk7CistICB9CistCistICBzdGF0aWMgYm9vbCBjb21wdXRl X211bF9wYXJpdHkoY2Fycmllcl91aW50IHR3b19mLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNhY2hlX2VudHJ5X3R5cGUmIGNhY2hlLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBiZXRhX21pbnVzXzEpIEZNVF9OT0VYQ0VQVCB7CistICAg IEZNVF9BU1NFUlQoYmV0YV9taW51c18xID49IDEsICIiKTsKKy0gICAgRk1UX0FTU0VSVChiZXRh X21pbnVzXzEgPCA2NCwgIiIpOworLQorLSAgICByZXR1cm4gKCh1bXVsOTZfbG93ZXI2NCh0d29f ZiwgY2FjaGUpID4+ICg2NCAtIGJldGFfbWludXNfMSkpICYgMSkgIT0gMDsKKy0gIH0KKy0KKy0g IHN0YXRpYyBjYXJyaWVyX3VpbnQgY29tcHV0ZV9sZWZ0X2VuZHBvaW50X2Zvcl9zaG9ydGVyX2lu dGVydmFsX2Nhc2UoCistICAgICAgY29uc3QgY2FjaGVfZW50cnlfdHlwZSYgY2FjaGUsIGludCBi ZXRhX21pbnVzXzEpIEZNVF9OT0VYQ0VQVCB7CistICAgIHJldHVybiBzdGF0aWNfY2FzdDxjYXJy aWVyX3VpbnQ+KAorLSAgICAgICAgKGNhY2hlIC0gKGNhY2hlID4+IChmbG9hdF9pbmZvPGZsb2F0 Pjo6c2lnbmlmaWNhbmRfYml0cyArIDIpKSkgPj4KKy0gICAgICAgICg2NCAtIGZsb2F0X2luZm88 ZmxvYXQ+OjpzaWduaWZpY2FuZF9iaXRzIC0gMSAtIGJldGFfbWludXNfMSkpOworLSAgfQorLQor LSAgc3RhdGljIGNhcnJpZXJfdWludCBjb21wdXRlX3JpZ2h0X2VuZHBvaW50X2Zvcl9zaG9ydGVy X2ludGVydmFsX2Nhc2UoCistICAgICAgY29uc3QgY2FjaGVfZW50cnlfdHlwZSYgY2FjaGUsIGlu dCBiZXRhX21pbnVzXzEpIEZNVF9OT0VYQ0VQVCB7CistICAgIHJldHVybiBzdGF0aWNfY2FzdDxj YXJyaWVyX3VpbnQ+KAorLSAgICAgICAgKGNhY2hlICsgKGNhY2hlID4+IChmbG9hdF9pbmZvPGZs b2F0Pjo6c2lnbmlmaWNhbmRfYml0cyArIDEpKSkgPj4KKy0gICAgICAgICg2NCAtIGZsb2F0X2lu Zm88ZmxvYXQ+OjpzaWduaWZpY2FuZF9iaXRzIC0gMSAtIGJldGFfbWludXNfMSkpOworLSAgfQor LQorLSAgc3RhdGljIGNhcnJpZXJfdWludCBjb21wdXRlX3JvdW5kX3VwX2Zvcl9zaG9ydGVyX2lu dGVydmFsX2Nhc2UoCistICAgICAgY29uc3QgY2FjaGVfZW50cnlfdHlwZSYgY2FjaGUsIGludCBi ZXRhX21pbnVzXzEpIEZNVF9OT0VYQ0VQVCB7CistICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8Y2Fy cmllcl91aW50PigKKy0gICAgICAgICAgICAgICAgY2FjaGUgPj4KKy0gICAgICAgICAgICAgICAg KDY0IC0gZmxvYXRfaW5mbzxmbG9hdD46OnNpZ25pZmljYW5kX2JpdHMgLSAyIC0gYmV0YV9taW51 c18xKSkgKworLSAgICAgICAgICAgIDEpIC8KKy0gICAgICAgICAgIDI7CistICB9CistfTsKKy0K Ky10ZW1wbGF0ZSA8PiBzdHJ1Y3QgY2FjaGVfYWNjZXNzb3I8ZG91YmxlPiB7CistICB1c2luZyBj YXJyaWVyX3VpbnQgPSBmbG9hdF9pbmZvPGRvdWJsZT46OmNhcnJpZXJfdWludDsKKy0gIHVzaW5n IGNhY2hlX2VudHJ5X3R5cGUgPSB1aW50MTI4X3dyYXBwZXI7CistCistICBzdGF0aWMgdWludDEy OF93cmFwcGVyIGdldF9jYWNoZWRfcG93ZXIoaW50IGspIEZNVF9OT0VYQ0VQVCB7CistICAgIEZN VF9BU1NFUlQoayA+PSBmbG9hdF9pbmZvPGRvdWJsZT46Om1pbl9rICYmIGsgPD0gZmxvYXRfaW5m bzxkb3VibGU+OjptYXhfaywKKy0gICAgICAgICAgICAgICAiayBpcyBvdXQgb2YgcmFuZ2UiKTsK Ky0KKy0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1aW50MTI4X3dyYXBwZXIgcG93MTBfc2ln bmlmaWNhbmRzW10gPSB7CistI2lmIEZNVF9VU0VfRlVMTF9DQUNIRV9EUkFHT05CT1gKKy0gICAg ICB7MHhmZjc3YjFmY2JlYmNkYzRmLCAweDI1ZThlODljMTNiYjBmN2J9LAorLSAgICAgIHsweDlm YWFjZjNkZjczNjA5YjEsIDB4NzdiMTkxNjE4YzU0ZTlhZH0sCistICAgICAgezB4Yzc5NTgzMGQ3 NTAzOGMxZCwgMHhkNTlkZjViOWVmNmEyNDE4fSwKKy0gICAgICB7MHhmOTdhZTNkMGQyNDQ2ZjI1 LCAweDRiMDU3MzI4NmI0NGFkMWV9LAorLSAgICAgIHsweDliZWNjZTYyODM2YWM1NzcsIDB4NGVl MzY3Zjk0MzBhZWMzM30sCistICAgICAgezB4YzJlODAxZmIyNDQ1NzZkNSwgMHgyMjljNDFmNzkz Y2RhNzQwfSwKKy0gICAgICB7MHhmM2EyMDI3OWVkNTZkNDhhLCAweDZiNDM1Mjc1NzhjMTExMTB9 LAorLSAgICAgIHsweDk4NDU0MThjMzQ1NjQ0ZDYsIDB4ODMwYTEzODk2Yjc4YWFhYX0sCistICAg ICAgezB4YmU1NjkxZWY0MTZiZDYwYywgMHgyM2NjOTg2YmM2NTZkNTU0fSwKKy0gICAgICB7MHhl ZGVjMzY2YjExYzZjYjhmLCAweDJjYmZiZTg2YjdlYzhhYTl9LAorLSAgICAgIHsweDk0YjNhMjAy ZWIxYzNmMzksIDB4N2JmN2Q3MTQzMmYzZDZhYX0sCistICAgICAgezB4YjllMDhhODNhNWUzNGYw NywgMHhkYWY1Y2NkOTNmYjBjYzU0fSwKKy0gICAgICB7MHhlODU4YWQyNDhmNWMyMmM5LCAweGQx YjM0MDBmOGY5Y2ZmNjl9LAorLSAgICAgIHsweDkxMzc2YzM2ZDk5OTk1YmUsIDB4MjMxMDA4MDli OWMyMWZhMn0sCistICAgICAgezB4YjU4NTQ3NDQ4ZmZmZmIyZCwgMHhhYmQ0MGEwYzI4MzJhNzhi fSwKKy0gICAgICB7MHhlMmU2OTkxNWIzZmZmOWY5LCAweDE2YzkwYzhmMzIzZjUxNmR9LAorLSAg ICAgIHsweDhkZDAxZmFkOTA3ZmZjM2IsIDB4YWUzZGE3ZDk3ZjY3OTJlNH0sCistICAgICAgezB4 YjE0NDI3OThmNDlmZmI0YSwgMHg5OWNkMTFjZmRmNDE3NzlkfSwKKy0gICAgICB7MHhkZDk1MzE3 ZjMxYzdmYTFkLCAweDQwNDA1NjQzZDcxMWQ1ODR9LAorLSAgICAgIHsweDhhN2QzZWVmN2YxY2Zj NTIsIDB4NDgyODM1ZWE2NjZiMjU3M30sCistICAgICAgezB4YWQxYzhlYWI1ZWU0M2I2NiwgMHhk YTMyNDM2NTAwMDVlZWQwfSwKKy0gICAgICB7MHhkODYzYjI1NjM2OWQ0YTQwLCAweDkwYmVkNDNl NDAwNzZhODN9LAorLSAgICAgIHsweDg3M2U0Zjc1ZTIyMjRlNjgsIDB4NWE3NzQ0YTZlODA0YTI5 Mn0sCistICAgICAgezB4YTkwZGUzNTM1YWFhZTIwMiwgMHg3MTE1MTVkMGEyMDVjYjM3fSwKKy0g ICAgICB7MHhkMzUxNWMyODMxNTU5YTgzLCAweDBkNWE1YjQ0Y2E4NzNlMDR9LAorLSAgICAgIHsw eDg0MTJkOTk5MWVkNTgwOTEsIDB4ZTg1ODc5MGFmZTk0ODZjM30sCistICAgICAgezB4YTUxNzhm ZmY2NjhhZTBiNiwgMHg2MjZlOTc0ZGJlMzlhODczfSwKKy0gICAgICB7MHhjZTVkNzNmZjQwMmQ5 OGUzLCAweGZiMGEzZDIxMmRjODEyOTB9LAorLSAgICAgIHsweDgwZmE2ODdmODgxYzdmOGUsIDB4 N2NlNjY2MzRiYzlkMGI5YX0sCistICAgICAgezB4YTEzOTAyOWY2YTIzOWY3MiwgMHgxYzFmZmZj MWViYzQ0ZTgxfSwKKy0gICAgICB7MHhjOTg3NDM0NzQ0YWM4NzRlLCAweGEzMjdmZmIyNjZiNTYy MjF9LAorLSAgICAgIHsweGZiZTkxNDE5MTVkN2E5MjIsIDB4NGJmMWZmOWYwMDYyYmFhOX0sCist ICAgICAgezB4OWQ3MWFjOGZhZGE2YzliNSwgMHg2Zjc3M2ZjMzYwM2RiNGFhfSwKKy0gICAgICB7 MHhjNGNlMTdiMzk5MTA3YzIyLCAweGNiNTUwZmI0Mzg0ZDIxZDR9LAorLSAgICAgIHsweGY2MDE5 ZGEwN2Y1NDliMmIsIDB4N2UyYTUzYTE0NjYwNmE0OX0sCistICAgICAgezB4OTljMTAyODQ0Zjk0 ZTBmYiwgMHgyZWRhNzQ0NGNiZmM0MjZlfSwKKy0gICAgICB7MHhjMDMxNDMyNTYzN2ExOTM5LCAw eGZhOTExMTU1ZmVmYjUzMDl9LAorLSAgICAgIHsweGYwM2Q5M2VlYmM1ODlmODgsIDB4NzkzNTU1 YWI3ZWJhMjdjYn0sCistICAgICAgezB4OTYyNjdjNzUzNWI3NjNiNSwgMHg0YmMxNTU4YjJmMzQ1 OGRmfSwKKy0gICAgICB7MHhiYmIwMWI5MjgzMjUzY2EyLCAweDllYjFhYWVkZmIwMTZmMTd9LAor LSAgICAgIHsweGVhOWMyMjc3MjNlZThiY2IsIDB4NDY1ZTE1YTk3OWMxY2FkZH0sCistICAgICAg ezB4OTJhMTk1OGE3Njc1MTc1ZiwgMHgwYmZhY2Q4OWVjMTkxZWNhfSwKKy0gICAgICB7MHhiNzQ5 ZmFlZDE0MTI1ZDM2LCAweGNlZjk4MGVjNjcxZjY2N2N9LAorLSAgICAgIHsweGU1MWM3OWE4NTkx NmY0ODQsIDB4ODJiN2UxMjc4MGU3NDAxYn0sCistICAgICAgezB4OGYzMWNjMDkzN2FlNThkMiwg MHhkMWIyZWNiOGIwOTA4ODExfSwKKy0gICAgICB7MHhiMmZlM2YwYjg1OTllZjA3LCAweDg2MWZh N2U2ZGNiNGFhMTZ9LAorLSAgICAgIHsweGRmYmRjZWNlNjcwMDZhYzksIDB4NjdhNzkxZTA5M2Ux ZDQ5Yn0sCistICAgICAgezB4OGJkNmExNDEwMDYwNDJiZCwgMHhlMGM4YmIyYzVjNmQyNGUxfSwK Ky0gICAgICB7MHhhZWNjNDk5MTQwNzg1MzZkLCAweDU4ZmFlOWY3NzM4ODZlMTl9LAorLSAgICAg IHsweGRhN2Y1YmY1OTA5NjY4NDgsIDB4YWYzOWE0NzU1MDZhODk5Zn0sCistICAgICAgezB4ODg4 Zjk5Nzk3YTVlMDEyZCwgMHg2ZDg0MDZjOTUyNDI5NjA0fSwKKy0gICAgICB7MHhhYWIzN2ZkN2Q4 ZjU4MTc4LCAweGM4ZTUwODdiYTZkMzNiODR9LAorLSAgICAgIHsweGQ1NjA1ZmNkY2YzMmUxZDYs IDB4ZmIxZTRhOWE5MDg4MGE2NX0sCistICAgICAgezB4ODU1YzNiZTBhMTdmY2QyNiwgMHg1Y2Yy ZWVhMDlhNTUwNjgwfSwKKy0gICAgICB7MHhhNmIzNGFkOGM5ZGZjMDZmLCAweGY0MmZhYTQ4YzBl YTQ4MWZ9LAorLSAgICAgIHsweGQwNjAxZDhlZmM1N2IwOGIsIDB4ZjEzYjk0ZGFmMTI0ZGEyN30s CistICAgICAgezB4ODIzYzEyNzk1ZGI2Y2U1NywgMHg3NmM1M2QwOGQ2YjcwODU5fSwKKy0gICAg ICB7MHhhMmNiMTcxN2I1MjQ4MWVkLCAweDU0NzY4YzRiMGM2NGNhNmZ9LAorLSAgICAgIHsweGNi N2RkY2RkYTI2ZGEyNjgsIDB4YTk5NDJmNWRjZjdkZmQwYX0sCistICAgICAgezB4ZmU1ZDU0MTUw YjA5MGIwMiwgMHhkM2Y5M2IzNTQzNWQ3YzRkfSwKKy0gICAgICB7MHg5ZWZhNTQ4ZDI2ZTVhNmUx LCAweGM0N2JjNTAxNGExYTZkYjB9LAorLSAgICAgIHsweGM2YjhlOWIwNzA5ZjEwOWEsIDB4MzU5 YWI2NDE5Y2ExMDkxY30sCistICAgICAgezB4Zjg2NzI0MWM4Y2M2ZDRjMCwgMHhjMzAxNjNkMjAz Yzk0YjYzfSwKKy0gICAgICB7MHg5YjQwNzY5MWQ3ZmM0NGY4LCAweDc5ZTBkZTYzNDI1ZGNmMWV9 LAorLSAgICAgIHsweGMyMTA5NDM2NGRmYjU2MzYsIDB4OTg1OTE1ZmMxMmY1NDJlNX0sCistICAg ICAgezB4ZjI5NGI5NDNlMTdhMmJjNCwgMHgzZTZmNWI3YjE3YjI5MzllfSwKKy0gICAgICB7MHg5 NzljZjNjYTZjZWM1YjVhLCAweGE3MDU5OTJjZWVjZjljNDN9LAorLSAgICAgIHsweGJkODQzMGJk MDgyNzcyMzEsIDB4NTBjNmZmNzgyYTgzODM1NH0sCistICAgICAgezB4ZWNlNTNjZWM0YTMxNGVi ZCwgMHhhNGY4YmY1NjM1MjQ2NDI5fSwKKy0gICAgICB7MHg5NDBmNDYxM2FlNWVkMTM2LCAweDg3 MWI3Nzk1ZTEzNmJlOWF9LAorLSAgICAgIHsweGI5MTMxNzk4OTlmNjg1ODQsIDB4MjhlMjU1N2I1 OTg0NmU0MH0sCistICAgICAgezB4ZTc1N2RkN2VjMDc0MjZlNSwgMHgzMzFhZWFkYTJmZTU4OWQw fSwKKy0gICAgICB7MHg5MDk2ZWE2ZjM4NDg5ODRmLCAweDNmZjBkMmM4NWRlZjc2MjJ9LAorLSAg ICAgIHsweGI0YmNhNTBiMDY1YWJlNjMsIDB4MGZlZDA3N2E3NTZiNTNhYX0sCistICAgICAgezB4 ZTFlYmNlNGRjN2YxNmRmYiwgMHhkM2U4NDk1OTEyYzYyODk1fSwKKy0gICAgICB7MHg4ZDMzNjBm MDljZjZlNGJkLCAweDY0NzEyZGQ3YWJiYmQ5NWR9LAorLSAgICAgIHsweGIwODAzOTJjYzQzNDlk ZWMsIDB4YmQ4ZDc5NGQ5NmFhY2ZiNH0sCistICAgICAgezB4ZGNhMDQ3NzdmNTQxYzU2NywgMHhl Y2YwZDdhMGZjNTU4M2ExfSwKKy0gICAgICB7MHg4OWU0MmNhYWY5NDkxYjYwLCAweGY0MTY4NmM0 OWRiNTcyNDV9LAorLSAgICAgIHsweGFjNWQzN2Q1Yjc5YjYyMzksIDB4MzExYzI4NzVjNTIyY2Vk Nn0sCistICAgICAgezB4ZDc3NDg1Y2IyNTgyM2FjNywgMHg3ZDYzMzI5MzM2NmI4MjhjfSwKKy0g ICAgICB7MHg4NmE4ZDM5ZWY3NzE2NGJjLCAweGFlNWRmZjljMDIwMzMxOTh9LAorLSAgICAgIHsw eGE4NTMwODg2YjU0ZGJkZWIsIDB4ZDlmNTdmODMwMjgzZmRmZH0sCistICAgICAgezB4ZDI2N2Nh YTg2MmExMmQ2NiwgMHhkMDcyZGY2M2MzMjRmZDdjfSwKKy0gICAgICB7MHg4MzgwZGVhOTNkYTRi YzYwLCAweDQyNDdjYjllNTlmNzFlNmV9LAorLSAgICAgIHsweGE0NjExNjUzOGQwZGViNzgsIDB4 NTJkOWJlODVmMDc0ZTYwOX0sCistICAgICAgezB4Y2Q3OTViZTg3MDUxNjY1NiwgMHg2NzkwMmUy NzZjOTIxZjhjfSwKKy0gICAgICB7MHg4MDZiZDk3MTQ2MzJkZmY2LCAweDAwYmExY2Q4YTNkYjUz Yjd9LAorLSAgICAgIHsweGEwODZjZmNkOTdiZjk3ZjMsIDB4ODBlOGE0MGVjY2QyMjhhNX0sCist ICAgICAgezB4YzhhODgzYzBmZGFmN2RmMCwgMHg2MTIyY2QxMjgwMDZiMmNlfSwKKy0gICAgICB7 MHhmYWQyYTRiMTNkMWI1ZDZjLCAweDc5NmI4MDU3MjAwODVmODJ9LAorLSAgICAgIHsweDljYzNh NmVlYzYzMTFhNjMsIDB4Y2JlMzMwMzY3NDA1M2JiMX0sCistICAgICAgezB4YzNmNDkwYWE3N2Jk NjBmYywgMHhiZWRiZmM0NDExMDY4YTlkfSwKKy0gICAgICB7MHhmNGYxYjRkNTE1YWNiOTNiLCAw eGVlOTJmYjU1MTU0ODJkNDV9LAorLSAgICAgIHsweDk5MTcxMTA1MmQ4YmYzYzUsIDB4NzUxYmRk MTUyZDRkMWM0Yn0sCistICAgICAgezB4YmY1Y2Q1NDY3OGVlZjBiNiwgMHhkMjYyZDQ1YTc4YTA2 MzVlfSwKKy0gICAgICB7MHhlZjM0MGE5ODE3MmFhY2U0LCAweDg2ZmI4OTcxMTZjODdjMzV9LAor LSAgICAgIHsweDk1ODA4NjlmMGU3YWFjMGUsIDB4ZDQ1ZDM1ZTZhZTNkNGRhMX0sCistICAgICAg ezB4YmFlMGE4NDZkMjE5NTcxMiwgMHg4OTc0ODM2MDU5Y2NhMTBhfSwKKy0gICAgICB7MHhlOTk4 ZDI1ODg2OWZhY2Q3LCAweDJiZDFhNDM4NzAzZmM5NGN9LAorLSAgICAgIHsweDkxZmY4Mzc3NTQy M2NjMDYsIDB4N2I2MzA2YTM0NjI3ZGRkMH0sCistICAgICAgezB4YjY3ZjY0NTUyOTJjYmYwOCwg MHgxYTNiYzg0YzE3YjFkNTQzfSwKKy0gICAgICB7MHhlNDFmM2Q2YTczNzdlZWNhLCAweDIwY2Fi YTVmMWQ5ZTRhOTR9LAorLSAgICAgIHsweDhlOTM4NjYyODgyYWY1M2UsIDB4NTQ3ZWI0N2I3Mjgy ZWU5ZH0sCistICAgICAgezB4YjIzODY3ZmIyYTM1YjI4ZCwgMHhlOTllNjE5YTRmMjNhYTQ0fSwK Ky0gICAgICB7MHhkZWM2ODFmOWY0YzMxZjMxLCAweDY0MDVmYTAwZTJlYzk0ZDV9LAorLSAgICAg IHsweDhiM2MxMTNjMzhmOWYzN2UsIDB4ZGU4M2JjNDA4ZGQzZGQwNX0sCistICAgICAgezB4YWUw YjE1OGI0NzM4NzA1ZSwgMHg5NjI0YWI1MGIxNDhkNDQ2fSwKKy0gICAgICB7MHhkOThkZGFlZTE5 MDY4Yzc2LCAweDNiYWRkNjI0ZGQ5YjA5NTh9LAorLSAgICAgIHsweDg3ZjhhOGQ0Y2ZhNDE3Yzks IDB4ZTU0Y2E1ZDcwYTgwZTVkN30sCistICAgICAgezB4YTlmNmQzMGEwMzhkMWRiYywgMHg1ZTlm Y2Y0Y2NkMjExZjRkfSwKKy0gICAgICB7MHhkNDc0ODdjYzg0NzA2NTJiLCAweDc2NDdjMzIwMDA2 OTY3MjB9LAorLSAgICAgIHsweDg0YzhkNGRmZDJjNjNmM2IsIDB4MjllY2Q5ZjQwMDQxZTA3NH0s CistICAgICAgezB4YTVmYjBhMTdjNzc3Y2YwOSwgMHhmNDY4MTA3MTAwNTI1ODkxfSwKKy0gICAg ICB7MHhjZjc5Y2M5ZGI5NTVjMmNjLCAweDcxODIxNDhkNDA2NmVlYjV9LAorLSAgICAgIHsweDgx YWMxZmUyOTNkNTk5YmYsIDB4YzZmMTRjZDg0ODQwNTUzMX0sCistICAgICAgezB4YTIxNzI3ZGIz OGNiMDAyZiwgMHhiOGFkYTAwZTVhNTA2YTdkfSwKKy0gICAgICB7MHhjYTljZjFkMjA2ZmRjMDNi LCAweGE2ZDkwODExZjBlNDg1MWR9LAorLSAgICAgIHsweGZkNDQyZTQ2ODhiZDMwNGEsIDB4OTA4 ZjRhMTY2ZDFkYTY2NH0sCistICAgICAgezB4OWU0YTljZWMxNTc2M2UyZSwgMHg5YTU5OGU0ZTA0 MzI4N2ZmfSwKKy0gICAgICB7MHhjNWRkNDQyNzFhZDNjZGJhLCAweDQwZWZmMWUxODUzZjI5ZmV9 LAorLSAgICAgIHsweGY3NTQ5NTMwZTE4OGMxMjgsIDB4ZDEyYmVlNTllNjhlZjQ3ZH0sCistICAg ICAgezB4OWE5NGRkM2U4Y2Y1NzhiOSwgMHg4MmJiNzRmODMwMTk1OGNmfSwKKy0gICAgICB7MHhj MTNhMTQ4ZTMwMzJkNmU3LCAweGUzNmE1MjM2M2MxZmFmMDJ9LAorLSAgICAgIHsweGYxODg5OWIx YmMzZjhjYTEsIDB4ZGM0NGU2YzNjYjI3OWFjMn0sCistICAgICAgezB4OTZmNTYwMGYxNWE3Yjdl NSwgMHgyOWFiMTAzYTVlZjhjMGJhfSwKKy0gICAgICB7MHhiY2IyYjgxMmRiMTFhNWRlLCAweDc0 MTVkNDQ4ZjZiNmYwZTh9LAorLSAgICAgIHsweGViZGY2NjE3OTFkNjBmNTYsIDB4MTExYjQ5NWIz NDY0YWQyMn0sCistICAgICAgezB4OTM2YjlmY2ViYjI1Yzk5NSwgMHhjYWIxMGRkOTAwYmVlYzM1 fSwKKy0gICAgICB7MHhiODQ2ODdjMjY5ZWYzYmZiLCAweDNkNWQ1MTRmNDBlZWE3NDN9LAorLSAg ICAgIHsweGU2NTgyOWIzMDQ2YjBhZmEsIDB4MGNiNGE1YTMxMTJhNTExM30sCistICAgICAgezB4 OGZmNzFhMGZlMmMyZTZkYywgMHg0N2YwZTc4NWVhYmE3MmFjfSwKKy0gICAgICB7MHhiM2Y0ZTA5 M2RiNzNhMDkzLCAweDU5ZWQyMTY3NjU2OTBmNTd9LAorLSAgICAgIHsweGUwZjIxOGI4ZDI1MDg4 YjgsIDB4MzA2ODY5YzEzZWMzNTMyZH0sCistICAgICAgezB4OGM5NzRmNzM4MzcyNTU3MywgMHgx ZTQxNDIxOGM3M2ExM2ZjfSwKKy0gICAgICB7MHhhZmJkMjM1MDY0NGVlYWNmLCAweGU1ZDE5Mjll ZjkwODk4ZmJ9LAorLSAgICAgIHsweGRiYWM2YzI0N2Q2MmE1ODMsIDB4ZGY0NWY3NDZiNzRhYmYz YX0sCistICAgICAgezB4ODk0YmMzOTZjZTVkYTc3MiwgMHg2YjhiYmE4YzMyOGViNzg0fSwKKy0g ICAgICB7MHhhYjllYjQ3YzgxZjUxMTRmLCAweDA2NmVhOTJmM2YzMjY1NjV9LAorLSAgICAgIHsw eGQ2ODY2MTliYTI3MjU1YTIsIDB4YzgwYTUzN2IwZWZlZmViZX0sCistICAgICAgezB4ODYxM2Zk MDE0NTg3NzU4NSwgMHhiZDA2NzQyY2U5NWY1ZjM3fSwKKy0gICAgICB7MHhhNzk4ZmM0MTk2ZTk1 MmU3LCAweDJjNDgxMTM4MjNiNzM3MDV9LAorLSAgICAgIHsweGQxN2YzYjUxZmNhM2E3YTAsIDB4 Zjc1YTE1ODYyY2E1MDRjNn0sCistICAgICAgezB4ODJlZjg1MTMzZGU2NDhjNCwgMHg5YTk4NGQ3 M2RiZTcyMmZjfSwKKy0gICAgICB7MHhhM2FiNjY1ODBkNWZkYWY1LCAweGMxM2U2MGQwZDJlMGVi YmJ9LAorLSAgICAgIHsweGNjOTYzZmVlMTBiN2QxYjMsIDB4MzE4ZGY5MDUwNzk5MjZhOX0sCist ICAgICAgezB4ZmZiYmNmZTk5NGU1YzYxZiwgMHhmZGYxNzc0NjQ5N2Y3MDUzfSwKKy0gICAgICB7 MHg5ZmQ1NjFmMWZkMGY5YmQzLCAweGZlYjZlYThiZWRlZmE2MzR9LAorLSAgICAgIHsweGM3Y2Fi YTZlN2M1MzgyYzgsIDB4ZmU2NGE1MmVlOTZiOGZjMX0sCistICAgICAgezB4ZjliZDY5MGExYjY4 NjM3YiwgMHgzZGZkY2U3YWEzYzY3M2IxfSwKKy0gICAgICB7MHg5YzE2NjFhNjUxMjEzZTJkLCAw eDA2YmVhMTBjYTY1YzA4NGZ9LAorLSAgICAgIHsweGMzMWJmYTBmZTU2OThkYjgsIDB4NDg2ZTQ5 NGZjZmYzMGE2M30sCistICAgICAgezB4ZjNlMmY4OTNkZWMzZjEyNiwgMHg1YTg5ZGJhM2MzZWZj Y2ZifSwKKy0gICAgICB7MHg5ODZkZGI1YzZiM2E3NmI3LCAweGY4OTYyOTQ2NWE3NWUwMWR9LAor LSAgICAgIHsweGJlODk1MjMzODYwOTE0NjUsIDB4ZjZiYmIzOTdmMTEzNTgyNH0sCistICAgICAg ezB4ZWUyYmE2YzA2NzhiNTk3ZiwgMHg3NDZhYTA3ZGVkNTgyZTJkfSwKKy0gICAgICB7MHg5NGRi NDgzODQwYjcxN2VmLCAweGE4YzJhNDRlYjQ1NzFjZGR9LAorLSAgICAgIHsweGJhMTIxYTQ2NTBl NGRkZWIsIDB4OTJmMzRkNjI2MTZjZTQxNH0sCistICAgICAgezB4ZTg5NmEwZDdlNTFlMTU2Niwg MHg3N2IwMjBiYWY5YzgxZDE4fSwKKy0gICAgICB7MHg5MTVlMjQ4NmVmMzJjZDYwLCAweDBhY2Ux NDc0ZGMxZDEyMmZ9LAorLSAgICAgIHsweGI1YjVhZGE4YWFmZjgwYjgsIDB4MGQ4MTk5OTIxMzI0 NTZiYn0sCistICAgICAgezB4ZTMyMzE5MTJkNWJmNjBlNiwgMHgxMGUxZmZmNjk3ZWQ2YzZhfSwK Ky0gICAgICB7MHg4ZGY1ZWZhYmM1OTc5YzhmLCAweGNhOGQzZmZhMWVmNDYzYzJ9LAorLSAgICAg IHsweGIxNzM2Yjk2YjZmZDgzYjMsIDB4YmQzMDhmZjhhNmIxN2NiM30sCistICAgICAgezB4ZGRk MDQ2N2M2NGJjZTRhMCwgMHhhYzdjYjNmNmQwNWRkYmRmfSwKKy0gICAgICB7MHg4YWEyMmMwZGJl ZjYwZWU0LCAweDZiY2RmMDdhNDIzYWE5NmN9LAorLSAgICAgIHsweGFkNGFiNzExMmViMzkyOWQs IDB4ODZjMTZjOThkMmM5NTNjN30sCistICAgICAgezB4ZDg5ZDY0ZDU3YTYwNzc0NCwgMHhlODcx YzdiZjA3N2JhOGI4fSwKKy0gICAgICB7MHg4NzYyNWYwNTZjN2M0YThiLCAweDExNDcxY2Q3NjRh ZDQ5NzN9LAorLSAgICAgIHsweGE5M2FmNmM2Yzc5YjVkMmQsIDB4ZDU5OGU0MGQzZGQ4OWJkMH0s CistICAgICAgezB4ZDM4OWI0Nzg3OTgyMzQ3OSwgMHg0YWZmMWQxMDhkNGVjMmM0fSwKKy0gICAg ICB7MHg4NDM2MTBjYjRiZjE2MGNiLCAweGNlZGY3MjJhNTg1MTM5YmJ9LAorLSAgICAgIHsweGE1 NDM5NGZlMWVlZGI4ZmUsIDB4YzI5NzRlYjRlZTY1ODgyOX0sCistICAgICAgezB4Y2U5NDdhM2Rh NmE5MjczZSwgMHg3MzNkMjI2MjI5ZmVlYTMzfSwKKy0gICAgICB7MHg4MTFjY2M2Njg4MjliODg3 LCAweDA4MDYzNTdkNWEzZjUyNjB9LAorLSAgICAgIHsweGExNjNmZjgwMmEzNDI2YTgsIDB4Y2Ew N2MyZGNiMGNmMjZmOH0sCistICAgICAgezB4YzliY2ZmNjAzNGMxMzA1MiwgMHhmYzg5YjM5M2Rk MDJmMGI2fSwKKy0gICAgICB7MHhmYzJjM2YzODQxZjE3YzY3LCAweGJiYWMyMDc4ZDQ0M2FjZTN9 LAorLSAgICAgIHsweDlkOWJhNzgzMjkzNmVkYzAsIDB4ZDU0Yjk0NGI4NGFhNGMwZX0sCistICAg ICAgezB4YzUwMjkxNjNmMzg0YTkzMSwgMHgwYTllNzk1ZTY1ZDRkZjEyfSwKKy0gICAgICB7MHhm NjQzMzViY2YwNjVkMzdkLCAweDRkNDYxN2I1ZmY0YTE2ZDZ9LAorLSAgICAgIHsweDk5ZWEwMTk2 MTYzZmE0MmUsIDB4NTA0YmNlZDFiZjhlNGU0Nn0sCistICAgICAgezB4YzA2NDgxZmI5YmNmOGQz OSwgMHhlNDVlYzI4NjJmNzFlMWQ3fSwKKy0gICAgICB7MHhmMDdkYTI3YTgyYzM3MDg4LCAweDVk NzY3MzI3YmI0ZTVhNGR9LAorLSAgICAgIHsweDk2NGU4NThjOTFiYTI2NTUsIDB4M2E2YTA3Zjhk NTEwZjg3MH0sCistICAgICAgezB4YmJlMjI2ZWZiNjI4YWZlYSwgMHg4OTA0ODlmNzBhNTUzNjhj fSwKKy0gICAgICB7MHhlYWRhYjBhYmEzYjJkYmU1LCAweDJiNDVhYzc0Y2NlYTg0MmZ9LAorLSAg ICAgIHsweDkyYzhhZTZiNDY0ZmM5NmYsIDB4M2IwYjhiYzkwMDEyOTI5ZX0sCistICAgICAgezB4 Yjc3YWRhMDYxN2UzYmJjYiwgMHgwOWNlNmViYjQwMTczNzQ1fSwKKy0gICAgICB7MHhlNTU5OTA4 NzlkZGNhYWJkLCAweGNjNDIwYTZhMTAxZDA1MTZ9LAorLSAgICAgIHsweDhmNTdmYTU0YzJhOWVh YjYsIDB4OWZhOTQ2ODI0YTEyMjMyZX0sCistICAgICAgezB4YjMyZGY4ZTlmMzU0NjU2NCwgMHg0 NzkzOTgyMmRjOTZhYmZhfSwKKy0gICAgICB7MHhkZmY5NzcyNDcwMjk3ZWJkLCAweDU5Nzg3ZTJi OTNiYzU2Zjh9LAorLSAgICAgIHsweDhiZmJlYTc2YzYxOWVmMzYsIDB4NTdlYjRlZGIzYzU1YjY1 Yn0sCistICAgICAgezB4YWVmYWU1MTQ3N2EwNmIwMywgMHhlZGU2MjI5MjBiNmIyM2YyfSwKKy0g ICAgICB7MHhkYWI5OWU1OTk1ODg4NWM0LCAweGU5NWZhYjM2OGU0NWVjZWV9LAorLSAgICAgIHsw eDg4YjQwMmY3ZmQ3NTUzOWIsIDB4MTFkYmNiMDIxOGViYjQxNX0sCistICAgICAgezB4YWFlMTAz YjVmY2QyYTg4MSwgMHhkNjUyYmRjMjlmMjZhMTFhfSwKKy0gICAgICB7MHhkNTk5NDRhMzdjMDc1 MmEyLCAweDRiZTc2ZDMzNDZmMDQ5NjB9LAorLSAgICAgIHsweDg1N2ZjYWU2MmQ4NDkzYTUsIDB4 NmY3MGE0NDAwYzU2MmRkY30sCistICAgICAgezB4YTZkZmJkOWZiOGU1Yjg4ZSwgMHhjYjRjY2Q1 MDBmNmJiOTUzfSwKKy0gICAgICB7MHhkMDk3YWQwN2E3MWYyNmIyLCAweDdlMjAwMGE0MTM0NmE3 YTh9LAorLSAgICAgIHsweDgyNWVjYzI0Yzg3Mzc4MmYsIDB4OGVkNDAwNjY4YzBjMjhjOX0sCist ICAgICAgezB4YTJmNjdmMmRmYTkwNTYzYiwgMHg3Mjg5MDA4MDJmMGYzMmZifSwKKy0gICAgICB7 MHhjYmI0MWVmOTc5MzQ2YmNhLCAweDRmMmI0MGEwM2FkMmZmYmF9LAorLSAgICAgIHsweGZlYTEy NmI3ZDc4MTg2YmMsIDB4ZTJmNjEwYzg0OTg3YmZhOX0sCistICAgICAgezB4OWYyNGI4MzJlNmIw ZjQzNiwgMHgwZGQ5Y2E3ZDJkZjRkN2NhfSwKKy0gICAgICB7MHhjNmVkZTYzZmEwNWQzMTQzLCAw eDkxNTAzZDFjNzk3MjBkYmN9LAorLSAgICAgIHsweGY4YTk1ZmNmODg3NDdkOTQsIDB4NzVhNDRj NjM5N2NlOTEyYn0sCistICAgICAgezB4OWI2OWRiZTFiNTQ4Y2U3YywgMHhjOTg2YWZiZTNlZTEx YWJifSwKKy0gICAgICB7MHhjMjQ0NTJkYTIyOWIwMjFiLCAweGZiZTg1YmFkY2U5OTYxNjl9LAor LSAgICAgIHsweGYyZDU2NzkwYWI0MWMyYTIsIDB4ZmFlMjcyOTk0MjNmYjljNH0sCistICAgICAg ezB4OTdjNTYwYmE2YjA5MTlhNSwgMHhkY2NkODc5ZmM5NjdkNDFifSwKKy0gICAgICB7MHhiZGI2 YjhlOTA1Y2I2MDBmLCAweDU0MDBlOTg3YmJjMWM5MjF9LAorLSAgICAgIHsweGVkMjQ2NzIzNDcz ZTM4MTMsIDB4MjkwMTIzZTlhYWIyM2I2OX0sCistICAgICAgezB4OTQzNmMwNzYwYzg2ZTMwYiwg MHhmOWEwYjY3MjBhYWY2NTIyfSwKKy0gICAgICB7MHhiOTQ0NzA5MzhmYTg5YmNlLCAweGY4MDhl NDBlOGQ1YjNlNmF9LAorLSAgICAgIHsweGU3OTU4Y2I4NzM5MmMyYzIsIDB4YjYwYjFkMTIzMGIy MGUwNX0sCistICAgICAgezB4OTBiZDc3ZjM0ODNiYjliOSwgMHhiMWM2ZjIyYjVlNmY0OGMzfSwK Ky0gICAgICB7MHhiNGVjZDVmMDFhNGFhODI4LCAweDFlMzhhZWI2MzYwYjFhZjR9LAorLSAgICAg IHsweGUyMjgwYjZjMjBkZDUyMzIsIDB4MjVjNmRhNjNjMzhkZTFiMX0sCistICAgICAgezB4OGQ1 OTA3MjM5NDhhNTM1ZiwgMHg1NzljNDg3ZTVhMzhhZDBmfSwKKy0gICAgICB7MHhiMGFmNDhlYzc5 YWNlODM3LCAweDJkODM1YTlkZjBjNmQ4NTJ9LAorLSAgICAgIHsweGRjZGIxYjI3OTgxODIyNDQs IDB4ZjhlNDMxNDU2Y2Y4OGU2Nn0sCistICAgICAgezB4OGEwOGYwZjhiZjBmMTU2YiwgMHgxYjhl OWVjYjY0MWI1OTAwfSwKKy0gICAgICB7MHhhYzhiMmQzNmVlZDJkYWM1LCAweGUyNzI0NjdlM2Qy MjJmNDB9LAorLSAgICAgIHsweGQ3YWRmODg0YWE4NzkxNzcsIDB4NWIwZWQ4MWRjYzZhYmIxMH0s CistICAgICAgezB4ODZjY2JiNTJlYTk0YmFlYSwgMHg5OGU5NDcxMjlmYzJiNGVhfSwKKy0gICAg ICB7MHhhODdmZWEyN2E1MzllOWE1LCAweDNmMjM5OGQ3NDdiMzYyMjV9LAorLSAgICAgIHsweGQy OWZlNGIxOGU4ODY0MGUsIDB4OGVlYzdmMGQxOWEwM2FhZX0sCistICAgICAgezB4ODNhM2VlZWVm OTE1M2U4OSwgMHgxOTUzY2Y2ODMwMDQyNGFkfSwKKy0gICAgICB7MHhhNDhjZWFhYWI3NWE4ZTJi LCAweDVmYThjMzQyM2MwNTJkZDh9LAorLSAgICAgIHsweGNkYjAyNTU1NjUzMTMxYjYsIDB4Mzc5 MmY0MTJjYjA2Nzk0ZX0sCistICAgICAgezB4ODA4ZTE3NTU1ZjNlYmYxMSwgMHhlMmJiZDg4YmJl ZTQwYmQxfSwKKy0gICAgICB7MHhhMGIxOWQyYWI3MGU2ZWQ2LCAweDViNmFjZWFlYWU5ZDBlYzV9 LAorLSAgICAgIHsweGM4ZGUwNDc1NjRkMjBhOGIsIDB4ZjI0NTgyNWE1YTQ0NTI3Nn0sCistICAg ICAgezB4ZmIxNTg1OTJiZTA2OGQyZSwgMHhlZWQ2ZTJmMGYwZDU2NzEzfSwKKy0gICAgICB7MHg5 Y2VkNzM3YmI2YzQxODNkLCAweDU1NDY0ZGQ2OTY4NTYwNmN9LAorLSAgICAgIHsweGM0MjhkMDVh YTQ3NTFlNGMsIDB4YWE5N2UxNGMzYzI2Yjg4N30sCistICAgICAgezB4ZjUzMzA0NzE0ZDkyNjVk ZiwgMHhkNTNkZDk5ZjRiMzA2NmE5fSwKKy0gICAgICB7MHg5OTNmZTJjNmQwN2I3ZmFiLCAweGU1 NDZhODAzOGVmZTQwMmF9LAorLSAgICAgIHsweGJmOGZkYjc4ODQ5YTVmOTYsIDB4ZGU5ODUyMDQ3 MmJkZDAzNH0sCistICAgICAgezB4ZWY3M2QyNTZhNWMwZjc3YywgMHg5NjNlNjY4NThmNmQ0NDQx fSwKKy0gICAgICB7MHg5NWE4NjM3NjI3OTg5YWFkLCAweGRkZTcwMDEzNzlhNDRhYTl9LAorLSAg ICAgIHsweGJiMTI3YzUzYjE3ZWMxNTksIDB4NTU2MGMwMTg1ODBkNWQ1M30sCistICAgICAgezB4 ZTlkNzFiNjg5ZGRlNzFhZiwgMHhhYWI4ZjAxZTZlMTBiNGE3fSwKKy0gICAgICB7MHg5MjI2NzEy MTYyYWIwNzBkLCAweGNhYjM5NjEzMDRjYTcwZTl9LAorLSAgICAgIHsweGI2YjAwZDY5YmI1NWM4 ZDEsIDB4M2Q2MDdiOTdjNWZkMGQyM30sCistICAgICAgezB4ZTQ1YzEwYzQyYTJiM2IwNSwgMHg4 Y2I4OWE3ZGI3N2M1MDZifSwKKy0gICAgICB7MHg4ZWI5OGE3YTlhNWIwNGUzLCAweDc3ZjM2MDhl OTJhZGIyNDN9LAorLSAgICAgIHsweGIyNjdlZDE5NDBmMWM2MWMsIDB4NTVmMDM4YjIzNzU5MWVk NH0sCistICAgICAgezB4ZGYwMWU4NWY5MTJlMzdhMywgMHg2YjZjNDZkZWM1MmY2Njg5fSwKKy0g ICAgICB7MHg4YjYxMzEzYmJhYmNlMmM2LCAweDIzMjNhYzRiM2IzZGEwMTZ9LAorLSAgICAgIHsw eGFlMzk3ZDhhYTk2YzFiNzcsIDB4YWJlYzk3NWUwYTBkMDgxYn0sCistICAgICAgezB4ZDljN2Rj ZWQ1M2M3MjI1NSwgMHg5NmU3YmQzNThjOTA0YTIyfSwKKy0gICAgICB7MHg4ODFjZWExNDU0NWM3 NTc1LCAweDdlNTBkNjQxNzdkYTJlNTV9LAorLSAgICAgIHsweGFhMjQyNDk5Njk3MzkyZDIsIDB4 ZGRlNTBiZDFkNWQwYjllYX0sCistICAgICAgezB4ZDRhZDJkYmZjM2QwNzc4NywgMHg5NTVlNGVj NjRiNDRlODY1fSwKKy0gICAgICB7MHg4NGVjM2M5N2RhNjI0YWI0LCAweGJkNWFmMTNiZWYwYjEx M2Z9LAorLSAgICAgIHsweGE2Mjc0YmJkZDBmYWRkNjEsIDB4ZWNiMWFkOGFlYWNkZDU4Zn0sCist ICAgICAgezB4Y2ZiMTFlYWQ0NTM5OTRiYSwgMHg2N2RlMThlZGE1ODE0YWYzfSwKKy0gICAgICB7 MHg4MWNlYjMyYzRiNDNmY2Y0LCAweDgwZWFjZjk0ODc3MGNlZDh9LAorLSAgICAgIHsweGEyNDI1 ZmY3NWUxNGZjMzEsIDB4YTEyNTgzNzlhOTRkMDI4ZX0sCistICAgICAgezB4Y2FkMmY3ZjUzNTlh M2IzZSwgMHgwOTZlZTQ1ODEzYTA0MzMxfSwKKy0gICAgICB7MHhmZDg3YjVmMjgzMDBjYTBkLCAw eDhiY2E5ZDZlMTg4ODUzZmR9LAorLSAgICAgIHsweDllNzRkMWI3OTFlMDdlNDgsIDB4Nzc1ZWEy NjRjZjU1MzQ3ZX0sCistICAgICAgezB4YzYxMjA2MjU3NjU4OWRkYSwgMHg5NTM2NGFmZTAzMmE4 MTllfSwKKy0gICAgICB7MHhmNzk2ODdhZWQzZWVjNTUxLCAweDNhODNkZGJkODNmNTIyMDV9LAor LSAgICAgIHsweDlhYmUxNGNkNDQ3NTNiNTIsIDB4YzQ5MjZhOTY3Mjc5MzU0M30sCistICAgICAg ezB4YzE2ZDlhMDA5NTkyOGEyNywgMHg3NWI3MDUzYzBmMTc4Mjk0fSwKKy0gICAgICB7MHhmMWM5 MDA4MGJhZjcyY2IxLCAweDUzMjRjNjhiMTJkZDYzMzl9LAorLSAgICAgIHsweDk3MWRhMDUwNzRk YTdiZWUsIDB4ZDNmNmZjMTZlYmNhNWUwNH0sCistICAgICAgezB4YmNlNTA4NjQ5MjExMWFlYSwg MHg4OGY0YmIxY2E2YmNmNTg1fSwKKy0gICAgICB7MHhlYzFlNGE3ZGI2OTU2MWE1LCAweDJiMzFl OWUzZDA2YzMyZTZ9LAorLSAgICAgIHsweDkzOTJlZThlOTIxZDVkMDcsIDB4M2FmZjMyMmU2MjQz OWZkMH0sCistICAgICAgezB4Yjg3N2FhMzIzNmE0YjQ0OSwgMHgwOWJlZmViOWZhZDQ4N2MzfSwK Ky0gICAgICB7MHhlNjk1OTRiZWM0NGRlMTViLCAweDRjMmViZTY4Nzk4OWE5YjR9LAorLSAgICAg IHsweDkwMWQ3Y2Y3M2FiMGFjZDksIDB4MGY5ZDM3MDE0YmY2MGExMX0sCistICAgICAgezB4YjQy NGRjMzUwOTVjZDgwZiwgMHg1Mzg0ODRjMTllZjM4Yzk1fSwKKy0gICAgICB7MHhlMTJlMTM0MjRi YjQwZTEzLCAweDI4NjVhNWYyMDZiMDZmYmF9LAorLSAgICAgIHsweDhjYmNjYzA5NmY1MDg4Y2Is IDB4ZjkzZjg3Yjc0NDJlNDVkNH0sCistICAgICAgezB4YWZlYmZmMGJjYjI0YWFmZSwgMHhmNzhm NjlhNTE1MzlkNzQ5fSwKKy0gICAgICB7MHhkYmU2ZmVjZWJkZWRkNWJlLCAweGI1NzM0NDBlNWE4 ODRkMWN9LAorLSAgICAgIHsweDg5NzA1ZjQxMzZiNGE1OTcsIDB4MzE2ODBhODhmODk1MzAzMX0s CistICAgICAgezB4YWJjYzc3MTE4NDYxY2VmYywgMHhmZGMyMGQyYjM2YmE3YzNlfSwKKy0gICAg ICB7MHhkNmJmOTRkNWU1N2E0MmJjLCAweDNkMzI5MDc2MDQ2OTFiNGR9LAorLSAgICAgIHsweDg2 MzdiZDA1YWY2YzY5YjUsIDB4YTYzZjlhNDljMmMxYjExMH0sCistICAgICAgezB4YTdjNWFjNDcx YjQ3ODQyMywgMHgwZmNmODBkYzMzNzIxZDU0fSwKKy0gICAgICB7MHhkMWI3MTc1OGUyMTk2NTJi LCAweGQzYzM2MTEzNDA0ZWE0YTl9LAorLSAgICAgIHsweDgzMTI2ZTk3OGQ0ZmRmM2IsIDB4NjQ1 YTFjYWMwODMxMjZlYX0sCistICAgICAgezB4YTNkNzBhM2Q3MGEzZDcwYSwgMHgzZDcwYTNkNzBh M2Q3MGE0fSwKKy0gICAgICB7MHhjY2NjY2NjY2NjY2NjY2NjLCAweGNjY2NjY2NjY2NjY2NjY2R9 LAorLSAgICAgIHsweDgwMDAwMDAwMDAwMDAwMDAsIDB4MDAwMDAwMDAwMDAwMDAwMH0sCistICAg ICAgezB4YTAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHhj ODAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGZhMDAwMDAw MDAwMDAwMDAsIDB4MDAwMDAwMDAwMDAwMDAwMH0sCistICAgICAgezB4OWM0MDAwMDAwMDAwMDAw MCwgMHgwMDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHhjMzUwMDAwMDAwMDAwMDAwLCAweDAw MDAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGY0MjQwMDAwMDAwMDAwMDAsIDB4MDAwMDAwMDAw MDAwMDAwMH0sCistICAgICAgezB4OTg5NjgwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAw fSwKKy0gICAgICB7MHhiZWJjMjAwMDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDB9LAorLSAg ICAgIHsweGVlNmIyODAwMDAwMDAwMDAsIDB4MDAwMDAwMDAwMDAwMDAwMH0sCistICAgICAgezB4 OTUwMmY5MDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHhiYTQzYjc0 MDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGU4ZDRhNTEwMDAwMDAw MDAsIDB4MDAwMDAwMDAwMDAwMDAwMH0sCistICAgICAgezB4OTE4NGU3MmEwMDAwMDAwMCwgMHgw MDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHhiNWU2MjBmNDgwMDAwMDAwLCAweDAwMDAwMDAw MDAwMDAwMDB9LAorLSAgICAgIHsweGUzNWZhOTMxYTAwMDAwMDAsIDB4MDAwMDAwMDAwMDAwMDAw MH0sCistICAgICAgezB4OGUxYmM5YmYwNDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwfSwKKy0g ICAgICB7MHhiMWEyYmMyZWM1MDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsw eGRlMGI2YjNhNzY0MDAwMDAsIDB4MDAwMDAwMDAwMDAwMDAwMH0sCistICAgICAgezB4OGFjNzIz MDQ4OWU4MDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHhhZDc4ZWJjNWFjNjIw MDAwLCAweDAwMDAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGQ4ZDcyNmI3MTc3YTgwMDAsIDB4 MDAwMDAwMDAwMDAwMDAwMH0sCistICAgICAgezB4ODc4Njc4MzI2ZWFjOTAwMCwgMHgwMDAwMDAw MDAwMDAwMDAwfSwKKy0gICAgICB7MHhhOTY4MTYzZjBhNTdiNDAwLCAweDAwMDAwMDAwMDAwMDAw MDB9LAorLSAgICAgIHsweGQzYzIxYmNlY2NlZGExMDAsIDB4MDAwMDAwMDAwMDAwMDAwMH0sCist ICAgICAgezB4ODQ1OTUxNjE0MDE0ODRhMCwgMHgwMDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7 MHhhNTZmYTViOTkwMTlhNWM4LCAweDAwMDAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGNlY2I4 ZjI3ZjQyMDBmM2EsIDB4MDAwMDAwMDAwMDAwMDAwMH0sCistICAgICAgezB4ODEzZjM5NzhmODk0 MDk4NCwgMHg0MDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHhhMThmMDdkNzM2YjkwYmU1LCAw eDUwMDAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGM5ZjJjOWNkMDQ2NzRlZGUsIDB4YTQwMDAw MDAwMDAwMDAwMH0sCistICAgICAgezB4ZmM2ZjdjNDA0NTgxMjI5NiwgMHg0ZDAwMDAwMDAwMDAw MDAwfSwKKy0gICAgICB7MHg5ZGM1YWRhODJiNzBiNTlkLCAweGYwMjAwMDAwMDAwMDAwMDB9LAor LSAgICAgIHsweGM1MzcxOTEyMzY0Y2UzMDUsIDB4NmMyODAwMDAwMDAwMDAwMH0sCistICAgICAg ezB4ZjY4NGRmNTZjM2UwMWJjNiwgMHhjNzMyMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHg5YTEz MGI5NjNhNmMxMTVjLCAweDNjN2Y0MDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGMwOTdjZTdiYzkw NzE1YjMsIDB4NGI5ZjEwMDAwMDAwMDAwMH0sCistICAgICAgezB4ZjBiZGMyMWFiYjQ4ZGIyMCwg MHgxZTg2ZDQwMDAwMDAwMDAwfSwKKy0gICAgICB7MHg5Njc2OTk1MGI1MGQ4OGY0LCAweDEzMTQ0 NDgwMDAwMDAwMDB9LAorLSAgICAgIHsweGJjMTQzZmE0ZTI1MGViMzEsIDB4MTdkOTU1YTAwMDAw MDAwMH0sCistICAgICAgezB4ZWIxOTRmOGUxYWU1MjVmZCwgMHg1ZGNmYWIwODAwMDAwMDAwfSwK Ky0gICAgICB7MHg5MmVmZDFiOGQwY2YzN2JlLCAweDVhYTFjYWU1MDAwMDAwMDB9LAorLSAgICAg IHsweGI3YWJjNjI3MDUwMzA1YWQsIDB4ZjE0YTNkOWU0MDAwMDAwMH0sCistICAgICAgezB4ZTU5 NmI3YjBjNjQzYzcxOSwgMHg2ZDljY2QwNWQwMDAwMDAwfSwKKy0gICAgICB7MHg4ZjdlMzJjZTdi ZWE1YzZmLCAweGU0ODIwMDIzYTIwMDAwMDB9LAorLSAgICAgIHsweGIzNWRiZjgyMWFlNGYzOGIs IDB4ZGRhMjgwMmM4YTgwMDAwMH0sCistICAgICAgezB4ZTAzNTJmNjJhMTllMzA2ZSwgMHhkNTBi MjAzN2FkMjAwMDAwfSwKKy0gICAgICB7MHg4YzIxM2Q5ZGE1MDJkZTQ1LCAweDQ1MjZmNDIyY2Mz NDAwMDB9LAorLSAgICAgIHsweGFmMjk4ZDA1MGU0Mzk1ZDYsIDB4OTY3MGIxMmI3ZjQxMDAwMH0s CistICAgICAgezB4ZGFmM2YwNDY1MWQ0N2I0YywgMHgzYzBjZGQ3NjVmMTE0MDAwfSwKKy0gICAg ICB7MHg4OGQ4NzYyYmYzMjRjZDBmLCAweGE1ODgwYTY5ZmI2YWM4MDB9LAorLSAgICAgIHsweGFi MGU5M2I2ZWZlZTAwNTMsIDB4OGVlYTBkMDQ3YTQ1N2EwMH0sCistICAgICAgezB4ZDVkMjM4YTRh YmU5ODA2OCwgMHg3MmE0OTA0NTk4ZDZkODgwfSwKKy0gICAgICB7MHg4NWEzNjM2NmViNzFmMDQx LCAweDQ3YTZkYTJiN2Y4NjQ3NTB9LAorLSAgICAgIHsweGE3MGMzYzQwYTY0ZTZjNTEsIDB4OTk5 MDkwYjY1ZjY3ZDkyNH0sCistICAgICAgezB4ZDBjZjRiNTBjZmUyMDc2NSwgMHhmZmY0YjRlM2Y3 NDFjZjZkfSwKKy0gICAgICB7MHg4MjgxOGYxMjgxZWQ0NDlmLCAweGJmZjhmMTBlN2E4OTIxYTR9 LAorLSAgICAgIHsweGEzMjFmMmQ3MjI2ODk1YzcsIDB4YWZmNzJkNTIxOTJiNmEwZH0sCistICAg ICAgezB4Y2JlYTZmOGNlYjAyYmIzOSwgMHg5YmY0ZjhhNjlmNzY0NDkwfSwKKy0gICAgICB7MHhm ZWU1MGI3MDI1YzM2YTA4LCAweDAyZjIzNmQwNDc1M2Q1YjR9LAorLSAgICAgIHsweDlmNGYyNzI2 MTc5YTIyNDUsIDB4MDFkNzYyNDIyYzk0NjU5MH0sCistICAgICAgezB4YzcyMmYwZWY5ZDgwYWFk NiwgMHg0MjRkM2FkMmI3Yjk3ZWY1fSwKKy0gICAgICB7MHhmOGViYWQyYjg0ZTBkNThiLCAweGQy ZTA4OTg3NjVhN2RlYjJ9LAorLSAgICAgIHsweDliOTM0YzNiMzMwYzg1NzcsIDB4NjNjYzU1ZjQ5 Zjg4ZWIyZn0sCistICAgICAgezB4YzI3ODFmNDlmZmNmYTZkNSwgMHgzY2JmNmI3MWM3NmIyNWZi fSwKKy0gICAgICB7MHhmMzE2MjcxYzdmYzM5MDhhLCAweDhiZWY0NjRlMzk0NWVmN2F9LAorLSAg ICAgIHsweDk3ZWRkODcxY2ZkYTNhNTYsIDB4OTc3NThiZjBlM2NiYjVhY30sCistICAgICAgezB4 YmRlOTRlOGU0M2QwYzhlYywgMHgzZDUyZWVlZDFjYmVhMzE3fSwKKy0gICAgICB7MHhlZDYzYTIz MWQ0YzRmYjI3LCAweDRjYTdhYWE4NjNlZTRiZGR9LAorLSAgICAgIHsweDk0NWU0NTVmMjRmYjFj ZjgsIDB4OGZlOGNhYTkzZTc0ZWY2YX0sCistICAgICAgezB4Yjk3NWQ2YjZlZTM5ZTQzNiwgMHhi M2UyZmQ1MzhlMTIyYjQ0fSwKKy0gICAgICB7MHhlN2QzNGM2NGE5Yzg1ZDQ0LCAweDYwZGJiY2E4 NzE5NmI2MTZ9LAorLSAgICAgIHsweDkwZTQwZmJlZWExZDNhNGEsIDB4YmM4OTU1ZTk0NmZlMzFj ZH0sCistICAgICAgezB4YjUxZDEzYWVhNGE0ODhkZCwgMHg2YmFiYWI2Mzk4YmRiZTQxfSwKKy0g ICAgICB7MHhlMjY0NTg5YTRkY2RhYjE0LCAweGM2OTY5NjNjN2VlZDJkZDF9LAorLSAgICAgIHsw eDhkN2ViNzYwNzBhMDhhZWMsIDB4ZmMxZTFkZTVjZjU0M2NhMn0sCistICAgICAgezB4YjBkZTY1 Mzg4Y2M4YWRhOCwgMHgzYjI1YTU1ZjQzMjk0YmNifSwKKy0gICAgICB7MHhkZDE1ZmU4NmFmZmFk OTEyLCAweDQ5ZWYwZWI3MTNmMzllYmV9LAorLSAgICAgIHsweDhhMmRiZjE0MmRmY2M3YWIsIDB4 NmUzNTY5MzI2Yzc4NDMzN30sCistICAgICAgezB4YWNiOTJlZDkzOTdiZjk5NiwgMHg0OWMyYzM3 ZjA3OTY1NDA0fSwKKy0gICAgICB7MHhkN2U3N2E4Zjg3ZGFmN2ZiLCAweGRjMzM3NDVlYzk3YmU5 MDZ9LAorLSAgICAgIHsweDg2ZjBhYzk5YjRlOGRhZmQsIDB4NjlhMDI4YmIzZGVkNzFhM30sCist ICAgICAgezB4YThhY2Q3YzAyMjIzMTFiYywgMHhjNDA4MzJlYTBkNjhjZTBjfSwKKy0gICAgICB7 MHhkMmQ4MGRiMDJhYWJkNjJiLCAweGY1MGEzZmE0OTBjMzAxOTB9LAorLSAgICAgIHsweDgzYzcw ODhlMWFhYjY1ZGIsIDB4NzkyNjY3YzZkYTc5ZTBmYX0sCistICAgICAgezB4YTRiOGNhYjFhMTU2 M2Y1MiwgMHg1NzcwMDFiODkxMTg1OTM4fSwKKy0gICAgICB7MHhjZGU2ZmQ1ZTA5YWJjZjI2LCAw eGVkNGMwMjI2YjU1ZTZmODZ9LAorLSAgICAgIHsweDgwYjA1ZTVhYzYwYjYxNzgsIDB4NTQ0Zjgx NTgzMTViMDViNH0sCistICAgICAgezB4YTBkYzc1ZjE3NzhlMzlkNiwgMHg2OTYzNjFhZTNkYjFj NzIxfSwKKy0gICAgICB7MHhjOTEzOTM2ZGQ1NzFjODRjLCAweDAzYmMzYTE5Y2QxZTM4ZTl9LAor LSAgICAgIHsweGZiNTg3ODQ5NGFjZTNhNWYsIDB4MDRhYjQ4YTA0MDY1YzcyM30sCistICAgICAg ezB4OWQxNzRiMmRjZWMwZTQ3YiwgMHg2MmViMGQ2NDI4M2Y5Yzc2fSwKKy0gICAgICB7MHhjNDVk MWRmOTQyNzExZDlhLCAweDNiYTVkMGJkMzI0ZjgzOTR9LAorLSAgICAgIHsweGY1NzQ2NTc3OTMw ZDY1MDAsIDB4Y2E4ZjQ0ZWM3ZWUzNjQ3OX0sCistICAgICAgezB4OTk2OGJmNmFiYmU4NWYyMCwg MHg3ZTk5OGIxM2NmNGUxZWNifSwKKy0gICAgICB7MHhiZmMyZWY0NTZhZTI3NmU4LCAweDllM2Zl ZGQ4YzMyMWE2N2V9LAorLSAgICAgIHsweGVmYjNhYjE2YzU5YjE0YTIsIDB4YzVjZmU5NGVmM2Vh MTAxZX0sCistICAgICAgezB4OTVkMDRhZWUzYjgwZWNlNSwgMHhiYmExZjFkMTU4NzI0YTEyfSwK Ky0gICAgICB7MHhiYjQ0NWRhOWNhNjEyODFmLCAweDJhOGE2ZTQ1YWU4ZWRjOTd9LAorLSAgICAg IHsweGVhMTU3NTE0M2NmOTcyMjYsIDB4ZjUyZDA5ZDcxYTMyOTNiZH0sCistICAgICAgezB4OTI0 ZDY5MmNhNjFiZTc1OCwgMHg1OTNjMjYyNjcwNWY5YzU2fSwKKy0gICAgICB7MHhiNmUwYzM3N2Nm YTJlMTJlLCAweDZmOGIyZmIwMGM3NzgzNmN9LAorLSAgICAgIHsweGU0OThmNDU1YzM4Yjk5N2Es IDB4MGI2ZGZiOWMwZjk1NjQ0N30sCistICAgICAgezB4OGVkZjk4YjU5YTM3M2ZlYywgMHg0NzI0 YmQ0MTg5YmQ1ZWFjfSwKKy0gICAgICB7MHhiMjk3N2VlMzAwYzUwZmU3LCAweDU4ZWRlYzkxZWMy Y2I2NTd9LAorLSAgICAgIHsweGRmM2Q1ZTliYzBmNjUzZTEsIDB4MmYyOTY3YjY2NzM3ZTNlZH0s CistICAgICAgezB4OGI4NjViMjE1ODk5ZjQ2YywgMHhiZDc5ZTBkMjAwODJlZTc0fSwKKy0gICAg ICB7MHhhZTY3ZjFlOWFlYzA3MTg3LCAweGVjZDg1OTA2ODBhM2FhMTF9LAorLSAgICAgIHsweGRh MDFlZTY0MWE3MDhkZTksIDB4ZTgwZTZmNDgyMGNjOTQ5NX0sCistICAgICAgezB4ODg0MTM0ZmU5 MDg2NThiMiwgMHgzMTA5MDU4ZDE0N2ZkY2RkfSwKKy0gICAgICB7MHhhYTUxODIzZTM0YTdlZWRl LCAweGJkNGI0NmYwNTk5ZmQ0MTV9LAorLSAgICAgIHsweGQ0ZTVlMmNkYzFkMWVhOTYsIDB4NmM5 ZTE4YWM3MDA3YzkxYX0sCistICAgICAgezB4ODUwZmFkYzA5OTIzMzI5ZSwgMHgwM2UyY2Y2YmM2 MDRkZGIwfSwKKy0gICAgICB7MHhhNjUzOTkzMGJmNmJmZjQ1LCAweDg0ZGI4MzQ2Yjc4NjE1MWN9 LAorLSAgICAgIHsweGNmZTg3ZjdjZWY0NmZmMTYsIDB4ZTYxMjY0MTg2NTY3OWE2M30sCistICAg ICAgezB4ODFmMTRmYWUxNThjNWY2ZSwgMHg0ZmNiN2U4ZjNmNjBjMDdlfSwKKy0gICAgICB7MHhh MjZkYTM5OTlhZWY3NzQ5LCAweGUzYmU1ZTMzMGYzOGYwOWR9LAorLSAgICAgIHsweGNiMDkwYzgw MDFhYjU1MWMsIDB4NWNhZGY1YmZkMzA3MmNjNX0sCistICAgICAgezB4ZmRjYjRmYTAwMjE2MmE2 MywgMHg3M2Q5NzMyZmM3YzhmN2Y2fSwKKy0gICAgICB7MHg5ZTlmMTFjNDAxNGRkYTdlLCAweDI4 NjdlN2ZkZGNkZDlhZmF9LAorLSAgICAgIHsweGM2NDZkNjM1MDFhMTUxMWQsIDB4YjI4MWUxZmQ1 NDE1MDFiOH0sCistICAgICAgezB4ZjdkODhiYzI0MjA5YTU2NSwgMHgxZjIyNWE3Y2E5MWE0MjI2 fSwKKy0gICAgICB7MHg5YWU3NTc1OTY5NDYwNzVmLCAweDMzNzU3ODhkZTliMDY5NTh9LAorLSAg ICAgIHsweGMxYTEyZDJmYzM5Nzg5MzcsIDB4MDA1MmQ2YjE2NDFjODNhZX0sCistICAgICAgezB4 ZjIwOTc4N2JiNDdkNmI4NCwgMHhjMDY3OGM1ZGJkMjNhNDlhfSwKKy0gICAgICB7MHg5NzQ1ZWI0 ZDUwY2U2MzMyLCAweGY4NDBiN2JhOTYzNjQ2ZTB9LAorLSAgICAgIHsweGJkMTc2NjIwYTUwMWZi ZmYsIDB4YjY1MGU1YTkzYmMzZDg5OH0sCistICAgICAgezB4ZWM1ZDNmYThjZTQyN2FmZiwgMHhh M2U1MWYxMzhhYjRjZWJlfSwKKy0gICAgICB7MHg5M2JhNDdjOTgwZTk4Y2RmLCAweGM2NmYzMzZj MzZiMTAxMzd9LAorLSAgICAgIHsweGI4YThkOWJiZTEyM2YwMTcsIDB4YjgwYjAwNDc0NDVkNDE4 NH0sCistICAgICAgezB4ZTZkMzEwMmFkOTZjZWMxZCwgMHhhNjBkYzA1OTE1NzQ5MWU1fSwKKy0g ICAgICB7MHg5MDQzZWExYWM3ZTQxMzkyLCAweDg3Yzg5ODM3YWQ2OGRiMmZ9LAorLSAgICAgIHsw eGI0NTRlNGExNzlkZDE4NzcsIDB4MjliYWJlNDU5OGMzMTFmYn0sCistICAgICAgezB4ZTE2YTFk YzlkODU0NWU5NCwgMHhmNDI5NmRkNmZlZjNkNjdhfSwKKy0gICAgICB7MHg4Y2UyNTI5ZTI3MzRi YjFkLCAweDE4OTllNGE2NWY1ODY2MGN9LAorLSAgICAgIHsweGIwMWFlNzQ1YjEwMWU5ZTQsIDB4 NWVjMDVkY2ZmNzJlN2Y4Zn0sCistICAgICAgezB4ZGMyMWExMTcxZDQyNjQ1ZCwgMHg3NjcwNzU0 M2Y0ZmExZjczfSwKKy0gICAgICB7MHg4OTk1MDRhZTcyNDk3ZWJhLCAweDZhMDY0OTRhNzkxYzUz YTh9LAorLSAgICAgIHsweGFiZmE0NWRhMGVkYmRlNjksIDB4MDQ4N2RiOWQxNzYzNjg5Mn0sCist ICAgICAgezB4ZDZmOGQ3NTA5MjkyZDYwMywgMHg0NWE5ZDI4NDVkM2M0MmI2fSwKKy0gICAgICB7 MHg4NjViODY5MjViOWJjNWMyLCAweDBiOGEyMzkyYmE0NWE5YjJ9LAorLSAgICAgIHsweGE3ZjI2 ODM2ZjI4MmI3MzIsIDB4OGU2Y2FjNzc2OGQ3MTQxZX0sCistICAgICAgezB4ZDFlZjAyNDRhZjIz NjRmZiwgMHgzMjA3ZDc5NTQzMGNkOTI2fSwKKy0gICAgICB7MHg4MzM1NjE2YWVkNzYxZjFmLCAw eDdmNDRlNmJkNDllODA3Yjh9LAorLSAgICAgIHsweGE0MDJiOWM1YThkM2E2ZTcsIDB4NWYxNjIw NmM5YzYyMDlhNn0sCistICAgICAgezB4Y2QwMzY4MzcxMzA4OTBhMSwgMHgzNmRiYTg4N2MzN2E4 YzBmfSwKKy0gICAgICB7MHg4MDIyMjEyMjZiZTU1YTY0LCAweGMyNDk0OTU0ZGEyYzk3ODl9LAor LSAgICAgIHsweGEwMmFhOTZiMDZkZWIwZmQsIDB4ZjJkYjliYWExMGI3YmQ2Y30sCistICAgICAg ezB4YzgzNTUzYzVjODk2NWQzZCwgMHg2ZjkyODI5NDk0ZTVhY2M3fSwKKy0gICAgICB7MHhmYTQy YThiNzNhYmJmNDhjLCAweGNiNzcyMzM5YmExZjE3Zjl9LAorLSAgICAgIHsweDljNjlhOTcyODRi NTc4ZDcsIDB4ZmYyYTc2MDQxNDUzNmVmYn0sCistICAgICAgezB4YzM4NDEzY2YyNWUyZDcwZCwg MHhmZWY1MTM4NTE5Njg0YWJhfSwKKy0gICAgICB7MHhmNDY1MThjMmVmNWI4Y2QxLCAweDdlYjI1 ODY2NWZjMjVkNjl9LAorLSAgICAgIHsweDk4YmYyZjc5ZDU5OTM4MDIsIDB4ZWYyZjc3M2ZmYmQ5 N2E2MX0sCistICAgICAgezB4YmVlZWZiNTg0YWZmODYwMywgMHhhYWZiNTUwZmZhY2ZkOGZhfSwK Ky0gICAgICB7MHhlZWFhYmEyZTVkYmY2Nzg0LCAweDk1YmEyYTUzZjk4M2NmMzh9LAorLSAgICAg IHsweDk1MmFiNDVjZmE5N2EwYjIsIDB4ZGQ5NDVhNzQ3YmYyNjE4M30sCistICAgICAgezB4YmE3 NTYxNzQzOTNkODhkZiwgMHg5NGY5NzExMTlhZWVmOWU0fSwKKy0gICAgICB7MHhlOTEyYjlkMTQ3 OGNlYjE3LCAweDdhMzdjZDU2MDFhYWI4NWR9LAorLSAgICAgIHsweDkxYWJiNDIyY2NiODEyZWUs IDB4YWM2MmUwNTVjMTBhYjMzYX0sCistICAgICAgezB4YjYxNmExMmI3ZmU2MTdhYSwgMHg1Nzdi OTg2YjMxNGQ2MDA5fSwKKy0gICAgICB7MHhlMzljNDk3NjVmZGY5ZDk0LCAweGVkNWE3ZTg1ZmRh MGI4MGJ9LAorLSAgICAgIHsweDhlNDFhZGU5ZmJlYmMyN2QsIDB4MTQ1ODhmMTNiZTg0NzMwN30s CistICAgICAgezB4YjFkMjE5NjQ3YWU2YjMxYywgMHg1OTZlYjJkOGFlMjU4ZmM4fSwKKy0gICAg ICB7MHhkZTQ2OWZiZDk5YTA1ZmUzLCAweDZmY2E1ZjhlZDlhZWYzYmJ9LAorLSAgICAgIHsweDhh ZWMyM2Q2ODAwNDNiZWUsIDB4MjVkZTdiYjk0ODBkNTg1NH0sCistICAgICAgezB4YWRhNzJjY2My MDA1NGFlOSwgMHhhZjU2MWFhNzlhMTBhZTZhfSwKKy0gICAgICB7MHhkOTEwZjdmZjI4MDY5ZGE0 LCAweDFiMmJhMTUxODA5NGRhMDR9LAorLSAgICAgIHsweDg3YWE5YWZmNzkwNDIyODYsIDB4OTBm YjQ0ZDJmMDVkMDg0Mn0sCistICAgICAgezB4YTk5NTQxYmY1NzQ1MmIyOCwgMHgzNTNhMTYwN2Fj NzQ0YTUzfSwKKy0gICAgICB7MHhkM2ZhOTIyZjJkMTY3NWYyLCAweDQyODg5Yjg5OTc5MTVjZTh9 LAorLSAgICAgIHsweDg0N2M5YjVkN2MyZTA5YjcsIDB4Njk5NTYxMzVmZWJhZGExMX0sCistICAg ICAgezB4YTU5YmMyMzRkYjM5OGMyNSwgMHg0M2ZhYjk4MzdlNjk5MDk1fSwKKy0gICAgICB7MHhj ZjAyYjJjMjEyMDdlZjJlLCAweDk0Zjk2N2U0NWUwM2Y0YmJ9LAorLSAgICAgIHsweDgxNjFhZmI5 NGI0NGY1N2QsIDB4MWQxYmUwZWViYWMyNzhmNX0sCistICAgICAgezB4YTFiYTFiYTc5ZTE2MzJk YywgMHg2NDYyZDkyYTY5NzMxNzMyfSwKKy0gICAgICB7MHhjYTI4YTI5MTg1OWJiZjkzLCAweDdk N2I4Zjc1MDNjZmRjZmV9LAorLSAgICAgIHsweGZjYjJjYjM1ZTcwMmFmNzgsIDB4NWNkYTczNTI0 NGMzZDQzZX0sCistICAgICAgezB4OWRlZmJmMDFiMDYxYWRhYiwgMHgzYTA4ODgxMzZhZmE2NGE3 fSwKKy0gICAgICB7MHhjNTZiYWVjMjFjN2ExOTE2LCAweDA4OGFhYTE4NDViOGZkZDB9LAorLSAg ICAgIHsweGY2YzY5YTcyYTM5ODlmNWIsIDB4OGFhZDU0OWU1NzI3M2Q0NX0sCistICAgICAgezB4 OWEzYzIwODdhNjNmNjM5OSwgMHgzNmFjNTRlMmY2Nzg4NjRifSwKKy0gICAgICB7MHhjMGNiMjhh OThmY2YzYzdmLCAweDg0NTc2YTFiYjQxNmE3ZGR9LAorLSAgICAgIHsweGYwZmRmMmQzZjNjMzBi OWYsIDB4NjU2ZDQ0YTJhMTFjNTFkNX0sCistICAgICAgezB4OTY5ZWI3YzQ3ODU5ZTc0MywgMHg5 ZjY0NGFlNWE0YjFiMzI1fSwKKy0gICAgICB7MHhiYzQ2NjViNTk2NzA2MTE0LCAweDg3M2Q1ZDlm MGRkZTFmZWV9LAorLSAgICAgIHsweGViNTdmZjIyZmMwYzc5NTksIDB4YTkwY2I1MDZkMTU1YTdl YX0sCistICAgICAgezB4OTMxNmZmNzVkZDg3Y2JkOCwgMHgwOWE3ZjEyNDQyZDU4OGYyfSwKKy0g ICAgICB7MHhiN2RjYmY1MzU0ZTliZWNlLCAweDBjMTFlZDZkNTM4YWViMmZ9LAorLSAgICAgIHsw eGU1ZDNlZjI4MmEyNDJlODEsIDB4OGYxNjY4YzhhODZkYTVmYX0sCistICAgICAgezB4OGZhNDc1 NzkxYTU2OWQxMCwgMHhmOTZlMDE3ZDY5NDQ4N2JjfSwKKy0gICAgICB7MHhiMzhkOTJkNzYwZWM0 NDU1LCAweDM3Yzk4MWRjYzM5NWE5YWN9LAorLSAgICAgIHsweGUwNzBmNzhkMzkyNzU1NmEsIDB4 ODViYmUyNTNmNDdiMTQxN30sCistICAgICAgezB4OGM0NjlhYjg0M2I4OTU2MiwgMHg5Mzk1NmQ3 NDc4Y2NlYzhlfSwKKy0gICAgICB7MHhhZjU4NDE2NjU0YTZiYWJiLCAweDM4N2FjOGQxOTcwMDI3 YjJ9LAorLSAgICAgIHsweGRiMmU1MWJmZTlkMDY5NmEsIDB4MDY5OTdiMDVmY2MwMzE5ZX0sCist ICAgICAgezB4ODhmY2YzMTdmMjIyNDFlMiwgMHg0NDFmZWNlM2JkZjgxZjAzfSwKKy0gICAgICB7 MHhhYjNjMmZkZGVlYWFkMjVhLCAweGQ1MjdlODFjYWQ3NjI2YzN9LAorLSAgICAgIHsweGQ2MGIz YmQ1NmE1NTg2ZjEsIDB4OGE3MWUyMjNkOGQzYjA3NH0sCistICAgICAgezB4ODVjNzA1NjU2Mjc1 NzQ1NiwgMHhmNjg3MmQ1NjY3ODQ0ZTQ5fSwKKy0gICAgICB7MHhhNzM4YzZiZWJiMTJkMTZjLCAw eGI0MjhmOGFjMDE2NTYxZGJ9LAorLSAgICAgIHsweGQxMDZmODZlNjlkNzg1YzcsIDB4ZTEzMzM2 ZDcwMWJlYmE1Mn0sCistICAgICAgezB4ODJhNDViNDUwMjI2YjM5YywgMHhlY2MwMDI0NjYxMTcz NDczfSwKKy0gICAgICB7MHhhMzRkNzIxNjQyYjA2MDg0LCAweDI3ZjAwMmQ3Zjk1ZDAxOTB9LAor LSAgICAgIHsweGNjMjBjZTliZDM1Yzc4YTUsIDB4MzFlYzAzOGRmN2I0NDFmNH0sCistICAgICAg ezB4ZmYyOTAyNDJjODMzOTZjZSwgMHg3ZTY3MDQ3MTc1YTE1MjcxfSwKKy0gICAgICB7MHg5Zjc5 YTE2OWJkMjAzZTQxLCAweDBmMDA2MmM2ZTk4NGQzODZ9LAorLSAgICAgIHsweGM3NTgwOWM0MmM2 ODRkZDEsIDB4NTJjMDdiNzhhM2U2MDg2OH0sCistICAgICAgezB4ZjkyZTBjMzUzNzgyNjE0NSwg MHhhNzcwOWE1NmNjZGY4YTgyfSwKKy0gICAgICB7MHg5YmJjYzdhMTQyYjE3Y2NiLCAweDg4YTY2 MDc2NDAwYmI2OTF9LAorLSAgICAgIHsweGMyYWJmOTg5OTM1ZGRiZmUsIDB4NmFjZmY4OTNkMDBl YTQzNX0sCistICAgICAgezB4ZjM1NmY3ZWJmODM1NTJmZSwgMHgwNTgzZjZiOGM0MTI0ZDQzfSwK Ky0gICAgICB7MHg5ODE2NWFmMzdiMjE1M2RlLCAweGMzNzI3YTMzN2E4YjcwNGF9LAorLSAgICAg IHsweGJlMWJmMWIwNTllOWE4ZDYsIDB4NzQ0ZjE4YzA1OTJlNGM1Y30sCistICAgICAgezB4ZWRh MmVlMWM3MDY0MTMwYywgMHgxMTYyZGVmMDZmNzlkZjczfSwKKy0gICAgICB7MHg5NDg1ZDRkMWM2 M2U4YmU3LCAweDhhZGRjYjU2NDVhYzJiYTh9LAorLSAgICAgIHsweGI5YTc0YTA2MzdjZTJlZTEs IDB4NmQ5NTNlMmJkNzE3MzY5Mn0sCistICAgICAgezB4ZTgxMTFjODdjNWMxYmE5OSwgMHhjOGZh OGRiNmNjZGQwNDM3fSwKKy0gICAgICB7MHg5MTBhYjFkNGRiOTkxNGEwLCAweDFkOWM5ODkyNDAw YTIyYTJ9LAorLSAgICAgIHsweGI1NGQ1ZTRhMTI3ZjU5YzgsIDB4MjUwM2JlYjZkMDBjYWI0Yn0s CistICAgICAgezB4ZTJhMGI1ZGM5NzFmMzAzYSwgMHgyZTQ0YWU2NDg0MGZkNjFkfSwKKy0gICAg ICB7MHg4ZGE0NzFhOWRlNzM3ZTI0LCAweDVjZWFlY2ZlZDI4OWU1ZDJ9LAorLSAgICAgIHsweGIx MGQ4ZTE0NTYxMDVkYWQsIDB4NzQyNWE4M2U4NzJjNWY0N30sCistICAgICAgezB4ZGQ1MGYxOTk2 Yjk0NzUxOCwgMHhkMTJmMTI0ZTI4Zjc3NzE5fSwKKy0gICAgICB7MHg4YTUyOTZmZmUzM2NjOTJm LCAweDgyYmQ2YjcwZDk5YWFhNmZ9LAorLSAgICAgIHsweGFjZTczY2JmZGMwYmZiN2IsIDB4NjM2 Y2M2NGQxMDAxNTUwYn0sCistICAgICAgezB4ZDgyMTBiZWZkMzBlZmE1YSwgMHgzYzQ3ZjdlMDU0 MDFhYTRlfSwKKy0gICAgICB7MHg4NzE0YTc3NWUzZTk1Yzc4LCAweDY1YWNmYWVjMzQ4MTBhNzF9 LAorLSAgICAgIHsweGE4ZDlkMTUzNWNlM2IzOTYsIDB4N2YxODM5YTc0MWExNGQwZH0sCistICAg ICAgezB4ZDMxMDQ1YTgzNDFjYTA3YywgMHgxZWRlNDgxMTEyMDlhMDUwfSwKKy0gICAgICB7MHg4 M2VhMmI4OTIwOTFlNDRkLCAweDkzNGFlZDBhYWI0NjA0MzJ9LAorLSAgICAgIHsweGE0ZTRiNjZi NjhiNjVkNjAsIDB4ZjgxZGE4NGQ1NjE3ODUzZn0sCistICAgICAgezB4Y2UxZGU0MDY0MmUzZjRi OSwgMHgzNjI1MTI2MGFiOWQ2NjhlfSwKKy0gICAgICB7MHg4MGQyYWU4M2U5Y2U3OGYzLCAweGMx ZDcyYjdjNmI0MjYwMTl9LAorLSAgICAgIHsweGExMDc1YTI0ZTQ0MjE3MzAsIDB4YjI0Y2Y2NWI4 NjEyZjgxZn0sCistICAgICAgezB4Yzk0OTMwYWUxZDUyOWNmYywgMHhkZWUwMzNmMjY3OTdiNjI3 fSwKKy0gICAgICB7MHhmYjliN2NkOWE0YTc0NDNjLCAweDE2OTg0MGVmMDE3ZGEzYjF9LAorLSAg ICAgIHsweDlkNDEyZTA4MDZlODhhYTUsIDB4OGUxZjI4OTU2MGVlODY0ZX0sCistICAgICAgezB4 YzQ5MTc5OGEwOGEyYWQ0ZSwgMHhmMWE2ZjJiYWI5MmEyN2UyfSwKKy0gICAgICB7MHhmNWI1ZDdl YzhhY2I1OGEyLCAweGFlMTBhZjY5Njc3NGIxZGJ9LAorLSAgICAgIHsweDk5OTFhNmYzZDZiZjE3 NjUsIDB4YWNjYTZkYTFlMGE4ZWYyOX0sCistICAgICAgezB4YmZmNjEwYjBjYzZlZGQzZiwgMHgx N2ZkMDkwYTU4ZDMyYWYzfSwKKy0gICAgICB7MHhlZmYzOTRkY2ZmOGE5NDhlLCAweGRkZmM0YjRj ZWYwN2Y1YjB9LAorLSAgICAgIHsweDk1ZjgzZDBhMWZiNjljZDksIDB4NGFiZGFmMTAxNTY0Zjk4 ZX0sCistICAgICAgezB4YmI3NjRjNGNhN2E0NDQwZiwgMHg5ZDZkMWFkNDFhYmUzN2YxfSwKKy0g ICAgICB7MHhlYTUzZGY1ZmQxOGQ1NTEzLCAweDg0Yzg2MTg5MjE2ZGM1ZWR9LAorLSAgICAgIHsw eDkyNzQ2YjliZTJmODU1MmMsIDB4MzJmZDNjZjViNGU0OWJiNH0sCistICAgICAgezB4YjcxMTg2 ODJkYmI2NmE3NywgMHgzZmJjOGMzMzIyMWRjMmExfSwKKy0gICAgICB7MHhlNGQ1ZTgyMzkyYTQw NTE1LCAweDBmYWJhZjNmZWFhNTMzNGF9LAorLSAgICAgIHsweDhmMDViMTE2M2JhNjgzMmQsIDB4 MjljYjRkODdmMmE3NDAwZX0sCistICAgICAgezB4YjJjNzFkNWJjYTkwMjNmOCwgMHg3NDNlMjBl OWVmNTExMDEyfSwKKy0gICAgICB7MHhkZjc4ZTRiMmJkMzQyY2Y2LCAweDkxNGRhOTI0NmIyNTU0 MTZ9LAorLSAgICAgIHsweDhiYWI4ZWVmYjY0MDljMWEsIDB4MWFkMDg5YjZjMmY3NTQ4ZX0sCist ICAgICAgezB4YWU5NjcyYWJhM2QwYzMyMCwgMHhhMTg0YWMyNDczYjUyOWIxfSwKKy0gICAgICB7 MHhkYTNjMGY1NjhjYzRmM2U4LCAweGM5ZTVkNzJkOTBhMjc0MWV9LAorLSAgICAgIHsweDg4NjU4 OTk2MTdmYjE4NzEsIDB4N2UyZmE2N2M3YTY1ODg5Mn0sCistICAgICAgezB4YWE3ZWViZmI5ZGY5 ZGU4ZCwgMHhkZGJiOTAxYjk4ZmVlYWI3fSwKKy0gICAgICB7MHhkNTFlYTZmYTg1Nzg1NjMxLCAw eDU1MmE3NDIyN2YzZWE1NjV9LAorLSAgICAgIHsweDg1MzMyODVjOTM2YjM1ZGUsIDB4ZDUzYTg4 OTU4Zjg3Mjc1Zn0sCistICAgICAgezB4YTY3ZmYyNzNiODQ2MDM1NiwgMHg4YTg5MmFiYWYzNjhm MTM3fSwKKy0gICAgICB7MHhkMDFmZWYxMGE2NTc4NDJjLCAweDJkMmI3NTY5YjA0MzJkODV9LAor LSAgICAgIHsweDgyMTNmNTZhNjdmNmIyOWIsIDB4OWMzYjI5NjIwZTI5ZmM3M30sCistICAgICAg ezB4YTI5OGYyYzUwMWY0NWY0MiwgMHg4MzQ5ZjNiYTkxYjQ3YjhmfSwKKy0gICAgICB7MHhjYjNm MmY3NjQyNzE3NzEzLCAweDI0MWM3MGE5MzYyMTlhNzN9LAorLSAgICAgIHsweGZlMGVmYjUzZDMw ZGQ0ZDcsIDB4ZWQyMzhjZDM4M2FhMDExMH0sCistICAgICAgezB4OWVjOTVkMTQ2M2U4YTUwNiwg MHhmNDM2MzgwNDMyNGE0MGFhfSwKKy0gICAgICB7MHhjNjdiYjQ1OTdjZTJjZTQ4LCAweGIxNDNj NjA1M2VkY2QwZDV9LAorLSAgICAgIHsweGY4MWFhMTZmZGMxYjgxZGEsIDB4ZGQ5NGI3ODY4ZTk0 MDUwYX0sCistICAgICAgezB4OWIxMGE0ZTVlOTkxMzEyOCwgMHhjYTdjZjJiNDE5MWM4MzI2fSwK Ky0gICAgICB7MHhjMWQ0Y2UxZjYzZjU3ZDcyLCAweGZkMWMyZjYxMWY2M2EzZjB9LAorLSAgICAg IHsweGYyNGEwMWE3M2NmMmRjY2YsIDB4YmM2MzNiMzk2NzNjOGNlY30sCistICAgICAgezB4OTc2 ZTQxMDg4NjE3Y2EwMSwgMHhkNWJlMDUwM2UwODVkODEzfSwKKy0gICAgICB7MHhiZDQ5ZDE0YWE3 OWRiYzgyLCAweDRiMmQ4NjQ0ZDhhNzRlMTh9LAorLSAgICAgIHsweGVjOWM0NTlkNTE4NTJiYTIs IDB4ZGRmOGU3ZDYwZWQxMjE5ZX0sCistICAgICAgezB4OTNlMWFiODI1MmYzM2I0NSwgMHhjYWJi OTBlNWM5NDJiNTAzfSwKKy0gICAgICB7MHhiOGRhMTY2MmU3YjAwYTE3LCAweDNkNmE3NTFmM2I5 MzYyNDN9LAorLSAgICAgIHsweGU3MTA5YmZiYTE5YzBjOWQsIDB4MGNjNTEyNjcwYTc4M2FkNH0s CistICAgICAgezB4OTA2YTYxN2Q0NTAxODdlMiwgMHgyN2ZiMmI4MDY2OGIyNGM1fSwKKy0gICAg ICB7MHhiNDg0ZjlkYzk2NDFlOWRhLCAweGIxZjlmNjYwODAyZGVkZjZ9LAorLSAgICAgIHsweGUx YTYzODUzYmJkMjY0NTEsIDB4NWU3ODczZjhhMDM5Njk3M30sCistICAgICAgezB4OGQwN2UzMzQ1 NTYzN2ViMiwgMHhkYjBiNDg3YjY0MjNlMWU4fSwKKy0gICAgICB7MHhiMDQ5ZGMwMTZhYmM1ZTVm LCAweDkxY2UxYTlhM2QyY2RhNjJ9LAorLSAgICAgIHsweGRjNWM1MzAxYzU2Yjc1ZjcsIDB4NzY0 MWExNDBjYzc4MTBmYn0sCistICAgICAgezB4ODliOWIzZTExYjYzMjliYSwgMHhhOWU5MDRjODdm Y2IwYTlkfSwKKy0gICAgICB7MHhhYzI4MjBkOTYyM2JmNDI5LCAweDU0NjM0NWZhOWZiZGNkNDR9 LAorLSAgICAgIHsweGQ3MzIyOTBmYmFjYWYxMzMsIDB4YTk3YzE3Nzk0N2FkNDA5NX0sCistICAg ICAgezB4ODY3ZjU5YTlkNGJlZDZjMCwgMHg0OWVkOGVhYmNjY2M0ODVkfSwKKy0gICAgICB7MHhh ODFmMzAxNDQ5ZWU4YzcwLCAweDVjNjhmMjU2YmZmZjVhNzR9LAorLSAgICAgIHsweGQyMjZmYzE5 NWM2YTJmOGMsIDB4NzM4MzJlZWM2ZmZmMzExMX0sCistICAgICAgezB4ODM1ODVkOGZkOWMyNWRi NywgMHhjODMxZmQ1M2M1ZmY3ZWFifSwKKy0gICAgICB7MHhhNDJlNzRmM2QwMzJmNTI1LCAweGJh M2U3Y2E4Yjc3ZjVlNTV9LAorLSAgICAgIHsweGNkM2ExMjMwYzQzZmIyNmYsIDB4MjhjZTFiZDJl NTVmMzVlYn0sCistICAgICAgezB4ODA0NDRiNWU3YWE3Y2Y4NSwgMHg3OTgwZDE2M2NmNWI4MWIz fSwKKy0gICAgICB7MHhhMDU1NWUzNjE5NTFjMzY2LCAweGQ3ZTEwNWJjYzMzMjYyMWZ9LAorLSAg ICAgIHsweGM4NmFiNWMzOWZhNjM0NDAsIDB4OGRkOTQ3MmJmM2ZlZmFhN30sCistICAgICAgezB4 ZmE4NTYzMzQ4NzhmYzE1MCwgMHhiMTRmOThmNmYwZmViOTUxfSwKKy0gICAgICB7MHg5YzkzNWUw MGQ0YjlkOGQyLCAweDZlZDFiZjlhNTY5ZjMzZDN9LAorLSAgICAgIHsweGMzYjgzNTgxMDllODRm MDcsIDB4MGE4NjJmODBlYzQ3MDBjOH0sCistICAgICAgezB4ZjRhNjQyZTE0YzYyNjJjOCwgMHhj ZDI3YmI2MTI3NThjMGZhfSwKKy0gICAgICB7MHg5OGU3ZTljY2NmYmQ3ZGJkLCAweDgwMzhkNTFj Yjg5Nzc4OWN9LAorLSAgICAgIHsweGJmMjFlNDQwMDNhY2RkMmMsIDB4ZTA0NzBhNjNlNmJkNTZj M30sCistICAgICAgezB4ZWVlYTVkNTAwNDk4MTQ3OCwgMHgxODU4Y2NmY2UwNmNhYzc0fSwKKy0g ICAgICB7MHg5NTUyN2E1MjAyZGYwY2NiLCAweDBmMzc4MDFlMGM0M2ViYzh9LAorLSAgICAgIHsw eGJhYTcxOGU2ODM5NmNmZmQsIDB4ZDMwNTYwMjU4ZjU0ZTZiYX0sCistICAgICAgezB4ZTk1MGRm MjAyNDdjODNmZCwgMHg0N2M2YjgyZWYzMmEyMDY5fSwKKy0gICAgICB7MHg5MWQyOGI3NDE2Y2Rk MjdlLCAweDRjZGMzMzFkNTdmYTU0NDF9LAorLSAgICAgIHsweGI2NDcyZTUxMWM4MTQ3MWQsIDB4 ZTAxMzNmZTRhZGY4ZTk1Mn0sCistICAgICAgezB4ZTNkOGY5ZTU2M2ExOThlNSwgMHg1ODE4MGZk ZGQ5NzcyM2E2fSwKKy0gICAgICB7MHg4ZTY3OWMyZjVlNDRmZjhmLCAweDU3MGYwOWVhYTdlYTc2 NDh9LAorLSAgICAgIHsweGIyMDE4MzNiMzVkNjNmNzMsIDB4MmNkMmNjNjU1MWU1MTNkYX0sCist ICAgICAgezB4ZGU4MWU0MGEwMzRiY2Y0ZiwgMHhmODA3N2Y3ZWE2NWU1OGQxfSwKKy0gICAgICB7 MHg4YjExMmU4NjQyMGY2MTkxLCAweGZiMDRhZmFmMjdmYWY3ODJ9LAorLSAgICAgIHsweGFkZDU3 YTI3ZDI5MzM5ZjYsIDB4NzljNWRiOWFmMWY5YjU2M30sCistICAgICAgezB4ZDk0YWQ4YjFjNzM4 MDg3NCwgMHgxODM3NTI4MWFlNzgyMmJjfSwKKy0gICAgICB7MHg4N2NlYzc2ZjFjODMwNTQ4LCAw eDhmMjI5MzkxMGQwYjE1YjV9LAorLSAgICAgIHsweGE5YzI3OTRhZTNhM2M2OWEsIDB4YjJlYjM4 NzU1MDRkZGIyMn0sCistICAgICAgezB4ZDQzMzE3OWQ5YzhjYjg0MSwgMHg1ZmE2MDY5MmE0NjE1 MWVifSwKKy0gICAgICB7MHg4NDlmZWVjMjgxZDdmMzI4LCAweGRiYzdjNDFiYTZiY2QzMzN9LAor LSAgICAgIHsweGE1YzdlYTczMjI0ZGVmZjMsIDB4MTJiOWI1MjI5MDZjMDgwMH0sCistICAgICAg ezB4Y2YzOWU1MGZlYWUxNmJlZiwgMHhkNzY4MjI2YjM0ODcwYTAwfSwKKy0gICAgICB7MHg4MTg0 MmYyOWYyY2NlMzc1LCAweGU2YTExNTgzMDBkNDY2NDB9LAorLSAgICAgIHsweGExZTUzYWY0NmY4 MDFjNTMsIDB4NjA0OTVhZTNjMTA5N2ZkMH0sCistICAgICAgezB4Y2E1ZTg5YjE4YjYwMjM2OCwg MHgzODViYjE5Y2IxNGJkZmM0fSwKKy0gICAgICB7MHhmY2Y2MmMxZGVlMzgyYzQyLCAweDQ2NzI5 ZTAzZGQ5ZWQ3YjV9LAorLSAgICAgIHsweDllMTlkYjkyYjRlMzFiYTksIDB4NmMwN2EyYzI2YTgz NDZkMX0sCistICAgICAgezB4YzVhMDUyNzc2MjFiZTI5MywgMHhjNzA5OGI3MzA1MjQxODg1fSwK Ky0gICAgICB7IDB4ZjcwODY3MTUzYWEyZGIzOCwKKy0gICAgICAgIDB4YjhjYmVlNGZjNjZkMWVh NyB9CistI2Vsc2UKKy0gICAgICB7MHhmZjc3YjFmY2JlYmNkYzRmLCAweDI1ZThlODljMTNiYjBm N2J9LAorLSAgICAgIHsweGNlNWQ3M2ZmNDAyZDk4ZTMsIDB4ZmIwYTNkMjEyZGM4MTI5MH0sCist ICAgICAgezB4YTZiMzRhZDhjOWRmYzA2ZiwgMHhmNDJmYWE0OGMwZWE0ODFmfSwKKy0gICAgICB7 MHg4NmE4ZDM5ZWY3NzE2NGJjLCAweGFlNWRmZjljMDIwMzMxOTh9LAorLSAgICAgIHsweGQ5OGRk YWVlMTkwNjhjNzYsIDB4M2JhZGQ2MjRkZDliMDk1OH0sCistICAgICAgezB4YWZiZDIzNTA2NDRl ZWFjZiwgMHhlNWQxOTI5ZWY5MDg5OGZifSwKKy0gICAgICB7MHg4ZGY1ZWZhYmM1OTc5YzhmLCAw eGNhOGQzZmZhMWVmNDYzYzJ9LAorLSAgICAgIHsweGU1NTk5MDg3OWRkY2FhYmQsIDB4Y2M0MjBh NmExMDFkMDUxNn0sCistICAgICAgezB4Yjk0NDcwOTM4ZmE4OWJjZSwgMHhmODA4ZTQwZThkNWIz ZTZhfSwKKy0gICAgICB7MHg5NWE4NjM3NjI3OTg5YWFkLCAweGRkZTcwMDEzNzlhNDRhYTl9LAor LSAgICAgIHsweGYxYzkwMDgwYmFmNzJjYjEsIDB4NTMyNGM2OGIxMmRkNjMzOX0sCistICAgICAg ezB4YzM1MDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwfSwKKy0gICAgICB7MHg5ZGM1 YWRhODJiNzBiNTlkLCAweGYwMjAwMDAwMDAwMDAwMDB9LAorLSAgICAgIHsweGZlZTUwYjcwMjVj MzZhMDgsIDB4MDJmMjM2ZDA0NzUzZDViNH0sCistICAgICAgezB4Y2RlNmZkNWUwOWFiY2YyNiwg MHhlZDRjMDIyNmI1NWU2Zjg2fSwKKy0gICAgICB7MHhhNjUzOTkzMGJmNmJmZjQ1LCAweDg0ZGI4 MzQ2Yjc4NjE1MWN9LAorLSAgICAgIHsweDg2NWI4NjkyNWI5YmM1YzIsIDB4MGI4YTIzOTJiYTQ1 YTliMn0sCistICAgICAgezB4ZDkxMGY3ZmYyODA2OWRhNCwgMHgxYjJiYTE1MTgwOTRkYTA0fSwK Ky0gICAgICB7MHhhZjU4NDE2NjU0YTZiYWJiLCAweDM4N2FjOGQxOTcwMDI3YjJ9LAorLSAgICAg IHsweDhkYTQ3MWE5ZGU3MzdlMjQsIDB4NWNlYWVjZmVkMjg5ZTVkMn0sCistICAgICAgezB4ZTRk NWU4MjM5MmE0MDUxNSwgMHgwZmFiYWYzZmVhYTUzMzRhfSwKKy0gICAgICB7MHhiOGRhMTY2MmU3 YjAwYTE3LCAweDNkNmE3NTFmM2I5MzYyNDN9LAorLSAgICAgIHsgMHg5NTUyN2E1MjAyZGYwY2Ni LAorLSAgICAgICAgMHgwZjM3ODAxZTBjNDNlYmM4IH0KKy0jZW5kaWYKKy0gICAgfTsKKy0KKy0j aWYgRk1UX1VTRV9GVUxMX0NBQ0hFX0RSQUdPTkJPWAorLSAgICByZXR1cm4gcG93MTBfc2lnbmlm aWNhbmRzW2sgLSBmbG9hdF9pbmZvPGRvdWJsZT46Om1pbl9rXTsKKy0jZWxzZQorLSAgICBzdGF0 aWMgY29uc3RleHByIGNvbnN0IHVpbnQ2NF90IHBvd2Vyc19vZl81XzY0W10gPSB7CistICAgICAg ICAweDAwMDAwMDAwMDAwMDAwMDEsIDB4MDAwMDAwMDAwMDAwMDAwNSwgMHgwMDAwMDAwMDAwMDAw MDE5LAorLSAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDdkLCAweDAwMDAwMDAwMDAwMDAyNzEsIDB4 MDAwMDAwMDAwMDAwMGMzNSwKKy0gICAgICAgIDB4MDAwMDAwMDAwMDAwM2QwOSwgMHgwMDAwMDAw MDAwMDEzMTJkLCAweDAwMDAwMDAwMDAwNWY1ZTEsCistICAgICAgICAweDAwMDAwMDAwMDAxZGNk NjUsIDB4MDAwMDAwMDAwMDk1MDJmOSwgMHgwMDAwMDAwMDAyZTkwZWRkLAorLSAgICAgICAgMHgw MDAwMDAwMDBlOGQ0YTUxLCAweDAwMDAwMDAwNDhjMjczOTUsIDB4MDAwMDAwMDE2YmNjNDFlOSwK Ky0gICAgICAgIDB4MDAwMDAwMDcxYWZkNDk4ZCwgMHgwMDAwMDAyMzg2ZjI2ZmMxLCAweDAwMDAw MGIxYTJiYzJlYzUsCistICAgICAgICAweDAwMDAwMzc4MmRhY2U5ZDksIDB4MDAwMDExNThlNDYw OTEzZCwgMHgwMDAwNTZiYzc1ZTJkNjMxLAorLSAgICAgICAgMHgwMDAxYjFhZTRkNmUyZWY1LCAw eDAwMDg3ODY3ODMyNmVhYzksIDB4MDAyYTVhMDU4ZmMyOTVlZCwKKy0gICAgICAgIDB4MDBkM2My MWJjZWNjZWRhMSwgMHgwNDIyY2E4YjBhMDBhNDI1LCAweDE0YWRmNGI3MzIwMzM0Yjl9OworLQor LSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVpbnQzMl90IHBvdzEwX3JlY292ZXJ5X2Vycm9y c1tdID0geworLSAgICAgICAgMHg1MDAwMTQwMCwgMHg1NDA0NDEwMCwgMHg1NDAxNDU1NSwgMHg1 NTk1NDQxNSwgMHg1NDExNTU1NSwgMHgwMDAwMDAwMSwKKy0gICAgICAgIDB4NTAwMDAwMDAsIDB4 MDAxMDQwMDAsIDB4NTQwMTAwMDQsIDB4MDUwMDQwMDEsIDB4NTU1NTU1NDQsIDB4NDE1NDU1NTUs CistICAgICAgICAweDU0MDQwNTUxLCAweDE1NDQ1NTQ1LCAweDUxNTU1NTE0LCAweDEwMDAwMDE1 LCAweDAwMTAxMTAwLCAweDAxMTAwMDE1LAorLSAgICAgICAgMHgwMDAwMDAwMCwgMHgwMDAwMDAw MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNDQ1MDUxNCwgMHg0NTQxNDExMCwKKy0gICAg ICAgIDB4NTU1NTUxNDUsIDB4NTA1NDQwNTAsIDB4MTUwNDAxNTUsIDB4MTEwNTQxNDAsIDB4NTAx MTE1MTQsIDB4MTE0NTE0NTQsCistICAgICAgICAweDAwNDAwNTQxLCAweDAwMDAwMDAwLCAweDU1 NTU1NDUwLCAweDEwMDU2NTUxLCAweDEwMDU0MDExLCAweDU1NTUxMDE0LAorLSAgICAgICAgMHg2 OTUxNDU1NSwgMHgwNTE1MTEwOSwgMHgwMDE1NTU1NX07CistCistICAgIHN0YXRpYyBjb25zdCBp bnQgY29tcHJlc3Npb25fcmF0aW8gPSAyNzsKKy0KKy0gICAgLy8gQ29tcHV0ZSBiYXNlIGluZGV4 LgorLSAgICBpbnQgY2FjaGVfaW5kZXggPSAoayAtIGZsb2F0X2luZm88ZG91YmxlPjo6bWluX2sp IC8gY29tcHJlc3Npb25fcmF0aW87CistICAgIGludCBrYiA9IGNhY2hlX2luZGV4ICogY29tcHJl c3Npb25fcmF0aW8gKyBmbG9hdF9pbmZvPGRvdWJsZT46Om1pbl9rOworLSAgICBpbnQgb2Zmc2V0 ID0gayAtIGtiOworLQorLSAgICAvLyBHZXQgYmFzZSBjYWNoZS4KKy0gICAgdWludDEyOF93cmFw cGVyIGJhc2VfY2FjaGUgPSBwb3cxMF9zaWduaWZpY2FuZHNbY2FjaGVfaW5kZXhdOworLSAgICBp ZiAob2Zmc2V0ID09IDApIHJldHVybiBiYXNlX2NhY2hlOworLQorLSAgICAvLyBDb21wdXRlIHRo ZSByZXF1aXJlZCBhbW91bnQgb2YgYml0LXNoaWZ0LgorLSAgICBpbnQgYWxwaGEgPSBmbG9vcl9s b2cyX3BvdzEwKGtiICsgb2Zmc2V0KSAtIGZsb29yX2xvZzJfcG93MTAoa2IpIC0gb2Zmc2V0Owor LSAgICBGTVRfQVNTRVJUKGFscGhhID4gMCAmJiBhbHBoYSA8IDY0LCAic2hpZnRpbmcgZXJyb3Ig ZGV0ZWN0ZWQiKTsKKy0KKy0gICAgLy8gVHJ5IHRvIHJlY292ZXIgdGhlIHJlYWwgY2FjaGUuCist ICAgIHVpbnQ2NF90IHBvdzUgPSBwb3dlcnNfb2ZfNV82NFtvZmZzZXRdOworLSAgICB1aW50MTI4 X3dyYXBwZXIgcmVjb3ZlcmVkX2NhY2hlID0gdW11bDEyOChiYXNlX2NhY2hlLmhpZ2goKSwgcG93 NSk7CistICAgIHVpbnQxMjhfd3JhcHBlciBtaWRkbGVfbG93ID0KKy0gICAgICAgIHVtdWwxMjgo YmFzZV9jYWNoZS5sb3coKSAtIChrYiA8IDAgPyAxdSA6IDB1KSwgcG93NSk7CistCistICAgIHJl Y292ZXJlZF9jYWNoZSArPSBtaWRkbGVfbG93LmhpZ2goKTsKKy0KKy0gICAgdWludDY0X3QgaGln aF90b19taWRkbGUgPSByZWNvdmVyZWRfY2FjaGUuaGlnaCgpIDw8ICg2NCAtIGFscGhhKTsKKy0g ICAgdWludDY0X3QgbWlkZGxlX3RvX2xvdyA9IHJlY292ZXJlZF9jYWNoZS5sb3coKSA8PCAoNjQg LSBhbHBoYSk7CistCistICAgIHJlY292ZXJlZF9jYWNoZSA9CistICAgICAgICB1aW50MTI4X3dy YXBwZXJ7KHJlY292ZXJlZF9jYWNoZS5sb3coKSA+PiBhbHBoYSkgfCBoaWdoX3RvX21pZGRsZSwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAoKG1pZGRsZV9sb3cubG93KCkgPj4gYWxwaGEpIHwg bWlkZGxlX3RvX2xvdyl9OworLQorLSAgICBpZiAoa2IgPCAwKSByZWNvdmVyZWRfY2FjaGUgKz0g MTsKKy0KKy0gICAgLy8gR2V0IGVycm9yLgorLSAgICBpbnQgZXJyb3JfaWR4ID0gKGsgLSBmbG9h dF9pbmZvPGRvdWJsZT46Om1pbl9rKSAvIDE2OworLSAgICB1aW50MzJfdCBlcnJvciA9IChwb3cx MF9yZWNvdmVyeV9lcnJvcnNbZXJyb3JfaWR4XSA+PgorLSAgICAgICAgICAgICAgICAgICAgICAo KGsgLSBmbG9hdF9pbmZvPGRvdWJsZT46Om1pbl9rKSAlIDE2KSAqIDIpICYKKy0gICAgICAgICAg ICAgICAgICAgICAweDM7CistCistICAgIC8vIEFkZCB0aGUgZXJyb3IgYmFjay4KKy0gICAgRk1U X0FTU0VSVChyZWNvdmVyZWRfY2FjaGUubG93KCkgKyBlcnJvciA+PSByZWNvdmVyZWRfY2FjaGUu bG93KCksICIiKTsKKy0gICAgcmV0dXJuIHtyZWNvdmVyZWRfY2FjaGUuaGlnaCgpLCByZWNvdmVy ZWRfY2FjaGUubG93KCkgKyBlcnJvcn07CistI2VuZGlmCistICB9CistCistICBzdGF0aWMgY2Fy cmllcl91aW50IGNvbXB1dGVfbXVsKGNhcnJpZXJfdWludCB1LAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZV9lbnRyeV90eXBlJiBjYWNoZSkgRk1UX05PRVhD RVBUIHsKKy0gICAgcmV0dXJuIHVtdWwxOTJfdXBwZXI2NCh1LCBjYWNoZSk7CistICB9CistCist ICBzdGF0aWMgdWludDMyX3QgY29tcHV0ZV9kZWx0YShjYWNoZV9lbnRyeV90eXBlIGNvbnN0JiBj YWNoZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiZXRhX21pbnVzXzEp IEZNVF9OT0VYQ0VQVCB7CistICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY2FjaGUu aGlnaCgpID4+ICg2NCAtIDEgLSBiZXRhX21pbnVzXzEpKTsKKy0gIH0KKy0KKy0gIHN0YXRpYyBi b29sIGNvbXB1dGVfbXVsX3Bhcml0eShjYXJyaWVyX3VpbnQgdHdvX2YsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVfZW50cnlfdHlwZSYgY2FjaGUsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJldGFfbWludXNfMSkgRk1UX05PRVhD RVBUIHsKKy0gICAgRk1UX0FTU0VSVChiZXRhX21pbnVzXzEgPj0gMSwgIiIpOworLSAgICBGTVRf QVNTRVJUKGJldGFfbWludXNfMSA8IDY0LCAiIik7CistCistICAgIHJldHVybiAoKHVtdWwxOTJf bWlkZGxlNjQodHdvX2YsIGNhY2hlKSA+PiAoNjQgLSBiZXRhX21pbnVzXzEpKSAmIDEpICE9IDA7 CistICB9CistCistICBzdGF0aWMgY2Fycmllcl91aW50IGNvbXB1dGVfbGVmdF9lbmRwb2ludF9m b3Jfc2hvcnRlcl9pbnRlcnZhbF9jYXNlKAorLSAgICAgIGNvbnN0IGNhY2hlX2VudHJ5X3R5cGUm IGNhY2hlLCBpbnQgYmV0YV9taW51c18xKSBGTVRfTk9FWENFUFQgeworLSAgICByZXR1cm4gKGNh Y2hlLmhpZ2goKSAtCistICAgICAgICAgICAgKGNhY2hlLmhpZ2goKSA+PiAoZmxvYXRfaW5mbzxk b3VibGU+OjpzaWduaWZpY2FuZF9iaXRzICsgMikpKSA+PgorLSAgICAgICAgICAgKDY0IC0gZmxv YXRfaW5mbzxkb3VibGU+OjpzaWduaWZpY2FuZF9iaXRzIC0gMSAtIGJldGFfbWludXNfMSk7Cist ICB9CistCistICBzdGF0aWMgY2Fycmllcl91aW50IGNvbXB1dGVfcmlnaHRfZW5kcG9pbnRfZm9y X3Nob3J0ZXJfaW50ZXJ2YWxfY2FzZSgKKy0gICAgICBjb25zdCBjYWNoZV9lbnRyeV90eXBlJiBj YWNoZSwgaW50IGJldGFfbWludXNfMSkgRk1UX05PRVhDRVBUIHsKKy0gICAgcmV0dXJuIChjYWNo ZS5oaWdoKCkgKworLSAgICAgICAgICAgIChjYWNoZS5oaWdoKCkgPj4gKGZsb2F0X2luZm88ZG91 YmxlPjo6c2lnbmlmaWNhbmRfYml0cyArIDEpKSkgPj4KKy0gICAgICAgICAgICg2NCAtIGZsb2F0 X2luZm88ZG91YmxlPjo6c2lnbmlmaWNhbmRfYml0cyAtIDEgLSBiZXRhX21pbnVzXzEpOworLSAg fQorLQorLSAgc3RhdGljIGNhcnJpZXJfdWludCBjb21wdXRlX3JvdW5kX3VwX2Zvcl9zaG9ydGVy X2ludGVydmFsX2Nhc2UoCistICAgICAgY29uc3QgY2FjaGVfZW50cnlfdHlwZSYgY2FjaGUsIGlu dCBiZXRhX21pbnVzXzEpIEZNVF9OT0VYQ0VQVCB7CistICAgIHJldHVybiAoKGNhY2hlLmhpZ2go KSA+PgorLSAgICAgICAgICAgICAoNjQgLSBmbG9hdF9pbmZvPGRvdWJsZT46OnNpZ25pZmljYW5k X2JpdHMgLSAyIC0gYmV0YV9taW51c18xKSkgKworLSAgICAgICAgICAgIDEpIC8KKy0gICAgICAg ICAgIDI7CistICB9CistfTsKKy0KKy0vLyBWYXJpb3VzIGludGVnZXIgY2hlY2tzCistdGVtcGxh dGUgPGNsYXNzIFQ+CistYm9vbCBpc19sZWZ0X2VuZHBvaW50X2ludGVnZXJfc2hvcnRlcl9pbnRl cnZhbChpbnQgZXhwb25lbnQpIEZNVF9OT0VYQ0VQVCB7CistICByZXR1cm4gZXhwb25lbnQgPj0K Ky0gICAgICAgICAgICAgZmxvYXRfaW5mbzwKKy0gICAgICAgICAgICAgICAgIFQ+OjpjYXNlX3No b3J0ZXJfaW50ZXJ2YWxfbGVmdF9lbmRwb2ludF9sb3dlcl90aHJlc2hvbGQgJiYKKy0gICAgICAg ICBleHBvbmVudCA8PQorLSAgICAgICAgICAgICBmbG9hdF9pbmZvPFQ+OjpjYXNlX3Nob3J0ZXJf aW50ZXJ2YWxfbGVmdF9lbmRwb2ludF91cHBlcl90aHJlc2hvbGQ7CistfQorLXRlbXBsYXRlIDxj bGFzcyBUPgorLWJvb2wgaXNfZW5kcG9pbnRfaW50ZWdlcih0eXBlbmFtZSBmbG9hdF9pbmZvPFQ+ OjpjYXJyaWVyX3VpbnQgdHdvX2YsCistICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBv bmVudCwgaW50IG1pbnVzX2spIEZNVF9OT0VYQ0VQVCB7CistICBpZiAoZXhwb25lbnQgPCBmbG9h dF9pbmZvPFQ+OjpjYXNlX2ZjX3BtX2hhbGZfbG93ZXJfdGhyZXNob2xkKSByZXR1cm4gZmFsc2U7 CistICAvLyBGb3IgayA+PSAwLgorLSAgaWYgKGV4cG9uZW50IDw9IGZsb2F0X2luZm88VD46OmNh c2VfZmNfcG1faGFsZl91cHBlcl90aHJlc2hvbGQpIHJldHVybiB0cnVlOworLSAgLy8gRm9yIGsg PCAwLgorLSAgaWYgKGV4cG9uZW50ID4gZmxvYXRfaW5mbzxUPjo6ZGl2aXNpYmlsaXR5X2NoZWNr X2J5XzVfdGhyZXNob2xkKSByZXR1cm4gZmFsc2U7CistICByZXR1cm4gZGl2aXNpYmxlX2J5X3Bv d2VyX29mXzUodHdvX2YsIG1pbnVzX2spOworLX0KKy0KKy10ZW1wbGF0ZSA8Y2xhc3MgVD4KKy1i b29sIGlzX2NlbnRlcl9pbnRlZ2VyKHR5cGVuYW1lIGZsb2F0X2luZm88VD46OmNhcnJpZXJfdWlu dCB0d29fZiwgaW50IGV4cG9uZW50LAorLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbnVz X2spIEZNVF9OT0VYQ0VQVCB7CistICAvLyBFeHBvbmVudCBmb3IgNSBpcyBuZWdhdGl2ZS4KKy0g IGlmIChleHBvbmVudCA+IGZsb2F0X2luZm88VD46OmRpdmlzaWJpbGl0eV9jaGVja19ieV81X3Ro cmVzaG9sZCkgcmV0dXJuIGZhbHNlOworLSAgaWYgKGV4cG9uZW50ID4gZmxvYXRfaW5mbzxUPjo6 Y2FzZV9mY191cHBlcl90aHJlc2hvbGQpCistICAgIHJldHVybiBkaXZpc2libGVfYnlfcG93ZXJf b2ZfNSh0d29fZiwgbWludXNfayk7CistICAvLyBCb3RoIGV4cG9uZW50cyBhcmUgbm9ubmVnYXRp dmUuCistICBpZiAoZXhwb25lbnQgPj0gZmxvYXRfaW5mbzxUPjo6Y2FzZV9mY19sb3dlcl90aHJl c2hvbGQpIHJldHVybiB0cnVlOworLSAgLy8gRXhwb25lbnQgZm9yIDIgaXMgbmVnYXRpdmUuCist ICByZXR1cm4gZGl2aXNpYmxlX2J5X3Bvd2VyX29mXzIodHdvX2YsIG1pbnVzX2sgLSBleHBvbmVu dCArIDEpOworLX0KKy0KKy0vLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MgZnJvbSBuIGFuZCByZXR1 cm4gdGhlIG51bWJlciBvZiB6ZXJvcyByZW1vdmVkIChmbG9hdCkKKy1GTVRfSU5MSU5FIGludCBy ZW1vdmVfdHJhaWxpbmdfemVyb3ModWludDMyX3QmIG4pIEZNVF9OT0VYQ0VQVCB7CistI2lmZGVm IEZNVF9CVUlMVElOX0NUWgorLSAgaW50IHQgPSBGTVRfQlVJTFRJTl9DVFoobik7CistI2Vsc2UK Ky0gIGludCB0ID0gY3R6KG4pOworLSNlbmRpZgorLSAgaWYgKHQgPiBmbG9hdF9pbmZvPGZsb2F0 Pjo6bWF4X3RyYWlsaW5nX3plcm9zKQorLSAgICB0ID0gZmxvYXRfaW5mbzxmbG9hdD46Om1heF90 cmFpbGluZ196ZXJvczsKKy0KKy0gIGNvbnN0IHVpbnQzMl90IG1vZF9pbnYxID0gMHhjY2NjY2Nj ZDsKKy0gIGNvbnN0IHVpbnQzMl90IG1heF9xdW90aWVudDEgPSAweDMzMzMzMzMzOworLSAgY29u c3QgdWludDMyX3QgbW9kX2ludjIgPSAweGMyOGY1YzI5OworLSAgY29uc3QgdWludDMyX3QgbWF4 X3F1b3RpZW50MiA9IDB4MGEzZDcwYTM7CistCistICBpbnQgcyA9IDA7CistICBmb3IgKDsgcyA8 IHQgLSAxOyBzICs9IDIpIHsKKy0gICAgaWYgKG4gKiBtb2RfaW52MiA+IG1heF9xdW90aWVudDIp IGJyZWFrOworLSAgICBuICo9IG1vZF9pbnYyOworLSAgfQorLSAgaWYgKHMgPCB0ICYmIG4gKiBt b2RfaW52MSA8PSBtYXhfcXVvdGllbnQxKSB7CistICAgIG4gKj0gbW9kX2ludjE7CistICAgICsr czsKKy0gIH0KKy0gIG4gPj49IHM7CistICByZXR1cm4gczsKKy19CistCistLy8gUmVtb3ZlcyB0 cmFpbGluZyB6ZXJvcyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHplcm9zIHJlbW92ZWQgKGRv dWJsZSkKKy1GTVRfSU5MSU5FIGludCByZW1vdmVfdHJhaWxpbmdfemVyb3ModWludDY0X3QmIG4p IEZNVF9OT0VYQ0VQVCB7CistI2lmZGVmIEZNVF9CVUlMVElOX0NUWkxMCistICBpbnQgdCA9IEZN VF9CVUlMVElOX0NUWkxMKG4pOworLSNlbHNlCistICBpbnQgdCA9IGN0emxsKG4pOworLSNlbmRp ZgorLSAgaWYgKHQgPiBmbG9hdF9pbmZvPGRvdWJsZT46Om1heF90cmFpbGluZ196ZXJvcykKKy0g ICAgdCA9IGZsb2F0X2luZm88ZG91YmxlPjo6bWF4X3RyYWlsaW5nX3plcm9zOworLSAgLy8gRGl2 aWRlIGJ5IDEwXjggYW5kIHJlZHVjZSB0byAzMi1iaXRzCistICAvLyBTaW5jZSByZXRfdmFsdWUu c2lnbmlmaWNhbmQgPD0gKDJeNjQgLSAxKSAvIDEwMDAgPCAxMF4xNywKKy0gIC8vIGJvdGggb2Yg dGhlIHF1b3RpZW50IGFuZCB0aGUgciBzaG91bGQgZml0IGluIDMyLWJpdHMKKy0KKy0gIGNvbnN0 IHVpbnQzMl90IG1vZF9pbnYxID0gMHhjY2NjY2NjZDsKKy0gIGNvbnN0IHVpbnQzMl90IG1heF9x dW90aWVudDEgPSAweDMzMzMzMzMzOworLSAgY29uc3QgdWludDY0X3QgbW9kX2ludjggPSAweGM3 NjcwNzRiMjJlOTBlMjE7CistICBjb25zdCB1aW50NjRfdCBtYXhfcXVvdGllbnQ4ID0gMHgwMDAw MmFmMzFkYzQ2MTE4OworLQorLSAgLy8gSWYgdGhlIG51bWJlciBpcyBkaXZpc2libGUgYnkgMScw MDAwJzAwMDAsIHdvcmsgd2l0aCB0aGUgcXVvdGllbnQKKy0gIGlmICh0ID49IDgpIHsKKy0gICAg YXV0byBxdW90aWVudF9jYW5kaWRhdGUgPSBuICogbW9kX2ludjg7CistCistICAgIGlmIChxdW90 aWVudF9jYW5kaWRhdGUgPD0gbWF4X3F1b3RpZW50OCkgeworLSAgICAgIGF1dG8gcXVvdGllbnQg PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocXVvdGllbnRfY2FuZGlkYXRlID4+IDgpOworLQorLSAg ICAgIGludCBzID0gODsKKy0gICAgICBmb3IgKDsgcyA8IHQ7ICsrcykgeworLSAgICAgICAgaWYg KHF1b3RpZW50ICogbW9kX2ludjEgPiBtYXhfcXVvdGllbnQxKSBicmVhazsKKy0gICAgICAgIHF1 b3RpZW50ICo9IG1vZF9pbnYxOworLSAgICAgIH0KKy0gICAgICBxdW90aWVudCA+Pj0gKHMgLSA4 KTsKKy0gICAgICBuID0gcXVvdGllbnQ7CistICAgICAgcmV0dXJuIHM7CistICAgIH0KKy0gIH0K Ky0KKy0gIC8vIE90aGVyd2lzZSwgd29yayB3aXRoIHRoZSByZW1haW5kZXIKKy0gIGF1dG8gcXVv dGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obiAvIDEwMDAwMDAwMCk7CistICBhdXRvIHJl bWFpbmRlciA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuIC0gMTAwMDAwMDAwICogcXVvdGllbnQp OworLQorLSAgaWYgKHQgPT0gMCB8fCByZW1haW5kZXIgKiBtb2RfaW52MSA+IG1heF9xdW90aWVu dDEpIHsKKy0gICAgcmV0dXJuIDA7CistICB9CistICByZW1haW5kZXIgKj0gbW9kX2ludjE7Cist CistICBpZiAodCA9PSAxIHx8IHJlbWFpbmRlciAqIG1vZF9pbnYxID4gbWF4X3F1b3RpZW50MSkg eworLSAgICBuID0gKHJlbWFpbmRlciA+PiAxKSArIHF1b3RpZW50ICogMTAwMDAwMDB1bGw7Cist ICAgIHJldHVybiAxOworLSAgfQorLSAgcmVtYWluZGVyICo9IG1vZF9pbnYxOworLQorLSAgaWYg KHQgPT0gMiB8fCByZW1haW5kZXIgKiBtb2RfaW52MSA+IG1heF9xdW90aWVudDEpIHsKKy0gICAg biA9IChyZW1haW5kZXIgPj4gMikgKyBxdW90aWVudCAqIDEwMDAwMDB1bGw7CistICAgIHJldHVy biAyOworLSAgfQorLSAgcmVtYWluZGVyICo9IG1vZF9pbnYxOworLQorLSAgaWYgKHQgPT0gMyB8 fCByZW1haW5kZXIgKiBtb2RfaW52MSA+IG1heF9xdW90aWVudDEpIHsKKy0gICAgbiA9IChyZW1h aW5kZXIgPj4gMykgKyBxdW90aWVudCAqIDEwMDAwMHVsbDsKKy0gICAgcmV0dXJuIDM7CistICB9 CistICByZW1haW5kZXIgKj0gbW9kX2ludjE7CistCistICBpZiAodCA9PSA0IHx8IHJlbWFpbmRl ciAqIG1vZF9pbnYxID4gbWF4X3F1b3RpZW50MSkgeworLSAgICBuID0gKHJlbWFpbmRlciA+PiA0 KSArIHF1b3RpZW50ICogMTAwMDB1bGw7CistICAgIHJldHVybiA0OworLSAgfQorLSAgcmVtYWlu ZGVyICo9IG1vZF9pbnYxOworLQorLSAgaWYgKHQgPT0gNSB8fCByZW1haW5kZXIgKiBtb2RfaW52 MSA+IG1heF9xdW90aWVudDEpIHsKKy0gICAgbiA9IChyZW1haW5kZXIgPj4gNSkgKyBxdW90aWVu dCAqIDEwMDB1bGw7CistICAgIHJldHVybiA1OworLSAgfQorLSAgcmVtYWluZGVyICo9IG1vZF9p bnYxOworLQorLSAgaWYgKHQgPT0gNiB8fCByZW1haW5kZXIgKiBtb2RfaW52MSA+IG1heF9xdW90 aWVudDEpIHsKKy0gICAgbiA9IChyZW1haW5kZXIgPj4gNikgKyBxdW90aWVudCAqIDEwMHVsbDsK Ky0gICAgcmV0dXJuIDY7CistICB9CistICByZW1haW5kZXIgKj0gbW9kX2ludjE7CistCistICBu ID0gKHJlbWFpbmRlciA+PiA3KSArIHF1b3RpZW50ICogMTB1bGw7CistICByZXR1cm4gNzsKKy19 CistCistLy8gVGhlIG1haW4gYWxnb3JpdGhtIGZvciBzaG9ydGVyIGludGVydmFsIGNhc2UKKy10 ZW1wbGF0ZSA8Y2xhc3MgVD4KKy1GTVRfSU5MSU5FIGRlY2ltYWxfZnA8VD4gc2hvcnRlcl9pbnRl cnZhbF9jYXNlKGludCBleHBvbmVudCkgRk1UX05PRVhDRVBUIHsKKy0gIGRlY2ltYWxfZnA8VD4g cmV0X3ZhbHVlOworLSAgLy8gQ29tcHV0ZSBrIGFuZCBiZXRhCistICBjb25zdCBpbnQgbWludXNf ayA9IGZsb29yX2xvZzEwX3BvdzJfbWludXNfbG9nMTBfNF9vdmVyXzMoZXhwb25lbnQpOworLSAg Y29uc3QgaW50IGJldGFfbWludXNfMSA9IGV4cG9uZW50ICsgZmxvb3JfbG9nMl9wb3cxMCgtbWlu dXNfayk7CistCistICAvLyBDb21wdXRlIHhpIGFuZCB6aQorLSAgdXNpbmcgY2FjaGVfZW50cnlf dHlwZSA9IHR5cGVuYW1lIGNhY2hlX2FjY2Vzc29yPFQ+OjpjYWNoZV9lbnRyeV90eXBlOworLSAg Y29uc3QgY2FjaGVfZW50cnlfdHlwZSBjYWNoZSA9IGNhY2hlX2FjY2Vzc29yPFQ+OjpnZXRfY2Fj aGVkX3Bvd2VyKC1taW51c19rKTsKKy0KKy0gIGF1dG8geGkgPSBjYWNoZV9hY2Nlc3NvcjxUPjo6 Y29tcHV0ZV9sZWZ0X2VuZHBvaW50X2Zvcl9zaG9ydGVyX2ludGVydmFsX2Nhc2UoCistICAgICAg Y2FjaGUsIGJldGFfbWludXNfMSk7CistICBhdXRvIHppID0gY2FjaGVfYWNjZXNzb3I8VD46OmNv bXB1dGVfcmlnaHRfZW5kcG9pbnRfZm9yX3Nob3J0ZXJfaW50ZXJ2YWxfY2FzZSgKKy0gICAgICBj YWNoZSwgYmV0YV9taW51c18xKTsKKy0KKy0gIC8vIElmIHRoZSBsZWZ0IGVuZHBvaW50IGlzIG5v dCBhbiBpbnRlZ2VyLCBpbmNyZWFzZSBpdAorLSAgaWYgKCFpc19sZWZ0X2VuZHBvaW50X2ludGVn ZXJfc2hvcnRlcl9pbnRlcnZhbDxUPihleHBvbmVudCkpICsreGk7CistCistICAvLyBUcnkgYmln Z2VyIGRpdmlzb3IKKy0gIHJldF92YWx1ZS5zaWduaWZpY2FuZCA9IHppIC8gMTA7CistCistICAv LyBJZiBzdWNjZWVkLCByZW1vdmUgdHJhaWxpbmcgemVyb3MgaWYgbmVjZXNzYXJ5IGFuZCByZXR1 cm4KKy0gIGlmIChyZXRfdmFsdWUuc2lnbmlmaWNhbmQgKiAxMCA+PSB4aSkgeworLSAgICByZXRf dmFsdWUuZXhwb25lbnQgPSBtaW51c19rICsgMTsKKy0gICAgcmV0X3ZhbHVlLmV4cG9uZW50ICs9 IHJlbW92ZV90cmFpbGluZ196ZXJvcyhyZXRfdmFsdWUuc2lnbmlmaWNhbmQpOworLSAgICByZXR1 cm4gcmV0X3ZhbHVlOworLSAgfQorLQorLSAgLy8gT3RoZXJ3aXNlLCBjb21wdXRlIHRoZSByb3Vu ZC11cCBvZiB5CistICByZXRfdmFsdWUuc2lnbmlmaWNhbmQgPQorLSAgICAgIGNhY2hlX2FjY2Vz c29yPFQ+Ojpjb21wdXRlX3JvdW5kX3VwX2Zvcl9zaG9ydGVyX2ludGVydmFsX2Nhc2UoCistICAg ICAgICAgIGNhY2hlLCBiZXRhX21pbnVzXzEpOworLSAgcmV0X3ZhbHVlLmV4cG9uZW50ID0gbWlu dXNfazsKKy0KKy0gIC8vIFdoZW4gdGllIG9jY3VycywgY2hvb3NlIG9uZSBvZiB0aGVtIGFjY29y ZGluZyB0byB0aGUgcnVsZQorLSAgaWYgKGV4cG9uZW50ID49IGZsb2F0X2luZm88VD46OnNob3J0 ZXJfaW50ZXJ2YWxfdGllX2xvd2VyX3RocmVzaG9sZCAmJgorLSAgICAgIGV4cG9uZW50IDw9IGZs b2F0X2luZm88VD46OnNob3J0ZXJfaW50ZXJ2YWxfdGllX3VwcGVyX3RocmVzaG9sZCkgeworLSAg ICByZXRfdmFsdWUuc2lnbmlmaWNhbmQgPSByZXRfdmFsdWUuc2lnbmlmaWNhbmQgJSAyID09IDAK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmV0X3ZhbHVlLnNpZ25pZmljYW5k CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJldF92YWx1ZS5zaWduaWZpY2Fu ZCAtIDE7CistICB9IGVsc2UgaWYgKHJldF92YWx1ZS5zaWduaWZpY2FuZCA8IHhpKSB7CistICAg ICsrcmV0X3ZhbHVlLnNpZ25pZmljYW5kOworLSAgfQorLSAgcmV0dXJuIHJldF92YWx1ZTsKKy19 CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGRlY2ltYWxfZnA8VD4gdG9fZGVjaW1hbChUIHgp IEZNVF9OT0VYQ0VQVCB7CistICAvLyBTdGVwIDE6IGludGVnZXIgcHJvbW90aW9uICYgU2NodWJm YWNoIG11bHRpcGxpZXIgY2FsY3VsYXRpb24uCistCistICB1c2luZyBjYXJyaWVyX3VpbnQgPSB0 eXBlbmFtZSBmbG9hdF9pbmZvPFQ+OjpjYXJyaWVyX3VpbnQ7CistICB1c2luZyBjYWNoZV9lbnRy eV90eXBlID0gdHlwZW5hbWUgY2FjaGVfYWNjZXNzb3I8VD46OmNhY2hlX2VudHJ5X3R5cGU7Cist ICBhdXRvIGJyID0gYml0X2Nhc3Q8Y2Fycmllcl91aW50Pih4KTsKKy0KKy0gIC8vIEV4dHJhY3Qg c2lnbmlmaWNhbmQgYml0cyBhbmQgZXhwb25lbnQgYml0cy4KKy0gIGNvbnN0IGNhcnJpZXJfdWlu dCBzaWduaWZpY2FuZF9tYXNrID0KKy0gICAgICAoc3RhdGljX2Nhc3Q8Y2Fycmllcl91aW50Pigx KSA8PCBmbG9hdF9pbmZvPFQ+OjpzaWduaWZpY2FuZF9iaXRzKSAtIDE7CistICBjYXJyaWVyX3Vp bnQgc2lnbmlmaWNhbmQgPSAoYnIgJiBzaWduaWZpY2FuZF9tYXNrKTsKKy0gIGludCBleHBvbmVu dCA9IHN0YXRpY19jYXN0PGludD4oKGJyICYgZXhwb25lbnRfbWFzazxUPigpKSA+PgorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9pbmZvPFQ+OjpzaWduaWZpY2FuZF9i aXRzKTsKKy0KKy0gIGlmIChleHBvbmVudCAhPSAwKSB7ICAvLyBDaGVjayBpZiBub3JtYWwuCist ICAgIGV4cG9uZW50ICs9IGZsb2F0X2luZm88VD46OmV4cG9uZW50X2JpYXMgLSBmbG9hdF9pbmZv PFQ+OjpzaWduaWZpY2FuZF9iaXRzOworLQorLSAgICAvLyBTaG9ydGVyIGludGVydmFsIGNhc2U7 IHByb2NlZWQgbGlrZSBTY2h1YmZhY2guCistICAgIGlmIChzaWduaWZpY2FuZCA9PSAwKSByZXR1 cm4gc2hvcnRlcl9pbnRlcnZhbF9jYXNlPFQ+KGV4cG9uZW50KTsKKy0KKy0gICAgc2lnbmlmaWNh bmQgfD0KKy0gICAgICAgIChzdGF0aWNfY2FzdDxjYXJyaWVyX3VpbnQ+KDEpIDw8IGZsb2F0X2lu Zm88VD46OnNpZ25pZmljYW5kX2JpdHMpOworLSAgfSBlbHNlIHsKKy0gICAgLy8gU3Vibm9ybWFs IGNhc2U7IHRoZSBpbnRlcnZhbCBpcyBhbHdheXMgcmVndWxhci4KKy0gICAgaWYgKHNpZ25pZmlj YW5kID09IDApIHJldHVybiB7MCwgMH07CistICAgIGV4cG9uZW50ID0gZmxvYXRfaW5mbzxUPjo6 bWluX2V4cG9uZW50IC0gZmxvYXRfaW5mbzxUPjo6c2lnbmlmaWNhbmRfYml0czsKKy0gIH0KKy0K Ky0gIGNvbnN0IGJvb2wgaW5jbHVkZV9sZWZ0X2VuZHBvaW50ID0gKHNpZ25pZmljYW5kICUgMiA9 PSAwKTsKKy0gIGNvbnN0IGJvb2wgaW5jbHVkZV9yaWdodF9lbmRwb2ludCA9IGluY2x1ZGVfbGVm dF9lbmRwb2ludDsKKy0KKy0gIC8vIENvbXB1dGUgayBhbmQgYmV0YS4KKy0gIGNvbnN0IGludCBt aW51c19rID0gZmxvb3JfbG9nMTBfcG93MihleHBvbmVudCkgLSBmbG9hdF9pbmZvPFQ+OjprYXBw YTsKKy0gIGNvbnN0IGNhY2hlX2VudHJ5X3R5cGUgY2FjaGUgPSBjYWNoZV9hY2Nlc3NvcjxUPjo6 Z2V0X2NhY2hlZF9wb3dlcigtbWludXNfayk7CistICBjb25zdCBpbnQgYmV0YV9taW51c18xID0g ZXhwb25lbnQgKyBmbG9vcl9sb2cyX3BvdzEwKC1taW51c19rKTsKKy0KKy0gIC8vIENvbXB1dGUg emkgYW5kIGRlbHRhaQorLSAgLy8gMTBea2FwcGEgPD0gZGVsdGFpIDwgMTBeKGthcHBhICsgMSkK Ky0gIGNvbnN0IHVpbnQzMl90IGRlbHRhaSA9IGNhY2hlX2FjY2Vzc29yPFQ+Ojpjb21wdXRlX2Rl bHRhKGNhY2hlLCBiZXRhX21pbnVzXzEpOworLSAgY29uc3QgY2Fycmllcl91aW50IHR3b19mYyA9 IHNpZ25pZmljYW5kIDw8IDE7CistICBjb25zdCBjYXJyaWVyX3VpbnQgdHdvX2ZyID0gdHdvX2Zj IHwgMTsKKy0gIGNvbnN0IGNhcnJpZXJfdWludCB6aSA9CistICAgICAgY2FjaGVfYWNjZXNzb3I8 VD46OmNvbXB1dGVfbXVsKHR3b19mciA8PCBiZXRhX21pbnVzXzEsIGNhY2hlKTsKKy0KKy0gIC8v IFN0ZXAgMjogVHJ5IGxhcmdlciBkaXZpc29yOyByZW1vdmUgdHJhaWxpbmcgemVyb3MgaWYgbmVj ZXNzYXJ5CistCistICAvLyBVc2luZyBhbiB1cHBlciBib3VuZCBvbiB6aSwgd2UgbWlnaHQgYmUg YWJsZSB0byBvcHRpbWl6ZSB0aGUgZGl2aXNpb24KKy0gIC8vIGJldHRlciB0aGFuIHRoZSBjb21w aWxlcjsgd2UgYXJlIGNvbXB1dGluZyB6aSAvIGJpZ19kaXZpc29yIGhlcmUKKy0gIGRlY2ltYWxf ZnA8VD4gcmV0X3ZhbHVlOworLSAgcmV0X3ZhbHVlLnNpZ25pZmljYW5kID0gZGl2aWRlX2J5XzEw X3RvX2thcHBhX3BsdXNfMSh6aSk7CistICB1aW50MzJfdCByID0gc3RhdGljX2Nhc3Q8dWludDMy X3Q+KHppIC0gZmxvYXRfaW5mbzxUPjo6YmlnX2Rpdmlzb3IgKgorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRfdmFsdWUuc2lnbmlmaWNhbmQpOworLQor LSAgaWYgKHIgPiBkZWx0YWkpIHsKKy0gICAgZ290byBzbWFsbF9kaXZpc29yX2Nhc2VfbGFiZWw7 CistICB9IGVsc2UgaWYgKHIgPCBkZWx0YWkpIHsKKy0gICAgLy8gRXhjbHVkZSB0aGUgcmlnaHQg ZW5kcG9pbnQgaWYgbmVjZXNzYXJ5CistICAgIGlmIChyID09IDAgJiYgIWluY2x1ZGVfcmlnaHRf ZW5kcG9pbnQgJiYKKy0gICAgICAgIGlzX2VuZHBvaW50X2ludGVnZXI8VD4odHdvX2ZyLCBleHBv bmVudCwgbWludXNfaykpIHsKKy0gICAgICAtLXJldF92YWx1ZS5zaWduaWZpY2FuZDsKKy0gICAg ICByID0gZmxvYXRfaW5mbzxUPjo6YmlnX2Rpdmlzb3I7CistICAgICAgZ290byBzbWFsbF9kaXZp c29yX2Nhc2VfbGFiZWw7CistICAgIH0KKy0gIH0gZWxzZSB7CistICAgIC8vIHIgPT0gZGVsdGFp OyBjb21wYXJlIGZyYWN0aW9uYWwgcGFydHMKKy0gICAgLy8gQ2hlY2sgY29uZGl0aW9ucyBpbiB0 aGUgb3JkZXIgZGlmZmVyZW50IGZyb20gdGhlIHBhcGVyCistICAgIC8vIHRvIHRha2UgYWR2YW50 YWdlIG9mIHNob3J0LWNpcmN1aXRpbmcKKy0gICAgY29uc3QgY2Fycmllcl91aW50IHR3b19mbCA9 IHR3b19mYyAtIDE7CistICAgIGlmICgoIWluY2x1ZGVfbGVmdF9lbmRwb2ludCB8fAorLSAgICAg ICAgICFpc19lbmRwb2ludF9pbnRlZ2VyPFQ+KHR3b19mbCwgZXhwb25lbnQsIG1pbnVzX2spKSAm JgorLSAgICAgICAgIWNhY2hlX2FjY2Vzc29yPFQ+Ojpjb21wdXRlX211bF9wYXJpdHkodHdvX2Zs LCBjYWNoZSwgYmV0YV9taW51c18xKSkgeworLSAgICAgIGdvdG8gc21hbGxfZGl2aXNvcl9jYXNl X2xhYmVsOworLSAgICB9CistICB9CistICByZXRfdmFsdWUuZXhwb25lbnQgPSBtaW51c19rICsg ZmxvYXRfaW5mbzxUPjo6a2FwcGEgKyAxOworLQorLSAgLy8gV2UgbWF5IG5lZWQgdG8gcmVtb3Zl IHRyYWlsaW5nIHplcm9zCistICByZXRfdmFsdWUuZXhwb25lbnQgKz0gcmVtb3ZlX3RyYWlsaW5n X3plcm9zKHJldF92YWx1ZS5zaWduaWZpY2FuZCk7CistICByZXR1cm4gcmV0X3ZhbHVlOworLQor LSAgLy8gU3RlcCAzOiBGaW5kIHRoZSBzaWduaWZpY2FuZCB3aXRoIHRoZSBzbWFsbGVyIGRpdmlz b3IKKy0KKy1zbWFsbF9kaXZpc29yX2Nhc2VfbGFiZWw6CistICByZXRfdmFsdWUuc2lnbmlmaWNh bmQgKj0gMTA7CistICByZXRfdmFsdWUuZXhwb25lbnQgPSBtaW51c19rICsgZmxvYXRfaW5mbzxU Pjo6a2FwcGE7CistCistICBjb25zdCB1aW50MzJfdCBtYXNrID0gKDF1IDw8IGZsb2F0X2luZm88 VD46OmthcHBhKSAtIDE7CistICBhdXRvIGRpc3QgPSByIC0gKGRlbHRhaSAvIDIpICsgKGZsb2F0 X2luZm88VD46OnNtYWxsX2Rpdmlzb3IgLyAyKTsKKy0KKy0gIC8vIElzIGRpc3QgZGl2aXNpYmxl IGJ5IDJea2FwcGE/CistICBpZiAoKGRpc3QgJiBtYXNrKSA9PSAwKSB7CistICAgIGNvbnN0IGJv b2wgYXBwcm94X3lfcGFyaXR5ID0KKy0gICAgICAgICgoZGlzdCBeIChmbG9hdF9pbmZvPFQ+Ojpz bWFsbF9kaXZpc29yIC8gMikpICYgMSkgIT0gMDsKKy0gICAgZGlzdCA+Pj0gZmxvYXRfaW5mbzxU Pjo6a2FwcGE7CistCistICAgIC8vIElzIGRpc3QgZGl2aXNpYmxlIGJ5IDVea2FwcGE/CistICAg IGlmIChjaGVja19kaXZpc2liaWxpdHlfYW5kX2RpdmlkZV9ieV9wb3c1PGZsb2F0X2luZm88VD46 OmthcHBhPihkaXN0KSkgeworLSAgICAgIHJldF92YWx1ZS5zaWduaWZpY2FuZCArPSBkaXN0Owor LQorLSAgICAgIC8vIENoZWNrIHpeKGYpID49IGVwc2lsb25eKGYpCistICAgICAgLy8gV2UgaGF2 ZSBlaXRoZXIgeWkgPT0gemkgLSBlcHNpbG9uaSBvciB5aSA9PSAoemkgLSBlcHNpbG9uaSkgLSAx LAorLSAgICAgIC8vIHdoZXJlIHlpID09IHppIC0gZXBzaWxvbmkgaWYgYW5kIG9ubHkgaWYgel4o ZikgPj0gZXBzaWxvbl4oZikKKy0gICAgICAvLyBTaW5jZSB0aGVyZSBhcmUgb25seSAyIHBvc3Np YmlsaXRpZXMsIHdlIG9ubHkgbmVlZCB0byBjYXJlIGFib3V0IHRoZQorLSAgICAgIC8vIHBhcml0 eS4gQWxzbywgemkgYW5kIHIgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcGFyaXR5IHNpbmNlIHRoZSBk aXZpc29yCistICAgICAgLy8gaXMgYW4gZXZlbiBudW1iZXIKKy0gICAgICBpZiAoY2FjaGVfYWNj ZXNzb3I8VD46OmNvbXB1dGVfbXVsX3Bhcml0eSh0d29fZmMsIGNhY2hlLCBiZXRhX21pbnVzXzEp ICE9CistICAgICAgICAgIGFwcHJveF95X3Bhcml0eSkgeworLSAgICAgICAgLS1yZXRfdmFsdWUu c2lnbmlmaWNhbmQ7CistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIC8vIElmIHpeKGYpID49IGVw c2lsb25eKGYpLCB3ZSBtaWdodCBoYXZlIGEgdGllCistICAgICAgICAvLyB3aGVuIHpeKGYpID09 IGVwc2lsb25eKGYpLCBvciBlcXVpdmFsZW50bHksIHdoZW4geSBpcyBhbiBpbnRlZ2VyCistICAg ICAgICBpZiAoaXNfY2VudGVyX2ludGVnZXI8VD4odHdvX2ZjLCBleHBvbmVudCwgbWludXNfaykp IHsKKy0gICAgICAgICAgcmV0X3ZhbHVlLnNpZ25pZmljYW5kID0gcmV0X3ZhbHVlLnNpZ25pZmlj YW5kICUgMiA9PSAwCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJl dF92YWx1ZS5zaWduaWZpY2FuZAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiByZXRfdmFsdWUuc2lnbmlmaWNhbmQgLSAxOworLSAgICAgICAgfQorLSAgICAgIH0KKy0g ICAgfQorLSAgICAvLyBJcyBkaXN0IG5vdCBkaXZpc2libGUgYnkgNV5rYXBwYT8KKy0gICAgZWxz ZSB7CistICAgICAgcmV0X3ZhbHVlLnNpZ25pZmljYW5kICs9IGRpc3Q7CistICAgIH0KKy0gIH0K Ky0gIC8vIElzIGRpc3Qgbm90IGRpdmlzaWJsZSBieSAyXmthcHBhPworLSAgZWxzZSB7CistICAg IC8vIFNpbmNlIHdlIGtub3cgZGlzdCBpcyBzbWFsbCwgd2UgbWlnaHQgYmUgYWJsZSB0byBvcHRp bWl6ZSB0aGUgZGl2aXNpb24KKy0gICAgLy8gYmV0dGVyIHRoYW4gdGhlIGNvbXBpbGVyOyB3ZSBh cmUgY29tcHV0aW5nIGRpc3QgLyBzbWFsbF9kaXZpc29yIGhlcmUKKy0gICAgcmV0X3ZhbHVlLnNp Z25pZmljYW5kICs9CistICAgICAgICBzbWFsbF9kaXZpc2lvbl9ieV9wb3cxMDxmbG9hdF9pbmZv PFQ+OjprYXBwYT4oZGlzdCk7CistICB9CistICByZXR1cm4gcmV0X3ZhbHVlOworLX0KKy19ICAv LyBuYW1lc3BhY2UgZHJhZ29uYm94CistCistLy8gRm9ybWF0cyBhIGZsb2F0aW5nLXBvaW50IG51 bWJlciB1c2luZyBhIHZhcmlhdGlvbiBvZiB0aGUgRml4ZWQtUHJlY2lzaW9uCistLy8gUG9zaXRp dmUgRmxvYXRpbmctUG9pbnQgUHJpbnRvdXQgKChGUFApXjIpIGFsZ29yaXRobSBieSBTdGVlbGUg JiBXaGl0ZToKKy0vLyBodHRwczovL2ZtdC5kZXYvcGFwZXJzL3AzNzItc3RlZWxlLnBkZi4KKy1G TVRfQ09OU1RFWFBSMjAgaW5saW5lIHZvaWQgZm9ybWF0X2RyYWdvbihmcCB2YWx1ZSwgYm9vbCBp c19wcmVkZWNlc3Nvcl9jbG9zZXIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IG51bV9kaWdpdHMsIGJ1ZmZlcjxjaGFyPiYgYnVmLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgZXhwMTApIHsKKy0gIGJpZ2ludCBu dW1lcmF0b3I7ICAgIC8vIDIgKiBSIGluIChGUFApXjIuCistICBiaWdpbnQgZGVub21pbmF0b3I7 ICAvLyAyICogUyBpbiAoRlBQKV4yLgorLSAgLy8gbG93ZXIgYW5kIHVwcGVyIGFyZSBkaWZmZXJl bmNlcyBiZXR3ZWVuIHZhbHVlIGFuZCBjb3JyZXNwb25kaW5nIGJvdW5kYXJpZXMuCistICBiaWdp bnQgbG93ZXI7ICAgICAgICAgICAgIC8vIChNXi0gaW4gKEZQUCleMikuCistICBiaWdpbnQgdXBw ZXJfc3RvcmU7ICAgICAgIC8vIHVwcGVyJ3MgdmFsdWUgaWYgZGlmZmVyZW50IGZyb20gbG93ZXIu CistICBiaWdpbnQqIHVwcGVyID0gbnVsbHB0cjsgIC8vIChNXisgaW4gKEZQUCleMikuCistICAv LyBTaGlmdCBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGJ5IGFuIGV4dHJhIGJpdCBvciB0d28g KGlmIGxvd2VyIGJvdW5kYXJ5CistICAvLyBpcyBjbG9zZXIpIHRvIG1ha2UgbG93ZXIgYW5kIHVw cGVyIGludGVnZXJzLiBUaGlzIGVsaW1pbmF0ZXMgbXVsdGlwbGljYXRpb24KKy0gIC8vIGJ5IDIg ZHVyaW5nIGxhdGVyIGNvbXB1dGF0aW9ucy4KKy0gIGludCBzaGlmdCA9IGlzX3ByZWRlY2Vzc29y X2Nsb3NlciA/IDIgOiAxOworLSAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSB2YWx1ZS5mIDw8IHNo aWZ0OworLSAgaWYgKHZhbHVlLmUgPj0gMCkgeworLSAgICBudW1lcmF0b3IuYXNzaWduKHNpZ25p ZmljYW5kKTsKKy0gICAgbnVtZXJhdG9yIDw8PSB2YWx1ZS5lOworLSAgICBsb3dlci5hc3NpZ24o MSk7CistICAgIGxvd2VyIDw8PSB2YWx1ZS5lOworLSAgICBpZiAoc2hpZnQgIT0gMSkgeworLSAg ICAgIHVwcGVyX3N0b3JlLmFzc2lnbigxKTsKKy0gICAgICB1cHBlcl9zdG9yZSA8PD0gdmFsdWUu ZSArIDE7CistICAgICAgdXBwZXIgPSAmdXBwZXJfc3RvcmU7CistICAgIH0KKy0gICAgZGVub21p bmF0b3IuYXNzaWduX3BvdzEwKGV4cDEwKTsKKy0gICAgZGVub21pbmF0b3IgPDw9IHNoaWZ0Owor LSAgfSBlbHNlIGlmIChleHAxMCA8IDApIHsKKy0gICAgbnVtZXJhdG9yLmFzc2lnbl9wb3cxMCgt ZXhwMTApOworLSAgICBsb3dlci5hc3NpZ24obnVtZXJhdG9yKTsKKy0gICAgaWYgKHNoaWZ0ICE9 IDEpIHsKKy0gICAgICB1cHBlcl9zdG9yZS5hc3NpZ24obnVtZXJhdG9yKTsKKy0gICAgICB1cHBl cl9zdG9yZSA8PD0gMTsKKy0gICAgICB1cHBlciA9ICZ1cHBlcl9zdG9yZTsKKy0gICAgfQorLSAg ICBudW1lcmF0b3IgKj0gc2lnbmlmaWNhbmQ7CistICAgIGRlbm9taW5hdG9yLmFzc2lnbigxKTsK Ky0gICAgZGVub21pbmF0b3IgPDw9IHNoaWZ0IC0gdmFsdWUuZTsKKy0gIH0gZWxzZSB7CistICAg IG51bWVyYXRvci5hc3NpZ24oc2lnbmlmaWNhbmQpOworLSAgICBkZW5vbWluYXRvci5hc3NpZ25f cG93MTAoZXhwMTApOworLSAgICBkZW5vbWluYXRvciA8PD0gc2hpZnQgLSB2YWx1ZS5lOworLSAg ICBsb3dlci5hc3NpZ24oMSk7CistICAgIGlmIChzaGlmdCAhPSAxKSB7CistICAgICAgdXBwZXJf c3RvcmUuYXNzaWduKDFVTEwgPDwgMSk7CistICAgICAgdXBwZXIgPSAmdXBwZXJfc3RvcmU7Cist ICAgIH0KKy0gIH0KKy0gIC8vIEludmFyaWFudDogdmFsdWUgPT0gKG51bWVyYXRvciAvIGRlbm9t aW5hdG9yKSAqIHBvdygxMCwgZXhwMTApLgorLSAgaWYgKG51bV9kaWdpdHMgPCAwKSB7CistICAg IC8vIEdlbmVyYXRlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbi4KKy0gICAgaWYgKCF1cHBl cikgdXBwZXIgPSAmbG93ZXI7CistICAgIGJvb2wgZXZlbiA9ICh2YWx1ZS5mICYgMSkgPT0gMDsK Ky0gICAgbnVtX2RpZ2l0cyA9IDA7CistICAgIGNoYXIqIGRhdGEgPSBidWYuZGF0YSgpOworLSAg ICBmb3IgKDs7KSB7CistICAgICAgaW50IGRpZ2l0ID0gbnVtZXJhdG9yLmRpdm1vZF9hc3NpZ24o ZGVub21pbmF0b3IpOworLSAgICAgIGJvb2wgbG93ID0gY29tcGFyZShudW1lcmF0b3IsIGxvd2Vy KSAtIGV2ZW4gPCAwOyAgLy8gbnVtZXJhdG9yIDxbPV0gbG93ZXIuCistICAgICAgLy8gbnVtZXJh dG9yICsgdXBwZXIgPls9XSBwb3cxMDoKKy0gICAgICBib29sIGhpZ2ggPSBhZGRfY29tcGFyZShu dW1lcmF0b3IsICp1cHBlciwgZGVub21pbmF0b3IpICsgZXZlbiA+IDA7CistICAgICAgZGF0YVtu dW1fZGlnaXRzKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZGlnaXQpOworLSAgICAgIGlm IChsb3cgfHwgaGlnaCkgeworLSAgICAgICAgaWYgKCFsb3cpIHsKKy0gICAgICAgICAgKytkYXRh W251bV9kaWdpdHMgLSAxXTsKKy0gICAgICAgIH0gZWxzZSBpZiAoaGlnaCkgeworLSAgICAgICAg ICBpbnQgcmVzdWx0ID0gYWRkX2NvbXBhcmUobnVtZXJhdG9yLCBudW1lcmF0b3IsIGRlbm9taW5h dG9yKTsKKy0gICAgICAgICAgLy8gUm91bmQgaGFsZiB0byBldmVuLgorLSAgICAgICAgICBpZiAo cmVzdWx0ID4gMCB8fCAocmVzdWx0ID09IDAgJiYgKGRpZ2l0ICUgMikgIT0gMCkpCistICAgICAg ICAgICAgKytkYXRhW251bV9kaWdpdHMgLSAxXTsKKy0gICAgICAgIH0KKy0gICAgICAgIGJ1Zi50 cnlfcmVzaXplKHRvX3Vuc2lnbmVkKG51bV9kaWdpdHMpKTsKKy0gICAgICAgIGV4cDEwIC09IG51 bV9kaWdpdHMgLSAxOworLSAgICAgICAgcmV0dXJuOworLSAgICAgIH0KKy0gICAgICBudW1lcmF0 b3IgKj0gMTA7CistICAgICAgbG93ZXIgKj0gMTA7CistICAgICAgaWYgKHVwcGVyICE9ICZsb3dl cikgKnVwcGVyICo9IDEwOworLSAgICB9CistICB9CistICAvLyBHZW5lcmF0ZSB0aGUgZ2l2ZW4g bnVtYmVyIG9mIGRpZ2l0cy4KKy0gIGV4cDEwIC09IG51bV9kaWdpdHMgLSAxOworLSAgaWYgKG51 bV9kaWdpdHMgPT0gMCkgeworLSAgICBkZW5vbWluYXRvciAqPSAxMDsKKy0gICAgYXV0byBkaWdp dCA9IGFkZF9jb21wYXJlKG51bWVyYXRvciwgbnVtZXJhdG9yLCBkZW5vbWluYXRvcikgPiAwID8g JzEnIDogJzAnOworLSAgICBidWYucHVzaF9iYWNrKGRpZ2l0KTsKKy0gICAgcmV0dXJuOworLSAg fQorLSAgYnVmLnRyeV9yZXNpemUodG9fdW5zaWduZWQobnVtX2RpZ2l0cykpOworLSAgZm9yIChp bnQgaSA9IDA7IGkgPCBudW1fZGlnaXRzIC0gMTsgKytpKSB7CistICAgIGludCBkaWdpdCA9IG51 bWVyYXRvci5kaXZtb2RfYXNzaWduKGRlbm9taW5hdG9yKTsKKy0gICAgYnVmW2ldID0gc3RhdGlj X2Nhc3Q8Y2hhcj4oJzAnICsgZGlnaXQpOworLSAgICBudW1lcmF0b3IgKj0gMTA7CistICB9Cist ICBpbnQgZGlnaXQgPSBudW1lcmF0b3IuZGl2bW9kX2Fzc2lnbihkZW5vbWluYXRvcik7CistICBh dXRvIHJlc3VsdCA9IGFkZF9jb21wYXJlKG51bWVyYXRvciwgbnVtZXJhdG9yLCBkZW5vbWluYXRv cik7CistICBpZiAocmVzdWx0ID4gMCB8fCAocmVzdWx0ID09IDAgJiYgKGRpZ2l0ICUgMikgIT0g MCkpIHsKKy0gICAgaWYgKGRpZ2l0ID09IDkpIHsKKy0gICAgICBjb25zdCBhdXRvIG92ZXJmbG93 ID0gJzAnICsgMTA7CistICAgICAgYnVmW251bV9kaWdpdHMgLSAxXSA9IG92ZXJmbG93OworLSAg ICAgIC8vIFByb3BhZ2F0ZSB0aGUgY2FycnkuCistICAgICAgZm9yIChpbnQgaSA9IG51bV9kaWdp dHMgLSAxOyBpID4gMCAmJiBidWZbaV0gPT0gb3ZlcmZsb3c7IC0taSkgeworLSAgICAgICAgYnVm W2ldID0gJzAnOworLSAgICAgICAgKytidWZbaSAtIDFdOworLSAgICAgIH0KKy0gICAgICBpZiAo YnVmWzBdID09IG92ZXJmbG93KSB7CistICAgICAgICBidWZbMF0gPSAnMSc7CistICAgICAgICAr K2V4cDEwOworLSAgICAgIH0KKy0gICAgICByZXR1cm47CistICAgIH0KKy0gICAgKytkaWdpdDsK Ky0gIH0KKy0gIGJ1ZltudW1fZGlnaXRzIC0gMV0gPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBk aWdpdCk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBGbG9hdD4KKy1GTVRfSEVBREVSX09O TFlfQ09OU1RFWFBSMjAgaW50IGZvcm1hdF9mbG9hdChGbG9hdCB2YWx1ZSwgaW50IHByZWNpc2lv biwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9z cGVjcyBzcGVjcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBidWZmZXI8Y2hhcj4mIGJ1ZikgeworLSAgLy8gZmxvYXQgaXMgcGFzc2VkIGFzIGRvdWJsZSB0 byByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucy4KKy0gIHN0YXRpY19hc3NlcnQo IXN0ZDo6aXNfc2FtZTxGbG9hdCwgZmxvYXQ+Ojp2YWx1ZSwgIiIpOworLSAgRk1UX0FTU0VSVCh2 YWx1ZSA+PSAwLCAidmFsdWUgaXMgbmVnYXRpdmUiKTsKKy0KKy0gIGNvbnN0IGJvb2wgZml4ZWQg PSBzcGVjcy5mb3JtYXQgPT0gZmxvYXRfZm9ybWF0OjpmaXhlZDsKKy0gIGlmICh2YWx1ZSA8PSAw KSB7ICAvLyA8PSBpbnN0ZWFkIG9mID09IHRvIHNpbGVuY2UgYSB3YXJuaW5nLgorLSAgICBpZiAo cHJlY2lzaW9uIDw9IDAgfHwgIWZpeGVkKSB7CistICAgICAgYnVmLnB1c2hfYmFjaygnMCcpOwor LSAgICAgIHJldHVybiAwOworLSAgICB9CistICAgIGJ1Zi50cnlfcmVzaXplKHRvX3Vuc2lnbmVk KHByZWNpc2lvbikpOworLSAgICBmaWxsX24oYnVmLmRhdGEoKSwgcHJlY2lzaW9uLCAnMCcpOwor LSAgICByZXR1cm4gLXByZWNpc2lvbjsKKy0gIH0KKy0KKy0gIGlmIChzcGVjcy5mYWxsYmFjaykg cmV0dXJuIHNucHJpbnRmX2Zsb2F0KHZhbHVlLCBwcmVjaXNpb24sIHNwZWNzLCBidWYpOworLQor LSAgaWYgKCFpc19jb25zdGFudF9ldmFsdWF0ZWQoKSAmJiBwcmVjaXNpb24gPCAwKSB7CistICAg IC8vIFVzZSBEcmFnb25ib3ggZm9yIHRoZSBzaG9ydGVzdCBmb3JtYXQuCistICAgIGlmIChzcGVj cy5iaW5hcnkzMikgeworLSAgICAgIGF1dG8gZGVjID0gZHJhZ29uYm94Ojp0b19kZWNpbWFsKHN0 YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworLSAgICAgIHdyaXRlPGNoYXI+KGJ1ZmZlcl9hcHBl bmRlcjxjaGFyPihidWYpLCBkZWMuc2lnbmlmaWNhbmQpOworLSAgICAgIHJldHVybiBkZWMuZXhw b25lbnQ7CistICAgIH0KKy0gICAgYXV0byBkZWMgPSBkcmFnb25ib3g6OnRvX2RlY2ltYWwoc3Rh dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOworLSAgICB3cml0ZTxjaGFyPihidWZmZXJfYXBwZW5k ZXI8Y2hhcj4oYnVmKSwgZGVjLnNpZ25pZmljYW5kKTsKKy0gICAgcmV0dXJuIGRlYy5leHBvbmVu dDsKKy0gIH0KKy0KKy0gIGludCBleHAgPSAwOworLSAgYm9vbCB1c2VfZHJhZ29uID0gdHJ1ZTsK Ky0gIGlmIChpc19mYXN0X2Zsb2F0PEZsb2F0PigpKSB7CistICAgIC8vIFVzZSBHcmlzdSArIERy YWdvbjQgZm9yIHRoZSBnaXZlbiBwcmVjaXNpb246CistICAgIC8vIGh0dHBzOi8vd3d3LmNzLnR1 ZnRzLmVkdS9+bnIvY3MyNTcvYXJjaGl2ZS9mbG9yaWFuLWxvaXRzY2gvcHJpbnRmLnBkZi4KKy0g ICAgY29uc3QgaW50IG1pbl9leHAgPSAtNjA7ICAvLyBhbHBoYSBpbiBHcmlzdS4KKy0gICAgaW50 IGNhY2hlZF9leHAxMCA9IDA7ICAgICAvLyBLIGluIEdyaXN1LgorLSAgICBmcCBub3JtYWxpemVk ID0gbm9ybWFsaXplKGZwKHZhbHVlKSk7CistICAgIGNvbnN0IGF1dG8gY2FjaGVkX3BvdyA9IGdl dF9jYWNoZWRfcG93ZXIoCistICAgICAgICBtaW5fZXhwIC0gKG5vcm1hbGl6ZWQuZSArIGZwOjpu dW1fc2lnbmlmaWNhbmRfYml0cyksIGNhY2hlZF9leHAxMCk7CistICAgIG5vcm1hbGl6ZWQgPSBu b3JtYWxpemVkICogY2FjaGVkX3BvdzsKKy0gICAgZ2VuX2RpZ2l0c19oYW5kbGVyIGhhbmRsZXJ7 YnVmLmRhdGEoKSwgMCwgcHJlY2lzaW9uLCAtY2FjaGVkX2V4cDEwLCBmaXhlZH07CistICAgIGlm IChncmlzdV9nZW5fZGlnaXRzKG5vcm1hbGl6ZWQsIDEsIGV4cCwgaGFuZGxlcikgIT0gZGlnaXRz OjplcnJvciAmJgorLSAgICAgICAgIWlzX2NvbnN0YW50X2V2YWx1YXRlZCgpKSB7CistICAgICAg ZXhwICs9IGhhbmRsZXIuZXhwMTA7CistICAgICAgYnVmLnRyeV9yZXNpemUodG9fdW5zaWduZWQo aGFuZGxlci5zaXplKSk7CistICAgICAgdXNlX2RyYWdvbiA9IGZhbHNlOworLSAgICB9IGVsc2Ug eworLSAgICAgIGV4cCArPSBoYW5kbGVyLnNpemUgLSBjYWNoZWRfZXhwMTAgLSAxOworLSAgICAg IHByZWNpc2lvbiA9IGhhbmRsZXIucHJlY2lzaW9uOworLSAgICB9CistICB9CistICBpZiAodXNl X2RyYWdvbikgeworLSAgICBhdXRvIGYgPSBmcCgpOworLSAgICBib29sIGlzX3ByZWRlY2Vzc29y X2Nsb3NlciA9CistICAgICAgICBzcGVjcy5iaW5hcnkzMiA/IGYuYXNzaWduKHN0YXRpY19jYXN0 PGZsb2F0Pih2YWx1ZSkpIDogZi5hc3NpZ24odmFsdWUpOworLSAgICAvLyBMaW1pdCBwcmVjaXNp b24gdG8gdGhlIG1heGltdW0gcG9zc2libGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBp bgorLSAgICAvLyBhbiBJRUVFNzU0IGRvdWJsZSBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gZ2Vu ZXJhdGUgemVyb3MuCistICAgIGNvbnN0IGludCBtYXhfZG91YmxlX2RpZ2l0cyA9IDc2NzsKKy0g ICAgaWYgKHByZWNpc2lvbiA+IG1heF9kb3VibGVfZGlnaXRzKSBwcmVjaXNpb24gPSBtYXhfZG91 YmxlX2RpZ2l0czsKKy0gICAgZm9ybWF0X2RyYWdvbihmLCBpc19wcmVkZWNlc3Nvcl9jbG9zZXIs IHByZWNpc2lvbiwgYnVmLCBleHApOworLSAgfQorLSAgaWYgKCFmaXhlZCAmJiAhc3BlY3Muc2hv d3BvaW50KSB7CistICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy4KKy0gICAgYXV0byBudW1f ZGlnaXRzID0gYnVmLnNpemUoKTsKKy0gICAgd2hpbGUgKG51bV9kaWdpdHMgPiAwICYmIGJ1Zltu dW1fZGlnaXRzIC0gMV0gPT0gJzAnKSB7CistICAgICAgLS1udW1fZGlnaXRzOworLSAgICAgICsr ZXhwOworLSAgICB9CistICAgIGJ1Zi50cnlfcmVzaXplKG51bV9kaWdpdHMpOworLSAgfQorLSAg cmV0dXJuIGV4cDsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistaW50IHNucHJpbnRm X2Zsb2F0KFQgdmFsdWUsIGludCBwcmVjaXNpb24sIGZsb2F0X3NwZWNzIHNwZWNzLAorLSAgICAg ICAgICAgICAgICAgICBidWZmZXI8Y2hhcj4mIGJ1ZikgeworLSAgLy8gQnVmZmVyIGNhcGFjaXR5 IG11c3QgYmUgbm9uLXplcm8sIG90aGVyd2lzZSBNU1ZDJ3MgdnNucHJpbnRmX3Mgd2lsbCBmYWls LgorLSAgRk1UX0FTU0VSVChidWYuY2FwYWNpdHkoKSA+IGJ1Zi5zaXplKCksICJlbXB0eSBidWZm ZXIiKTsKKy0gIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfc2FtZTxULCBmbG9hdD46OnZhbHVlLCAi Iik7CistCistICAvLyBTdWJ0cmFjdCAxIHRvIGFjY291bnQgZm9yIHRoZSBkaWZmZXJlbmNlIGlu IHByZWNpc2lvbiBzaW5jZSB3ZSB1c2UgJWUgZm9yCistICAvLyBib3RoIGdlbmVyYWwgYW5kIGV4 cG9uZW50IGZvcm1hdC4KKy0gIGlmIChzcGVjcy5mb3JtYXQgPT0gZmxvYXRfZm9ybWF0OjpnZW5l cmFsIHx8CistICAgICAgc3BlY3MuZm9ybWF0ID09IGZsb2F0X2Zvcm1hdDo6ZXhwKQorLSAgICBw cmVjaXNpb24gPSAocHJlY2lzaW9uID49IDAgPyBwcmVjaXNpb24gOiA2KSAtIDE7CistCistICAv LyBCdWlsZCB0aGUgZm9ybWF0IHN0cmluZy4KKy0gIGVudW0geyBtYXhfZm9ybWF0X3NpemUgPSA3 IH07ICAvLyBUaGUgbG9uZ2VzdCBmb3JtYXQgaXMgIiUjLipMZSIuCistICBjaGFyIGZvcm1hdFtt YXhfZm9ybWF0X3NpemVdOworLSAgY2hhciogZm9ybWF0X3B0ciA9IGZvcm1hdDsKKy0gICpmb3Jt YXRfcHRyKysgPSAnJSc7CistICBpZiAoc3BlY3Muc2hvd3BvaW50ICYmIHNwZWNzLmZvcm1hdCA9 PSBmbG9hdF9mb3JtYXQ6OmhleCkgKmZvcm1hdF9wdHIrKyA9ICcjJzsKKy0gIGlmIChwcmVjaXNp b24gPj0gMCkgeworLSAgICAqZm9ybWF0X3B0cisrID0gJy4nOworLSAgICAqZm9ybWF0X3B0cisr ID0gJyonOworLSAgfQorLSAgaWYgKHN0ZDo6aXNfc2FtZTxULCBsb25nIGRvdWJsZT4oKSkgKmZv cm1hdF9wdHIrKyA9ICdMJzsKKy0gICpmb3JtYXRfcHRyKysgPSBzcGVjcy5mb3JtYXQgIT0gZmxv YXRfZm9ybWF0OjpoZXgKKy0gICAgICAgICAgICAgICAgICAgICAgPyAoc3BlY3MuZm9ybWF0ID09 IGZsb2F0X2Zvcm1hdDo6Zml4ZWQgPyAnZicgOiAnZScpCistICAgICAgICAgICAgICAgICAgICAg IDogKHNwZWNzLnVwcGVyID8gJ0EnIDogJ2EnKTsKKy0gICpmb3JtYXRfcHRyID0gJ1wwJzsKKy0K Ky0gIC8vIEZvcm1hdCB1c2luZyBzbnByaW50Zi4KKy0gIGF1dG8gb2Zmc2V0ID0gYnVmLnNpemUo KTsKKy0gIGZvciAoOzspIHsKKy0gICAgYXV0byBiZWdpbiA9IGJ1Zi5kYXRhKCkgKyBvZmZzZXQ7 CistICAgIGF1dG8gY2FwYWNpdHkgPSBidWYuY2FwYWNpdHkoKSAtIG9mZnNldDsKKy0jaWZkZWYg Rk1UX0ZVWloKKy0gICAgaWYgKHByZWNpc2lvbiA+IDEwMDAwMCkKKy0gICAgICB0aHJvdyBzdGQ6 OnJ1bnRpbWVfZXJyb3IoCistICAgICAgICAgICJmdXp6IG1vZGUgLSBhdm9pZCBsYXJnZSBhbGxv Y2F0aW9uIGluc2lkZSBzbnByaW50ZiIpOworLSNlbmRpZgorLSAgICAvLyBTdXBwcmVzcyB0aGUg d2FybmluZyBhYm91dCBhIG5vbmxpdGVyYWwgZm9ybWF0IHN0cmluZy4KKy0gICAgLy8gQ2Fubm90 IHVzZSBhdXRvIGJlY2F1c2Ugb2YgYSBidWcgaW4gTWluR1cgKCMxNTMyKS4KKy0gICAgaW50ICgq c25wcmludGZfcHRyKShjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgLi4uKSA9IEZNVF9TTlBS SU5URjsKKy0gICAgaW50IHJlc3VsdCA9IHByZWNpc2lvbiA+PSAwCistICAgICAgICAgICAgICAg ICAgICAgPyBzbnByaW50Zl9wdHIoYmVnaW4sIGNhcGFjaXR5LCBmb3JtYXQsIHByZWNpc2lvbiwg dmFsdWUpCistICAgICAgICAgICAgICAgICAgICAgOiBzbnByaW50Zl9wdHIoYmVnaW4sIGNhcGFj aXR5LCBmb3JtYXQsIHZhbHVlKTsKKy0gICAgaWYgKHJlc3VsdCA8IDApIHsKKy0gICAgICAvLyBU aGUgYnVmZmVyIHdpbGwgZ3JvdyBleHBvbmVudGlhbGx5LgorLSAgICAgIGJ1Zi50cnlfcmVzZXJ2 ZShidWYuY2FwYWNpdHkoKSArIDEpOworLSAgICAgIGNvbnRpbnVlOworLSAgICB9CistICAgIGF1 dG8gc2l6ZSA9IHRvX3Vuc2lnbmVkKHJlc3VsdCk7CistICAgIC8vIFNpemUgZXF1YWwgdG8gY2Fw YWNpdHkgbWVhbnMgdGhhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIHRydW5jYXRlZC4KKy0gICAg aWYgKHNpemUgPj0gY2FwYWNpdHkpIHsKKy0gICAgICBidWYudHJ5X3Jlc2VydmUoc2l6ZSArIG9m ZnNldCArIDEpOyAgLy8gQWRkIDEgZm9yIHRoZSB0ZXJtaW5hdGluZyAnXDAnLgorLSAgICAgIGNv bnRpbnVlOworLSAgICB9CistICAgIGF1dG8gaXNfZGlnaXQgPSBbXShjaGFyIGMpIHsgcmV0dXJu IGMgPj0gJzAnICYmIGMgPD0gJzknOyB9OworLSAgICBpZiAoc3BlY3MuZm9ybWF0ID09IGZsb2F0 X2Zvcm1hdDo6Zml4ZWQpIHsKKy0gICAgICBpZiAocHJlY2lzaW9uID09IDApIHsKKy0gICAgICAg IGJ1Zi50cnlfcmVzaXplKHNpemUpOworLSAgICAgICAgcmV0dXJuIDA7CistICAgICAgfQorLSAg ICAgIC8vIEZpbmQgYW5kIHJlbW92ZSB0aGUgZGVjaW1hbCBwb2ludC4KKy0gICAgICBhdXRvIGVu ZCA9IGJlZ2luICsgc2l6ZSwgcCA9IGVuZDsKKy0gICAgICBkbyB7CistICAgICAgICAtLXA7Cist ICAgICAgfSB3aGlsZSAoaXNfZGlnaXQoKnApKTsKKy0gICAgICBpbnQgZnJhY3Rpb25fc2l6ZSA9 IHN0YXRpY19jYXN0PGludD4oZW5kIC0gcCAtIDEpOworLSAgICAgIHN0ZDo6bWVtbW92ZShwLCBw ICsgMSwgdG9fdW5zaWduZWQoZnJhY3Rpb25fc2l6ZSkpOworLSAgICAgIGJ1Zi50cnlfcmVzaXpl KHNpemUgLSAxKTsKKy0gICAgICByZXR1cm4gLWZyYWN0aW9uX3NpemU7CistICAgIH0KKy0gICAg aWYgKHNwZWNzLmZvcm1hdCA9PSBmbG9hdF9mb3JtYXQ6OmhleCkgeworLSAgICAgIGJ1Zi50cnlf cmVzaXplKHNpemUgKyBvZmZzZXQpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistICAgIC8v IEZpbmQgYW5kIHBhcnNlIHRoZSBleHBvbmVudC4KKy0gICAgYXV0byBlbmQgPSBiZWdpbiArIHNp emUsIGV4cF9wb3MgPSBlbmQ7CistICAgIGRvIHsKKy0gICAgICAtLWV4cF9wb3M7CistICAgIH0g d2hpbGUgKCpleHBfcG9zICE9ICdlJyk7CistICAgIGNoYXIgc2lnbiA9IGV4cF9wb3NbMV07Cist ICAgIEZNVF9BU1NFUlQoc2lnbiA9PSAnKycgfHwgc2lnbiA9PSAnLScsICIiKTsKKy0gICAgaW50 IGV4cCA9IDA7CistICAgIGF1dG8gcCA9IGV4cF9wb3MgKyAyOyAgLy8gU2tpcCAnZScgYW5kIHNp Z24uCistICAgIGRvIHsKKy0gICAgICBGTVRfQVNTRVJUKGlzX2RpZ2l0KCpwKSwgIiIpOworLSAg ICAgIGV4cCA9IGV4cCAqIDEwICsgKCpwKysgLSAnMCcpOworLSAgICB9IHdoaWxlIChwICE9IGVu ZCk7CistICAgIGlmIChzaWduID09ICctJykgZXhwID0gLWV4cDsKKy0gICAgaW50IGZyYWN0aW9u X3NpemUgPSAwOworLSAgICBpZiAoZXhwX3BvcyAhPSBiZWdpbiArIDEpIHsKKy0gICAgICAvLyBS ZW1vdmUgdHJhaWxpbmcgemVyb3MuCistICAgICAgYXV0byBmcmFjdGlvbl9lbmQgPSBleHBfcG9z IC0gMTsKKy0gICAgICB3aGlsZSAoKmZyYWN0aW9uX2VuZCA9PSAnMCcpIC0tZnJhY3Rpb25fZW5k OworLSAgICAgIC8vIE1vdmUgdGhlIGZyYWN0aW9uYWwgcGFydCBsZWZ0IHRvIGdldCByaWQgb2Yg dGhlIGRlY2ltYWwgcG9pbnQuCistICAgICAgZnJhY3Rpb25fc2l6ZSA9IHN0YXRpY19jYXN0PGlu dD4oZnJhY3Rpb25fZW5kIC0gYmVnaW4gLSAxKTsKKy0gICAgICBzdGQ6Om1lbW1vdmUoYmVnaW4g KyAxLCBiZWdpbiArIDIsIHRvX3Vuc2lnbmVkKGZyYWN0aW9uX3NpemUpKTsKKy0gICAgfQorLSAg ICBidWYudHJ5X3Jlc2l6ZSh0b191bnNpZ25lZChmcmFjdGlvbl9zaXplKSArIG9mZnNldCArIDEp OworLSAgICByZXR1cm4gZXhwIC0gZnJhY3Rpb25fc2l6ZTsKKy0gIH0KKy19CistfSAgLy8gbmFt ZXNwYWNlIGRldGFpbAorLQorLXRlbXBsYXRlIDw+IHN0cnVjdCBmb3JtYXR0ZXI8ZGV0YWlsOjpi aWdpbnQ+IHsKKy0gIEZNVF9DT05TVEVYUFIgZm9ybWF0X3BhcnNlX2NvbnRleHQ6Oml0ZXJhdG9y IHBhcnNlKAorLSAgICAgIGZvcm1hdF9wYXJzZV9jb250ZXh0JiBjdHgpIHsKKy0gICAgcmV0dXJu IGN0eC5iZWdpbigpOworLSAgfQorLQorLSAgZm9ybWF0X2NvbnRleHQ6Oml0ZXJhdG9yIGZvcm1h dChjb25zdCBkZXRhaWw6OmJpZ2ludCYgbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9ybWF0X2NvbnRleHQmIGN0eCkgeworLSAgICBhdXRvIG91dCA9IGN0eC5vdXQoKTsK Ky0gICAgYm9vbCBmaXJzdCA9IHRydWU7CistICAgIGZvciAoYXV0byBpID0gbi5iaWdpdHNfLnNp emUoKTsgaSA+IDA7IC0taSkgeworLSAgICAgIGF1dG8gdmFsdWUgPSBuLmJpZ2l0c19baSAtIDF1 XTsKKy0gICAgICBpZiAoZmlyc3QpIHsKKy0gICAgICAgIG91dCA9IGZvcm1hdF90byhvdXQsIEZN VF9TVFJJTkcoIns6eH0iKSwgdmFsdWUpOworLSAgICAgICAgZmlyc3QgPSBmYWxzZTsKKy0gICAg ICAgIGNvbnRpbnVlOworLSAgICAgIH0KKy0gICAgICBvdXQgPSBmb3JtYXRfdG8ob3V0LCBGTVRf U1RSSU5HKCJ7OjA4eH0iKSwgdmFsdWUpOworLSAgICB9CistICAgIGlmIChuLmV4cF8gPiAwKQor LSAgICAgIG91dCA9IGZvcm1hdF90byhvdXQsIEZNVF9TVFJJTkcoInB7fSIpLAorLSAgICAgICAg ICAgICAgICAgICAgICBuLmV4cF8gKiBkZXRhaWw6OmJpZ2ludDo6YmlnaXRfYml0cyk7CistICAg IHJldHVybiBvdXQ7CistICB9CistfTsKKy0KKy1GTVRfRlVOQyBkZXRhaWw6OnV0ZjhfdG9fdXRm MTY6OnV0ZjhfdG9fdXRmMTYoc3RyaW5nX3ZpZXcgcykgeworLSAgZm9yX2VhY2hfY29kZXBvaW50 KHMsIFt0aGlzXSh1aW50MzJfdCBjcCwgc3RyaW5nX3ZpZXcpIHsKKy0gICAgaWYgKGNwID09IGlu dmFsaWRfY29kZV9wb2ludCkgRk1UX1RIUk9XKHN0ZDo6cnVudGltZV9lcnJvcigiaW52YWxpZCB1 dGY4IikpOworLSAgICBpZiAoY3AgPD0gMHhGRkZGKSB7CistICAgICAgYnVmZmVyXy5wdXNoX2Jh Y2soc3RhdGljX2Nhc3Q8d2NoYXJfdD4oY3ApKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICBjcCAt PSAweDEwMDAwOworLSAgICAgIGJ1ZmZlcl8ucHVzaF9iYWNrKHN0YXRpY19jYXN0PHdjaGFyX3Q+ KDB4RDgwMCArIChjcCA+PiAxMCkpKTsKKy0gICAgICBidWZmZXJfLnB1c2hfYmFjayhzdGF0aWNf Y2FzdDx3Y2hhcl90PigweERDMDAgKyAoY3AgJiAweDNGRikpKTsKKy0gICAgfQorLSAgICByZXR1 cm4gdHJ1ZTsKKy0gIH0pOworLSAgYnVmZmVyXy5wdXNoX2JhY2soMCk7CistfQorLQorLUZNVF9G VU5DIHZvaWQgZm9ybWF0X3N5c3RlbV9lcnJvcihkZXRhaWw6OmJ1ZmZlcjxjaGFyPiYgb3V0LCBp bnQgZXJyb3JfY29kZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciogbWVzc2FnZSkgRk1UX05PRVhDRVBUIHsKKy0gIEZNVF9UUlkgeworLSAgICBhdXRvIGVj ID0gc3RkOjplcnJvcl9jb2RlKGVycm9yX2NvZGUsIHN0ZDo6Z2VuZXJpY19jYXRlZ29yeSgpKTsK Ky0gICAgd3JpdGUoc3RkOjpiYWNrX2luc2VydGVyKG91dCksIHN0ZDo6c3lzdGVtX2Vycm9yKGVj LCBtZXNzYWdlKS53aGF0KCkpOworLSAgICByZXR1cm47CistICB9CistICBGTVRfQ0FUQ0goLi4u KSB7fQorLSAgZm9ybWF0X2Vycm9yX2NvZGUob3V0LCBlcnJvcl9jb2RlLCBtZXNzYWdlKTsKKy19 CistCistRk1UX0ZVTkMgdm9pZCByZXBvcnRfc3lzdGVtX2Vycm9yKGludCBlcnJvcl9jb2RlLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlKSBG TVRfTk9FWENFUFQgeworLSAgcmVwb3J0X2Vycm9yKGZvcm1hdF9zeXN0ZW1fZXJyb3IsIGVycm9y X2NvZGUsIG1lc3NhZ2UpOworLX0KKy0KKy0vLyBERVBSRUNBVEVEIQorLS8vIFRoaXMgZnVuY3Rp b24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW5saW5lIGZvciBBQkkgY29tcGF0aWJpbGl0eS4K Ky1GTVRfRlVOQyB2b2lkIGRldGFpbDo6ZXJyb3JfaGFuZGxlcjo6b25fZXJyb3IoY29uc3QgY2hh ciogbWVzc2FnZSkgeworLSAgdGhyb3dfZm9ybWF0X2Vycm9yKG1lc3NhZ2UpOworLX0KKy0KKy1G TVRfRlVOQyBzdGQ6OnN0cmluZyB2Zm9ybWF0KHN0cmluZ192aWV3IGZtdCwgZm9ybWF0X2FyZ3Mg YXJncykgeworLSAgLy8gRG9uJ3Qgb3B0aW1pemUgdGhlICJ7fSIgY2FzZSB0byBrZWVwIHRoZSBi aW5hcnkgc2l6ZSBzbWFsbCBhbmQgYmVjYXVzZSBpdAorLSAgLy8gY2FuIGJlIGJldHRlciBvcHRp bWl6ZWQgaW4gZm10Ojpmb3JtYXQgYW55d2F5LgorLSAgYXV0byBidWZmZXIgPSBtZW1vcnlfYnVm ZmVyKCk7CistICBkZXRhaWw6OnZmb3JtYXRfdG8oYnVmZmVyLCBmbXQsIGFyZ3MpOworLSAgcmV0 dXJuIHRvX3N0cmluZyhidWZmZXIpOworLX0KKy0KKy0jaWZkZWYgX1dJTjMyCistbmFtZXNwYWNl IGRldGFpbCB7CistdXNpbmcgZHdvcmQgPSBjb25kaXRpb25hbF90PHNpemVvZihsb25nKSA9PSA0 LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZD47CistZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGlt cG9ydCkgaW50IF9fc3RkY2FsbCBXcml0ZUNvbnNvbGVXKCAgLy8KKy0gICAgdm9pZCosIGNvbnN0 IHZvaWQqLCBkd29yZCwgZHdvcmQqLCB2b2lkKik7CistfSAgLy8gbmFtZXNwYWNlIGRldGFpbAor LSNlbmRpZgorLQorLW5hbWVzcGFjZSBkZXRhaWwgeworLUZNVF9GVU5DIHZvaWQgcHJpbnQoc3Rk OjpGSUxFKiBmLCBzdHJpbmdfdmlldyB0ZXh0KSB7CistI2lmZGVmIF9XSU4zMgorLSAgYXV0byBm ZCA9IF9maWxlbm8oZik7CistICBpZiAoX2lzYXR0eShmZCkpIHsKKy0gICAgZGV0YWlsOjp1dGY4 X3RvX3V0ZjE2IHUxNihzdHJpbmdfdmlldyh0ZXh0LmRhdGEoKSwgdGV4dC5zaXplKCkpKTsKKy0g ICAgYXV0byB3cml0dGVuID0gZGV0YWlsOjpkd29yZCgpOworLSAgICBpZiAoZGV0YWlsOjpXcml0 ZUNvbnNvbGVXKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9nZXRfb3NmaGFuZGxlKGZkKSksCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2LmNfc3RyKCksIHN0YXRpY19jYXN0PHVp bnQzMl90Pih1MTYuc2l6ZSgpKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3Jp dHRlbiwgbnVsbHB0cikpIHsKKy0gICAgICByZXR1cm47CistICAgIH0KKy0gICAgLy8gRmFsbGJh Y2sgdG8gZndyaXRlIG9uIGZhaWx1cmUuIEl0IGNhbiBoYXBwZW4gaWYgdGhlIG91dHB1dCBoYXMg YmVlbgorLSAgICAvLyByZWRpcmVjdGVkIHRvIE5VTC4KKy0gIH0KKy0jZW5kaWYKKy0gIGRldGFp bDo6ZndyaXRlX2Z1bGx5KHRleHQuZGF0YSgpLCAxLCB0ZXh0LnNpemUoKSwgZik7CistfQorLX0g IC8vIG5hbWVzcGFjZSBkZXRhaWwKKy0KKy1GTVRfRlVOQyB2b2lkIHZwcmludChzdGQ6OkZJTEUq IGYsIHN0cmluZ192aWV3IGZvcm1hdF9zdHIsIGZvcm1hdF9hcmdzIGFyZ3MpIHsKKy0gIG1lbW9y eV9idWZmZXIgYnVmZmVyOworLSAgZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1ZmZlciwgZm9ybWF0X3N0 ciwgYXJncyk7CistICBkZXRhaWw6OnByaW50KGYsIHtidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6 ZSgpfSk7CistfQorLQorLSNpZmRlZiBfV0lOMzIKKy0vLyBQcmludCBhc3N1bWluZyBsZWdhY3kg KG5vbi1Vbmljb2RlKSBlbmNvZGluZy4KKy1GTVRfRlVOQyB2b2lkIGRldGFpbDo6dnByaW50X21v amliYWtlKHN0ZDo6RklMRSogZiwgc3RyaW5nX3ZpZXcgZm9ybWF0X3N0ciwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9hcmdzIGFyZ3MpIHsKKy0gIG1lbW9y eV9idWZmZXIgYnVmZmVyOworLSAgZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1ZmZlciwgZm9ybWF0X3N0 ciwKKy0gICAgICAgICAgICAgICAgICAgICBiYXNpY19mb3JtYXRfYXJnczxidWZmZXJfY29udGV4 dDxjaGFyPj4oYXJncykpOworLSAgZndyaXRlX2Z1bGx5KGJ1ZmZlci5kYXRhKCksIDEsIGJ1ZmZl ci5zaXplKCksIGYpOworLX0KKy0jZW5kaWYKKy0KKy1GTVRfRlVOQyB2b2lkIHZwcmludChzdHJp bmdfdmlldyBmb3JtYXRfc3RyLCBmb3JtYXRfYXJncyBhcmdzKSB7CistICB2cHJpbnQoc3Rkb3V0 LCBmb3JtYXRfc3RyLCBhcmdzKTsKKy19CistCistRk1UX0VORF9OQU1FU1BBQ0UKKy0KKy0jZW5k aWYgIC8vIEZNVF9GT1JNQVRfSU5MX0hfCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvZm10L2Zv cm1hdC5oIGIvaW5jbHVkZS9kcHAvZm10L2Zvcm1hdC5oCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKK2luZGV4IGVlNjk2NTEuLjAwMDAwMDAKKy0tLSBhL2luY2x1ZGUvZHBwL2ZtdC9mb3JtYXQu aAorKysrIC9kZXYvbnVsbAorQEAgLTEsMzEwNCArMCwwIEBACistLyoKKy0gRm9ybWF0dGluZyBs aWJyYXJ5IGZvciBDKysKKy0KKy0gQ29weXJpZ2h0IChjKSAyMDEyIC0gcHJlc2VudCwgVmljdG9y IFp2ZXJvdmljaAorLQorLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKy0gYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCistICJTb2Z0d2FyZSIpLCB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKy0g d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLAorLSBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKy0gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCistIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKy0KKy0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKy0gaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCistCistIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorLSBFWFBSRVNT IE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YKKy0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQKKy0gTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRQorLSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCistIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorLSBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU V0FSRS4KKy0KKy0gLS0tIE9wdGlvbmFsIGV4Y2VwdGlvbiB0byB0aGUgbGljZW5zZSAtLS0KKy0K Ky0gQXMgYW4gZXhjZXB0aW9uLCBpZiwgYXMgYSByZXN1bHQgb2YgeW91ciBjb21waWxpbmcgeW91 ciBzb3VyY2UgY29kZSwgcG9ydGlvbnMKKy0gb2YgdGhpcyBTb2Z0d2FyZSBhcmUgZW1iZWRkZWQg aW50byBhIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgZm9ybSBvZiBzdWNoCistIHNvdXJjZSBj b2RlLCB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBzdWNoIGVtYmVkZGVkIHBvcnRpb25zIGluIHN1Y2gg b2JqZWN0IGZvcm0KKy0gd2l0aG91dCBpbmNsdWRpbmcgdGhlIGFib3ZlIGNvcHlyaWdodCBhbmQg cGVybWlzc2lvbiBub3RpY2VzLgorLSAqLworLQorLSNpZm5kZWYgRk1UX0ZPUk1BVF9IXworLSNk ZWZpbmUgRk1UX0ZPUk1BVF9IXworLQorLSNpbmNsdWRlIDxjbWF0aD4gICAgICAgICAvLyBzdGQ6 OnNpZ25iaXQKKy0jaW5jbHVkZSA8Y3N0ZGludD4gICAgICAgLy8gdWludDMyX3QKKy0jaW5jbHVk ZSA8bGltaXRzPiAgICAgICAgLy8gc3RkOjpudW1lcmljX2xpbWl0cworLSNpbmNsdWRlIDxtZW1v cnk+ICAgICAgICAvLyBzdGQ6OnVuaW5pdGlhbGl6ZWRfY29weQorLSNpbmNsdWRlIDxzdGRleGNl cHQ+ICAgICAvLyBzdGQ6OnJ1bnRpbWVfZXJyb3IKKy0jaW5jbHVkZSA8c3lzdGVtX2Vycm9yPiAg Ly8gc3RkOjpzeXN0ZW1fZXJyb3IKKy0jaW5jbHVkZSA8dXRpbGl0eT4gICAgICAgLy8gc3RkOjpz d2FwCistCistI2lmZGVmIF9fY3BwX2xpYl9iaXRfY2FzdAorLSMgIGluY2x1ZGUgPGJpdD4gIC8v IHN0ZDo6Yml0Y2FzdAorLSNlbmRpZgorLQorLSNpbmNsdWRlICJjb3JlLmgiCistCistI2lmIEZN VF9HQ0NfVkVSU0lPTgorLSMgIGRlZmluZSBGTVRfR0NDX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0 cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKy0jZWxzZQorLSMgIGRlZmluZSBGTVRf R0NDX1ZJU0lCSUxJVFlfSElEREVOCistI2VuZGlmCistCistI2lmZGVmIF9fTlZDQ19fCistIyAg ZGVmaW5lIEZNVF9DVURBX1ZFUlNJT04gKF9fQ1VEQUNDX1ZFUl9NQUpPUl9fICogMTAwICsgX19D VURBQ0NfVkVSX01JTk9SX18pCistI2Vsc2UKKy0jICBkZWZpbmUgRk1UX0NVREFfVkVSU0lPTiAw CistI2VuZGlmCistCistI2lmZGVmIF9faGFzX2J1aWx0aW4KKy0jICBkZWZpbmUgRk1UX0hBU19C VUlMVElOKHgpIF9faGFzX2J1aWx0aW4oeCkKKy0jZWxzZQorLSMgIGRlZmluZSBGTVRfSEFTX0JV SUxUSU4oeCkgMAorLSNlbmRpZgorLQorLSNpZiBGTVRfR0NDX1ZFUlNJT04gfHwgRk1UX0NMQU5H X1ZFUlNJT04KKy0jICBkZWZpbmUgRk1UX05PSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5l KSkKKy0jZWxzZQorLSMgIGRlZmluZSBGTVRfTk9JTkxJTkUKKy0jZW5kaWYKKy0KKy0jaWYgRk1U X01TQ19WRVIKKy0jICBkZWZpbmUgRk1UX01TQ19ERUZBVUxUID0gZGVmYXVsdAorLSNlbHNlCist IyAgZGVmaW5lIEZNVF9NU0NfREVGQVVMVAorLSNlbmRpZgorLQorLSNpZm5kZWYgRk1UX1RIUk9X CistIyAgaWYgRk1UX0VYQ0VQVElPTlMKKy0jICAgIGlmIEZNVF9NU0NfVkVSIHx8IEZNVF9OVkND CistRk1UX0JFR0lOX05BTUVTUEFDRQorLW5hbWVzcGFjZSBkZXRhaWwgeworLXRlbXBsYXRlIDx0 eXBlbmFtZSBFeGNlcHRpb24+IGlubGluZSB2b2lkIGRvX3Rocm93KGNvbnN0IEV4Y2VwdGlvbiYg eCkgeworLSAgLy8gU2lsZW5jZSB1bnJlYWNoYWJsZSBjb2RlIHdhcm5pbmdzIGluIE1TVkMgYW5k IE5WQ0MgYmVjYXVzZSB0aGVzZQorLSAgLy8gYXJlIG5lYXJseSBpbXBvc3NpYmxlIHRvIGZpeCBp biBhIGdlbmVyaWMgY29kZS4KKy0gIHZvbGF0aWxlIGJvb2wgYiA9IHRydWU7CistICBpZiAoYikg dGhyb3cgeDsKKy19CistfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorLUZNVF9FTkRfTkFNRVNQQUNF CistIyAgICAgIGRlZmluZSBGTVRfVEhST1coeCkgZGV0YWlsOjpkb190aHJvdyh4KQorLSMgICAg ZWxzZQorLSMgICAgICBkZWZpbmUgRk1UX1RIUk9XKHgpIHRocm93IHgKKy0jICAgIGVuZGlmCist IyAgZWxzZQorLSMgICAgZGVmaW5lIEZNVF9USFJPVyh4KSAgICAgICAgICAgICAgIFwKKy0gICAg ICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBGTVRfQVNTRVJU KGZhbHNlLCAoeCkud2hhdCgpKTsgXAorLSAgICAgIH0gd2hpbGUgKGZhbHNlKQorLSMgIGVuZGlm CistI2VuZGlmCistCistI2lmIEZNVF9FWENFUFRJT05TCistIyAgZGVmaW5lIEZNVF9UUlkgdHJ5 CistIyAgZGVmaW5lIEZNVF9DQVRDSCh4KSBjYXRjaCAoeCkKKy0jZWxzZQorLSMgIGRlZmluZSBG TVRfVFJZIGlmICh0cnVlKQorLSMgIGRlZmluZSBGTVRfQ0FUQ0goeCkgaWYgKGZhbHNlKQorLSNl bmRpZgorLQorLSNpZm5kZWYgRk1UX01BWUJFX1VOVVNFRAorLSMgIGlmIEZNVF9IQVNfQ1BQMTdf QVRUUklCVVRFKG1heWJlX3VudXNlZCkKKy0jICAgIGRlZmluZSBGTVRfTUFZQkVfVU5VU0VEIFtb bWF5YmVfdW51c2VkXV0KKy0jICBlbHNlCistIyAgICBkZWZpbmUgRk1UX01BWUJFX1VOVVNFRAor LSMgIGVuZGlmCistI2VuZGlmCistCistLy8gV29ya2Fyb3VuZCBicm9rZW4gW1tkZXByZWNhdGVk XV0gaW4gdGhlIEludGVsLCBQR0kgYW5kIE5WQ0MgY29tcGlsZXJzLgorLSNpZiBGTVRfSUNDX1ZF UlNJT04gfHwgZGVmaW5lZChfX1BHSSkgfHwgRk1UX05WQ0MKKy0jICBkZWZpbmUgRk1UX0RFUFJF Q0FURURfQUxJQVMKKy0jZWxzZQorLSMgIGRlZmluZSBGTVRfREVQUkVDQVRFRF9BTElBUyBGTVRf REVQUkVDQVRFRAorLSNlbmRpZgorLQorLSNpZm5kZWYgRk1UX1VTRV9VU0VSX0RFRklORURfTElU RVJBTFMKKy0vLyBFREcgYmFzZWQgY29tcGlsZXJzIChJbnRlbCwgTlZJRElBLCBFbGJydXMsIGV0 YyksIEdDQyBhbmQgTVNWQyBzdXBwb3J0IFVETHMuCistIyAgaWYgKEZNVF9IQVNfRkVBVFVSRShj eHhfdXNlcl9saXRlcmFscykgfHwgRk1UX0dDQ19WRVJTSU9OID49IDQwNyB8fCBcCistICAgICAg IEZNVF9NU0NfVkVSID49IDE5MDApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCistICAgICAgKCFkZWZpbmVkKF9fRURHX1ZFUlNJT05fXykgfHwgX19FREdfVkVS U0lPTl9fID49IC8qIFVETCBmZWF0dXJlICovIDQ4MCkKKy0jICAgIGRlZmluZSBGTVRfVVNFX1VT RVJfREVGSU5FRF9MSVRFUkFMUyAxCistIyAgZWxzZQorLSMgICAgZGVmaW5lIEZNVF9VU0VfVVNF Ul9ERUZJTkVEX0xJVEVSQUxTIDAKKy0jICBlbmRpZgorLSNlbmRpZgorLQorLS8vIERlZmluaW5n IEZNVF9SRURVQ0VfSU5UX0lOU1RBTlRJQVRJT05TIHRvIDEsIHdpbGwgcmVkdWNlIHRoZSBudW1i ZXIgb2YKKy0vLyBpbnRlZ2VyIGZvcm1hdHRlciB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9ucyB0byBq dXN0IG9uZSBieSBvbmx5IHVzaW5nIHRoZQorLS8vIGxhcmdlc3QgaW50ZWdlciB0eXBlLiBUaGlz IHJlc3VsdHMgaW4gYSByZWR1Y3Rpb24gaW4gYmluYXJ5IHNpemUgYnV0IHdpbGwKKy0vLyBjYXVz ZSBhIGRlY3JlYXNlIGluIGludGVnZXIgZm9ybWF0dGluZyBwZXJmb3JtYW5jZS4KKy0jaWYgIWRl ZmluZWQoRk1UX1JFRFVDRV9JTlRfSU5TVEFOVElBVElPTlMpCistIyAgZGVmaW5lIEZNVF9SRURV Q0VfSU5UX0lOU1RBTlRJQVRJT05TIDAKKy0jZW5kaWYKKy0KKy0vLyBfX2J1aWx0aW5fY2x6IGlz IGJyb2tlbiBpbiBjbGFuZyB3aXRoIE1pY3Jvc29mdCBDb2RlR2VuOgorLS8vIGh0dHBzOi8vZ2l0 aHViLmNvbS9mbXRsaWIvZm10L2lzc3Vlcy81MTkuCistI2lmICFGTVRfTVNDX1ZFUgorLSMgIGlm IEZNVF9IQVNfQlVJTFRJTihfX2J1aWx0aW5fY2x6KSB8fCBGTVRfR0NDX1ZFUlNJT04gfHwgRk1U X0lDQ19WRVJTSU9OCistIyAgICBkZWZpbmUgRk1UX0JVSUxUSU5fQ0xaKG4pIF9fYnVpbHRpbl9j bHoobikKKy0jICBlbmRpZgorLSMgIGlmIEZNVF9IQVNfQlVJTFRJTihfX2J1aWx0aW5fY2x6bGwp IHx8IEZNVF9HQ0NfVkVSU0lPTiB8fCBGTVRfSUNDX1ZFUlNJT04KKy0jICAgIGRlZmluZSBGTVRf QlVJTFRJTl9DTFpMTChuKSBfX2J1aWx0aW5fY2x6bGwobikKKy0jICBlbmRpZgorLSNlbmRpZgor LQorLS8vIF9fYnVpbHRpbl9jdHogaXMgYnJva2VuIGluIEludGVsIENvbXBpbGVyIENsYXNzaWMg b24gV2luZG93czoKKy0vLyBodHRwczovL2dpdGh1Yi5jb20vZm10bGliL2ZtdC9pc3N1ZXMvMjUx MC4KKy0jaWZuZGVmIF9fSUNMCistIyAgaWYgRk1UX0hBU19CVUlMVElOKF9fYnVpbHRpbl9jdHop IHx8IEZNVF9HQ0NfVkVSU0lPTiB8fCBGTVRfSUNDX1ZFUlNJT04KKy0jICAgIGRlZmluZSBGTVRf QlVJTFRJTl9DVFoobikgX19idWlsdGluX2N0eihuKQorLSMgIGVuZGlmCistIyAgaWYgRk1UX0hB U19CVUlMVElOKF9fYnVpbHRpbl9jdHpsbCkgfHwgRk1UX0dDQ19WRVJTSU9OIHx8IEZNVF9JQ0Nf VkVSU0lPTgorLSMgICAgZGVmaW5lIEZNVF9CVUlMVElOX0NUWkxMKG4pIF9fYnVpbHRpbl9jdHps bChuKQorLSMgIGVuZGlmCistI2VuZGlmCistCistI2lmIEZNVF9NU0NfVkVSCistIyAgaW5jbHVk ZSA8aW50cmluLmg+ICAvLyBfQml0U2NhblJldmVyc2VbNjRdLCBfQml0U2NhbkZvcndhcmRbNjRd LCBfdW11bDEyOAorLSNlbmRpZgorLQorLS8vIFNvbWUgY29tcGlsZXJzIG1hc3F1ZXJhZGUgYXMg Ym90aCBNU1ZDIGFuZCBHQ0MtbGlrZXMgb3Igb3RoZXJ3aXNlIHN1cHBvcnQKKy0vLyBfX2J1aWx0 aW5fY2x6IGFuZCBfX2J1aWx0aW5fY2x6bGwsIHNvIG9ubHkgZGVmaW5lIEZNVF9CVUlMVElOX0NM WiB1c2luZyB0aGUKKy0vLyBNU1ZDIGludHJpbnNpY3MgaWYgdGhlIGNseiBhbmQgY2x6bGwgYnVp bHRpbnMgYXJlIG5vdCBhdmFpbGFibGUuCistI2lmIEZNVF9NU0NfVkVSICYmICFkZWZpbmVkKEZN VF9CVUlMVElOX0NMWkxMKSAmJiAhZGVmaW5lZChGTVRfQlVJTFRJTl9DVFpMTCkKKy1GTVRfQkVH SU5fTkFNRVNQQUNFCistbmFtZXNwYWNlIGRldGFpbCB7CistLy8gQXZvaWQgQ2xhbmcgd2l0aCBN aWNyb3NvZnQgQ29kZUdlbidzIC1XdW5rbm93bi1wcmFnbWFzIHdhcm5pbmcuCistIyAgaWYgIWRl ZmluZWQoX19jbGFuZ19fKQorLSMgICAgcHJhZ21hIGludHJpbnNpYyhfQml0U2NhbkZvcndhcmQp CistIyAgICBwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuUmV2ZXJzZSkKKy0jICAgIGlmIGRlZmlu ZWQoX1dJTjY0KQorLSMgICAgICBwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuRm9yd2FyZDY0KQor LSMgICAgICBwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuUmV2ZXJzZTY0KQorLSMgICAgZW5kaWYK Ky0jICBlbmRpZgorLQorLWlubGluZSBhdXRvIGNseih1aW50MzJfdCB4KSAtPiBpbnQgeworLSAg dW5zaWduZWQgbG9uZyByID0gMDsKKy0gIF9CaXRTY2FuUmV2ZXJzZSgmciwgeCk7CistICBGTVRf QVNTRVJUKHggIT0gMCwgIiIpOworLSAgLy8gU3RhdGljIGFuYWx5c2lzIGNvbXBsYWlucyBhYm91 dCB1c2luZyB1bmluaXRpYWxpemVkIGRhdGEKKy0gIC8vICJyIiwgYnV0IHRoZSBvbmx5IHdheSB0 aGF0IGNhbiBoYXBwZW4gaXMgaWYgIngiIGlzIDAsCistICAvLyB3aGljaCB0aGUgY2FsbGVycyBn dWFyYW50ZWUgdG8gbm90IGhhcHBlbi4KKy0gIEZNVF9NU0NfV0FSTklORyhzdXBwcmVzcyA6IDYx MDIpCistICByZXR1cm4gMzEgXiBzdGF0aWNfY2FzdDxpbnQ+KHIpOworLX0KKy0jICBkZWZpbmUg Rk1UX0JVSUxUSU5fQ0xaKG4pIGRldGFpbDo6Y2x6KG4pCistCistaW5saW5lIGF1dG8gY2x6bGwo dWludDY0X3QgeCkgLT4gaW50IHsKKy0gIHVuc2lnbmVkIGxvbmcgciA9IDA7CistIyAgaWZkZWYg X1dJTjY0CistICBfQml0U2NhblJldmVyc2U2NCgmciwgeCk7CistIyAgZWxzZQorLSAgLy8gU2Nh biB0aGUgaGlnaCAzMiBiaXRzLgorLSAgaWYgKF9CaXRTY2FuUmV2ZXJzZSgmciwgc3RhdGljX2Nh c3Q8dWludDMyX3Q+KHggPj4gMzIpKSkgcmV0dXJuIDYzIF4gKHIgKyAzMik7CistICAvLyBTY2Fu IHRoZSBsb3cgMzIgYml0cy4KKy0gIF9CaXRTY2FuUmV2ZXJzZSgmciwgc3RhdGljX2Nhc3Q8dWlu dDMyX3Q+KHgpKTsKKy0jICBlbmRpZgorLSAgRk1UX0FTU0VSVCh4ICE9IDAsICIiKTsKKy0gIEZN VF9NU0NfV0FSTklORyhzdXBwcmVzcyA6IDYxMDIpICAvLyBTdXBwcmVzcyBhIGJvZ3VzIHN0YXRp YyBhbmFseXNpcyB3YXJuaW5nLgorLSAgcmV0dXJuIDYzIF4gc3RhdGljX2Nhc3Q8aW50PihyKTsK Ky19CistIyAgZGVmaW5lIEZNVF9CVUlMVElOX0NMWkxMKG4pIGRldGFpbDo6Y2x6bGwobikKKy0K Ky1pbmxpbmUgYXV0byBjdHoodWludDMyX3QgeCkgLT4gaW50IHsKKy0gIHVuc2lnbmVkIGxvbmcg ciA9IDA7CistICBfQml0U2NhbkZvcndhcmQoJnIsIHgpOworLSAgRk1UX0FTU0VSVCh4ICE9IDAs ICIiKTsKKy0gIEZNVF9NU0NfV0FSTklORyhzdXBwcmVzcyA6IDYxMDIpICAvLyBTdXBwcmVzcyBh IGJvZ3VzIHN0YXRpYyBhbmFseXNpcyB3YXJuaW5nLgorLSAgcmV0dXJuIHN0YXRpY19jYXN0PGlu dD4ocik7CistfQorLSMgIGRlZmluZSBGTVRfQlVJTFRJTl9DVFoobikgZGV0YWlsOjpjdHoobikK Ky0KKy1pbmxpbmUgYXV0byBjdHpsbCh1aW50NjRfdCB4KSAtPiBpbnQgeworLSAgdW5zaWduZWQg bG9uZyByID0gMDsKKy0gIEZNVF9BU1NFUlQoeCAhPSAwLCAiIik7CistICBGTVRfTVNDX1dBUk5J Tkcoc3VwcHJlc3MgOiA2MTAyKSAgLy8gU3VwcHJlc3MgYSBib2d1cyBzdGF0aWMgYW5hbHlzaXMg d2FybmluZy4KKy0jICBpZmRlZiBfV0lONjQKKy0gIF9CaXRTY2FuRm9yd2FyZDY0KCZyLCB4KTsK Ky0jICBlbHNlCistICAvLyBTY2FuIHRoZSBsb3cgMzIgYml0cy4KKy0gIGlmIChfQml0U2NhbkZv cndhcmQoJnIsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KSkpIHJldHVybiBzdGF0aWNfY2FzdDxp bnQ+KHIpOworLSAgLy8gU2NhbiB0aGUgaGlnaCAzMiBiaXRzLgorLSAgX0JpdFNjYW5Gb3J3YXJk KCZyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCA+PiAzMikpOworLSAgciArPSAzMjsKKy0jICBl bmRpZgorLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocik7CistfQorLSMgIGRlZmluZSBGTVRf QlVJTFRJTl9DVFpMTChuKSBkZXRhaWw6OmN0emxsKG4pCistfSAgLy8gbmFtZXNwYWNlIGRldGFp bAorLUZNVF9FTkRfTkFNRVNQQUNFCistI2VuZGlmCistCistI2lmZGVmIEZNVF9IRUFERVJfT05M WQorLSMgIGRlZmluZSBGTVRfSEVBREVSX09OTFlfQ09OU1RFWFBSMjAgRk1UX0NPTlNURVhQUjIw CistI2Vsc2UKKy0jICBkZWZpbmUgRk1UX0hFQURFUl9PTkxZX0NPTlNURVhQUjIwCistI2VuZGlm CistCistRk1UX0JFR0lOX05BTUVTUEFDRQorLW5hbWVzcGFjZSBkZXRhaWwgeworLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBTdHJlYW1idWY+IGNsYXNzIGZvcm1hdGJ1ZiA6IHB1YmxpYyBTdHJlYW1i dWYgeworLSBwcml2YXRlOgorLSAgdXNpbmcgY2hhcl90eXBlID0gdHlwZW5hbWUgU3RyZWFtYnVm OjpjaGFyX3R5cGU7CistICB1c2luZyBzdHJlYW1zaXplID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFs PFN0cmVhbWJ1Zj4oKS5zcHV0bihudWxscHRyLCAwKSk7CistICB1c2luZyBpbnRfdHlwZSA9IHR5 cGVuYW1lIFN0cmVhbWJ1Zjo6aW50X3R5cGU7CistICB1c2luZyB0cmFpdHNfdHlwZSA9IHR5cGVu YW1lIFN0cmVhbWJ1Zjo6dHJhaXRzX3R5cGU7CistCistICBidWZmZXI8Y2hhcl90eXBlPiYgYnVm ZmVyXzsKKy0KKy0gcHVibGljOgorLSAgZXhwbGljaXQgZm9ybWF0YnVmKGJ1ZmZlcjxjaGFyX3R5 cGU+JiBidWYpIDogYnVmZmVyXyhidWYpIHt9CistCistIHByb3RlY3RlZDoKKy0gIC8vIFRoZSBw dXQgYXJlYSBpcyBhbHdheXMgZW1wdHkuIFRoaXMgbWFrZXMgdGhlIGltcGxlbWVudGF0aW9uIHNp bXBsZXIgYW5kIGhhcworLSAgLy8gdGhlIGFkdmFudGFnZSB0aGF0IHRoZSBzdHJlYW1idWYgYW5k IHRoZSBidWZmZXIgYXJlIGFsd2F5cyBpbiBzeW5jIGFuZAorLSAgLy8gc3B1dGMgbmV2ZXIgd3Jp dGVzIGludG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEEgZGlzYWR2YW50YWdlIGlzIHRoYXQgZWFj aAorLSAgLy8gY2FsbCB0byBzcHV0YyBhbHdheXMgcmVzdWx0cyBpbiBhICh2aXJ0dWFsKSBjYWxs IHRvIG92ZXJmbG93LiBUaGVyZSBpcyBubworLSAgLy8gZGlzYWR2YW50YWdlIGhlcmUgZm9yIHNw dXRuIHNpbmNlIHRoaXMgYWx3YXlzIHJlc3VsdHMgaW4gYSBjYWxsIHRvIHhzcHV0bi4KKy0KKy0g IGF1dG8gb3ZlcmZsb3coaW50X3R5cGUgY2gpIC0+IGludF90eXBlIG92ZXJyaWRlIHsKKy0gICAg aWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoY2gsIHRyYWl0c190eXBlOjplb2YoKSkpCist ICAgICAgYnVmZmVyXy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaCkpOworLSAg ICByZXR1cm4gY2g7CistICB9CistCistICBhdXRvIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIHMs IHN0cmVhbXNpemUgY291bnQpIC0+IHN0cmVhbXNpemUgb3ZlcnJpZGUgeworLSAgICBidWZmZXJf LmFwcGVuZChzLCBzICsgY291bnQpOworLSAgICByZXR1cm4gY291bnQ7CistICB9CistfTsKKy0K Ky0vLyBJbXBsZW1lbnRhdGlvbiBvZiBzdGQ6OmJpdF9jYXN0IGZvciBwcmUtQysrMjAuCistdGVt cGxhdGUgPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgorLUZNVF9DT05TVEVYUFIyMCBhdXRv IGJpdF9jYXN0KGNvbnN0IEZyb20mIGZyb20pIC0+IFRvIHsKKy0gIHN0YXRpY19hc3NlcnQoc2l6 ZW9mKFRvKSA9PSBzaXplb2YoRnJvbSksICJzaXplIG1pc21hdGNoIik7CistI2lmZGVmIF9fY3Bw X2xpYl9iaXRfY2FzdAorLSAgaWYgKGlzX2NvbnN0YW50X2V2YWx1YXRlZCgpKSByZXR1cm4gc3Rk OjpiaXRfY2FzdDxUbz4oZnJvbSk7CistI2VuZGlmCistICBhdXRvIHRvID0gVG8oKTsKKy0gIHN0 ZDo6bWVtY3B5KCZ0bywgJmZyb20sIHNpemVvZih0bykpOworLSAgcmV0dXJuIHRvOworLX0KKy0K Ky1pbmxpbmUgYXV0byBpc19iaWdfZW5kaWFuKCkgLT4gYm9vbCB7CistI2lmZGVmIF9XSU4zMgor LSAgcmV0dXJuIGZhbHNlOworLSNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX18pCistICByZXR1 cm4gdHJ1ZTsKKy0jZWxpZiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBkZWZpbmVkKF9fT1JE RVJfQklHX0VORElBTl9fKQorLSAgcmV0dXJuIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfQklH X0VORElBTl9fOworLSNlbHNlCistICBzdHJ1Y3QgYnl0ZXMgeworLSAgICBjaGFyIGRhdGFbc2l6 ZW9mKGludCldOworLSAgfTsKKy0gIHJldHVybiBiaXRfY2FzdDxieXRlcz4oMSkuZGF0YVswXSA9 PSAwOworLSNlbmRpZgorLX0KKy0KKy0vLyBBIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIHVp bnRwdHJfdCBmb3Igc3lzdGVtcyB0aGF0IGxhY2sgaXQuCistc3RydWN0IGZhbGxiYWNrX3VpbnRw dHIgeworLSAgdW5zaWduZWQgY2hhciB2YWx1ZVtzaXplb2Yodm9pZCopXTsKKy0KKy0gIGZhbGxi YWNrX3VpbnRwdHIoKSA9IGRlZmF1bHQ7CistICBleHBsaWNpdCBmYWxsYmFja191aW50cHRyKGNv bnN0IHZvaWQqIHApIHsKKy0gICAgKnRoaXMgPSBiaXRfY2FzdDxmYWxsYmFja191aW50cHRyPihw KTsKKy0gICAgaWYgKGNvbnN0X2NoZWNrKGlzX2JpZ19lbmRpYW4oKSkpIHsKKy0gICAgICBmb3Ig KHNpemVfdCBpID0gMCwgaiA9IHNpemVvZih2b2lkKikgLSAxOyBpIDwgajsgKytpLCAtLWopCist ICAgICAgICBzdGQ6OnN3YXAodmFsdWVbaV0sIHZhbHVlW2pdKTsKKy0gICAgfQorLSAgfQorLX07 CistI2lmZGVmIFVJTlRQVFJfTUFYCistdXNpbmcgdWludHB0cl90ID0gOjp1aW50cHRyX3Q7Cist aW5saW5lIGF1dG8gdG9fdWludHB0cihjb25zdCB2b2lkKiBwKSAtPiB1aW50cHRyX3QgeworLSAg cmV0dXJuIGJpdF9jYXN0PHVpbnRwdHJfdD4ocCk7CistfQorLSNlbHNlCistdXNpbmcgdWludHB0 cl90ID0gZmFsbGJhY2tfdWludHB0cjsKKy1pbmxpbmUgYXV0byB0b191aW50cHRyKGNvbnN0IHZv aWQqIHApIC0+IGZhbGxiYWNrX3VpbnRwdHIgeworLSAgcmV0dXJuIGZhbGxiYWNrX3VpbnRwdHIo cCk7CistfQorLSNlbmRpZgorLQorLS8vIFJldHVybnMgdGhlIGxhcmdlc3QgcG9zc2libGUgdmFs dWUgZm9yIHR5cGUgVC4gU2FtZSBhcworLS8vIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgp IGJ1dCBzaG9ydGVyIGFuZCBub3QgYWZmZWN0ZWQgYnkgdGhlIG1heCBtYWNyby4KKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gbWF4X3ZhbHVlKCkgLT4gVCB7CistICByZXR1 cm4gKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCkoKTsKKy19CistdGVtcGxhdGUgPHR5cGVu YW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG51bV9iaXRzKCkgLT4gaW50IHsKKy0gIHJldHVybiBzdGQ6 Om51bWVyaWNfbGltaXRzPFQ+OjpkaWdpdHM7CistfQorLS8vIHN0ZDo6bnVtZXJpY19saW1pdHM8 VD46OmRpZ2l0cyBtYXkgcmV0dXJuIDAgZm9yIDEyOC1iaXQgaW50cy4KKy10ZW1wbGF0ZSA8PiBj b25zdGV4cHIgYXV0byBudW1fYml0czxpbnQxMjhfdD4oKSAtPiBpbnQgeyByZXR1cm4gMTI4OyB9 CistdGVtcGxhdGUgPD4gY29uc3RleHByIGF1dG8gbnVtX2JpdHM8dWludDEyOF90PigpIC0+IGlu dCB7IHJldHVybiAxMjg7IH0KKy10ZW1wbGF0ZSA8PiBjb25zdGV4cHIgYXV0byBudW1fYml0czxm YWxsYmFja191aW50cHRyPigpIC0+IGludCB7CistICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihz aXplb2Yodm9pZCopICoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19s aW1pdHM8dW5zaWduZWQgY2hhcj46OmRpZ2l0cyk7CistfQorLQorLUZNVF9JTkxJTkUgdm9pZCBh c3N1bWUoYm9vbCBjb25kaXRpb24pIHsKKy0gICh2b2lkKWNvbmRpdGlvbjsKKy0jaWYgRk1UX0hB U19CVUlMVElOKF9fYnVpbHRpbl9hc3N1bWUpCistICBfX2J1aWx0aW5fYXNzdW1lKGNvbmRpdGlv bik7CistI2VuZGlmCistfQorLQorLS8vIEFuIGFwcHJveGltYXRpb24gb2YgaXRlcmF0b3JfdCBm b3IgcHJlLUMrKzIwIHN5c3RlbXMuCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdXNpbmcgaXRl cmF0b3JfdCA9IGRlY2x0eXBlKHN0ZDo6YmVnaW4oc3RkOjpkZWNsdmFsPFQmPigpKSk7CistdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IHVzaW5nIHNlbnRpbmVsX3QgPSBkZWNsdHlwZShzdGQ6OmVuZChz dGQ6OmRlY2x2YWw8VCY+KCkpKTsKKy0KKy0vLyBBIHdvcmthcm91bmQgZm9yIHN0ZDo6c3RyaW5n IG5vdCBoYXZpbmcgbXV0YWJsZSBkYXRhKCkgdW50aWwgQysrMTcuCistdGVtcGxhdGUgPHR5cGVu YW1lIENoYXI+CistaW5saW5lIGF1dG8gZ2V0X2RhdGEoc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4m IHMpIC0+IENoYXIqIHsKKy0gIHJldHVybiAmc1swXTsKKy19CistdGVtcGxhdGUgPHR5cGVuYW1l IENvbnRhaW5lcj4KKy1pbmxpbmUgYXV0byBnZXRfZGF0YShDb250YWluZXImIGMpIC0+IHR5cGVu YW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSogeworLSAgcmV0dXJuIGMuZGF0YSgpOworLX0KKy0K Ky0jaWYgZGVmaW5lZChfU0VDVVJFX1NDTCkgJiYgX1NFQ1VSRV9TQ0wKKy0vLyBNYWtlIGEgY2hl Y2tlZCBpdGVyYXRvciB0byBhdm9pZCBNU1ZDIHdhcm5pbmdzLgorLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPiB1c2luZyBjaGVja2VkX3B0ciA9IHN0ZGV4dDo6Y2hlY2tlZF9hcnJheV9pdGVyYXRvcjxU Kj47CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY29uc3RleHByIGF1dG8gbWFrZV9jaGVja2Vk KFQqIHAsIHNpemVfdCBzaXplKSAtPiBjaGVja2VkX3B0cjxUPiB7CistICByZXR1cm4ge3AsIHNp emV9OworLX0KKy0jZWxzZQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiB1c2luZyBjaGVja2VkX3B0 ciA9IFQqOworLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlX2NoZWNr ZWQoVCogcCwgc2l6ZV90KSAtPiBUKiB7CistICByZXR1cm4gcDsKKy19CistI2VuZGlmCistCist Ly8gQXR0ZW1wdHMgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbiBleHRyYSBjaGFyYWN0ZXJzIGluIHRo ZSBvdXRwdXQgcmFuZ2UuCistLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJlc2VydmVkIHJh bmdlIG9yIGEgcmVmZXJlbmNlIHRvIGl0LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIs IEZNVF9FTkFCTEVfSUYoaXNfY29udGlndW91czxDb250YWluZXI+Ojp2YWx1ZSk+CistI2lmIEZN VF9DTEFOR19WRVJTSU9OID49IDMwNyAmJiAhRk1UX0lDQ19WRVJTSU9OCistX19hdHRyaWJ1dGVf Xygobm9fc2FuaXRpemUoInVuZGVmaW5lZCIpKSkKKy0jZW5kaWYKKy1pbmxpbmUgYXV0bworLXJl c2VydmUoc3RkOjpiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+IGl0LCBzaXplX3QgbikK Ky0gICAgLT4gY2hlY2tlZF9wdHI8dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPiB7Cist ICBDb250YWluZXImIGMgPSBnZXRfY29udGFpbmVyKGl0KTsKKy0gIHNpemVfdCBzaXplID0gYy5z aXplKCk7CistICBjLnJlc2l6ZShzaXplICsgbik7CistICByZXR1cm4gbWFrZV9jaGVja2VkKGdl dF9kYXRhKGMpICsgc2l6ZSwgbik7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWlu bGluZSBhdXRvIHJlc2VydmUoYnVmZmVyX2FwcGVuZGVyPFQ+IGl0LCBzaXplX3QgbikgLT4gYnVm ZmVyX2FwcGVuZGVyPFQ+IHsKKy0gIGJ1ZmZlcjxUPiYgYnVmID0gZ2V0X2NvbnRhaW5lcihpdCk7 CistICBidWYudHJ5X3Jlc2VydmUoYnVmLnNpemUoKSArIG4pOworLSAgcmV0dXJuIGl0OworLX0K Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3I+CistY29uc3RleHByIGF1dG8gcmVzZXJ2 ZShJdGVyYXRvciYgaXQsIHNpemVfdCkgLT4gSXRlcmF0b3ImIHsKKy0gIHJldHVybiBpdDsKKy19 CistCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0PgorLXVzaW5nIHJlc2VydmVfaXRlcmF0 b3IgPQorLSAgICByZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUocmVzZXJ2ZShzdGQ6OmRlY2x2 YWw8T3V0cHV0SXQmPigpLCAwKSk+OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt ZSBPdXRwdXRJdD4KKy1jb25zdGV4cHIgYXV0byB0b19wb2ludGVyKE91dHB1dEl0LCBzaXplX3Qp IC0+IFQqIHsKKy0gIHJldHVybiBudWxscHRyOworLX0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g YXV0byB0b19wb2ludGVyKGJ1ZmZlcl9hcHBlbmRlcjxUPiBpdCwgc2l6ZV90IG4pIC0+IFQqIHsK Ky0gIGJ1ZmZlcjxUPiYgYnVmID0gZ2V0X2NvbnRhaW5lcihpdCk7CistICBhdXRvIHNpemUgPSBi dWYuc2l6ZSgpOworLSAgaWYgKGJ1Zi5jYXBhY2l0eSgpIDwgc2l6ZSArIG4pIHJldHVybiBudWxs cHRyOworLSAgYnVmLnRyeV9yZXNpemUoc2l6ZSArIG4pOworLSAgcmV0dXJuIGJ1Zi5kYXRhKCkg KyBzaXplOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyLCBGTVRfRU5BQkxF X0lGKGlzX2NvbnRpZ3VvdXM8Q29udGFpbmVyPjo6dmFsdWUpPgorLWlubGluZSBhdXRvIGJhc2Vf aXRlcmF0b3Ioc3RkOjpiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+JiBpdCwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWRfcHRyPHR5cGVuYW1lIENvbnRhaW5lcjo6dmFs dWVfdHlwZT4pCistICAgIC0+IHN0ZDo6YmFja19pbnNlcnRfaXRlcmF0b3I8Q29udGFpbmVyPiB7 CistICByZXR1cm4gaXQ7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvcj4KKy1j b25zdGV4cHIgYXV0byBiYXNlX2l0ZXJhdG9yKEl0ZXJhdG9yLCBJdGVyYXRvciBpdCkgLT4gSXRl cmF0b3IgeworLSAgcmV0dXJuIGl0OworLX0KKy0KKy0vLyA8YWxnb3JpdGhtPiBpcyBzcGVjdGFj dWxhcmx5IHNsb3cgdG8gY29tcGlsZSBpbiBDKysyMCBzbyB1c2UgYSBzaW1wbGUgZmlsbF9uCist Ly8gaW5zdGVhZCAoIzE5OTgpLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5h bWUgU2l6ZSwgdHlwZW5hbWUgVD4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gZmlsbF9uKE91dHB1dEl0 IG91dCwgU2l6ZSBjb3VudCwgY29uc3QgVCYgdmFsdWUpCistICAgIC0+IE91dHB1dEl0IHsKKy0g IGZvciAoU2l6ZSBpID0gMDsgaSA8IGNvdW50OyArK2kpICpvdXQrKyA9IHZhbHVlOworLSAgcmV0 dXJuIG91dDsKKy19CistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNpemU+CistRk1U X0NPTlNURVhQUjIwIGF1dG8gZmlsbF9uKFQqIG91dCwgU2l6ZSBjb3VudCwgY2hhciB2YWx1ZSkg LT4gVCogeworLSAgaWYgKGlzX2NvbnN0YW50X2V2YWx1YXRlZCgpKSB7CistICAgIHJldHVybiBm aWxsX248VCosIFNpemUsIFQ+KG91dCwgY291bnQsIHZhbHVlKTsKKy0gIH0KKy0gIHN0ZDo6bWVt c2V0KG91dCwgdmFsdWUsIHRvX3Vuc2lnbmVkKGNvdW50KSk7CistICByZXR1cm4gb3V0ICsgY291 bnQ7CistfQorLQorLSNpZmRlZiBfX2NwcF9jaGFyOF90CistdXNpbmcgY2hhcjhfdHlwZSA9IGNo YXI4X3Q7CistI2Vsc2UKKy1lbnVtIGNoYXI4X3R5cGUgOiB1bnNpZ25lZCBjaGFyIHt9OworLSNl bmRpZgorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRDaGFyLCB0eXBlbmFtZSBJbnB1dEl0LCB0 eXBlbmFtZSBPdXRwdXRJdD4KKy1GTVRfQ09OU1RFWFBSIEZNVF9OT0lOTElORSBhdXRvIGNvcHlf c3RyX25vaW5saW5lKElucHV0SXQgYmVnaW4sIElucHV0SXQgZW5kLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0SXQgb3V0KSAtPiBPdXRw dXRJdCB7CistICByZXR1cm4gY29weV9zdHI8T3V0Q2hhcj4oYmVnaW4sIGVuZCwgb3V0KTsKKy19 CistCistLy8gQSBwdWJsaWMgZG9tYWluIGJyYW5jaGxlc3MgVVRGLTggZGVjb2RlciBieSBDaHJp c3RvcGhlciBXZWxsb25zOgorLS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9za2VldG8vYnJhbmNobGVz cy11dGY4CistLyogRGVjb2RlIHRoZSBuZXh0IGNoYXJhY3RlciwgYywgZnJvbSBzLCByZXBvcnRp bmcgZXJyb3JzIGluIGUuCistICoKKy0gKiBTaW5jZSB0aGlzIGlzIGEgYnJhbmNobGVzcyBkZWNv ZGVyLCBmb3VyIGJ5dGVzIHdpbGwgYmUgcmVhZCBmcm9tIHRoZQorLSAqIGJ1ZmZlciByZWdhcmRs ZXNzIG9mIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBuZXh0IGNoYXJhY3Rlci4gVGhpcworLSAq IG1lYW5zIHRoZSBidWZmZXIgX211c3RfIGhhdmUgYXQgbGVhc3QgdGhyZWUgYnl0ZXMgb2YgemVy byBwYWRkaW5nCistICogZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIGRhdGEgc3RyZWFtLgorLSAq CistICogRXJyb3JzIGFyZSByZXBvcnRlZCBpbiBlLCB3aGljaCB3aWxsIGJlIG5vbi16ZXJvIGlm IHRoZSBwYXJzZWQKKy0gKiBjaGFyYWN0ZXIgd2FzIHNvbWVob3cgaW52YWxpZDogaW52YWxpZCBi eXRlIHNlcXVlbmNlLCBub24tY2Fub25pY2FsCistICogZW5jb2RpbmcsIG9yIGEgc3Vycm9nYXRl IGhhbGYuCistICoKKy0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5l eHQgY2hhcmFjdGVyLiBXaGVuIGFuIGVycm9yCistICogb2NjdXJzLCB0aGlzIHBvaW50ZXIgd2ls bCBiZSBhIGd1ZXNzIHRoYXQgZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhcgorLSAqIGVycm9yLCBi dXQgaXQgd2lsbCBhbHdheXMgYWR2YW5jZSBhdCBsZWFzdCBvbmUgYnl0ZS4KKy0gKi8KKy1GTVRf Q09OU1RFWFBSIGlubGluZSBhdXRvIHV0ZjhfZGVjb2RlKGNvbnN0IGNoYXIqIHMsIHVpbnQzMl90 KiBjLCBpbnQqIGUpCistICAgIC0+IGNvbnN0IGNoYXIqIHsKKy0gIGNvbnN0ZXhwciBjb25zdCBp bnQgbWFza3NbXSA9IHsweDAwLCAweDdmLCAweDFmLCAweDBmLCAweDA3fTsKKy0gIGNvbnN0ZXhw ciBjb25zdCB1aW50MzJfdCBtaW5zW10gPSB7NDE5NDMwNCwgMCwgMTI4LCAyMDQ4LCA2NTUzNn07 CistICBjb25zdGV4cHIgY29uc3QgaW50IHNoaWZ0Y1tdID0gezAsIDE4LCAxMiwgNiwgMH07Cist ICBjb25zdGV4cHIgY29uc3QgaW50IHNoaWZ0ZVtdID0gezAsIDYsIDQsIDIsIDB9OworLQorLSAg aW50IGxlbiA9IGNvZGVfcG9pbnRfbGVuZ3RoKHMpOworLSAgY29uc3QgY2hhciogbmV4dCA9IHMg KyBsZW47CistCistICAvLyBBc3N1bWUgYSBmb3VyLWJ5dGUgY2hhcmFjdGVyIGFuZCBsb2FkIGZv dXIgYnl0ZXMuIFVudXNlZCBiaXRzIGFyZQorLSAgLy8gc2hpZnRlZCBvdXQuCistICAqYyA9IHVp bnQzMl90KHNbMF0gJiBtYXNrc1tsZW5dKSA8PCAxODsKKy0gICpjIHw9IHVpbnQzMl90KHNbMV0g JiAweDNmKSA8PCAxMjsKKy0gICpjIHw9IHVpbnQzMl90KHNbMl0gJiAweDNmKSA8PCA2OworLSAg KmMgfD0gdWludDMyX3Qoc1szXSAmIDB4M2YpIDw8IDA7CistICAqYyA+Pj0gc2hpZnRjW2xlbl07 CistCistICAvLyBBY2N1bXVsYXRlIHRoZSB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMuCistICB1 c2luZyB1Y2hhciA9IHVuc2lnbmVkIGNoYXI7CistICAqZSA9ICgqYyA8IG1pbnNbbGVuXSkgPDwg NjsgICAgICAgLy8gbm9uLWNhbm9uaWNhbCBlbmNvZGluZworLSAgKmUgfD0gKCgqYyA+PiAxMSkg PT0gMHgxYikgPDwgNzsgIC8vIHN1cnJvZ2F0ZSBoYWxmPworLSAgKmUgfD0gKCpjID4gMHgxMEZG RkYpIDw8IDg7ICAgICAgIC8vIG91dCBvZiByYW5nZT8KKy0gICplIHw9ICh1Y2hhcihzWzFdKSAm IDB4YzApID4+IDI7CistICAqZSB8PSAodWNoYXIoc1syXSkgJiAweGMwKSA+PiA0OworLSAgKmUg fD0gdWNoYXIoc1szXSkgPj4gNjsKKy0gICplIF49IDB4MmE7ICAvLyB0b3AgdHdvIGJpdHMgb2Yg ZWFjaCB0YWlsIGJ5dGUgY29ycmVjdD8KKy0gICplID4+PSBzaGlmdGVbbGVuXTsKKy0KKy0gIHJl dHVybiBuZXh0OworLX0KKy0KKy1jb25zdGV4cHIgdWludDMyX3QgaW52YWxpZF9jb2RlX3BvaW50 ID0gfnVpbnQzMl90KCk7CistCistLy8gSW52b2tlcyBmKGNwLCBzdikgZm9yIGV2ZXJ5IGNvZGUg cG9pbnQgY3AgaW4gcyB3aXRoIHN2IGJlaW5nIHRoZSBzdHJpbmcgdmlldworLS8vIGNvcnJlc3Bv bmRpbmcgdG8gdGhlIGNvZGUgcG9pbnQuIGNwIGlzIGludmFsaWRfY29kZV9wb2ludCBvbiBlcnJv ci4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgRj4KKy1GTVRfQ09OU1RFWFBSIHZvaWQgZm9yX2VhY2hf Y29kZXBvaW50KHN0cmluZ192aWV3IHMsIEYgZikgeworLSAgYXV0byBkZWNvZGUgPSBbZl0oY29u c3QgY2hhciogYnVmX3B0ciwgY29uc3QgY2hhciogcHRyKSB7CistICAgIGF1dG8gY3AgPSB1aW50 MzJfdCgpOworLSAgICBhdXRvIGVycm9yID0gMDsKKy0gICAgYXV0byBlbmQgPSB1dGY4X2RlY29k ZShidWZfcHRyLCAmY3AsICZlcnJvcik7CistICAgIGJvb2wgcmVzdWx0ID0gZihlcnJvciA/IGlu dmFsaWRfY29kZV9wb2ludCA6IGNwLAorLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZpZXco cHRyLCB0b191bnNpZ25lZChlbmQgLSBidWZfcHRyKSkpOworLSAgICByZXR1cm4gcmVzdWx0ID8g ZW5kIDogbnVsbHB0cjsKKy0gIH07CistICBhdXRvIHAgPSBzLmRhdGEoKTsKKy0gIGNvbnN0IHNp emVfdCBibG9ja19zaXplID0gNDsgIC8vIHV0ZjhfZGVjb2RlIGFsd2F5cyByZWFkcyBibG9ja3Mg b2YgNCBjaGFycy4KKy0gIGlmIChzLnNpemUoKSA+PSBibG9ja19zaXplKSB7CistICAgIGZvciAo YXV0byBlbmQgPSBwICsgcy5zaXplKCkgLSBibG9ja19zaXplICsgMTsgcCA8IGVuZDspIHsKKy0g ICAgICBwID0gZGVjb2RlKHAsIHApOworLSAgICAgIGlmICghcCkgcmV0dXJuOworLSAgICB9Cist ICB9CistICBpZiAoYXV0byBudW1fY2hhcnNfbGVmdCA9IHMuZGF0YSgpICsgcy5zaXplKCkgLSBw KSB7CistICAgIGNoYXIgYnVmWzIgKiBibG9ja19zaXplIC0gMV0gPSB7fTsKKy0gICAgY29weV9z dHI8Y2hhcj4ocCwgcCArIG51bV9jaGFyc19sZWZ0LCBidWYpOworLSAgICBjb25zdCBjaGFyKiBi dWZfcHRyID0gYnVmOworLSAgICBkbyB7CistICAgICAgYXV0byBlbmQgPSBkZWNvZGUoYnVmX3B0 ciwgcCk7CistICAgICAgaWYgKCFlbmQpIHJldHVybjsKKy0gICAgICBwICs9IGVuZCAtIGJ1Zl9w dHI7CistICAgICAgYnVmX3B0ciA9IGVuZDsKKy0gICAgfSB3aGlsZSAoYnVmX3B0ciAtIGJ1ZiA8 IG51bV9jaGFyc19sZWZ0KTsKKy0gIH0KKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+ CistaW5saW5lIGF1dG8gY29tcHV0ZV93aWR0aChiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBzKSAt PiBzaXplX3QgeworLSAgcmV0dXJuIHMuc2l6ZSgpOworLX0KKy0KKy0vLyBDb21wdXRlcyBhcHBy b3hpbWF0ZSBkaXNwbGF5IHdpZHRoIG9mIGEgVVRGLTggc3RyaW5nLgorLUZNVF9DT05TVEVYUFIg aW5saW5lIHNpemVfdCBjb21wdXRlX3dpZHRoKHN0cmluZ192aWV3IHMpIHsKKy0gIHNpemVfdCBu dW1fY29kZV9wb2ludHMgPSAwOworLSAgLy8gSXQgaXMgbm90IGEgbGFtYmRhIGZvciBjb21wYXRp YmlsaXR5IHdpdGggQysrMTQuCistICBzdHJ1Y3QgY291bnRfY29kZV9wb2ludHMgeworLSAgICBz aXplX3QqIGNvdW50OworLSAgICBGTVRfQ09OU1RFWFBSIGF1dG8gb3BlcmF0b3IoKSh1aW50MzJf dCBjcCwgc3RyaW5nX3ZpZXcpIGNvbnN0IC0+IGJvb2wgeworLSAgICAgICpjb3VudCArPSBkZXRh aWw6OnRvX3Vuc2lnbmVkKAorLSAgICAgICAgICAxICsKKy0gICAgICAgICAgKGNwID49IDB4MTEw MCAmJgorLSAgICAgICAgICAgKGNwIDw9IDB4MTE1ZiB8fCAgLy8gSGFuZ3VsIEphbW8gaW5pdC4g Y29uc29uYW50cworLSAgICAgICAgICAgIGNwID09IDB4MjMyOSB8fCAgLy8gTEVGVC1QT0lOVElO RyBBTkdMRSBCUkFDS0VUCistICAgICAgICAgICAgY3AgPT0gMHgyMzJhIHx8ICAvLyBSSUdIVC1Q T0lOVElORyBBTkdMRSBCUkFDS0VUCistICAgICAgICAgICAgLy8gQ0pLIC4uLiBZaSBleGNlcHQg SURFT0dSQVBISUMgSEFMRiBGSUxMIFNQQUNFOgorLSAgICAgICAgICAgIChjcCA+PSAweDJlODAg JiYgY3AgPD0gMHhhNGNmICYmIGNwICE9IDB4MzAzZikgfHwKKy0gICAgICAgICAgICAoY3AgPj0g MHhhYzAwICYmIGNwIDw9IDB4ZDdhMykgfHwgICAgLy8gSGFuZ3VsIFN5bGxhYmxlcworLSAgICAg ICAgICAgIChjcCA+PSAweGY5MDAgJiYgY3AgPD0gMHhmYWZmKSB8fCAgICAvLyBDSksgQ29tcGF0 aWJpbGl0eSBJZGVvZ3JhcGhzCistICAgICAgICAgICAgKGNwID49IDB4ZmUxMCAmJiBjcCA8PSAw eGZlMTkpIHx8ICAgIC8vIFZlcnRpY2FsIEZvcm1zCistICAgICAgICAgICAgKGNwID49IDB4ZmUz MCAmJiBjcCA8PSAweGZlNmYpIHx8ICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zCistICAg ICAgICAgICAgKGNwID49IDB4ZmYwMCAmJiBjcCA8PSAweGZmNjApIHx8ICAgIC8vIEZ1bGx3aWR0 aCBGb3JtcworLSAgICAgICAgICAgIChjcCA+PSAweGZmZTAgJiYgY3AgPD0gMHhmZmU2KSB8fCAg ICAvLyBGdWxsd2lkdGggRm9ybXMKKy0gICAgICAgICAgICAoY3AgPj0gMHgyMDAwMCAmJiBjcCA8 PSAweDJmZmZkKSB8fCAgLy8gQ0pLCistICAgICAgICAgICAgKGNwID49IDB4MzAwMDAgJiYgY3Ag PD0gMHgzZmZmZCkgfHwKKy0gICAgICAgICAgICAvLyBNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5k IFBpY3RvZ3JhcGhzICsgRW1vdGljb25zOgorLSAgICAgICAgICAgIChjcCA+PSAweDFmMzAwICYm IGNwIDw9IDB4MWY2NGYpIHx8CistICAgICAgICAgICAgLy8gU3VwcGxlbWVudGFsIFN5bWJvbHMg YW5kIFBpY3RvZ3JhcGhzOgorLSAgICAgICAgICAgIChjcCA+PSAweDFmOTAwICYmIGNwIDw9IDB4 MWY5ZmYpKSkpOworLSAgICAgIHJldHVybiB0cnVlOworLSAgICB9CistICB9OworLSAgZm9yX2Vh Y2hfY29kZXBvaW50KHMsIGNvdW50X2NvZGVfcG9pbnRzeyZudW1fY29kZV9wb2ludHN9KTsKKy0g IHJldHVybiBudW1fY29kZV9wb2ludHM7CistfQorLQorLWlubGluZSBhdXRvIGNvbXB1dGVfd2lk dGgoYmFzaWNfc3RyaW5nX3ZpZXc8Y2hhcjhfdHlwZT4gcykgLT4gc2l6ZV90IHsKKy0gIHJldHVy biBjb21wdXRlX3dpZHRoKGJhc2ljX3N0cmluZ192aWV3PGNoYXI+KAorLSAgICAgIHJlaW50ZXJw cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHMuZGF0YSgpKSwgcy5zaXplKCkpKTsKKy19CistCistdGVt cGxhdGUgPHR5cGVuYW1lIENoYXI+CistaW5saW5lIGF1dG8gY29kZV9wb2ludF9pbmRleChiYXNp Y19zdHJpbmdfdmlldzxDaGFyPiBzLCBzaXplX3QgbikgLT4gc2l6ZV90IHsKKy0gIHNpemVfdCBz aXplID0gcy5zaXplKCk7CistICByZXR1cm4gbiA8IHNpemUgPyBuIDogc2l6ZTsKKy19CistCist Ly8gQ2FsY3VsYXRlcyB0aGUgaW5kZXggb2YgdGhlIG50aCBjb2RlIHBvaW50IGluIGEgVVRGLTgg c3RyaW5nLgorLWlubGluZSBhdXRvIGNvZGVfcG9pbnRfaW5kZXgoYmFzaWNfc3RyaW5nX3ZpZXc8 Y2hhcjhfdHlwZT4gcywgc2l6ZV90IG4pCistICAgIC0+IHNpemVfdCB7CistICBjb25zdCBjaGFy OF90eXBlKiBkYXRhID0gcy5kYXRhKCk7CistICBzaXplX3QgbnVtX2NvZGVfcG9pbnRzID0gMDsK Ky0gIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcy5zaXplKCk7IGkgIT0gc2l6ZTsgKytpKSB7 CistICAgIGlmICgoZGF0YVtpXSAmIDB4YzApICE9IDB4ODAgJiYgKytudW1fY29kZV9wb2ludHMg PiBuKSByZXR1cm4gaTsKKy0gIH0KKy0gIHJldHVybiBzLnNpemUoKTsKKy19CistCistdGVtcGxh dGUgPHR5cGVuYW1lIFQsIGJvb2wgPSBzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Ojp2YWx1ZT4K Ky1zdHJ1Y3QgaXNfZmFzdF9mbG9hdCA6IGJvb2xfY29uc3RhbnQ8c3RkOjpudW1lcmljX2xpbWl0 czxUPjo6aXNfaWVjNTU5ICYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihUKSA8PSBzaXplb2YoZG91YmxlKT4ge307CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IHN0cnVjdCBpc19mYXN0X2Zsb2F0PFQsIGZhbHNlPiA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKKy0K Ky0jaWZuZGVmIEZNVF9VU0VfRlVMTF9DQUNIRV9EUkFHT05CT1gKKy0jICBkZWZpbmUgRk1UX1VT RV9GVUxMX0NBQ0hFX0RSQUdPTkJPWCAwCistI2VuZGlmCistCistdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CistdGVtcGxhdGUgPHR5cGVuYW1lIFU+Cistdm9pZCBidWZmZXI8VD46OmFwcGVuZChjb25z dCBVKiBiZWdpbiwgY29uc3QgVSogZW5kKSB7CistICB3aGlsZSAoYmVnaW4gIT0gZW5kKSB7Cist ICAgIGF1dG8gY291bnQgPSB0b191bnNpZ25lZChlbmQgLSBiZWdpbik7CistICAgIHRyeV9yZXNl cnZlKHNpemVfICsgY291bnQpOworLSAgICBhdXRvIGZyZWVfY2FwID0gY2FwYWNpdHlfIC0gc2l6 ZV87CistICAgIGlmIChmcmVlX2NhcCA8IGNvdW50KSBjb3VudCA9IGZyZWVfY2FwOworLSAgICBz dGQ6OnVuaW5pdGlhbGl6ZWRfY29weV9uKGJlZ2luLCBjb3VudCwgbWFrZV9jaGVja2VkKHB0cl8g KyBzaXplXywgY291bnQpKTsKKy0gICAgc2l6ZV8gKz0gY291bnQ7CistICAgIGJlZ2luICs9IGNv dW50OworLSAgfQorLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxl ID0gdm9pZD4KKy1zdHJ1Y3QgaXNfbG9jYWxlIDogc3RkOjpmYWxzZV90eXBlIHt9OworLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLXN0cnVjdCBpc19sb2NhbGU8VCwgdm9pZF90PGRlY2x0eXBlKFQ6 OmNsYXNzaWMoKSk+PiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OworLX0gIC8vIG5hbWVzcGFjZSBkZXRh aWwKKy0KKy1GTVRfTU9EVUxFX0VYUE9SVF9CRUdJTgorLQorLS8vIFRoZSBudW1iZXIgb2YgY2hh cmFjdGVycyB0byBzdG9yZSBpbiB0aGUgYmFzaWNfbWVtb3J5X2J1ZmZlciBvYmplY3QgaXRzZWxm CistLy8gdG8gYXZvaWQgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4KKy1lbnVtIHsgaW5saW5l X2J1ZmZlcl9zaXplID0gNTAwIH07CistCistLyoqCistICBccnN0CistICBBIGR5bmFtaWNhbGx5 IGdyb3dpbmcgbWVtb3J5IGJ1ZmZlciBmb3IgdHJpdmlhbGx5IGNvcHlhYmxlL2NvbnN0cnVjdGli bGUgdHlwZXMKKy0gIHdpdGggdGhlIGZpcnN0IGBgU0laRWBgIGVsZW1lbnRzIHN0b3JlZCBpbiB0 aGUgb2JqZWN0IGl0c2VsZi4KKy0KKy0gIFlvdSBjYW4gdXNlIHRoZSBgYG1lbW9yeV9idWZmZXJg YCB0eXBlIGFsaWFzIGZvciBgYGNoYXJgYCBpbnN0ZWFkLgorLQorLSAgKipFeGFtcGxlKio6Ogor LQorLSAgICAgYXV0byBvdXQgPSBmbXQ6Om1lbW9yeV9idWZmZXIoKTsKKy0gICAgIGZvcm1hdF90 byhzdGQ6OmJhY2tfaW5zZXJ0ZXIob3V0KSwgIlRoZSBhbnN3ZXIgaXMge30uIiwgNDIpOworLQor LSAgVGhpcyB3aWxsIGFwcGVuZCB0aGUgZm9sbG93aW5nIG91dHB1dCB0byB0aGUgYGBvdXRgYCBv YmplY3Q6CistCistICAuLiBjb2RlLWJsb2NrOjogbm9uZQorLQorLSAgICAgVGhlIGFuc3dlciBp cyA0Mi4KKy0KKy0gIFRoZSBvdXRwdXQgY2FuIGJlIGNvbnZlcnRlZCB0byBhbiBgYHN0ZDo6c3Ry aW5nYGAgd2l0aCBgYHRvX3N0cmluZyhvdXQpYGAuCistICBcZW5kcnN0CistICovCistdGVtcGxh dGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTSVpFID0gaW5saW5lX2J1ZmZlcl9zaXplLAorLSAgICAg ICAgICB0eXBlbmFtZSBBbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxUPj4KKy1jbGFzcyBiYXNp Y19tZW1vcnlfYnVmZmVyIGZpbmFsIDogcHVibGljIGRldGFpbDo6YnVmZmVyPFQ+IHsKKy0gcHJp dmF0ZToKKy0gIFQgc3RvcmVfW1NJWkVdOworLQorLSAgLy8gRG9uJ3QgaW5oZXJpdCBmcm9tIEFs bG9jYXRvciBhdm9pZCBnZW5lcmF0aW5nIHR5cGVfaW5mbyBmb3IgaXQuCistICBBbGxvY2F0b3Ig YWxsb2NfOworLQorLSAgLy8gRGVhbGxvY2F0ZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBidWZm ZXIuCistICBGTVRfQ09OU1RFWFBSMjAgdm9pZCBkZWFsbG9jYXRlKCkgeworLSAgICBUKiBkYXRh ID0gdGhpcy0+ZGF0YSgpOworLSAgICBpZiAoZGF0YSAhPSBzdG9yZV8pIGFsbG9jXy5kZWFsbG9j YXRlKGRhdGEsIHRoaXMtPmNhcGFjaXR5KCkpOworLSAgfQorLQorLSBwcm90ZWN0ZWQ6CistICBG TVRfQ09OU1RFWFBSMjAgdm9pZCBncm93KHNpemVfdCBzaXplKSBvdmVycmlkZTsKKy0KKy0gcHVi bGljOgorLSAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7CistICB1c2luZyBjb25zdF9yZWZlcmVuY2Ug PSBjb25zdCBUJjsKKy0KKy0gIEZNVF9DT05TVEVYUFIyMCBleHBsaWNpdCBiYXNpY19tZW1vcnlf YnVmZmVyKAorLSAgICAgIGNvbnN0IEFsbG9jYXRvciYgYWxsb2MgPSBBbGxvY2F0b3IoKSkKKy0g ICAgICA6IGFsbG9jXyhhbGxvYykgeworLSAgICB0aGlzLT5zZXQoc3RvcmVfLCBTSVpFKTsKKy0g ICAgaWYgKGRldGFpbDo6aXNfY29uc3RhbnRfZXZhbHVhdGVkKCkpIHsKKy0gICAgICBkZXRhaWw6 OmZpbGxfbihzdG9yZV8sIFNJWkUsIFR7fSk7CistICAgIH0KKy0gIH0KKy0gIEZNVF9DT05TVEVY UFIyMCB+YmFzaWNfbWVtb3J5X2J1ZmZlcigpIHsgZGVhbGxvY2F0ZSgpOyB9CistCistIHByaXZh dGU6CistICAvLyBNb3ZlIGRhdGEgZnJvbSBvdGhlciB0byB0aGlzIGJ1ZmZlci4KKy0gIEZNVF9D T05TVEVYUFIyMCB2b2lkIG1vdmUoYmFzaWNfbWVtb3J5X2J1ZmZlciYgb3RoZXIpIHsKKy0gICAg YWxsb2NfID0gc3RkOjptb3ZlKG90aGVyLmFsbG9jXyk7CistICAgIFQqIGRhdGEgPSBvdGhlci5k YXRhKCk7CistICAgIHNpemVfdCBzaXplID0gb3RoZXIuc2l6ZSgpLCBjYXBhY2l0eSA9IG90aGVy LmNhcGFjaXR5KCk7CistICAgIGlmIChkYXRhID09IG90aGVyLnN0b3JlXykgeworLSAgICAgIHRo aXMtPnNldChzdG9yZV8sIGNhcGFjaXR5KTsKKy0gICAgICBpZiAoZGV0YWlsOjppc19jb25zdGFu dF9ldmFsdWF0ZWQoKSkgeworLSAgICAgICAgZGV0YWlsOjpjb3B5X3N0cjxUPihvdGhlci5zdG9y ZV8sIG90aGVyLnN0b3JlXyArIHNpemUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl dGFpbDo6bWFrZV9jaGVja2VkKHN0b3JlXywgY2FwYWNpdHkpKTsKKy0gICAgICB9IGVsc2Ugewor LSAgICAgICAgc3RkOjp1bmluaXRpYWxpemVkX2NvcHkob3RoZXIuc3RvcmVfLCBvdGhlci5zdG9y ZV8gKyBzaXplLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOjptYWtl X2NoZWNrZWQoc3RvcmVfLCBjYXBhY2l0eSkpOworLSAgICAgIH0KKy0gICAgfSBlbHNlIHsKKy0g ICAgICB0aGlzLT5zZXQoZGF0YSwgY2FwYWNpdHkpOworLSAgICAgIC8vIFNldCBwb2ludGVyIHRv IHRoZSBpbmxpbmUgYXJyYXkgc28gdGhhdCBkZWxldGUgaXMgbm90IGNhbGxlZAorLSAgICAgIC8v IHdoZW4gZGVhbGxvY2F0aW5nLgorLSAgICAgIG90aGVyLnNldChvdGhlci5zdG9yZV8sIDApOwor LSAgICB9CistICAgIHRoaXMtPnJlc2l6ZShzaXplKTsKKy0gIH0KKy0KKy0gcHVibGljOgorLSAg LyoqCistICAgIFxyc3QKKy0gICAgQ29uc3RydWN0cyBhIDpjbGFzczpgZm10OjpiYXNpY19tZW1v cnlfYnVmZmVyYCBvYmplY3QgbW92aW5nIHRoZSBjb250ZW50CistICAgIG9mIHRoZSBvdGhlciBv YmplY3QgdG8gaXQuCistICAgIFxlbmRyc3QKKy0gICAqLworLSAgRk1UX0NPTlNURVhQUjIwIGJh c2ljX21lbW9yeV9idWZmZXIoYmFzaWNfbWVtb3J5X2J1ZmZlciYmIG90aGVyKQorLSAgICAgIEZN VF9OT0VYQ0VQVCB7CistICAgIG1vdmUob3RoZXIpOworLSAgfQorLQorLSAgLyoqCistICAgIFxy c3QKKy0gICAgTW92ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIG90aGVyIGBgYmFzaWNfbWVtb3J5X2J1 ZmZlcmBgIG9iamVjdCB0byB0aGlzIG9uZS4KKy0gICAgXGVuZHJzdAorLSAgICovCistICBhdXRv IG9wZXJhdG9yPShiYXNpY19tZW1vcnlfYnVmZmVyJiYgb3RoZXIpIEZNVF9OT0VYQ0VQVAorLSAg ICAgIC0+IGJhc2ljX21lbW9yeV9idWZmZXImIHsKKy0gICAgRk1UX0FTU0VSVCh0aGlzICE9ICZv dGhlciwgIiIpOworLSAgICBkZWFsbG9jYXRlKCk7CistICAgIG1vdmUob3RoZXIpOworLSAgICBy ZXR1cm4gKnRoaXM7CistICB9CistCistICAvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgYWxsb2Nh dG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlci4KKy0gIGF1dG8gZ2V0X2FsbG9jYXRvcigp IGNvbnN0IC0+IEFsbG9jYXRvciB7IHJldHVybiBhbGxvY187IH0KKy0KKy0gIC8qKgorLSAgICBS ZXNpemVzIHRoZSBidWZmZXIgdG8gY29udGFpbiAqY291bnQqIGVsZW1lbnRzLiBJZiBUIGlzIGEg UE9EIHR5cGUgbmV3CistICAgIGVsZW1lbnRzIG1heSBub3QgYmUgaW5pdGlhbGl6ZWQuCistICAg Ki8KKy0gIEZNVF9DT05TVEVYUFIyMCB2b2lkIHJlc2l6ZShzaXplX3QgY291bnQpIHsgdGhpcy0+ dHJ5X3Jlc2l6ZShjb3VudCk7IH0KKy0KKy0gIC8qKiBJbmNyZWFzZXMgdGhlIGJ1ZmZlciBjYXBh Y2l0eSB0byAqbmV3X2NhcGFjaXR5Ki4gKi8KKy0gIHZvaWQgcmVzZXJ2ZShzaXplX3QgbmV3X2Nh cGFjaXR5KSB7IHRoaXMtPnRyeV9yZXNlcnZlKG5ld19jYXBhY2l0eSk7IH0KKy0KKy0gIC8vIERp cmVjdGx5IGFwcGVuZCBkYXRhIGludG8gdGhlIGJ1ZmZlcgorLSAgdXNpbmcgZGV0YWlsOjpidWZm ZXI8VD46OmFwcGVuZDsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDb250aWd1b3VzUmFuZ2U+Cist ICB2b2lkIGFwcGVuZChjb25zdCBDb250aWd1b3VzUmFuZ2UmIHJhbmdlKSB7CistICAgIGFwcGVu ZChyYW5nZS5kYXRhKCksIHJhbmdlLmRhdGEoKSArIHJhbmdlLnNpemUoKSk7CistICB9CistfTsK Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNJWkUsIHR5cGVuYW1lIEFsbG9jYXRv cj4KKy1GTVRfQ09OU1RFWFBSMjAgdm9pZCBiYXNpY19tZW1vcnlfYnVmZmVyPFQsIFNJWkUsIEFs bG9jYXRvcj46Omdyb3coCistICAgIHNpemVfdCBzaXplKSB7CistI2lmZGVmIEZNVF9GVVpaCist ICBpZiAoc2l6ZSA+IDUwMDApIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiZnV6eiBtb2RlIC0g d29uJ3QgZ3JvdyB0aGF0IG11Y2giKTsKKy0jZW5kaWYKKy0gIGNvbnN0IHNpemVfdCBtYXhfc2l6 ZSA9IHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxBbGxvY2F0b3I+OjptYXhfc2l6ZShhbGxvY18pOwor LSAgc2l6ZV90IG9sZF9jYXBhY2l0eSA9IHRoaXMtPmNhcGFjaXR5KCk7CistICBzaXplX3QgbmV3 X2NhcGFjaXR5ID0gb2xkX2NhcGFjaXR5ICsgb2xkX2NhcGFjaXR5IC8gMjsKKy0gIGlmIChzaXpl ID4gbmV3X2NhcGFjaXR5KQorLSAgICBuZXdfY2FwYWNpdHkgPSBzaXplOworLSAgZWxzZSBpZiAo bmV3X2NhcGFjaXR5ID4gbWF4X3NpemUpCistICAgIG5ld19jYXBhY2l0eSA9IHNpemUgPiBtYXhf c2l6ZSA/IHNpemUgOiBtYXhfc2l6ZTsKKy0gIFQqIG9sZF9kYXRhID0gdGhpcy0+ZGF0YSgpOwor LSAgVCogbmV3X2RhdGEgPQorLSAgICAgIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxBbGxvY2F0b3I+ OjphbGxvY2F0ZShhbGxvY18sIG5ld19jYXBhY2l0eSk7CistICAvLyBUaGUgZm9sbG93aW5nIGNv ZGUgZG9lc24ndCB0aHJvdywgc28gdGhlIHJhdyBwb2ludGVyIGFib3ZlIGRvZXNuJ3QgbGVhay4K Ky0gIHN0ZDo6dW5pbml0aWFsaXplZF9jb3B5KG9sZF9kYXRhLCBvbGRfZGF0YSArIHRoaXMtPnNp emUoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6bWFrZV9jaGVja2VkKG5l d19kYXRhLCBuZXdfY2FwYWNpdHkpKTsKKy0gIHRoaXMtPnNldChuZXdfZGF0YSwgbmV3X2NhcGFj aXR5KTsKKy0gIC8vIGRlYWxsb2NhdGUgbXVzdCBub3QgdGhyb3cgYWNjb3JkaW5nIHRvIHRoZSBz dGFuZGFyZCwgYnV0IGV2ZW4gaWYgaXQgZG9lcywKKy0gIC8vIHRoZSBidWZmZXIgYWxyZWFkeSB1 c2VzIHRoZSBuZXcgc3RvcmFnZSBhbmQgd2lsbCBkZWFsbG9jYXRlIGl0IGluCistICAvLyBkZXN0 cnVjdG9yLgorLSAgaWYgKG9sZF9kYXRhICE9IHN0b3JlXykgYWxsb2NfLmRlYWxsb2NhdGUob2xk X2RhdGEsIG9sZF9jYXBhY2l0eSk7CistfQorLQorLXVzaW5nIG1lbW9yeV9idWZmZXIgPSBiYXNp Y19tZW1vcnlfYnVmZmVyPGNoYXI+OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3Qg U0laRSwgdHlwZW5hbWUgQWxsb2NhdG9yPgorLXN0cnVjdCBpc19jb250aWd1b3VzPGJhc2ljX21l bW9yeV9idWZmZXI8VCwgU0laRSwgQWxsb2NhdG9yPj4gOiBzdGQ6OnRydWVfdHlwZSB7CistfTsK Ky0KKy1uYW1lc3BhY2UgZGV0YWlsIHsKKy1GTVRfQVBJIHZvaWQgcHJpbnQoc3RkOjpGSUxFKiwg c3RyaW5nX3ZpZXcpOworLX0KKy0KKy0vKiogQSBmb3JtYXR0aW5nIGVycm9yIHN1Y2ggYXMgaW52 YWxpZCBmb3JtYXQgc3RyaW5nLiAqLworLUZNVF9DTEFTU19BUEkKKy1jbGFzcyBGTVRfQVBJIGZv cm1hdF9lcnJvciA6IHB1YmxpYyBzdGQ6OnJ1bnRpbWVfZXJyb3IgeworLSBwdWJsaWM6CistICBl eHBsaWNpdCBmb3JtYXRfZXJyb3IoY29uc3QgY2hhciogbWVzc2FnZSkgOiBzdGQ6OnJ1bnRpbWVf ZXJyb3IobWVzc2FnZSkge30KKy0gIGV4cGxpY2l0IGZvcm1hdF9lcnJvcihjb25zdCBzdGQ6OnN0 cmluZyYgbWVzc2FnZSkKKy0gICAgICA6IHN0ZDo6cnVudGltZV9lcnJvcihtZXNzYWdlKSB7fQor LSAgZm9ybWF0X2Vycm9yKGNvbnN0IGZvcm1hdF9lcnJvciYpID0gZGVmYXVsdDsKKy0gIGZvcm1h dF9lcnJvciYgb3BlcmF0b3I9KGNvbnN0IGZvcm1hdF9lcnJvciYpID0gZGVmYXVsdDsKKy0gIGZv cm1hdF9lcnJvcihmb3JtYXRfZXJyb3ImJikgPSBkZWZhdWx0OworLSAgZm9ybWF0X2Vycm9yJiBv cGVyYXRvcj0oZm9ybWF0X2Vycm9yJiYpID0gZGVmYXVsdDsKKy0gIH5mb3JtYXRfZXJyb3IoKSBG TVRfTk9FWENFUFQgb3ZlcnJpZGUgRk1UX01TQ19ERUZBVUxUOworLX07CistCistLyoqCistICBc cnN0CistICBDb25zdHJ1Y3RzIGEgYH5mbXQ6OmZvcm1hdF9hcmdfc3RvcmVgIG9iamVjdCB0aGF0 IGNvbnRhaW5zIHJlZmVyZW5jZXMKKy0gIHRvIGFyZ3VtZW50cyBhbmQgY2FuIGJlIGltcGxpY2l0 bHkgY29udmVydGVkIHRvIGB+Zm10Ojpmb3JtYXRfYXJnc2AuCistICBJZiBgYGZtdGBgIGlzIGEg Y29tcGlsZS10aW1lIHN0cmluZyB0aGVuIGBtYWtlX2FyZ3NfY2hlY2tlZGAgY2hlY2tzCistICBp dHMgdmFsaWRpdHkgYXQgY29tcGlsZSB0aW1lLgorLSAgXGVuZHJzdAorLSAqLworLXRlbXBsYXRl IDx0eXBlbmFtZS4uLiBBcmdzLCB0eXBlbmFtZSBTLCB0eXBlbmFtZSBDaGFyID0gY2hhcl90PFM+ PgorLUZNVF9JTkxJTkUgYXV0byBtYWtlX2FyZ3NfY2hlY2tlZChjb25zdCBTJiBmbXQsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZV9yZWZlcmVuY2VfdDxB cmdzPiYuLi4gYXJncykKKy0gICAgLT4gZm9ybWF0X2FyZ19zdG9yZTxidWZmZXJfY29udGV4dDxD aGFyPiwgcmVtb3ZlX3JlZmVyZW5jZV90PEFyZ3M+Li4uPiB7CistICBzdGF0aWNfYXNzZXJ0KAor LSAgICAgIGRldGFpbDo6Y291bnQ8KAorLSAgICAgICAgICAgICAgc3RkOjppc19iYXNlX29mPGRl dGFpbDo6dmlldywgcmVtb3ZlX3JlZmVyZW5jZV90PEFyZ3M+Pjo6dmFsdWUgJiYKKy0gICAgICAg ICAgICAgIHN0ZDo6aXNfcmVmZXJlbmNlPEFyZ3M+Ojp2YWx1ZSkuLi4+KCkgPT0gMCwKKy0gICAg ICAicGFzc2luZyB2aWV3cyBhcyBsdmFsdWVzIGlzIGRpc2FsbG93ZWQiKTsKKy0gIGRldGFpbDo6 Y2hlY2tfZm9ybWF0X3N0cmluZzxBcmdzLi4uPihmbXQpOworLSAgcmV0dXJuIHthcmdzLi4ufTsK Ky19CistCistLy8gY29tcGlsZS10aW1lIHN1cHBvcnQKKy1uYW1lc3BhY2UgZGV0YWlsX2V4cG9y dGVkIHsKKy0jaWYgRk1UX1VTRV9OT05UWVBFX1RFTVBMQVRFX1BBUkFNRVRFUlMKKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgQ2hhciwgc2l6ZV90IE4+IHN0cnVjdCBmaXhlZF9zdHJpbmcgeworLSAgY29u c3RleHByIGZpeGVkX3N0cmluZyhjb25zdCBDaGFyICgmc3RyKVtOXSkgeworLSAgICBkZXRhaWw6 OmNvcHlfc3RyPENoYXIsIGNvbnN0IENoYXIqLCBDaGFyKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ2hh cio+KHN0ciksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHIgKyBOLCBkYXRhKTsKKy0gIH0KKy0gIENoYXIgZGF0YVtOXXt9OworLX07CistI2VuZGlm CistCistLy8gQ29udmVydHMgYSBjb21waWxlLXRpbWUgc3RyaW5nIHRvIGJhc2ljX3N0cmluZ192 aWV3LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCBzaXplX3QgTj4KKy1jb25zdGV4cHIgYXV0 byBjb21waWxlX3N0cmluZ190b192aWV3KGNvbnN0IENoYXIgKCZzKVtOXSkKKy0gICAgLT4gYmFz aWNfc3RyaW5nX3ZpZXc8Q2hhcj4geworLSAgLy8gUmVtb3ZlIHRyYWlsaW5nIE5VTCBjaGFyYWN0 ZXIgaWYgbmVlZGVkLiBXb24ndCBiZSBwcmVzZW50IGlmIHRoaXMgaXMgdXNlZAorLSAgLy8gd2l0 aCBhIHJhdyBjaGFyYWN0ZXIgYXJyYXkgKGkuZS4gbm90IGRlZmluZWQgYXMgYSBzdHJpbmcpLgor LSAgcmV0dXJuIHtzLCBOIC0gKHN0ZDo6Y2hhcl90cmFpdHM8Q2hhcj46OnRvX2ludF90eXBlKHNb TiAtIDFdKSA9PSAwID8gMSA6IDApfTsKKy19CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+Cist Y29uc3RleHByIGF1dG8gY29tcGlsZV9zdHJpbmdfdG9fdmlldyhkZXRhaWw6OnN0ZF9zdHJpbmdf dmlldzxDaGFyPiBzKQorLSAgICAtPiBiYXNpY19zdHJpbmdfdmlldzxDaGFyPiB7CistICByZXR1 cm4ge3MuZGF0YSgpLCBzLnNpemUoKX07CistfQorLX0gIC8vIG5hbWVzcGFjZSBkZXRhaWxfZXhw b3J0ZWQKKy0KKy1GTVRfQkVHSU5fREVUQUlMX05BTUVTUEFDRQorLQorLXRlbXBsYXRlIDx0eXBl bmFtZSBUPiBzdHJ1Y3QgaXNfaW50ZWdyYWwgOiBzdGQ6OmlzX2ludGVncmFsPFQ+IHt9OworLXRl bXBsYXRlIDw+IHN0cnVjdCBpc19pbnRlZ3JhbDxpbnQxMjhfdD4gOiBzdGQ6OnRydWVfdHlwZSB7 fTsKKy10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dWludDEyOF90PiA6IHN0ZDo6dHJ1 ZV90eXBlIHt9OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXVzaW5nIGlzX3NpZ25lZCA9 CistICAgIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgc3RkOjpudW1lcmljX2xpbWl0czxU Pjo6aXNfc2lnbmVkIHx8CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 ZDo6aXNfc2FtZTxULCBpbnQxMjhfdD46OnZhbHVlPjsKKy0KKy0vLyBSZXR1cm5zIHRydWUgaWYg dmFsdWUgaXMgbmVnYXRpdmUsIGZhbHNlIG90aGVyd2lzZS4KKy0vLyBTYW1lIGFzIGB2YWx1ZSA8 IDBgIGJ1dCBkb2Vzbid0IHByb2R1Y2Ugd2FybmluZ3MgaWYgVCBpcyBhbiB1bnNpZ25lZCB0eXBl LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKGlzX3NpZ25lZDxUPjo6dmFs dWUpPgorLUZNVF9DT05TVEVYUFIgYXV0byBpc19uZWdhdGl2ZShUIHZhbHVlKSAtPiBib29sIHsK Ky0gIHJldHVybiB2YWx1ZSA8IDA7CistfQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5B QkxFX0lGKCFpc19zaWduZWQ8VD46OnZhbHVlKT4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gaXNfbmVn YXRpdmUoVCkgLT4gYm9vbCB7CistICByZXR1cm4gZmFsc2U7CistfQorLQorLXRlbXBsYXRlIDx0 eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVl KT4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gaXNfc3VwcG9ydGVkX2Zsb2F0aW5nX3BvaW50KFQpIC0+ IHVpbnQxNl90IHsKKy0gIHJldHVybiAoc3RkOjppc19zYW1lPFQsIGZsb2F0Pjo6dmFsdWUgJiYg Rk1UX1VTRV9GTE9BVCkgfHwKKy0gICAgICAgICAoc3RkOjppc19zYW1lPFQsIGRvdWJsZT46OnZh bHVlICYmIEZNVF9VU0VfRE9VQkxFKSB8fAorLSAgICAgICAgIChzdGQ6OmlzX3NhbWU8VCwgbG9u ZyBkb3VibGU+Ojp2YWx1ZSAmJiBGTVRfVVNFX0xPTkdfRE9VQkxFKTsKKy19CistCistLy8gU21h bGxlc3Qgb2YgdWludDMyX3QsIHVpbnQ2NF90LCB1aW50MTI4X3QgdGhhdCBpcyBsYXJnZSBlbm91 Z2ggdG8KKy0vLyByZXByZXNlbnQgYWxsIHZhbHVlcyBvZiBhbiBpbnRlZ3JhbCB0eXBlIFQuCist dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdXNpbmcgdWludDMyX29yXzY0X29yXzEyOF90ID0KKy0g ICAgY29uZGl0aW9uYWxfdDxudW1fYml0czxUPigpIDw9IDMyICYmICFGTVRfUkVEVUNFX0lOVF9J TlNUQU5USUFUSU9OUywKKy0gICAgICAgICAgICAgICAgICB1aW50MzJfdCwKKy0gICAgICAgICAg ICAgICAgICBjb25kaXRpb25hbF90PG51bV9iaXRzPFQ+KCkgPD0gNjQsIHVpbnQ2NF90LCB1aW50 MTI4X3Q+PjsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy11c2luZyB1aW50NjRfb3JfMTI4X3Qg PSBjb25kaXRpb25hbF90PG51bV9iaXRzPFQ+KCkgPD0gNjQsIHVpbnQ2NF90LCB1aW50MTI4X3Q+ OworLQorLSNkZWZpbmUgRk1UX1BPV0VSU19PRl8xMChmYWN0b3IpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgZmFjdG9yICogMTAsIChmYWN0b3IpKjEw MCwgKGZhY3RvcikqMTAwMCwgKGZhY3RvcikqMTAwMDAsIChmYWN0b3IpKjEwMDAwMCwgXAorLSAg ICAgIChmYWN0b3IpKjEwMDAwMDAsIChmYWN0b3IpKjEwMDAwMDAwLCAoZmFjdG9yKSoxMDAwMDAw MDAsICAgICAgICAgICAgICAgXAorLSAgICAgIChmYWN0b3IpKjEwMDAwMDAwMDAKKy0KKy0vLyBD b252ZXJ0cyB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMCkgdG8gYSBzdHJpbmcuCistY29uc3Rl eHByIGNvbnN0IGNoYXIqIGRpZ2l0czIoc2l6ZV90IHZhbHVlKSB7CistICAvLyBHQ0MgZ2VuZXJh dGVzIHNsaWdodGx5IGJldHRlciBjb2RlIHdoZW4gdmFsdWUgaXMgcG9pbnRlci1zaXplLgorLSAg cmV0dXJuICYiMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOSIKKy0gICAg ICAgICAiMjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOSIKKy0gICAgICAg ICAiNDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OSIKKy0gICAgICAgICAi NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OSIKKy0gICAgICAgICAiODA4 MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OSJbdmFsdWUgKiAyXTsKKy19Cist CistLy8gU2lnbiBpcyBhIHRlbXBsYXRlIHBhcmFtZXRlciB0byB3b3JrYXJvdW5kIGEgYnVnIGlu IGdjYyA0LjguCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFNpZ24+IGNvbnN0 ZXhwciBDaGFyIHNpZ24oU2lnbiBzKSB7CistI2lmICFGTVRfR0NDX1ZFUlNJT04gfHwgRk1UX0dD Q19WRVJTSU9OID49IDYwNAorLSAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8U2lnbiwgc2ln bl90Pjo6dmFsdWUsICIiKTsKKy0jZW5kaWYKKy0gIHJldHVybiBzdGF0aWNfY2FzdDxDaGFyPigi XDAtKyAiW3NdKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEZNVF9DT05TVEVYUFIg YXV0byBjb3VudF9kaWdpdHNfZmFsbGJhY2soVCBuKSAtPiBpbnQgeworLSAgaW50IGNvdW50ID0g MTsKKy0gIGZvciAoOzspIHsKKy0gICAgLy8gSW50ZWdlciBkaXZpc2lvbiBpcyBzbG93IHNvIGRv IGl0IGZvciBhIGdyb3VwIG9mIGZvdXIgZGlnaXRzIGluc3RlYWQKKy0gICAgLy8gb2YgZm9yIGV2 ZXJ5IGRpZ2l0LiBUaGUgaWRlYSBjb21lcyBmcm9tIHRoZSB0YWxrIGJ5IEFsZXhhbmRyZXNjdQor LSAgICAvLyAiVGhyZWUgT3B0aW1pemF0aW9uIFRpcHMgZm9yIEMrKyIuIFNlZSBzcGVlZC10ZXN0 IGZvciBhIGNvbXBhcmlzb24uCistICAgIGlmIChuIDwgMTApIHJldHVybiBjb3VudDsKKy0gICAg aWYgKG4gPCAxMDApIHJldHVybiBjb3VudCArIDE7CistICAgIGlmIChuIDwgMTAwMCkgcmV0dXJu IGNvdW50ICsgMjsKKy0gICAgaWYgKG4gPCAxMDAwMCkgcmV0dXJuIGNvdW50ICsgMzsKKy0gICAg biAvPSAxMDAwMHU7CistICAgIGNvdW50ICs9IDQ7CistICB9CistfQorLSNpZiBGTVRfVVNFX0lO VDEyOAorLUZNVF9DT05TVEVYUFIgaW5saW5lIGF1dG8gY291bnRfZGlnaXRzKHVpbnQxMjhfdCBu KSAtPiBpbnQgeworLSAgcmV0dXJuIGNvdW50X2RpZ2l0c19mYWxsYmFjayhuKTsKKy19CistI2Vu ZGlmCistCistI2lmZGVmIEZNVF9CVUlMVElOX0NMWkxMCistLy8gSXQgaXMgYSBzZXBhcmF0ZSBm dW5jdGlvbiByYXRoZXIgdGhhbiBhIHBhcnQgb2YgY291bnRfZGlnaXRzIHRvIHdvcmthcm91bmQK Ky0vLyB0aGUgbGFjayBvZiBzdGF0aWMgY29uc3RleHByIGluIGNvbnN0ZXhwciBmdW5jdGlvbnMu CistaW5saW5lIGF1dG8gZG9fY291bnRfZGlnaXRzKHVpbnQ2NF90IG4pIC0+IGludCB7CistICAv LyBUaGlzIGhhcyBjb21wYXJhYmxlIHBlcmZvcm1hbmNlIHRvIHRoZSB2ZXJzaW9uIGJ5IEtlbmRh bGwgV2lsbGV0cworLSAgLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9mbXRsaWIvZm9ybWF0LWJlbmNo bWFyay9ibG9iL21hc3Rlci9kaWdpdHMxMCkKKy0gIC8vIGJ1dCB1c2VzIHNtYWxsZXIgdGFibGVz LgorLSAgLy8gTWFwcyBic3IobikgdG8gY2VpbChsb2cxMChwb3coMiwgYnNyKG4pICsgMSkgLSAx KSkuCistICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgYnNyMmxvZzEwW10gPSB7CistICAgICAg MSwgIDEsICAxLCAgMiwgIDIsICAyLCAgMywgIDMsICAzLCAgNCwgIDQsICA0LCAgNCwgIDUsICA1 LCAgNSwKKy0gICAgICA2LCAgNiwgIDYsICA3LCAgNywgIDcsICA3LCAgOCwgIDgsICA4LCAgOSwg IDksICA5LCAgMTAsIDEwLCAxMCwKKy0gICAgICAxMCwgMTEsIDExLCAxMSwgMTIsIDEyLCAxMiwg MTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE1LCAxNSwKKy0gICAgICAxNSwgMTYsIDE2LCAx NiwgMTYsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE5LCAxOSwgMTksIDE5LCAyMH07CistICBh dXRvIHQgPSBic3IybG9nMTBbRk1UX0JVSUxUSU5fQ0xaTEwobiB8IDEpIF4gNjNdOworLSAgc3Rh dGljIGNvbnN0ZXhwciBjb25zdCB1aW50NjRfdCB6ZXJvX29yX3Bvd2Vyc19vZl8xMFtdID0gewor LSAgICAgIDAsIDAsIEZNVF9QT1dFUlNfT0ZfMTAoMVUpLCBGTVRfUE9XRVJTX09GXzEwKDEwMDAw MDAwMDBVTEwpLAorLSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwVUxMfTsKKy0gIHJldHVybiB0 IC0gKG4gPCB6ZXJvX29yX3Bvd2Vyc19vZl8xMFt0XSk7CistfQorLSNlbmRpZgorLQorLS8vIFJl dHVybnMgdGhlIG51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyBpbiBuLiBMZWFkaW5nIHplcm9zIGFy ZSBub3QgY291bnRlZAorLS8vIGV4Y2VwdCBmb3IgbiA9PSAwIGluIHdoaWNoIGNhc2UgY291bnRf ZGlnaXRzIHJldHVybnMgMS4KKy1GTVRfQ09OU1RFWFBSMjAgaW5saW5lIGF1dG8gY291bnRfZGln aXRzKHVpbnQ2NF90IG4pIC0+IGludCB7CistI2lmZGVmIEZNVF9CVUlMVElOX0NMWkxMCistICBp ZiAoIWlzX2NvbnN0YW50X2V2YWx1YXRlZCgpKSB7CistICAgIHJldHVybiBkb19jb3VudF9kaWdp dHMobik7CistICB9CistI2VuZGlmCistICByZXR1cm4gY291bnRfZGlnaXRzX2ZhbGxiYWNrKG4p OworLX0KKy0KKy0vLyBDb3VudHMgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gbi4gQklUUyA9IGxv ZzIocmFkaXgpLgorLXRlbXBsYXRlIDxpbnQgQklUUywgdHlwZW5hbWUgVUludD4KKy1GTVRfQ09O U1RFWFBSIGF1dG8gY291bnRfZGlnaXRzKFVJbnQgbikgLT4gaW50IHsKKy0jaWZkZWYgRk1UX0JV SUxUSU5fQ0xaCistICBpZiAobnVtX2JpdHM8VUludD4oKSA9PSAzMikKKy0gICAgcmV0dXJuIChG TVRfQlVJTFRJTl9DTFooc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG4pIHwgMSkgXiAzMSkgLyBCSVRT ICsgMTsKKy0jZW5kaWYKKy0gIC8vIExhbWJkYSBhdm9pZHMgdW5yZWFjaGFibGUgY29kZSB3YXJu aW5ncyBmcm9tIE5WSFBDLgorLSAgcmV0dXJuIFtdKFVJbnQgbSkgeworLSAgICBpbnQgbnVtX2Rp Z2l0cyA9IDA7CistICAgIGRvIHsKKy0gICAgICArK251bV9kaWdpdHM7CistICAgIH0gd2hpbGUg KChtID4+PSBCSVRTKSAhPSAwKTsKKy0gICAgcmV0dXJuIG51bV9kaWdpdHM7CistICB9KG4pOwor LX0KKy0KKy10ZW1wbGF0ZSA8PiBhdXRvIGNvdW50X2RpZ2l0czw0PihkZXRhaWw6OmZhbGxiYWNr X3VpbnRwdHIgbikgLT4gaW50OworLQorLSNpZmRlZiBGTVRfQlVJTFRJTl9DTFoKKy0vLyBJdCBp cyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgcGFydCBvZiBjb3VudF9kaWdpdHMg dG8gd29ya2Fyb3VuZAorLS8vIHRoZSBsYWNrIG9mIHN0YXRpYyBjb25zdGV4cHIgaW4gY29uc3Rl eHByIGZ1bmN0aW9ucy4KKy1GTVRfSU5MSU5FIGF1dG8gZG9fY291bnRfZGlnaXRzKHVpbnQzMl90 IG4pIC0+IGludCB7CistLy8gQW4gb3B0aW1pemF0aW9uIGJ5IEtlbmRhbGwgV2lsbGV0cyBmcm9t IGh0dHBzOi8vYml0Lmx5LzN1T0lRckIuCistLy8gVGhpcyBpbmNyZW1lbnRzIHRoZSB1cHBlciAz MiBiaXRzIChsb2cxMChUKSAtIDEpIHdoZW4gPj0gVCBpcyBhZGRlZC4KKy0jICBkZWZpbmUgRk1U X0lOQyhUKSAoKChzaXplb2YoIyAgVCkgLSAxdWxsKSA8PCAzMikgLSBUKQorLSAgc3RhdGljIGNv bnN0ZXhwciB1aW50NjRfdCB0YWJsZVtdID0geworLSAgICAgIEZNVF9JTkMoMCksICAgICAgICAg IEZNVF9JTkMoMCksICAgICAgICAgIEZNVF9JTkMoMCksICAgICAgICAgICAvLyA4CistICAgICAg Rk1UX0lOQygxMCksICAgICAgICAgRk1UX0lOQygxMCksICAgICAgICAgRk1UX0lOQygxMCksICAg ICAgICAgIC8vIDY0CistICAgICAgRk1UX0lOQygxMDApLCAgICAgICAgRk1UX0lOQygxMDApLCAg ICAgICAgRk1UX0lOQygxMDApLCAgICAgICAgIC8vIDUxMgorLSAgICAgIEZNVF9JTkMoMTAwMCks ICAgICAgIEZNVF9JTkMoMTAwMCksICAgICAgIEZNVF9JTkMoMTAwMCksICAgICAgICAvLyA0MDk2 CistICAgICAgRk1UX0lOQygxMDAwMCksICAgICAgRk1UX0lOQygxMDAwMCksICAgICAgRk1UX0lO QygxMDAwMCksICAgICAgIC8vIDMyaworLSAgICAgIEZNVF9JTkMoMTAwMDAwKSwgICAgIEZNVF9J TkMoMTAwMDAwKSwgICAgIEZNVF9JTkMoMTAwMDAwKSwgICAgICAvLyAyNTZrCistICAgICAgRk1U X0lOQygxMDAwMDAwKSwgICAgRk1UX0lOQygxMDAwMDAwKSwgICAgRk1UX0lOQygxMDAwMDAwKSwg ICAgIC8vIDIwNDhrCistICAgICAgRk1UX0lOQygxMDAwMDAwMCksICAgRk1UX0lOQygxMDAwMDAw MCksICAgRk1UX0lOQygxMDAwMDAwMCksICAgIC8vIDE2TQorLSAgICAgIEZNVF9JTkMoMTAwMDAw MDAwKSwgIEZNVF9JTkMoMTAwMDAwMDAwKSwgIEZNVF9JTkMoMTAwMDAwMDAwKSwgICAvLyAxMjhN CistICAgICAgRk1UX0lOQygxMDAwMDAwMDAwKSwgRk1UX0lOQygxMDAwMDAwMDAwKSwgRk1UX0lO QygxMDAwMDAwMDAwKSwgIC8vIDEwMjRNCistICAgICAgRk1UX0lOQygxMDAwMDAwMDAwKSwgRk1U X0lOQygxMDAwMDAwMDAwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIDRCCistICB9OworLSAg YXV0byBpbmMgPSB0YWJsZVtGTVRfQlVJTFRJTl9DTFoobiB8IDEpIF4gMzFdOworLSAgcmV0dXJu IHN0YXRpY19jYXN0PGludD4oKG4gKyBpbmMpID4+IDMyKTsKKy19CistI2VuZGlmCistCistLy8g T3B0aW9uYWwgdmVyc2lvbiBvZiBjb3VudF9kaWdpdHMgZm9yIGJldHRlciBwZXJmb3JtYW5jZSBv biAzMi1iaXQgcGxhdGZvcm1zLgorLUZNVF9DT05TVEVYUFIyMCBpbmxpbmUgYXV0byBjb3VudF9k aWdpdHModWludDMyX3QgbikgLT4gaW50IHsKKy0jaWZkZWYgRk1UX0JVSUxUSU5fQ0xaCistICBp ZiAoIWlzX2NvbnN0YW50X2V2YWx1YXRlZCgpKSB7CistICAgIHJldHVybiBkb19jb3VudF9kaWdp dHMobik7CistICB9CistI2VuZGlmCistICByZXR1cm4gY291bnRfZGlnaXRzX2ZhbGxiYWNrKG4p OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgSW50PiBjb25zdGV4cHIgYXV0byBkaWdpdHMx MCgpIEZNVF9OT0VYQ0VQVCAtPiBpbnQgeworLSAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8 SW50Pjo6ZGlnaXRzMTA7CistfQorLXRlbXBsYXRlIDw+IGNvbnN0ZXhwciBhdXRvIGRpZ2l0czEw PGludDEyOF90PigpIEZNVF9OT0VYQ0VQVCAtPiBpbnQgeworLSAgcmV0dXJuIDM4OworLX0KKy10 ZW1wbGF0ZSA8PiBjb25zdGV4cHIgYXV0byBkaWdpdHMxMDx1aW50MTI4X3Q+KCkgRk1UX05PRVhD RVBUIC0+IGludCB7CistICByZXR1cm4gMzg7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBD aGFyPiBzdHJ1Y3QgdGhvdXNhbmRzX3NlcF9yZXN1bHQgeworLSAgc3RkOjpzdHJpbmcgZ3JvdXBp bmc7CistICBDaGFyIHRob3VzYW5kc19zZXA7CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUg Q2hhcj4KKy1GTVRfQVBJIGF1dG8gdGhvdXNhbmRzX3NlcF9pbXBsKGxvY2FsZV9yZWYgbG9jKSAt PiB0aG91c2FuZHNfc2VwX3Jlc3VsdDxDaGFyPjsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4K Ky1pbmxpbmUgYXV0byB0aG91c2FuZHNfc2VwKGxvY2FsZV9yZWYgbG9jKSAtPiB0aG91c2FuZHNf c2VwX3Jlc3VsdDxDaGFyPiB7CistICBhdXRvIHJlc3VsdCA9IHRob3VzYW5kc19zZXBfaW1wbDxj aGFyPihsb2MpOworLSAgcmV0dXJuIHtyZXN1bHQuZ3JvdXBpbmcsIENoYXIocmVzdWx0LnRob3Vz YW5kc19zZXApfTsKKy19CistdGVtcGxhdGUgPD4KKy1pbmxpbmUgYXV0byB0aG91c2FuZHNfc2Vw KGxvY2FsZV9yZWYgbG9jKSAtPiB0aG91c2FuZHNfc2VwX3Jlc3VsdDx3Y2hhcl90PiB7CistICBy ZXR1cm4gdGhvdXNhbmRzX3NlcF9pbXBsPHdjaGFyX3Q+KGxvYyk7CistfQorLQorLXRlbXBsYXRl IDx0eXBlbmFtZSBDaGFyPgorLUZNVF9BUEkgYXV0byBkZWNpbWFsX3BvaW50X2ltcGwobG9jYWxl X3JlZiBsb2MpIC0+IENoYXI7CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IGlubGluZSBhdXRv IGRlY2ltYWxfcG9pbnQobG9jYWxlX3JlZiBsb2MpIC0+IENoYXIgeworLSAgcmV0dXJuIENoYXIo ZGVjaW1hbF9wb2ludF9pbXBsPGNoYXI+KGxvYykpOworLX0KKy10ZW1wbGF0ZSA8PiBpbmxpbmUg YXV0byBkZWNpbWFsX3BvaW50KGxvY2FsZV9yZWYgbG9jKSAtPiB3Y2hhcl90IHsKKy0gIHJldHVy biBkZWNpbWFsX3BvaW50X2ltcGw8d2NoYXJfdD4obG9jKTsKKy19CistCistLy8gQ29tcGFyZXMg dHdvIGNoYXJhY3RlcnMgZm9yIGVxdWFsaXR5LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBh dXRvIGVxdWFsMihjb25zdCBDaGFyKiBsaHMsIGNvbnN0IGNoYXIqIHJocykgLT4gYm9vbCB7Cist ICByZXR1cm4gbGhzWzBdID09IENoYXIocmhzWzBdKSAmJiBsaHNbMV0gPT0gQ2hhcihyaHNbMV0p OworLX0KKy1pbmxpbmUgYXV0byBlcXVhbDIoY29uc3QgY2hhciogbGhzLCBjb25zdCBjaGFyKiBy aHMpIC0+IGJvb2wgeworLSAgcmV0dXJuIG1lbWNtcChsaHMsIHJocywgMikgPT0gMDsKKy19Cist CistLy8gQ29waWVzIHR3byBjaGFyYWN0ZXJzIGZyb20gc3JjIHRvIGRzdC4KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgQ2hhcj4KKy1GTVRfQ09OU1RFWFBSMjAgRk1UX0lOTElORSB2b2lkIGNvcHkyKENo YXIqIGRzdCwgY29uc3QgY2hhciogc3JjKSB7CistICBpZiAoIWlzX2NvbnN0YW50X2V2YWx1YXRl ZCgpICYmIHNpemVvZihDaGFyKSA9PSBzaXplb2YoY2hhcikpIHsKKy0gICAgbWVtY3B5KGRzdCwg c3JjLCAyKTsKKy0gICAgcmV0dXJuOworLSAgfQorLSAgKmRzdCsrID0gc3RhdGljX2Nhc3Q8Q2hh cj4oKnNyYysrKTsKKy0gICpkc3QgPSBzdGF0aWNfY2FzdDxDaGFyPigqc3JjKTsKKy19CistCist dGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yPiBzdHJ1Y3QgZm9ybWF0X2RlY2ltYWxfcmVzdWx0 IHsKKy0gIEl0ZXJhdG9yIGJlZ2luOworLSAgSXRlcmF0b3IgZW5kOworLX07CistCistLy8gRm9y bWF0cyBhIGRlY2ltYWwgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSB3cml0aW5nIGludG8gb3V0IHBv aW50aW5nIHRvIGEKKy0vLyBidWZmZXIgb2Ygc3BlY2lmaWVkIHNpemUuIFRoZSBjYWxsZXIgbXVz dCBlbnN1cmUgdGhhdCB0aGUgYnVmZmVyIGlzIGxhcmdlCistLy8gZW5vdWdoLgorLXRlbXBsYXRl IDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBVSW50PgorLUZNVF9DT05TVEVYUFIyMCBhdXRvIGZv cm1hdF9kZWNpbWFsKENoYXIqIG91dCwgVUludCB2YWx1ZSwgaW50IHNpemUpCistICAgIC0+IGZv cm1hdF9kZWNpbWFsX3Jlc3VsdDxDaGFyKj4geworLSAgRk1UX0FTU0VSVChzaXplID49IGNvdW50 X2RpZ2l0cyh2YWx1ZSksICJpbnZhbGlkIGRpZ2l0IGNvdW50Iik7CistICBvdXQgKz0gc2l6ZTsK Ky0gIENoYXIqIGVuZCA9IG91dDsKKy0gIHdoaWxlICh2YWx1ZSA+PSAxMDApIHsKKy0gICAgLy8g SW50ZWdlciBkaXZpc2lvbiBpcyBzbG93IHNvIGRvIGl0IGZvciBhIGdyb3VwIG9mIHR3byBkaWdp dHMgaW5zdGVhZAorLSAgICAvLyBvZiBmb3IgZXZlcnkgZGlnaXQuIFRoZSBpZGVhIGNvbWVzIGZy b20gdGhlIHRhbGsgYnkgQWxleGFuZHJlc2N1CistICAgIC8vICJUaHJlZSBPcHRpbWl6YXRpb24g VGlwcyBmb3IgQysrIi4gU2VlIHNwZWVkLXRlc3QgZm9yIGEgY29tcGFyaXNvbi4KKy0gICAgb3V0 IC09IDI7CistICAgIGNvcHkyKG91dCwgZGlnaXRzMihzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVl ICUgMTAwKSkpOworLSAgICB2YWx1ZSAvPSAxMDA7CistICB9CistICBpZiAodmFsdWUgPCAxMCkg eworLSAgICAqLS1vdXQgPSBzdGF0aWNfY2FzdDxDaGFyPignMCcgKyB2YWx1ZSk7CistICAgIHJl dHVybiB7b3V0LCBlbmR9OworLSAgfQorLSAgb3V0IC09IDI7CistICBjb3B5MihvdXQsIGRpZ2l0 czIoc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSkpKTsKKy0gIHJldHVybiB7b3V0LCBlbmR9Owor LX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVUludCwgdHlwZW5hbWUg SXRlcmF0b3IsCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoIXN0ZDo6aXNfcG9pbnRlcjxyZW1v dmVfY3ZyZWZfdDxJdGVyYXRvcj4+Ojp2YWx1ZSk+CistaW5saW5lIGF1dG8gZm9ybWF0X2RlY2lt YWwoSXRlcmF0b3Igb3V0LCBVSW50IHZhbHVlLCBpbnQgc2l6ZSkKKy0gICAgLT4gZm9ybWF0X2Rl Y2ltYWxfcmVzdWx0PEl0ZXJhdG9yPiB7CistICAvLyBCdWZmZXIgaXMgbGFyZ2UgZW5vdWdoIHRv IGhvbGQgYWxsIGRpZ2l0cyAoZGlnaXRzMTAgKyAxKS4KKy0gIENoYXIgYnVmZmVyW2RpZ2l0czEw PFVJbnQ+KCkgKyAxXTsKKy0gIGF1dG8gZW5kID0gZm9ybWF0X2RlY2ltYWwoYnVmZmVyLCB2YWx1 ZSwgc2l6ZSkuZW5kOworLSAgcmV0dXJuIHtvdXQsIGRldGFpbDo6Y29weV9zdHJfbm9pbmxpbmU8 Q2hhcj4oYnVmZmVyLCBlbmQsIG91dCl9OworLX0KKy0KKy10ZW1wbGF0ZSA8dW5zaWduZWQgQkFT RV9CSVRTLCB0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBVSW50PgorLUZNVF9DT05TVEVYUFIgYXV0 byBmb3JtYXRfdWludChDaGFyKiBidWZmZXIsIFVJbnQgdmFsdWUsIGludCBudW1fZGlnaXRzLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVwcGVyID0gZmFsc2UpIC0+IENo YXIqIHsKKy0gIGJ1ZmZlciArPSBudW1fZGlnaXRzOworLSAgQ2hhciogZW5kID0gYnVmZmVyOwor LSAgZG8geworLSAgICBjb25zdCBjaGFyKiBkaWdpdHMgPSB1cHBlciA/ICIwMTIzNDU2Nzg5QUJD REVGIiA6ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKy0gICAgdW5zaWduZWQgZGlnaXQgPSAodmFsdWUg JiAoKDEgPDwgQkFTRV9CSVRTKSAtIDEpKTsKKy0gICAgKi0tYnVmZmVyID0gc3RhdGljX2Nhc3Q8 Q2hhcj4oQkFTRV9CSVRTIDwgNCA/IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGRpZ2l0KQorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGlnaXRzW2Rp Z2l0XSk7CistICB9IHdoaWxlICgodmFsdWUgPj49IEJBU0VfQklUUykgIT0gMCk7CistICByZXR1 cm4gZW5kOworLX0KKy0KKy10ZW1wbGF0ZSA8dW5zaWduZWQgQkFTRV9CSVRTLCB0eXBlbmFtZSBD aGFyPgorLWF1dG8gZm9ybWF0X3VpbnQoQ2hhciogYnVmZmVyLCBkZXRhaWw6OmZhbGxiYWNrX3Vp bnRwdHIgbiwgaW50IG51bV9kaWdpdHMsCistICAgICAgICAgICAgICAgICBib29sID0gZmFsc2Up IC0+IENoYXIqIHsKKy0gIGF1dG8gY2hhcl9kaWdpdHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu c2lnbmVkIGNoYXI+OjpkaWdpdHMgLyA0OworLSAgaW50IHN0YXJ0ID0gKG51bV9kaWdpdHMgKyBj aGFyX2RpZ2l0cyAtIDEpIC8gY2hhcl9kaWdpdHMgLSAxOworLSAgaWYgKGludCBzdGFydF9kaWdp dHMgPSBudW1fZGlnaXRzICUgY2hhcl9kaWdpdHMpIHsKKy0gICAgdW5zaWduZWQgdmFsdWUgPSBu LnZhbHVlW3N0YXJ0LS1dOworLSAgICBidWZmZXIgPSBmb3JtYXRfdWludDxCQVNFX0JJVFM+KGJ1 ZmZlciwgdmFsdWUsIHN0YXJ0X2RpZ2l0cyk7CistICB9CistICBmb3IgKDsgc3RhcnQgPj0gMDsg LS1zdGFydCkgeworLSAgICB1bnNpZ25lZCB2YWx1ZSA9IG4udmFsdWVbc3RhcnRdOworLSAgICBi dWZmZXIgKz0gY2hhcl9kaWdpdHM7CistICAgIGF1dG8gcCA9IGJ1ZmZlcjsKKy0gICAgZm9yIChp bnQgaSA9IDA7IGkgPCBjaGFyX2RpZ2l0czsgKytpKSB7CistICAgICAgdW5zaWduZWQgZGlnaXQg PSAodmFsdWUgJiAoKDEgPDwgQkFTRV9CSVRTKSAtIDEpKTsKKy0gICAgICAqLS1wID0gc3RhdGlj X2Nhc3Q8Q2hhcj4oIjAxMjM0NTY3ODlhYmNkZWYiW2RpZ2l0XSk7CistICAgICAgdmFsdWUgPj49 IEJBU0VfQklUUzsKKy0gICAgfQorLSAgfQorLSAgcmV0dXJuIGJ1ZmZlcjsKKy19CistCistdGVt cGxhdGUgPHVuc2lnbmVkIEJBU0VfQklUUywgdHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgSXQsIHR5 cGVuYW1lIFVJbnQ+CistaW5saW5lIGF1dG8gZm9ybWF0X3VpbnQoSXQgb3V0LCBVSW50IHZhbHVl LCBpbnQgbnVtX2RpZ2l0cywgYm9vbCB1cHBlciA9IGZhbHNlKQorLSAgICAtPiBJdCB7CistICBp ZiAoYXV0byBwdHIgPSB0b19wb2ludGVyPENoYXI+KG91dCwgdG9fdW5zaWduZWQobnVtX2RpZ2l0 cykpKSB7CistICAgIGZvcm1hdF91aW50PEJBU0VfQklUUz4ocHRyLCB2YWx1ZSwgbnVtX2RpZ2l0 cywgdXBwZXIpOworLSAgICByZXR1cm4gb3V0OworLSAgfQorLSAgLy8gQnVmZmVyIHNob3VsZCBi ZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgZGlnaXRzIChkaWdpdHMgLyBCQVNFX0JJVFMgKyAx KS4KKy0gIGNoYXIgYnVmZmVyW251bV9iaXRzPFVJbnQ+KCkgLyBCQVNFX0JJVFMgKyAxXTsKKy0g IGZvcm1hdF91aW50PEJBU0VfQklUUz4oYnVmZmVyLCB2YWx1ZSwgbnVtX2RpZ2l0cywgdXBwZXIp OworLSAgcmV0dXJuIGRldGFpbDo6Y29weV9zdHJfbm9pbmxpbmU8Q2hhcj4oYnVmZmVyLCBidWZm ZXIgKyBudW1fZGlnaXRzLCBvdXQpOworLX0KKy0KKy0vLyBBIGNvbnZlcnRlciBmcm9tIFVURi04 IHRvIFVURi0xNi4KKy1jbGFzcyB1dGY4X3RvX3V0ZjE2IHsKKy0gcHJpdmF0ZToKKy0gIGJhc2lj X21lbW9yeV9idWZmZXI8d2NoYXJfdD4gYnVmZmVyXzsKKy0KKy0gcHVibGljOgorLSAgRk1UX0FQ SSBleHBsaWNpdCB1dGY4X3RvX3V0ZjE2KHN0cmluZ192aWV3IHMpOworLSAgb3BlcmF0b3IgYmFz aWNfc3RyaW5nX3ZpZXc8d2NoYXJfdD4oKSBjb25zdCB7IHJldHVybiB7JmJ1ZmZlcl9bMF0sIHNp emUoKX07IH0KKy0gIGF1dG8gc2l6ZSgpIGNvbnN0IC0+IHNpemVfdCB7IHJldHVybiBidWZmZXJf LnNpemUoKSAtIDE7IH0KKy0gIGF1dG8gY19zdHIoKSBjb25zdCAtPiBjb25zdCB3Y2hhcl90KiB7 IHJldHVybiAmYnVmZmVyX1swXTsgfQorLSAgYXV0byBzdHIoKSBjb25zdCAtPiBzdGQ6OndzdHJp bmcgeyByZXR1cm4geyZidWZmZXJfWzBdLCBzaXplKCl9OyB9CistfTsKKy0KKy1uYW1lc3BhY2Ug ZHJhZ29uYm94IHsKKy0KKy0vLyBUeXBlLXNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgRHJhZ29u Ym94IHVzZXMuCistdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBmbG9hdF9pbmZvOworLQorLXRl bXBsYXRlIDw+IHN0cnVjdCBmbG9hdF9pbmZvPGZsb2F0PiB7CistICB1c2luZyBjYXJyaWVyX3Vp bnQgPSB1aW50MzJfdDsKKy0gIHN0YXRpYyBjb25zdCBpbnQgc2lnbmlmaWNhbmRfYml0cyA9IDIz OworLSAgc3RhdGljIGNvbnN0IGludCBleHBvbmVudF9iaXRzID0gODsKKy0gIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNjsKKy0gIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50ID0gMTI3OworLSAgc3RhdGljIGNvbnN0IGludCBleHBvbmVudF9iaWFzID0gLTEyNzsKKy0g IHN0YXRpYyBjb25zdCBpbnQgZGVjaW1hbF9kaWdpdHMgPSA5OworLSAgc3RhdGljIGNvbnN0IGlu dCBrYXBwYSA9IDE7CistICBzdGF0aWMgY29uc3QgaW50IGJpZ19kaXZpc29yID0gMTAwOworLSAg c3RhdGljIGNvbnN0IGludCBzbWFsbF9kaXZpc29yID0gMTA7CistICBzdGF0aWMgY29uc3QgaW50 IG1pbl9rID0gLTMxOworLSAgc3RhdGljIGNvbnN0IGludCBtYXhfayA9IDQ2OworLSAgc3RhdGlj IGNvbnN0IGludCBjYWNoZV9iaXRzID0gNjQ7CistICBzdGF0aWMgY29uc3QgaW50IGRpdmlzaWJp bGl0eV9jaGVja19ieV81X3RocmVzaG9sZCA9IDM5OworLSAgc3RhdGljIGNvbnN0IGludCBjYXNl X2ZjX3BtX2hhbGZfbG93ZXJfdGhyZXNob2xkID0gLTE7CistICBzdGF0aWMgY29uc3QgaW50IGNh c2VfZmNfcG1faGFsZl91cHBlcl90aHJlc2hvbGQgPSA2OworLSAgc3RhdGljIGNvbnN0IGludCBj YXNlX2ZjX2xvd2VyX3RocmVzaG9sZCA9IC0yOworLSAgc3RhdGljIGNvbnN0IGludCBjYXNlX2Zj X3VwcGVyX3RocmVzaG9sZCA9IDY7CistICBzdGF0aWMgY29uc3QgaW50IGNhc2Vfc2hvcnRlcl9p bnRlcnZhbF9sZWZ0X2VuZHBvaW50X2xvd2VyX3RocmVzaG9sZCA9IDI7CistICBzdGF0aWMgY29u c3QgaW50IGNhc2Vfc2hvcnRlcl9pbnRlcnZhbF9sZWZ0X2VuZHBvaW50X3VwcGVyX3RocmVzaG9s ZCA9IDM7CistICBzdGF0aWMgY29uc3QgaW50IHNob3J0ZXJfaW50ZXJ2YWxfdGllX2xvd2VyX3Ro cmVzaG9sZCA9IC0zNTsKKy0gIHN0YXRpYyBjb25zdCBpbnQgc2hvcnRlcl9pbnRlcnZhbF90aWVf dXBwZXJfdGhyZXNob2xkID0gLTM1OworLSAgc3RhdGljIGNvbnN0IGludCBtYXhfdHJhaWxpbmdf emVyb3MgPSA3OworLX07CistCistdGVtcGxhdGUgPD4gc3RydWN0IGZsb2F0X2luZm88ZG91Ymxl PiB7CistICB1c2luZyBjYXJyaWVyX3VpbnQgPSB1aW50NjRfdDsKKy0gIHN0YXRpYyBjb25zdCBp bnQgc2lnbmlmaWNhbmRfYml0cyA9IDUyOworLSAgc3RhdGljIGNvbnN0IGludCBleHBvbmVudF9i aXRzID0gMTE7CistICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIyOworLSAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDIzOworLSAgc3RhdGljIGNvbnN0IGlu dCBleHBvbmVudF9iaWFzID0gLTEwMjM7CistICBzdGF0aWMgY29uc3QgaW50IGRlY2ltYWxfZGln aXRzID0gMTc7CistICBzdGF0aWMgY29uc3QgaW50IGthcHBhID0gMjsKKy0gIHN0YXRpYyBjb25z dCBpbnQgYmlnX2Rpdmlzb3IgPSAxMDAwOworLSAgc3RhdGljIGNvbnN0IGludCBzbWFsbF9kaXZp c29yID0gMTAwOworLSAgc3RhdGljIGNvbnN0IGludCBtaW5fayA9IC0yOTI7CistICBzdGF0aWMg Y29uc3QgaW50IG1heF9rID0gMzI2OworLSAgc3RhdGljIGNvbnN0IGludCBjYWNoZV9iaXRzID0g MTI4OworLSAgc3RhdGljIGNvbnN0IGludCBkaXZpc2liaWxpdHlfY2hlY2tfYnlfNV90aHJlc2hv bGQgPSA4NjsKKy0gIHN0YXRpYyBjb25zdCBpbnQgY2FzZV9mY19wbV9oYWxmX2xvd2VyX3RocmVz aG9sZCA9IC0yOworLSAgc3RhdGljIGNvbnN0IGludCBjYXNlX2ZjX3BtX2hhbGZfdXBwZXJfdGhy ZXNob2xkID0gOTsKKy0gIHN0YXRpYyBjb25zdCBpbnQgY2FzZV9mY19sb3dlcl90aHJlc2hvbGQg PSAtNDsKKy0gIHN0YXRpYyBjb25zdCBpbnQgY2FzZV9mY191cHBlcl90aHJlc2hvbGQgPSA5Owor LSAgc3RhdGljIGNvbnN0IGludCBjYXNlX3Nob3J0ZXJfaW50ZXJ2YWxfbGVmdF9lbmRwb2ludF9s b3dlcl90aHJlc2hvbGQgPSAyOworLSAgc3RhdGljIGNvbnN0IGludCBjYXNlX3Nob3J0ZXJfaW50 ZXJ2YWxfbGVmdF9lbmRwb2ludF91cHBlcl90aHJlc2hvbGQgPSAzOworLSAgc3RhdGljIGNvbnN0 IGludCBzaG9ydGVyX2ludGVydmFsX3RpZV9sb3dlcl90aHJlc2hvbGQgPSAtNzc7CistICBzdGF0 aWMgY29uc3QgaW50IHNob3J0ZXJfaW50ZXJ2YWxfdGllX3VwcGVyX3RocmVzaG9sZCA9IC03NzsK Ky0gIHN0YXRpYyBjb25zdCBpbnQgbWF4X3RyYWlsaW5nX3plcm9zID0gMTY7CistfTsKKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGRlY2ltYWxfZnAgeworLSAgdXNpbmcgc2lnbmlm aWNhbmRfdHlwZSA9IHR5cGVuYW1lIGZsb2F0X2luZm88VD46OmNhcnJpZXJfdWludDsKKy0gIHNp Z25pZmljYW5kX3R5cGUgc2lnbmlmaWNhbmQ7CistICBpbnQgZXhwb25lbnQ7CistfTsKKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1GTVRfQVBJIGF1dG8gdG9fZGVjaW1hbChUIHgpIEZNVF9O T0VYQ0VQVCAtPiBkZWNpbWFsX2ZwPFQ+OworLX0gIC8vIG5hbWVzcGFjZSBkcmFnb25ib3gKKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jb25zdGV4cHIgYXV0byBleHBvbmVudF9tYXNrKCkg LT4KKy0gICAgdHlwZW5hbWUgZHJhZ29uYm94OjpmbG9hdF9pbmZvPFQ+OjpjYXJyaWVyX3VpbnQg eworLSAgdXNpbmcgdWludCA9IHR5cGVuYW1lIGRyYWdvbmJveDo6ZmxvYXRfaW5mbzxUPjo6Y2Fy cmllcl91aW50OworLSAgcmV0dXJuICgodWludCgxKSA8PCBkcmFnb25ib3g6OmZsb2F0X2luZm88 VD46OmV4cG9uZW50X2JpdHMpIC0gMSkKKy0gICAgICAgICA8PCBkcmFnb25ib3g6OmZsb2F0X2lu Zm88VD46OnNpZ25pZmljYW5kX2JpdHM7CistfQorLQorLS8vIFdyaXRlcyB0aGUgZXhwb25lbnQg ZXhwIGluIHRoZSBmb3JtICJbKy1dZHsyLDN9IiB0byBidWZmZXIuCistdGVtcGxhdGUgPHR5cGVu YW1lIENoYXIsIHR5cGVuYW1lIEl0PgorLUZNVF9DT05TVEVYUFIgYXV0byB3cml0ZV9leHBvbmVu dChpbnQgZXhwLCBJdCBpdCkgLT4gSXQgeworLSAgRk1UX0FTU0VSVCgtMTAwMDAgPCBleHAgJiYg ZXhwIDwgMTAwMDAsICJleHBvbmVudCBvdXQgb2YgcmFuZ2UiKTsKKy0gIGlmIChleHAgPCAwKSB7 CistICAgICppdCsrID0gc3RhdGljX2Nhc3Q8Q2hhcj4oJy0nKTsKKy0gICAgZXhwID0gLWV4cDsK Ky0gIH0gZWxzZSB7CistICAgICppdCsrID0gc3RhdGljX2Nhc3Q8Q2hhcj4oJysnKTsKKy0gIH0K Ky0gIGlmIChleHAgPj0gMTAwKSB7CistICAgIGNvbnN0IGNoYXIqIHRvcCA9IGRpZ2l0czIodG9f dW5zaWduZWQoZXhwIC8gMTAwKSk7CistICAgIGlmIChleHAgPj0gMTAwMCkgKml0KysgPSBzdGF0 aWNfY2FzdDxDaGFyPih0b3BbMF0pOworLSAgICAqaXQrKyA9IHN0YXRpY19jYXN0PENoYXI+KHRv cFsxXSk7CistICAgIGV4cCAlPSAxMDA7CistICB9CistICBjb25zdCBjaGFyKiBkID0gZGlnaXRz Mih0b191bnNpZ25lZChleHApKTsKKy0gICppdCsrID0gc3RhdGljX2Nhc3Q8Q2hhcj4oZFswXSk7 CistICAqaXQrKyA9IHN0YXRpY19jYXN0PENoYXI+KGRbMV0pOworLSAgcmV0dXJuIGl0OworLX0K Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1GTVRfSEVBREVSX09OTFlfQ09OU1RFWFBSMjAg YXV0byBmb3JtYXRfZmxvYXQoVCB2YWx1ZSwgaW50IHByZWNpc2lvbiwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfc3BlY3Mgc3BlY3MsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjxjaGFyPiYg YnVmKSAtPiBpbnQ7CistCistLy8gRm9ybWF0cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB3aXRo IHNucHJpbnRmLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWF1dG8gc25wcmludGZfZmxvYXQo VCB2YWx1ZSwgaW50IHByZWNpc2lvbiwgZmxvYXRfc3BlY3Mgc3BlY3MsCistICAgICAgICAgICAg ICAgICAgICBidWZmZXI8Y2hhcj4mIGJ1ZikgLT4gaW50OworLQorLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPiBjb25zdGV4cHIgYXV0byBwcm9tb3RlX2Zsb2F0KFQgdmFsdWUpIC0+IFQgeworLSAgcmV0 dXJuIHZhbHVlOworLX0KKy1jb25zdGV4cHIgYXV0byBwcm9tb3RlX2Zsb2F0KGZsb2F0IHZhbHVl KSAtPiBkb3VibGUgeworLSAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworLX0K Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIENoYXI+CistRk1UX05P SU5MSU5FIEZNVF9DT05TVEVYUFIgYXV0byBmaWxsKE91dHB1dEl0IGl0LCBzaXplX3QgbiwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsbF90PENoYXI+JiBm aWxsKSAtPiBPdXRwdXRJdCB7CistICBhdXRvIGZpbGxfc2l6ZSA9IGZpbGwuc2l6ZSgpOworLSAg aWYgKGZpbGxfc2l6ZSA9PSAxKSByZXR1cm4gZGV0YWlsOjpmaWxsX24oaXQsIG4sIGZpbGxbMF0p OworLSAgYXV0byBkYXRhID0gZmlsbC5kYXRhKCk7CistICBmb3IgKHNpemVfdCBpID0gMDsgaSA8 IG47ICsraSkKKy0gICAgaXQgPSBjb3B5X3N0cjxDaGFyPihkYXRhLCBkYXRhICsgZmlsbF9zaXpl LCBpdCk7CistICByZXR1cm4gaXQ7CistfQorLQorLS8vIFdyaXRlcyB0aGUgb3V0cHV0IG9mIGYs IHBhZGRlZCBhY2NvcmRpbmcgdG8gZm9ybWF0IHNwZWNpZmljYXRpb25zIGluIHNwZWNzLgorLS8v IHNpemU6IG91dHB1dCBzaXplIGluIGNvZGUgdW5pdHMuCistLy8gd2lkdGg6IG91dHB1dCBkaXNw bGF5IHdpZHRoIGluICh0ZXJtaW5hbCkgY29sdW1uIHBvc2l0aW9ucy4KKy10ZW1wbGF0ZSA8YWxp Z246OnR5cGUgYWxpZ24gPSBhbGlnbjo6bGVmdCwgdHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1l IENoYXIsCistICAgICAgICAgIHR5cGVuYW1lIEY+CistRk1UX0NPTlNURVhQUiBhdXRvIHdyaXRl X3BhZGRlZChPdXRwdXRJdCBvdXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNzLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCB3aWR0aCwgRiYmIGYpIC0+IE91dHB1 dEl0IHsKKy0gIHN0YXRpY19hc3NlcnQoYWxpZ24gPT0gYWxpZ246OmxlZnQgfHwgYWxpZ24gPT0g YWxpZ246OnJpZ2h0LCAiIik7CistICB1bnNpZ25lZCBzcGVjX3dpZHRoID0gdG9fdW5zaWduZWQo c3BlY3Mud2lkdGgpOworLSAgc2l6ZV90IHBhZGRpbmcgPSBzcGVjX3dpZHRoID4gd2lkdGggPyBz cGVjX3dpZHRoIC0gd2lkdGggOiAwOworLSAgLy8gU2hpZnRzIGFyZSBlbmNvZGVkIGFzIHN0cmlu ZyBsaXRlcmFscyBiZWNhdXNlIHN0YXRpYyBjb25zdGV4cHIgaXMgbm90CistICAvLyBzdXBwb3J0 ZWQgaW4gY29uc3RleHByIGZ1bmN0aW9ucy4KKy0gIGF1dG8qIHNoaWZ0cyA9IGFsaWduID09IGFs aWduOjpsZWZ0ID8gIlx4MWZceDFmXHgwMFx4MDEiIDogIlx4MDBceDFmXHgwMFx4MDEiOworLSAg c2l6ZV90IGxlZnRfcGFkZGluZyA9IHBhZGRpbmcgPj4gc2hpZnRzW3NwZWNzLmFsaWduXTsKKy0g IHNpemVfdCByaWdodF9wYWRkaW5nID0gcGFkZGluZyAtIGxlZnRfcGFkZGluZzsKKy0gIGF1dG8g aXQgPSByZXNlcnZlKG91dCwgc2l6ZSArIHBhZGRpbmcgKiBzcGVjcy5maWxsLnNpemUoKSk7Cist ICBpZiAobGVmdF9wYWRkaW5nICE9IDApIGl0ID0gZmlsbChpdCwgbGVmdF9wYWRkaW5nLCBzcGVj cy5maWxsKTsKKy0gIGl0ID0gZihpdCk7CistICBpZiAocmlnaHRfcGFkZGluZyAhPSAwKSBpdCA9 IGZpbGwoaXQsIHJpZ2h0X3BhZGRpbmcsIHNwZWNzLmZpbGwpOworLSAgcmV0dXJuIGJhc2VfaXRl cmF0b3Iob3V0LCBpdCk7CistfQorLQorLXRlbXBsYXRlIDxhbGlnbjo6dHlwZSBhbGlnbiA9IGFs aWduOjpsZWZ0LCB0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgQ2hhciwKKy0gICAgICAgICAg dHlwZW5hbWUgRj4KKy1jb25zdGV4cHIgYXV0byB3cml0ZV9wYWRkZWQoT3V0cHV0SXQgb3V0LCBj b25zdCBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNzLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3Qgc2l6ZSwgRiYmIGYpIC0+IE91dHB1dEl0IHsKKy0gIHJldHVybiB3 cml0ZV9wYWRkZWQ8YWxpZ24+KG91dCwgc3BlY3MsIHNpemUsIHNpemUsIGYpOworLX0KKy0KKy10 ZW1wbGF0ZSA8YWxpZ246OnR5cGUgYWxpZ24gPSBhbGlnbjo6bGVmdCwgdHlwZW5hbWUgQ2hhciwg dHlwZW5hbWUgT3V0cHV0SXQ+CistRk1UX0NPTlNURVhQUiBhdXRvIHdyaXRlX2J5dGVzKE91dHB1 dEl0IG91dCwgc3RyaW5nX3ZpZXcgYnl0ZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3MpCistICAgIC0+IE91dHB1 dEl0IHsKKy0gIHJldHVybiB3cml0ZV9wYWRkZWQ8YWxpZ24+KAorLSAgICAgIG91dCwgc3BlY3Ms IGJ5dGVzLnNpemUoKSwgW2J5dGVzXShyZXNlcnZlX2l0ZXJhdG9yPE91dHB1dEl0PiBpdCkgewor LSAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IGJ5dGVzLmRhdGEoKTsKKy0gICAgICAgIHJldHVy biBjb3B5X3N0cjxDaGFyPihkYXRhLCBkYXRhICsgYnl0ZXMuc2l6ZSgpLCBpdCk7CistICAgICAg fSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdCwg dHlwZW5hbWUgVUludFB0cj4KKy1hdXRvIHdyaXRlX3B0cihPdXRwdXRJdCBvdXQsIFVJbnRQdHIg dmFsdWUsCistICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfZm9ybWF0X3NwZWNzPENoYXI+KiBz cGVjcykgLT4gT3V0cHV0SXQgeworLSAgaW50IG51bV9kaWdpdHMgPSBjb3VudF9kaWdpdHM8ND4o dmFsdWUpOworLSAgYXV0byBzaXplID0gdG9fdW5zaWduZWQobnVtX2RpZ2l0cykgKyBzaXplX3Qo Mik7CistICBhdXRvIHdyaXRlID0gWz1dKHJlc2VydmVfaXRlcmF0b3I8T3V0cHV0SXQ+IGl0KSB7 CistICAgICppdCsrID0gc3RhdGljX2Nhc3Q8Q2hhcj4oJzAnKTsKKy0gICAgKml0KysgPSBzdGF0 aWNfY2FzdDxDaGFyPigneCcpOworLSAgICByZXR1cm4gZm9ybWF0X3VpbnQ8NCwgQ2hhcj4oaXQs IHZhbHVlLCBudW1fZGlnaXRzKTsKKy0gIH07CistICByZXR1cm4gc3BlY3MgPyB3cml0ZV9wYWRk ZWQ8YWxpZ246OnJpZ2h0PihvdXQsICpzcGVjcywgc2l6ZSwgd3JpdGUpCistICAgICAgICAgICAg ICAgOiBiYXNlX2l0ZXJhdG9yKG91dCwgd3JpdGUocmVzZXJ2ZShvdXQsIHNpemUpKSk7CistfQor LQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdD4KKy1GTVRfQ09O U1RFWFBSIGF1dG8gd3JpdGVfY2hhcihPdXRwdXRJdCBvdXQsIENoYXIgdmFsdWUsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfZm9ybWF0X3NwZWNzPENoYXI+JiBz cGVjcykKKy0gICAgLT4gT3V0cHV0SXQgeworLSAgcmV0dXJuIHdyaXRlX3BhZGRlZChvdXQsIHNw ZWNzLCAxLCBbPV0ocmVzZXJ2ZV9pdGVyYXRvcjxPdXRwdXRJdD4gaXQpIHsKKy0gICAgKml0Kysg PSB2YWx1ZTsKKy0gICAgcmV0dXJuIGl0OworLSAgfSk7CistfQorLXRlbXBsYXRlIDx0eXBlbmFt ZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdD4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gd3JpdGUoT3V0 cHV0SXQgb3V0LCBDaGFyIHZhbHVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBi YXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNzLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICBsb2NhbGVfcmVmIGxvYyA9IHt9KSAtPiBPdXRwdXRJdCB7CistICByZXR1cm4gY2hlY2tfY2hh cl9zcGVjcyhzcGVjcykKKy0gICAgICAgICAgICAgPyB3cml0ZV9jaGFyKG91dCwgdmFsdWUsIHNw ZWNzKQorLSAgICAgICAgICAgICA6IHdyaXRlKG91dCwgc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSks IHNwZWNzLCBsb2MpOworLX0KKy0KKy0vLyBEYXRhIGZvciB3cml0ZV9pbnQgdGhhdCBkb2Vzbid0 IGRlcGVuZCBvbiBvdXRwdXQgaXRlcmF0b3IgdHlwZS4gSXQgaXMgdXNlZCB0bworLS8vIGF2b2lk IHRlbXBsYXRlIGNvZGUgYmxvYXQuCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IHN0cnVjdCB3 cml0ZV9pbnRfZGF0YSB7CistICBzaXplX3Qgc2l6ZTsKKy0gIHNpemVfdCBwYWRkaW5nOworLQor LSAgRk1UX0NPTlNURVhQUiB3cml0ZV9pbnRfZGF0YShpbnQgbnVtX2RpZ2l0cywgdW5zaWduZWQg cHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19mb3Jt YXRfc3BlY3M8Q2hhcj4mIHNwZWNzKQorLSAgICAgIDogc2l6ZSgocHJlZml4ID4+IDI0KSArIHRv X3Vuc2lnbmVkKG51bV9kaWdpdHMpKSwgcGFkZGluZygwKSB7CistICAgIGlmIChzcGVjcy5hbGln biA9PSBhbGlnbjo6bnVtZXJpYykgeworLSAgICAgIGF1dG8gd2lkdGggPSB0b191bnNpZ25lZChz cGVjcy53aWR0aCk7CistICAgICAgaWYgKHdpZHRoID4gc2l6ZSkgeworLSAgICAgICAgcGFkZGlu ZyA9IHdpZHRoIC0gc2l6ZTsKKy0gICAgICAgIHNpemUgPSB3aWR0aDsKKy0gICAgICB9CistICAg IH0gZWxzZSBpZiAoc3BlY3MucHJlY2lzaW9uID4gbnVtX2RpZ2l0cykgeworLSAgICAgIHNpemUg PSAocHJlZml4ID4+IDI0KSArIHRvX3Vuc2lnbmVkKHNwZWNzLnByZWNpc2lvbik7CistICAgICAg cGFkZGluZyA9IHRvX3Vuc2lnbmVkKHNwZWNzLnByZWNpc2lvbiAtIG51bV9kaWdpdHMpOworLSAg ICB9CistICB9CistfTsKKy0KKy0vLyBXcml0ZXMgYW4gaW50ZWdlciBpbiB0aGUgZm9ybWF0Cist Ly8gICA8bGVmdC1wYWRkaW5nPjxwcmVmaXg+PG51bWVyaWMtcGFkZGluZz48ZGlnaXRzPjxyaWdo dC1wYWRkaW5nPgorLS8vIHdoZXJlIDxkaWdpdHM+IGFyZSB3cml0dGVuIGJ5IHdyaXRlX2RpZ2l0 cyhpdCkuCistLy8gcHJlZml4IGNvbnRhaW5zIGNoYXJzIGluIHRocmVlIGxvd2VyIGJ5dGVzIGFu ZCB0aGUgc2l6ZSBpbiB0aGUgZm91cnRoIGJ5dGUuCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1 dEl0LCB0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBXPgorLUZNVF9DT05TVEVYUFIgRk1UX0lOTElO RSBhdXRvIHdyaXRlX2ludChPdXRwdXRJdCBvdXQsIGludCBudW1fZGlnaXRzLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXgsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVj czxDaGFyPiYgc3BlY3MsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFcgd3JpdGVfZGlnaXRzKSAtPiBPdXRwdXRJdCB7CistICAvLyBTbGlnaHRseSBmYXN0ZXIgY2hl Y2sgZm9yIHNwZWNzLndpZHRoID09IDAgJiYgc3BlY3MucHJlY2lzaW9uID09IC0xLgorLSAgaWYg KChzcGVjcy53aWR0aCB8IChzcGVjcy5wcmVjaXNpb24gKyAxKSkgPT0gMCkgeworLSAgICBhdXRv IGl0ID0gcmVzZXJ2ZShvdXQsIHRvX3Vuc2lnbmVkKG51bV9kaWdpdHMpICsgKHByZWZpeCA+PiAy NCkpOworLSAgICBpZiAocHJlZml4ICE9IDApIHsKKy0gICAgICBmb3IgKHVuc2lnbmVkIHAgPSBw cmVmaXggJiAweGZmZmZmZjsgcCAhPSAwOyBwID4+PSA4KQorLSAgICAgICAgKml0KysgPSBzdGF0 aWNfY2FzdDxDaGFyPihwICYgMHhmZik7CistICAgIH0KKy0gICAgcmV0dXJuIGJhc2VfaXRlcmF0 b3Iob3V0LCB3cml0ZV9kaWdpdHMoaXQpKTsKKy0gIH0KKy0gIGF1dG8gZGF0YSA9IHdyaXRlX2lu dF9kYXRhPENoYXI+KG51bV9kaWdpdHMsIHByZWZpeCwgc3BlY3MpOworLSAgcmV0dXJuIHdyaXRl X3BhZGRlZDxhbGlnbjo6cmlnaHQ+KAorLSAgICAgIG91dCwgc3BlY3MsIGRhdGEuc2l6ZSwgWz1d KHJlc2VydmVfaXRlcmF0b3I8T3V0cHV0SXQ+IGl0KSB7CistICAgICAgICBmb3IgKHVuc2lnbmVk IHAgPSBwcmVmaXggJiAweGZmZmZmZjsgcCAhPSAwOyBwID4+PSA4KQorLSAgICAgICAgICAqaXQr KyA9IHN0YXRpY19jYXN0PENoYXI+KHAgJiAweGZmKTsKKy0gICAgICAgIGl0ID0gZGV0YWlsOjpm aWxsX24oaXQsIGRhdGEucGFkZGluZywgc3RhdGljX2Nhc3Q8Q2hhcj4oJzAnKSk7CistICAgICAg ICByZXR1cm4gd3JpdGVfZGlnaXRzKGl0KTsKKy0gICAgICB9KTsKKy19CistCistdGVtcGxhdGUg PHR5cGVuYW1lIENoYXI+IGNsYXNzIGRpZ2l0X2dyb3VwaW5nIHsKKy0gcHJpdmF0ZToKKy0gIHRo b3VzYW5kc19zZXBfcmVzdWx0PENoYXI+IHNlcF87CistCistICBzdHJ1Y3QgbmV4dF9zdGF0ZSB7 CistICAgIHN0ZDo6c3RyaW5nOjpjb25zdF9pdGVyYXRvciBncm91cDsKKy0gICAgaW50IHBvczsK Ky0gIH07CistICBuZXh0X3N0YXRlIGluaXRpYWxfc3RhdGUoKSBjb25zdCB7IHJldHVybiB7c2Vw Xy5ncm91cGluZy5iZWdpbigpLCAwfTsgfQorLQorLSAgLy8gUmV0dXJucyB0aGUgbmV4dCBkaWdp dCBncm91cCBzZXBhcmF0b3IgcG9zaXRpb24uCistICBpbnQgbmV4dChuZXh0X3N0YXRlJiBzdGF0 ZSkgY29uc3QgeworLSAgICBpZiAoIXNlcF8udGhvdXNhbmRzX3NlcCkgcmV0dXJuIG1heF92YWx1 ZTxpbnQ+KCk7CistICAgIGlmIChzdGF0ZS5ncm91cCA9PSBzZXBfLmdyb3VwaW5nLmVuZCgpKQor LSAgICAgIHJldHVybiBzdGF0ZS5wb3MgKz0gc2VwXy5ncm91cGluZy5iYWNrKCk7CistICAgIGlm ICgqc3RhdGUuZ3JvdXAgPD0gMCB8fCAqc3RhdGUuZ3JvdXAgPT0gbWF4X3ZhbHVlPGNoYXI+KCkp CistICAgICAgcmV0dXJuIG1heF92YWx1ZTxpbnQ+KCk7CistICAgIHN0YXRlLnBvcyArPSAqc3Rh dGUuZ3JvdXArKzsKKy0gICAgcmV0dXJuIHN0YXRlLnBvczsKKy0gIH0KKy0KKy0gcHVibGljOgor LSAgZXhwbGljaXQgZGlnaXRfZ3JvdXBpbmcobG9jYWxlX3JlZiBsb2MsIGJvb2wgbG9jYWxpemVk ID0gdHJ1ZSkgeworLSAgICBpZiAobG9jYWxpemVkKQorLSAgICAgIHNlcF8gPSB0aG91c2FuZHNf c2VwPENoYXI+KGxvYyk7CistICAgIGVsc2UKKy0gICAgICBzZXBfLnRob3VzYW5kc19zZXAgPSBD aGFyKCk7CistICB9CistICBleHBsaWNpdCBkaWdpdF9ncm91cGluZyh0aG91c2FuZHNfc2VwX3Jl c3VsdDxDaGFyPiBzZXApIDogc2VwXyhzZXApIHt9CistCistICBDaGFyIHNlcGFyYXRvcigpIGNv bnN0IHsgcmV0dXJuIHNlcF8udGhvdXNhbmRzX3NlcDsgfQorLQorLSAgaW50IGNvdW50X3NlcGFy YXRvcnMoaW50IG51bV9kaWdpdHMpIGNvbnN0IHsKKy0gICAgaW50IGNvdW50ID0gMDsKKy0gICAg YXV0byBzdGF0ZSA9IGluaXRpYWxfc3RhdGUoKTsKKy0gICAgd2hpbGUgKG51bV9kaWdpdHMgPiBu ZXh0KHN0YXRlKSkgKytjb3VudDsKKy0gICAgcmV0dXJuIGNvdW50OworLSAgfQorLQorLSAgLy8g QXBwbGllcyBncm91cGluZyB0byBkaWdpdHMgYW5kIHdyaXRlIHRoZSBvdXRwdXQgdG8gb3V0Lgor LSAgdGVtcGxhdGUgPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUgQz4KKy0gIE91dCBhcHBseShPdXQg b3V0LCBiYXNpY19zdHJpbmdfdmlldzxDPiBkaWdpdHMpIGNvbnN0IHsKKy0gICAgYXV0byBudW1f ZGlnaXRzID0gc3RhdGljX2Nhc3Q8aW50PihkaWdpdHMuc2l6ZSgpKTsKKy0gICAgYXV0byBzZXBh cmF0b3JzID0gYmFzaWNfbWVtb3J5X2J1ZmZlcjxpbnQ+KCk7CistICAgIHNlcGFyYXRvcnMucHVz aF9iYWNrKDApOworLSAgICBhdXRvIHN0YXRlID0gaW5pdGlhbF9zdGF0ZSgpOworLSAgICB3aGls ZSAoaW50IGkgPSBuZXh0KHN0YXRlKSkgeworLSAgICAgIGlmIChpID49IG51bV9kaWdpdHMpIGJy ZWFrOworLSAgICAgIHNlcGFyYXRvcnMucHVzaF9iYWNrKGkpOworLSAgICB9CistICAgIGZvciAo aW50IGkgPSAwLCBzZXBfaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHNlcGFyYXRvcnMuc2l6ZSgp IC0gMSk7CistICAgICAgICAgaSA8IG51bV9kaWdpdHM7ICsraSkgeworLSAgICAgIGlmIChudW1f ZGlnaXRzIC0gaSA9PSBzZXBhcmF0b3JzW3NlcF9pbmRleF0pIHsKKy0gICAgICAgICpvdXQrKyA9 IHNlcGFyYXRvcigpOworLSAgICAgICAgLS1zZXBfaW5kZXg7CistICAgICAgfQorLSAgICAgICpv dXQrKyA9IHN0YXRpY19jYXN0PENoYXI+KGRpZ2l0c1t0b191bnNpZ25lZChpKV0pOworLSAgICB9 CistICAgIHJldHVybiBvdXQ7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0 cHV0SXQsIHR5cGVuYW1lIFVJbnQsIHR5cGVuYW1lIENoYXI+CistYXV0byB3cml0ZV9pbnRfbG9j YWxpemVkKE91dHB1dEl0IG91dCwgVUludCB2YWx1ZSwgdW5zaWduZWQgcHJlZml4LAorLSAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNz LAorLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWdpdF9ncm91cGluZzxDaGFyPiYg Z3JvdXBpbmcpIC0+IE91dHB1dEl0IHsKKy0gIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHVp bnQ2NF9vcl8xMjhfdDxVSW50PiwgVUludD46OnZhbHVlLCAiIik7CistICBpbnQgbnVtX2RpZ2l0 cyA9IGNvdW50X2RpZ2l0cyh2YWx1ZSk7CistICBjaGFyIGRpZ2l0c1s0MF07CistICBmb3JtYXRf ZGVjaW1hbChkaWdpdHMsIHZhbHVlLCBudW1fZGlnaXRzKTsKKy0gIHVuc2lnbmVkIHNpemUgPSB0 b191bnNpZ25lZCgocHJlZml4ICE9IDAgPyAxIDogMCkgKyBudW1fZGlnaXRzICsKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZy5jb3VudF9zZXBhcmF0b3JzKG51bV9kaWdp dHMpKTsKKy0gIHJldHVybiB3cml0ZV9wYWRkZWQ8YWxpZ246OnJpZ2h0PigKKy0gICAgICBvdXQs IHNwZWNzLCBzaXplLCBzaXplLCBbJl0ocmVzZXJ2ZV9pdGVyYXRvcjxPdXRwdXRJdD4gaXQpIHsK Ky0gICAgICAgIGlmIChwcmVmaXggIT0gMCkgKml0KysgPSBzdGF0aWNfY2FzdDxDaGFyPihwcmVm aXgpOworLSAgICAgICAgcmV0dXJuIGdyb3VwaW5nLmFwcGx5KGl0LCBzdHJpbmdfdmlldyhkaWdp dHMsIHRvX3Vuc2lnbmVkKG51bV9kaWdpdHMpKSk7CistICAgICAgfSk7CistfQorLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgVUludCwgdHlwZW5hbWUgQ2hhcj4KKy1h dXRvIHdyaXRlX2ludF9sb2NhbGl6ZWQoT3V0cHV0SXQmIG91dCwgVUludCB2YWx1ZSwgdW5zaWdu ZWQgcHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19mb3JtYXRf c3BlY3M8Q2hhcj4mIHNwZWNzLCBsb2NhbGVfcmVmIGxvYykKKy0gICAgLT4gYm9vbCB7CistICBh dXRvIGdyb3VwaW5nID0gZGlnaXRfZ3JvdXBpbmc8Q2hhcj4obG9jKTsKKy0gIG91dCA9IHdyaXRl X2ludF9sb2NhbGl6ZWQob3V0LCB2YWx1ZSwgcHJlZml4LCBzcGVjcywgZ3JvdXBpbmcpOworLSAg cmV0dXJuIHRydWU7CistfQorLQorLUZNVF9DT05TVEVYUFIgaW5saW5lIHZvaWQgcHJlZml4X2Fw cGVuZCh1bnNpZ25lZCYgcHJlZml4LCB1bnNpZ25lZCB2YWx1ZSkgeworLSAgcHJlZml4IHw9IHBy ZWZpeCAhPSAwID8gdmFsdWUgPDwgOCA6IHZhbHVlOworLSAgcHJlZml4ICs9ICgxdSArICh2YWx1 ZSA+IDB4ZmYgPyAxIDogMCkpIDw8IDI0OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVUlu dD4gc3RydWN0IHdyaXRlX2ludF9hcmcgeworLSAgVUludCBhYnNfdmFsdWU7CistICB1bnNpZ25l ZCBwcmVmaXg7CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1GTVRfQ09OU1RFWFBS IGF1dG8gbWFrZV93cml0ZV9pbnRfYXJnKFQgdmFsdWUsIHNpZ25fdCBzaWduKQorLSAgICAtPiB3 cml0ZV9pbnRfYXJnPHVpbnQzMl9vcl82NF9vcl8xMjhfdDxUPj4geworLSAgYXV0byBwcmVmaXgg PSAwdTsKKy0gIGF1dG8gYWJzX3ZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDMyX29yXzY0X29yXzEy OF90PFQ+Pih2YWx1ZSk7CistICBpZiAoaXNfbmVnYXRpdmUodmFsdWUpKSB7CistICAgIHByZWZp eCA9IDB4MDEwMDAwMDAgfCAnLSc7CistICAgIGFic192YWx1ZSA9IDAgLSBhYnNfdmFsdWU7Cist ICB9IGVsc2UgeworLSAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgcHJlZml4ZXNbNF0gPSB7 MCwgMCwgMHgxMDAwMDAwdSB8ICcrJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MTAwMDAwMHUgfCAnICd9OworLSAgICBwcmVmaXggPSBwcmVmaXhlc1tz aWduXTsKKy0gIH0KKy0gIHJldHVybiB7YWJzX3ZhbHVlLCBwcmVmaXh9OworLX0KKy0KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIFQ+CistRk1U X0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8gd3JpdGVfaW50KE91dHB1dEl0IG91dCwgd3JpdGVf aW50X2FyZzxUPiBhcmcsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3MsCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZV9yZWYgbG9jKSAtPiBPdXRwdXRJdCB7Cist ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxULCB1aW50MzJfb3JfNjRfb3JfMTI4X3Q8VD4+ Ojp2YWx1ZSwgIiIpOworLSAgYXV0byBhYnNfdmFsdWUgPSBhcmcuYWJzX3ZhbHVlOworLSAgYXV0 byBwcmVmaXggPSBhcmcucHJlZml4OworLSAgc3dpdGNoIChzcGVjcy50eXBlKSB7CistICBjYXNl IHByZXNlbnRhdGlvbl90eXBlOjpub25lOgorLSAgY2FzZSBwcmVzZW50YXRpb25fdHlwZTo6ZGVj OiB7CistICAgIGlmIChzcGVjcy5sb2NhbGl6ZWQgJiYKKy0gICAgICAgIHdyaXRlX2ludF9sb2Nh bGl6ZWQob3V0LCBzdGF0aWNfY2FzdDx1aW50NjRfb3JfMTI4X3Q8VD4+KGFic192YWx1ZSksCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgc3BlY3MsIGxvYykpIHsKKy0gICAg ICByZXR1cm4gb3V0OworLSAgICB9CistICAgIGF1dG8gbnVtX2RpZ2l0cyA9IGNvdW50X2RpZ2l0 cyhhYnNfdmFsdWUpOworLSAgICByZXR1cm4gd3JpdGVfaW50KAorLSAgICAgICAgb3V0LCBudW1f ZGlnaXRzLCBwcmVmaXgsIHNwZWNzLCBbPV0ocmVzZXJ2ZV9pdGVyYXRvcjxPdXRwdXRJdD4gaXQp IHsKKy0gICAgICAgICAgcmV0dXJuIGZvcm1hdF9kZWNpbWFsPENoYXI+KGl0LCBhYnNfdmFsdWUs IG51bV9kaWdpdHMpLmVuZDsKKy0gICAgICAgIH0pOworLSAgfQorLSAgY2FzZSBwcmVzZW50YXRp b25fdHlwZTo6aGV4X2xvd2VyOgorLSAgY2FzZSBwcmVzZW50YXRpb25fdHlwZTo6aGV4X3VwcGVy OiB7CistICAgIGJvb2wgdXBwZXIgPSBzcGVjcy50eXBlID09IHByZXNlbnRhdGlvbl90eXBlOjpo ZXhfdXBwZXI7CistICAgIGlmIChzcGVjcy5hbHQpCistICAgICAgcHJlZml4X2FwcGVuZChwcmVm aXgsIHVuc2lnbmVkKHVwcGVyID8gJ1gnIDogJ3gnKSA8PCA4IHwgJzAnKTsKKy0gICAgaW50IG51 bV9kaWdpdHMgPSBjb3VudF9kaWdpdHM8ND4oYWJzX3ZhbHVlKTsKKy0gICAgcmV0dXJuIHdyaXRl X2ludCgKKy0gICAgICAgIG91dCwgbnVtX2RpZ2l0cywgcHJlZml4LCBzcGVjcywgWz1dKHJlc2Vy dmVfaXRlcmF0b3I8T3V0cHV0SXQ+IGl0KSB7CistICAgICAgICAgIHJldHVybiBmb3JtYXRfdWlu dDw0LCBDaGFyPihpdCwgYWJzX3ZhbHVlLCBudW1fZGlnaXRzLCB1cHBlcik7CistICAgICAgICB9 KTsKKy0gIH0KKy0gIGNhc2UgcHJlc2VudGF0aW9uX3R5cGU6OmJpbl9sb3dlcjoKKy0gIGNhc2Ug cHJlc2VudGF0aW9uX3R5cGU6OmJpbl91cHBlcjogeworLSAgICBib29sIHVwcGVyID0gc3BlY3Mu dHlwZSA9PSBwcmVzZW50YXRpb25fdHlwZTo6YmluX3VwcGVyOworLSAgICBpZiAoc3BlY3MuYWx0 KQorLSAgICAgIHByZWZpeF9hcHBlbmQocHJlZml4LCB1bnNpZ25lZCh1cHBlciA/ICdCJyA6ICdi JykgPDwgOCB8ICcwJyk7CistICAgIGludCBudW1fZGlnaXRzID0gY291bnRfZGlnaXRzPDE+KGFi c192YWx1ZSk7CistICAgIHJldHVybiB3cml0ZV9pbnQob3V0LCBudW1fZGlnaXRzLCBwcmVmaXgs IHNwZWNzLAorLSAgICAgICAgICAgICAgICAgICAgIFs9XShyZXNlcnZlX2l0ZXJhdG9yPE91dHB1 dEl0PiBpdCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdF91aW50PDEs IENoYXI+KGl0LCBhYnNfdmFsdWUsIG51bV9kaWdpdHMpOworLSAgICAgICAgICAgICAgICAgICAg IH0pOworLSAgfQorLSAgY2FzZSBwcmVzZW50YXRpb25fdHlwZTo6b2N0OiB7CistICAgIGludCBu dW1fZGlnaXRzID0gY291bnRfZGlnaXRzPDM+KGFic192YWx1ZSk7CistICAgIC8vIE9jdGFsIHBy ZWZpeCAnMCcgaXMgY291bnRlZCBhcyBhIGRpZ2l0LCBzbyBvbmx5IGFkZCBpdCBpZiBwcmVjaXNp b24KKy0gICAgLy8gaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cy4KKy0g ICAgaWYgKHNwZWNzLmFsdCAmJiBzcGVjcy5wcmVjaXNpb24gPD0gbnVtX2RpZ2l0cyAmJiBhYnNf dmFsdWUgIT0gMCkKKy0gICAgICBwcmVmaXhfYXBwZW5kKHByZWZpeCwgJzAnKTsKKy0gICAgcmV0 dXJuIHdyaXRlX2ludChvdXQsIG51bV9kaWdpdHMsIHByZWZpeCwgc3BlY3MsCistICAgICAgICAg ICAgICAgICAgICAgWz1dKHJlc2VydmVfaXRlcmF0b3I8T3V0cHV0SXQ+IGl0KSB7CistICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0X3VpbnQ8MywgQ2hhcj4oaXQsIGFic192YWx1 ZSwgbnVtX2RpZ2l0cyk7CistICAgICAgICAgICAgICAgICAgICAgfSk7CistICB9CistICBjYXNl IHByZXNlbnRhdGlvbl90eXBlOjpjaHI6CistICAgIHJldHVybiB3cml0ZV9jaGFyKG91dCwgc3Rh dGljX2Nhc3Q8Q2hhcj4oYWJzX3ZhbHVlKSwgc3BlY3MpOworLSAgZGVmYXVsdDoKKy0gICAgdGhy b3dfZm9ybWF0X2Vycm9yKCJpbnZhbGlkIHR5cGUgc3BlY2lmaWVyIik7CistICB9CistICByZXR1 cm4gb3V0OworLX0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgT3V0cHV0SXQs IHR5cGVuYW1lIFQ+CistRk1UX0NPTlNURVhQUiBGTVRfTk9JTkxJTkUgYXV0byB3cml0ZV9pbnRf bm9pbmxpbmUoCistICAgIE91dHB1dEl0IG91dCwgd3JpdGVfaW50X2FyZzxUPiBhcmcsIGNvbnN0 IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3MsCistICAgIGxvY2FsZV9yZWYgbG9jKSAt PiBPdXRwdXRJdCB7CistICByZXR1cm4gd3JpdGVfaW50KG91dCwgYXJnLCBzcGVjcywgbG9jKTsK Ky19CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFt ZSBULAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJgor LSAgICAgICAgICAgICAgICAgICAgICAgICFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlICYm CistICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPE91dHB1dEl0LCBidWZmZXJf YXBwZW5kZXI8Q2hhcj4+Ojp2YWx1ZSk+CistRk1UX0NPTlNURVhQUiBGTVRfSU5MSU5FIGF1dG8g d3JpdGUoT3V0cHV0SXQgb3V0LCBUIHZhbHVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3MsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlX3JlZiBsb2MpIC0+IE91dHB1dEl0 IHsKKy0gIHJldHVybiB3cml0ZV9pbnRfbm9pbmxpbmUob3V0LCBtYWtlX3dyaXRlX2ludF9hcmco dmFsdWUsIHNwZWNzLnNpZ24pLCBzcGVjcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg bG9jKTsKKy19CistLy8gQW4gaW5saW5lZCB2ZXJzaW9uIG9mIHdyaXRlIHVzZWQgaW4gZm9ybWF0 IHN0cmluZyBjb21waWxhdGlvbi4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUg T3V0cHV0SXQsIHR5cGVuYW1lIFQsCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoaXNfaW50ZWdy YWw8VD46OnZhbHVlICYmCistICAgICAgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfc2FtZTxU LCBib29sPjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAhc3RkOjppc19zYW1l PE91dHB1dEl0LCBidWZmZXJfYXBwZW5kZXI8Q2hhcj4+Ojp2YWx1ZSk+CistRk1UX0NPTlNURVhQ UiBGTVRfSU5MSU5FIGF1dG8gd3JpdGUoT3V0cHV0SXQgb3V0LCBUIHZhbHVlLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFy PiYgc3BlY3MsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlX3Jl ZiBsb2MpIC0+IE91dHB1dEl0IHsKKy0gIHJldHVybiB3cml0ZV9pbnQob3V0LCBtYWtlX3dyaXRl X2ludF9hcmcodmFsdWUsIHNwZWNzLnNpZ24pLCBzcGVjcywgbG9jKTsKKy19CistCistdGVtcGxh dGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0PgorLUZNVF9DT05TVEVYUFIgYXV0 byB3cml0ZShPdXRwdXRJdCBvdXQsIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IHMsCistICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3Mp IC0+IE91dHB1dEl0IHsKKy0gIGF1dG8gZGF0YSA9IHMuZGF0YSgpOworLSAgYXV0byBzaXplID0g cy5zaXplKCk7CistICBpZiAoc3BlY3MucHJlY2lzaW9uID49IDAgJiYgdG9fdW5zaWduZWQoc3Bl Y3MucHJlY2lzaW9uKSA8IHNpemUpCistICAgIHNpemUgPSBjb2RlX3BvaW50X2luZGV4KHMsIHRv X3Vuc2lnbmVkKHNwZWNzLnByZWNpc2lvbikpOworLSAgYXV0byB3aWR0aCA9CistICAgICAgc3Bl Y3Mud2lkdGggIT0gMCA/IGNvbXB1dGVfd2lkdGgoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4oZGF0 YSwgc2l6ZSkpIDogMDsKKy0gIHJldHVybiB3cml0ZV9wYWRkZWQob3V0LCBzcGVjcywgc2l6ZSwg d2lkdGgsCistICAgICAgICAgICAgICAgICAgICAgIFs9XShyZXNlcnZlX2l0ZXJhdG9yPE91dHB1 dEl0PiBpdCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5X3N0cjxDaGFy PihkYXRhLCBkYXRhICsgc2l6ZSwgaXQpOworLSAgICAgICAgICAgICAgICAgICAgICB9KTsKKy19 CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0PgorLUZNVF9DT05T VEVYUFIgYXV0byB3cml0ZShPdXRwdXRJdCBvdXQsCistICAgICAgICAgICAgICAgICAgICAgICAg IGJhc2ljX3N0cmluZ192aWV3PHR5cGVfaWRlbnRpdHlfdDxDaGFyPj4gcywKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfZm9ybWF0X3NwZWNzPENoYXI+JiBzcGVjcywgbG9j YWxlX3JlZikKKy0gICAgLT4gT3V0cHV0SXQgeworLSAgY2hlY2tfc3RyaW5nX3R5cGVfc3BlYyhz cGVjcy50eXBlKTsKKy0gIHJldHVybiB3cml0ZShvdXQsIHMsIHNwZWNzKTsKKy19CistdGVtcGxh dGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0PgorLUZNVF9DT05TVEVYUFIgYXV0 byB3cml0ZShPdXRwdXRJdCBvdXQsIGNvbnN0IENoYXIqIHMsCistICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3MsIGxvY2FsZV9yZWYp CistICAgIC0+IE91dHB1dEl0IHsKKy0gIHJldHVybiBjaGVja19jc3RyaW5nX3R5cGVfc3BlYyhz cGVjcy50eXBlKQorLSAgICAgICAgICAgICA/IHdyaXRlKG91dCwgYmFzaWNfc3RyaW5nX3ZpZXc8 Q2hhcj4ocyksIHNwZWNzLCB7fSkKKy0gICAgICAgICAgICAgOiB3cml0ZV9wdHI8Q2hhcj4ob3V0 LCB0b191aW50cHRyKHMpLCAmc3BlY3MpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh ciwgdHlwZW5hbWUgT3V0cHV0SXQ+CistRk1UX0NPTlNURVhQUjIwIGF1dG8gd3JpdGVfbm9uZmlu aXRlKE91dHB1dEl0IG91dCwgYm9vbCBpc2luZiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmFzaWNfZm9ybWF0X3NwZWNzPENoYXI+IHNwZWNzLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdF9zcGVjcyYgZnNwZWNzKSAtPiBP dXRwdXRJdCB7CistICBhdXRvIHN0ciA9CistICAgICAgaXNpbmYgPyAoZnNwZWNzLnVwcGVyID8g IklORiIgOiAiaW5mIikgOiAoZnNwZWNzLnVwcGVyID8gIk5BTiIgOiAibmFuIik7CistICBjb25z dGV4cHIgc2l6ZV90IHN0cl9zaXplID0gMzsKKy0gIGF1dG8gc2lnbiA9IGZzcGVjcy5zaWduOwor LSAgYXV0byBzaXplID0gc3RyX3NpemUgKyAoc2lnbiA/IDEgOiAwKTsKKy0gIC8vIFJlcGxhY2Ug JzAnLXBhZGRpbmcgd2l0aCBzcGFjZSBmb3Igbm9uLWZpbml0ZSB2YWx1ZXMuCistICBjb25zdCBi b29sIGlzX3plcm9fZmlsbCA9CistICAgICAgc3BlY3MuZmlsbC5zaXplKCkgPT0gMSAmJiAqc3Bl Y3MuZmlsbC5kYXRhKCkgPT0gc3RhdGljX2Nhc3Q8Q2hhcj4oJzAnKTsKKy0gIGlmIChpc196ZXJv X2ZpbGwpIHNwZWNzLmZpbGxbMF0gPSBzdGF0aWNfY2FzdDxDaGFyPignICcpOworLSAgcmV0dXJu IHdyaXRlX3BhZGRlZChvdXQsIHNwZWNzLCBzaXplLCBbPV0ocmVzZXJ2ZV9pdGVyYXRvcjxPdXRw dXRJdD4gaXQpIHsKKy0gICAgaWYgKHNpZ24pICppdCsrID0gZGV0YWlsOjpzaWduPENoYXI+KHNp Z24pOworLSAgICByZXR1cm4gY29weV9zdHI8Q2hhcj4oc3RyLCBzdHIgKyBzdHJfc2l6ZSwgaXQp OworLSAgfSk7CistfQorLQorLS8vIEEgZGVjaW1hbCBmbG9hdGluZy1wb2ludCBudW1iZXIgc2ln bmlmaWNhbmQgKiBwb3coMTAsIGV4cCkuCistc3RydWN0IGJpZ19kZWNpbWFsX2ZwIHsKKy0gIGNv bnN0IGNoYXIqIHNpZ25pZmljYW5kOworLSAgaW50IHNpZ25pZmljYW5kX3NpemU7CistICBpbnQg ZXhwb25lbnQ7CistfTsKKy0KKy1jb25zdGV4cHIgYXV0byBnZXRfc2lnbmlmaWNhbmRfc2l6ZShj b25zdCBiaWdfZGVjaW1hbF9mcCYgZnApIC0+IGludCB7CistICByZXR1cm4gZnAuc2lnbmlmaWNh bmRfc2l6ZTsKKy19CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistaW5saW5lIGF1dG8gZ2V0X3Np Z25pZmljYW5kX3NpemUoY29uc3QgZHJhZ29uYm94OjpkZWNpbWFsX2ZwPFQ+JiBmcCkgLT4gaW50 IHsKKy0gIHJldHVybiBjb3VudF9kaWdpdHMoZnAuc2lnbmlmaWNhbmQpOworLX0KKy0KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgT3V0cHV0SXQ+CistY29uc3RleHByIGF1dG8g d3JpdGVfc2lnbmlmaWNhbmQoT3V0cHV0SXQgb3V0LCBjb25zdCBjaGFyKiBzaWduaWZpY2FuZCwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbmlmaWNhbmRfc2l6ZSkg LT4gT3V0cHV0SXQgeworLSAgcmV0dXJuIGNvcHlfc3RyPENoYXI+KHNpZ25pZmljYW5kLCBzaWdu aWZpY2FuZCArIHNpZ25pZmljYW5kX3NpemUsIG91dCk7CistfQorLXRlbXBsYXRlIDx0eXBlbmFt ZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgVUludD4KKy1pbmxpbmUgYXV0byB3 cml0ZV9zaWduaWZpY2FuZChPdXRwdXRJdCBvdXQsIFVJbnQgc2lnbmlmaWNhbmQsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ25pZmljYW5kX3NpemUpIC0+IE91dHB1dEl0 IHsKKy0gIHJldHVybiBmb3JtYXRfZGVjaW1hbDxDaGFyPihvdXQsIHNpZ25pZmljYW5kLCBzaWdu aWZpY2FuZF9zaXplKS5lbmQ7CistfQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFt ZSBPdXRwdXRJdCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgR3JvdXBpbmc+CistRk1UX0NPTlNURVhQ UjIwIGF1dG8gd3JpdGVfc2lnbmlmaWNhbmQoT3V0cHV0SXQgb3V0LCBUIHNpZ25pZmljYW5kLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWduaWZpY2FuZF9z aXplLCBpbnQgZXhwb25lbnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgR3JvdXBpbmcmIGdyb3VwaW5nKSAtPiBPdXRwdXRJdCB7CistICBpZiAoIWdyb3Vw aW5nLnNlcGFyYXRvcigpKSB7CistICAgIG91dCA9IHdyaXRlX3NpZ25pZmljYW5kPENoYXI+KG91 dCwgc2lnbmlmaWNhbmQsIHNpZ25pZmljYW5kX3NpemUpOworLSAgICByZXR1cm4gZGV0YWlsOjpm aWxsX24ob3V0LCBleHBvbmVudCwgc3RhdGljX2Nhc3Q8Q2hhcj4oJzAnKSk7CistICB9CistICBh dXRvIGJ1ZmZlciA9IG1lbW9yeV9idWZmZXIoKTsKKy0gIHdyaXRlX3NpZ25pZmljYW5kPGNoYXI+ KGFwcGVuZGVyKGJ1ZmZlciksIHNpZ25pZmljYW5kLCBzaWduaWZpY2FuZF9zaXplKTsKKy0gIGRl dGFpbDo6ZmlsbF9uKGFwcGVuZGVyKGJ1ZmZlciksIGV4cG9uZW50LCAnMCcpOworLSAgcmV0dXJu IGdyb3VwaW5nLmFwcGx5KG91dCwgc3RyaW5nX3ZpZXcoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNp emUoKSkpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVUludCwK Ky0gICAgICAgICAgRk1UX0VOQUJMRV9JRihzdGQ6OmlzX2ludGVncmFsPFVJbnQ+Ojp2YWx1ZSk+ CistaW5saW5lIGF1dG8gd3JpdGVfc2lnbmlmaWNhbmQoQ2hhciogb3V0LCBVSW50IHNpZ25pZmlj YW5kLCBpbnQgc2lnbmlmaWNhbmRfc2l6ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgaW50ZWdyYWxfc2l6ZSwgQ2hhciBkZWNpbWFsX3BvaW50KSAtPiBDaGFyKiB7CistICBp ZiAoIWRlY2ltYWxfcG9pbnQpCistICAgIHJldHVybiBmb3JtYXRfZGVjaW1hbChvdXQsIHNpZ25p ZmljYW5kLCBzaWduaWZpY2FuZF9zaXplKS5lbmQ7CistICBvdXQgKz0gc2lnbmlmaWNhbmRfc2l6 ZSArIDE7CistICBDaGFyKiBlbmQgPSBvdXQ7CistICBpbnQgZmxvYXRpbmdfc2l6ZSA9IHNpZ25p ZmljYW5kX3NpemUgLSBpbnRlZ3JhbF9zaXplOworLSAgZm9yIChpbnQgaSA9IGZsb2F0aW5nX3Np emUgLyAyOyBpID4gMDsgLS1pKSB7CistICAgIG91dCAtPSAyOworLSAgICBjb3B5MihvdXQsIGRp Z2l0czIoc2lnbmlmaWNhbmQgJSAxMDApKTsKKy0gICAgc2lnbmlmaWNhbmQgLz0gMTAwOworLSAg fQorLSAgaWYgKGZsb2F0aW5nX3NpemUgJSAyICE9IDApIHsKKy0gICAgKi0tb3V0ID0gc3RhdGlj X2Nhc3Q8Q2hhcj4oJzAnICsgc2lnbmlmaWNhbmQgJSAxMCk7CistICAgIHNpZ25pZmljYW5kIC89 IDEwOworLSAgfQorLSAgKi0tb3V0ID0gZGVjaW1hbF9wb2ludDsKKy0gIGZvcm1hdF9kZWNpbWFs KG91dCAtIGludGVncmFsX3NpemUsIHNpZ25pZmljYW5kLCBpbnRlZ3JhbF9zaXplKTsKKy0gIHJl dHVybiBlbmQ7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUg VUludCwgdHlwZW5hbWUgQ2hhciwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRighc3RkOjppc19w b2ludGVyPHJlbW92ZV9jdnJlZl90PE91dHB1dEl0Pj46OnZhbHVlKT4KKy1pbmxpbmUgYXV0byB3 cml0ZV9zaWduaWZpY2FuZChPdXRwdXRJdCBvdXQsIFVJbnQgc2lnbmlmaWNhbmQsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ25pZmljYW5kX3NpemUsIGludCBpbnRlZ3Jh bF9zaXplLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXIgZGVjaW1hbF9wb2lu dCkgLT4gT3V0cHV0SXQgeworLSAgLy8gQnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBob2xkIGRp Z2l0cyAoZGlnaXRzMTAgKyAxKSBhbmQgYSBkZWNpbWFsIHBvaW50LgorLSAgQ2hhciBidWZmZXJb ZGlnaXRzMTA8VUludD4oKSArIDJdOworLSAgYXV0byBlbmQgPSB3cml0ZV9zaWduaWZpY2FuZChi dWZmZXIsIHNpZ25pZmljYW5kLCBzaWduaWZpY2FuZF9zaXplLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnRlZ3JhbF9zaXplLCBkZWNpbWFsX3BvaW50KTsKKy0gIHJldHVybiBk ZXRhaWw6OmNvcHlfc3RyX25vaW5saW5lPENoYXI+KGJ1ZmZlciwgZW5kLCBvdXQpOworLX0KKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIENoYXI+CistRk1UX0NPTlNU RVhQUiBhdXRvIHdyaXRlX3NpZ25pZmljYW5kKE91dHB1dEl0IG91dCwgY29uc3QgY2hhciogc2ln bmlmaWNhbmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWdu aWZpY2FuZF9zaXplLCBpbnQgaW50ZWdyYWxfc2l6ZSwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ2hhciBkZWNpbWFsX3BvaW50KSAtPiBPdXRwdXRJdCB7CistICBvdXQg PSBkZXRhaWw6OmNvcHlfc3RyX25vaW5saW5lPENoYXI+KHNpZ25pZmljYW5kLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCArIGludGVncmFsX3Np emUsIG91dCk7CistICBpZiAoIWRlY2ltYWxfcG9pbnQpIHJldHVybiBvdXQ7CistICAqb3V0Kysg PSBkZWNpbWFsX3BvaW50OworLSAgcmV0dXJuIGRldGFpbDo6Y29weV9zdHJfbm9pbmxpbmU8Q2hh cj4oc2lnbmlmaWNhbmQgKyBpbnRlZ3JhbF9zaXplLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbmQgKyBzaWduaWZpY2FuZF9zaXplLCBvdXQpOwor LX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIENoYXIsIHR5cGVu YW1lIFQsIHR5cGVuYW1lIEdyb3VwaW5nPgorLUZNVF9DT05TVEVYUFIyMCBhdXRvIHdyaXRlX3Np Z25pZmljYW5kKE91dHB1dEl0IG91dCwgVCBzaWduaWZpY2FuZCwKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbmlmaWNhbmRfc2l6ZSwgaW50IGludGVncmFs X3NpemUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhciBkZWNp bWFsX3BvaW50LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEdyb3VwaW5nJiBncm91cGluZykgLT4gT3V0cHV0SXQgeworLSAgaWYgKCFncm91cGluZy5zZXBh cmF0b3IoKSkgeworLSAgICByZXR1cm4gd3JpdGVfc2lnbmlmaWNhbmQob3V0LCBzaWduaWZpY2Fu ZCwgc2lnbmlmaWNhbmRfc2l6ZSwgaW50ZWdyYWxfc2l6ZSwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlY2ltYWxfcG9pbnQpOworLSAgfQorLSAgYXV0byBidWZmZXIgPSBiYXNpY19t ZW1vcnlfYnVmZmVyPENoYXI+KCk7CistICB3cml0ZV9zaWduaWZpY2FuZChidWZmZXJfYXBwZW5k ZXI8Q2hhcj4oYnVmZmVyKSwgc2lnbmlmaWNhbmQsCistICAgICAgICAgICAgICAgICAgICBzaWdu aWZpY2FuZF9zaXplLCBpbnRlZ3JhbF9zaXplLCBkZWNpbWFsX3BvaW50KTsKKy0gIGdyb3VwaW5n LmFwcGx5KAorLSAgICAgIG91dCwgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4oYnVmZmVyLmRhdGEo KSwgdG9fdW5zaWduZWQoaW50ZWdyYWxfc2l6ZSkpKTsKKy0gIHJldHVybiBkZXRhaWw6OmNvcHlf c3RyX25vaW5saW5lPENoYXI+KGJ1ZmZlci5kYXRhKCkgKyBpbnRlZ3JhbF9zaXplLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmVuZCgpLCBvdXQpOwor LX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIERlY2ltYWxGUCwg dHlwZW5hbWUgQ2hhciwKKy0gICAgICAgICAgdHlwZW5hbWUgR3JvdXBpbmcgPSBkaWdpdF9ncm91 cGluZzxDaGFyPj4KKy1GTVRfQ09OU1RFWFBSMjAgYXV0byBkb193cml0ZV9mbG9hdChPdXRwdXRJ dCBvdXQsIGNvbnN0IERlY2ltYWxGUCYgZnAsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfZm9ybWF0X3NwZWNzPENoYXI+JiBzcGVjcywKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9zcGVjcyBmc3BlY3MsIGxvY2FsZV9y ZWYgbG9jKQorLSAgICAtPiBPdXRwdXRJdCB7CistICBhdXRvIHNpZ25pZmljYW5kID0gZnAuc2ln bmlmaWNhbmQ7CistICBpbnQgc2lnbmlmaWNhbmRfc2l6ZSA9IGdldF9zaWduaWZpY2FuZF9zaXpl KGZwKTsKKy0gIGNvbnN0ZXhwciBDaGFyIHplcm8gPSBzdGF0aWNfY2FzdDxDaGFyPignMCcpOwor LSAgYXV0byBzaWduID0gZnNwZWNzLnNpZ247CistICBzaXplX3Qgc2l6ZSA9IHRvX3Vuc2lnbmVk KHNpZ25pZmljYW5kX3NpemUpICsgKHNpZ24gPyAxIDogMCk7CistICB1c2luZyBpdGVyYXRvciA9 IHJlc2VydmVfaXRlcmF0b3I8T3V0cHV0SXQ+OworLQorLSAgQ2hhciBkZWNpbWFsX3BvaW50ID0K Ky0gICAgICBmc3BlY3MubG9jYWxlID8gZGV0YWlsOjpkZWNpbWFsX3BvaW50PENoYXI+KGxvYykg OiBzdGF0aWNfY2FzdDxDaGFyPignLicpOworLQorLSAgaW50IG91dHB1dF9leHAgPSBmcC5leHBv bmVudCArIHNpZ25pZmljYW5kX3NpemUgLSAxOworLSAgYXV0byB1c2VfZXhwX2Zvcm1hdCA9IFs9 XSgpIHsKKy0gICAgaWYgKGZzcGVjcy5mb3JtYXQgPT0gZmxvYXRfZm9ybWF0OjpleHApIHJldHVy biB0cnVlOworLSAgICBpZiAoZnNwZWNzLmZvcm1hdCAhPSBmbG9hdF9mb3JtYXQ6OmdlbmVyYWwp IHJldHVybiBmYWxzZTsKKy0gICAgLy8gVXNlIHRoZSBmaXhlZCBub3RhdGlvbiBpZiB0aGUgZXhw b25lbnQgaXMgaW4gW2V4cF9sb3dlciwgZXhwX3VwcGVyKSwKKy0gICAgLy8gZS5nLiAwLjAwMDEg aW5zdGVhZCBvZiAxZS0wNC4gT3RoZXJ3aXNlIHVzZSB0aGUgZXhwb25lbnQgbm90YXRpb24uCist ICAgIGNvbnN0IGludCBleHBfbG93ZXIgPSAtNCwgZXhwX3VwcGVyID0gMTY7CistICAgIHJldHVy biBvdXRwdXRfZXhwIDwgZXhwX2xvd2VyIHx8CistICAgICAgICAgICBvdXRwdXRfZXhwID49IChm c3BlY3MucHJlY2lzaW9uID4gMCA/IGZzcGVjcy5wcmVjaXNpb24gOiBleHBfdXBwZXIpOworLSAg fTsKKy0gIGlmICh1c2VfZXhwX2Zvcm1hdCgpKSB7CistICAgIGludCBudW1femVyb3MgPSAwOwor LSAgICBpZiAoZnNwZWNzLnNob3dwb2ludCkgeworLSAgICAgIG51bV96ZXJvcyA9IGZzcGVjcy5w cmVjaXNpb24gLSBzaWduaWZpY2FuZF9zaXplOworLSAgICAgIGlmIChudW1femVyb3MgPCAwKSBu dW1femVyb3MgPSAwOworLSAgICAgIHNpemUgKz0gdG9fdW5zaWduZWQobnVtX3plcm9zKTsKKy0g ICAgfSBlbHNlIGlmIChzaWduaWZpY2FuZF9zaXplID09IDEpIHsKKy0gICAgICBkZWNpbWFsX3Bv aW50ID0gQ2hhcigpOworLSAgICB9CistICAgIGF1dG8gYWJzX291dHB1dF9leHAgPSBvdXRwdXRf ZXhwID49IDAgPyBvdXRwdXRfZXhwIDogLW91dHB1dF9leHA7CistICAgIGludCBleHBfZGlnaXRz ID0gMjsKKy0gICAgaWYgKGFic19vdXRwdXRfZXhwID49IDEwMCkgZXhwX2RpZ2l0cyA9IGFic19v dXRwdXRfZXhwID49IDEwMDAgPyA0IDogMzsKKy0KKy0gICAgc2l6ZSArPSB0b191bnNpZ25lZCgo ZGVjaW1hbF9wb2ludCA/IDEgOiAwKSArIDIgKyBleHBfZGlnaXRzKTsKKy0gICAgY2hhciBleHBf Y2hhciA9IGZzcGVjcy51cHBlciA/ICdFJyA6ICdlJzsKKy0gICAgYXV0byB3cml0ZSA9IFs9XShp dGVyYXRvciBpdCkgeworLSAgICAgIGlmIChzaWduKSAqaXQrKyA9IGRldGFpbDo6c2lnbjxDaGFy PihzaWduKTsKKy0gICAgICAvLyBJbnNlcnQgYSBkZWNpbWFsIHBvaW50IGFmdGVyIHRoZSBmaXJz dCBkaWdpdCBhbmQgYWRkIGFuIGV4cG9uZW50LgorLSAgICAgIGl0ID0gd3JpdGVfc2lnbmlmaWNh bmQoaXQsIHNpZ25pZmljYW5kLCBzaWduaWZpY2FuZF9zaXplLCAxLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVjaW1hbF9wb2ludCk7CistICAgICAgaWYgKG51bV96ZXJvcyA+IDAp IGl0ID0gZGV0YWlsOjpmaWxsX24oaXQsIG51bV96ZXJvcywgemVybyk7CistICAgICAgKml0Kysg PSBzdGF0aWNfY2FzdDxDaGFyPihleHBfY2hhcik7CistICAgICAgcmV0dXJuIHdyaXRlX2V4cG9u ZW50PENoYXI+KG91dHB1dF9leHAsIGl0KTsKKy0gICAgfTsKKy0gICAgcmV0dXJuIHNwZWNzLndp ZHRoID4gMCA/IHdyaXRlX3BhZGRlZDxhbGlnbjo6cmlnaHQ+KG91dCwgc3BlY3MsIHNpemUsIHdy aXRlKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYmFzZV9pdGVyYXRvcihvdXQsIHdy aXRlKHJlc2VydmUob3V0LCBzaXplKSkpOworLSAgfQorLQorLSAgaW50IGV4cCA9IGZwLmV4cG9u ZW50ICsgc2lnbmlmaWNhbmRfc2l6ZTsKKy0gIGlmIChmcC5leHBvbmVudCA+PSAwKSB7CistICAg IC8vIDEyMzRlNSAtPiAxMjM0MDAwMDBbLjArXQorLSAgICBzaXplICs9IHRvX3Vuc2lnbmVkKGZw LmV4cG9uZW50KTsKKy0gICAgaW50IG51bV96ZXJvcyA9IGZzcGVjcy5wcmVjaXNpb24gLSBleHA7 CistI2lmZGVmIEZNVF9GVVpaCistICAgIGlmIChudW1femVyb3MgPiA1MDAwKQorLSAgICAgIHRo cm93IHN0ZDo6cnVudGltZV9lcnJvcigiZnV6eiBtb2RlIC0gYXZvaWRpbmcgZXhjZXNzaXZlIGNw dSB1c2UiKTsKKy0jZW5kaWYKKy0gICAgaWYgKGZzcGVjcy5zaG93cG9pbnQpIHsKKy0gICAgICBp ZiAobnVtX3plcm9zIDw9IDAgJiYgZnNwZWNzLmZvcm1hdCAhPSBmbG9hdF9mb3JtYXQ6OmZpeGVk KSBudW1femVyb3MgPSAxOworLSAgICAgIGlmIChudW1femVyb3MgPiAwKSBzaXplICs9IHRvX3Vu c2lnbmVkKG51bV96ZXJvcykgKyAxOworLSAgICB9CistICAgIGF1dG8gZ3JvdXBpbmcgPSBHcm91 cGluZyhsb2MsIGZzcGVjcy5sb2NhbGUpOworLSAgICBzaXplICs9IHRvX3Vuc2lnbmVkKGdyb3Vw aW5nLmNvdW50X3NlcGFyYXRvcnMoc2lnbmlmaWNhbmRfc2l6ZSkpOworLSAgICByZXR1cm4gd3Jp dGVfcGFkZGVkPGFsaWduOjpyaWdodD4ob3V0LCBzcGVjcywgc2l6ZSwgWyZdKGl0ZXJhdG9yIGl0 KSB7CistICAgICAgaWYgKHNpZ24pICppdCsrID0gZGV0YWlsOjpzaWduPENoYXI+KHNpZ24pOwor LSAgICAgIGl0ID0gd3JpdGVfc2lnbmlmaWNhbmQ8Q2hhcj4oaXQsIHNpZ25pZmljYW5kLCBzaWdu aWZpY2FuZF9zaXplLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnAuZXhw b25lbnQsIGdyb3VwaW5nKTsKKy0gICAgICBpZiAoIWZzcGVjcy5zaG93cG9pbnQpIHJldHVybiBp dDsKKy0gICAgICAqaXQrKyA9IGRlY2ltYWxfcG9pbnQ7CistICAgICAgcmV0dXJuIG51bV96ZXJv cyA+IDAgPyBkZXRhaWw6OmZpbGxfbihpdCwgbnVtX3plcm9zLCB6ZXJvKSA6IGl0OworLSAgICB9 KTsKKy0gIH0gZWxzZSBpZiAoZXhwID4gMCkgeworLSAgICAvLyAxMjM0ZS0yIC0+IDEyLjM0WzAr XQorLSAgICBpbnQgbnVtX3plcm9zID0gZnNwZWNzLnNob3dwb2ludCA/IGZzcGVjcy5wcmVjaXNp b24gLSBzaWduaWZpY2FuZF9zaXplIDogMDsKKy0gICAgc2l6ZSArPSAxICsgdG9fdW5zaWduZWQo bnVtX3plcm9zID4gMCA/IG51bV96ZXJvcyA6IDApOworLSAgICBhdXRvIGdyb3VwaW5nID0gR3Jv dXBpbmcobG9jLCBmc3BlY3MubG9jYWxlKTsKKy0gICAgc2l6ZSArPSB0b191bnNpZ25lZChncm91 cGluZy5jb3VudF9zZXBhcmF0b3JzKHNpZ25pZmljYW5kX3NpemUpKTsKKy0gICAgcmV0dXJuIHdy aXRlX3BhZGRlZDxhbGlnbjo6cmlnaHQ+KG91dCwgc3BlY3MsIHNpemUsIFsmXShpdGVyYXRvciBp dCkgeworLSAgICAgIGlmIChzaWduKSAqaXQrKyA9IGRldGFpbDo6c2lnbjxDaGFyPihzaWduKTsK Ky0gICAgICBpdCA9IHdyaXRlX3NpZ25pZmljYW5kKGl0LCBzaWduaWZpY2FuZCwgc2lnbmlmaWNh bmRfc2l6ZSwgZXhwLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9wb2lu dCwgZ3JvdXBpbmcpOworLSAgICAgIHJldHVybiBudW1femVyb3MgPiAwID8gZGV0YWlsOjpmaWxs X24oaXQsIG51bV96ZXJvcywgemVybykgOiBpdDsKKy0gICAgfSk7CistICB9CistICAvLyAxMjM0 ZS02IC0+IDAuMDAxMjM0CistICBpbnQgbnVtX3plcm9zID0gLWV4cDsKKy0gIGlmIChzaWduaWZp Y2FuZF9zaXplID09IDAgJiYgZnNwZWNzLnByZWNpc2lvbiA+PSAwICYmCistICAgICAgZnNwZWNz LnByZWNpc2lvbiA8IG51bV96ZXJvcykgeworLSAgICBudW1femVyb3MgPSBmc3BlY3MucHJlY2lz aW9uOworLSAgfQorLSAgYm9vbCBwb2ludHkgPSBudW1femVyb3MgIT0gMCB8fCBzaWduaWZpY2Fu ZF9zaXplICE9IDAgfHwgZnNwZWNzLnNob3dwb2ludDsKKy0gIHNpemUgKz0gMSArIChwb2ludHkg PyAxIDogMCkgKyB0b191bnNpZ25lZChudW1femVyb3MpOworLSAgcmV0dXJuIHdyaXRlX3BhZGRl ZDxhbGlnbjo6cmlnaHQ+KG91dCwgc3BlY3MsIHNpemUsIFsmXShpdGVyYXRvciBpdCkgeworLSAg ICBpZiAoc2lnbikgKml0KysgPSBkZXRhaWw6OnNpZ248Q2hhcj4oc2lnbik7CistICAgICppdCsr ID0gemVybzsKKy0gICAgaWYgKCFwb2ludHkpIHJldHVybiBpdDsKKy0gICAgKml0KysgPSBkZWNp bWFsX3BvaW50OworLSAgICBpdCA9IGRldGFpbDo6ZmlsbF9uKGl0LCBudW1femVyb3MsIHplcm8p OworLSAgICByZXR1cm4gd3JpdGVfc2lnbmlmaWNhbmQ8Q2hhcj4oaXQsIHNpZ25pZmljYW5kLCBz aWduaWZpY2FuZF9zaXplKTsKKy0gIH0pOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh cj4gY2xhc3MgZmFsbGJhY2tfZGlnaXRfZ3JvdXBpbmcgeworLSBwdWJsaWM6CistICBjb25zdGV4 cHIgZmFsbGJhY2tfZGlnaXRfZ3JvdXBpbmcobG9jYWxlX3JlZiwgYm9vbCkge30KKy0KKy0gIGNv bnN0ZXhwciBDaGFyIHNlcGFyYXRvcigpIGNvbnN0IHsgcmV0dXJuIENoYXIoKTsgfQorLQorLSAg Y29uc3RleHByIGludCBjb3VudF9zZXBhcmF0b3JzKGludCkgY29uc3QgeyByZXR1cm4gMDsgfQor LQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUgQz4KKy0gIGNvbnN0ZXhwciBP dXQgYXBwbHkoT3V0IG91dCwgYmFzaWNfc3RyaW5nX3ZpZXc8Qz4pIGNvbnN0IHsKKy0gICAgcmV0 dXJuIG91dDsKKy0gIH0KKy19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlw ZW5hbWUgRGVjaW1hbEZQLCB0eXBlbmFtZSBDaGFyPgorLUZNVF9DT05TVEVYUFIyMCBhdXRvIHdy aXRlX2Zsb2F0KE91dHB1dEl0IG91dCwgY29uc3QgRGVjaW1hbEZQJiBmcCwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNw ZWNzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0X3NwZWNzIGZzcGVj cywgbG9jYWxlX3JlZiBsb2MpCistICAgIC0+IE91dHB1dEl0IHsKKy0gIGlmIChpc19jb25zdGFu dF9ldmFsdWF0ZWQoKSkgeworLSAgICByZXR1cm4gZG9fd3JpdGVfZmxvYXQ8T3V0cHV0SXQsIERl Y2ltYWxGUCwgQ2hhciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrX2RpZ2l0 X2dyb3VwaW5nPENoYXI+PihvdXQsIGZwLCBzcGVjcywgZnNwZWNzLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYyk7CistICB9IGVs c2UgeworLSAgICByZXR1cm4gZG9fd3JpdGVfZmxvYXQob3V0LCBmcCwgc3BlY3MsIGZzcGVjcywg bG9jKTsKKy0gIH0KKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYo c3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUpPgorLUZNVF9DT05TVEVYUFIyMCBib29s IGlzaW5mKFQgdmFsdWUpIHsKKy0gIGlmIChpc19jb25zdGFudF9ldmFsdWF0ZWQoKSkgeworLSNp ZiBkZWZpbmVkKF9fY3BwX2lmX2NvbnN0ZXhwcikKKy0gICAgaWYgY29uc3RleHByIChzdGQ6Om51 bWVyaWNfbGltaXRzPGRvdWJsZT46OmlzX2llYzU1OSkgeworLSAgICAgIGF1dG8gYml0cyA9IGRl dGFpbDo6Yml0X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKKy0g ICAgICBjb25zdGV4cHIgYXV0byBzaWduaWZpY2FuZF9iaXRzID0KKy0gICAgICAgICAgZHJhZ29u Ym94OjpmbG9hdF9pbmZvPGRvdWJsZT46OnNpZ25pZmljYW5kX2JpdHM7CistICAgICAgcmV0dXJu IChiaXRzICYgZXhwb25lbnRfbWFzazxkb3VibGU+KCkpICYmCistICAgICAgICAgICAgICEoYml0 cyAmICgodWludDY0X3QoMSkgPDwgc2lnbmlmaWNhbmRfYml0cykgLSAxKSk7CistICAgIH0KKy0j ZW5kaWYKKy0gIH0KKy0gIHJldHVybiBzdGQ6OmlzaW5mKHZhbHVlKTsKKy19CistCistdGVtcGxh dGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6 dmFsdWUpPgorLUZNVF9DT05TVEVYUFIyMCBib29sIGlzZmluaXRlKFQgdmFsdWUpIHsKKy0gIGlm IChpc19jb25zdGFudF9ldmFsdWF0ZWQoKSkgeworLSNpZiBkZWZpbmVkKF9fY3BwX2lmX2NvbnN0 ZXhwcikKKy0gICAgaWYgY29uc3RleHByIChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlz X2llYzU1OSkgeworLSAgICAgIGF1dG8gYml0cyA9IGRldGFpbDo6Yml0X2Nhc3Q8dWludDY0X3Q+ KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKKy0gICAgICByZXR1cm4gKGJpdHMgJiBleHBv bmVudF9tYXNrPGRvdWJsZT4oKSkgIT0gZXhwb25lbnRfbWFzazxkb3VibGU+KCk7CistICAgIH0K Ky0jZW5kaWYKKy0gIH0KKy0gIHJldHVybiBzdGQ6OmlzZmluaXRlKHZhbHVlKTsKKy19CistCist dGVtcGxhdGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoc3RkOjppc19mbG9hdGluZ19wb2lu dDxUPjo6dmFsdWUpPgorLUZNVF9JTkxJTkUgRk1UX0NPTlNURVhQUiBib29sIHNpZ25iaXQoVCB2 YWx1ZSkgeworLSAgaWYgKGlzX2NvbnN0YW50X2V2YWx1YXRlZCgpKSB7CistI2lmZGVmIF9fY3Bw X2lmX2NvbnN0ZXhwcgorLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91 YmxlPjo6aXNfaWVjNTU5KSB7CistICAgICAgYXV0byBiaXRzID0gZGV0YWlsOjpiaXRfY2FzdDx1 aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOworLSAgICAgIHJldHVybiAoYml0 cyAmICh1aW50NjRfdCgxKSA8PCAobnVtX2JpdHM8dWludDY0X3Q+KCkgLSAxKSkpICE9IDA7Cist ICAgIH0KKy0jZW5kaWYKKy0gIH0KKy0gIHJldHVybiBzdGQ6OnNpZ25iaXQodmFsdWUpOworLX0K Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1l IFQsCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6 dmFsdWUpPgorLUZNVF9DT05TVEVYUFIyMCBhdXRvIHdyaXRlKE91dHB1dEl0IG91dCwgVCB2YWx1 ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4g c3BlY3MsIGxvY2FsZV9yZWYgbG9jID0ge30pCistICAgIC0+IE91dHB1dEl0IHsKKy0gIGlmIChj b25zdF9jaGVjayghaXNfc3VwcG9ydGVkX2Zsb2F0aW5nX3BvaW50KHZhbHVlKSkpIHJldHVybiBv dXQ7CistICBmbG9hdF9zcGVjcyBmc3BlY3MgPSBwYXJzZV9mbG9hdF90eXBlX3NwZWMoc3BlY3Mp OworLSAgZnNwZWNzLnNpZ24gPSBzcGVjcy5zaWduOworLSAgaWYgKGRldGFpbDo6c2lnbmJpdCh2 YWx1ZSkpIHsgIC8vIHZhbHVlIDwgMCBpcyBmYWxzZSBmb3IgTmFOIHNvIHVzZSBzaWduYml0Lgor LSAgICBmc3BlY3Muc2lnbiA9IHNpZ246Om1pbnVzOworLSAgICB2YWx1ZSA9IC12YWx1ZTsKKy0g IH0gZWxzZSBpZiAoZnNwZWNzLnNpZ24gPT0gc2lnbjo6bWludXMpIHsKKy0gICAgZnNwZWNzLnNp Z24gPSBzaWduOjpub25lOworLSAgfQorLQorLSAgaWYgKCFkZXRhaWw6OmlzZmluaXRlKHZhbHVl KSkKKy0gICAgcmV0dXJuIHdyaXRlX25vbmZpbml0ZShvdXQsIGRldGFpbDo6aXNpbmYodmFsdWUp LCBzcGVjcywgZnNwZWNzKTsKKy0KKy0gIGlmIChzcGVjcy5hbGlnbiA9PSBhbGlnbjo6bnVtZXJp YyAmJiBmc3BlY3Muc2lnbikgeworLSAgICBhdXRvIGl0ID0gcmVzZXJ2ZShvdXQsIDEpOworLSAg ICAqaXQrKyA9IGRldGFpbDo6c2lnbjxDaGFyPihmc3BlY3Muc2lnbik7CistICAgIG91dCA9IGJh c2VfaXRlcmF0b3Iob3V0LCBpdCk7CistICAgIGZzcGVjcy5zaWduID0gc2lnbjo6bm9uZTsKKy0g ICAgaWYgKHNwZWNzLndpZHRoICE9IDApIC0tc3BlY3Mud2lkdGg7CistICB9CistCistICBtZW1v cnlfYnVmZmVyIGJ1ZmZlcjsKKy0gIGlmIChmc3BlY3MuZm9ybWF0ID09IGZsb2F0X2Zvcm1hdDo6 aGV4KSB7CistICAgIGlmIChmc3BlY3Muc2lnbikgYnVmZmVyLnB1c2hfYmFjayhkZXRhaWw6OnNp Z248Y2hhcj4oZnNwZWNzLnNpZ24pKTsKKy0gICAgc25wcmludGZfZmxvYXQocHJvbW90ZV9mbG9h dCh2YWx1ZSksIHNwZWNzLnByZWNpc2lvbiwgZnNwZWNzLCBidWZmZXIpOworLSAgICByZXR1cm4g d3JpdGVfYnl0ZXM8YWxpZ246OnJpZ2h0PihvdXQsIHtidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6 ZSgpfSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3MpOworLSAg fQorLSAgaW50IHByZWNpc2lvbiA9IHNwZWNzLnByZWNpc2lvbiA+PSAwIHx8IHNwZWNzLnR5cGUg PT0gcHJlc2VudGF0aW9uX3R5cGU6Om5vbmUKKy0gICAgICAgICAgICAgICAgICAgICAgPyBzcGVj cy5wcmVjaXNpb24KKy0gICAgICAgICAgICAgICAgICAgICAgOiA2OworLSAgaWYgKGZzcGVjcy5m b3JtYXQgPT0gZmxvYXRfZm9ybWF0OjpleHApIHsKKy0gICAgaWYgKHByZWNpc2lvbiA9PSBtYXhf dmFsdWU8aW50PigpKQorLSAgICAgIHRocm93X2Zvcm1hdF9lcnJvcigibnVtYmVyIGlzIHRvbyBi aWciKTsKKy0gICAgZWxzZQorLSAgICAgICsrcHJlY2lzaW9uOworLSAgfQorLSAgaWYgKGNvbnN0 X2NoZWNrKHN0ZDo6aXNfc2FtZTxULCBmbG9hdD4oKSkpIGZzcGVjcy5iaW5hcnkzMiA9IHRydWU7 CistICBpZiAoIWlzX2Zhc3RfZmxvYXQ8VD4oKSkgZnNwZWNzLmZhbGxiYWNrID0gdHJ1ZTsKKy0g IGludCBleHAgPSBmb3JtYXRfZmxvYXQocHJvbW90ZV9mbG9hdCh2YWx1ZSksIHByZWNpc2lvbiwg ZnNwZWNzLCBidWZmZXIpOworLSAgZnNwZWNzLnByZWNpc2lvbiA9IHByZWNpc2lvbjsKKy0gIGF1 dG8gZnAgPSBiaWdfZGVjaW1hbF9mcHtidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ1 ZmZlci5zaXplKCkpLCBleHB9OworLSAgcmV0dXJuIHdyaXRlX2Zsb2F0KG91dCwgZnAsIHNwZWNz LCBmc3BlY3MsIGxvYyk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFt ZSBPdXRwdXRJdCwgdHlwZW5hbWUgVCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRihpc19mYXN0 X2Zsb2F0PFQ+Ojp2YWx1ZSk+CistRk1UX0NPTlNURVhQUjIwIGF1dG8gd3JpdGUoT3V0cHV0SXQg b3V0LCBUIHZhbHVlKSAtPiBPdXRwdXRJdCB7CistICBpZiAoaXNfY29uc3RhbnRfZXZhbHVhdGVk KCkpIHsKKy0gICAgcmV0dXJuIHdyaXRlKG91dCwgdmFsdWUsIGJhc2ljX2Zvcm1hdF9zcGVjczxD aGFyPigpKTsKKy0gIH0KKy0KKy0gIGlmIChjb25zdF9jaGVjayghaXNfc3VwcG9ydGVkX2Zsb2F0 aW5nX3BvaW50KHZhbHVlKSkpIHJldHVybiBvdXQ7CistCistICB1c2luZyBmbG9hdHkgPSBjb25k aXRpb25hbF90PHN0ZDo6aXNfc2FtZTxULCBsb25nIGRvdWJsZT46OnZhbHVlLCBkb3VibGUsIFQ+ OworLSAgdXNpbmcgdWludCA9IHR5cGVuYW1lIGRyYWdvbmJveDo6ZmxvYXRfaW5mbzxmbG9hdHk+ OjpjYXJyaWVyX3VpbnQ7CistICBhdXRvIGJpdHMgPSBiaXRfY2FzdDx1aW50Pih2YWx1ZSk7Cist CistICBhdXRvIGZzcGVjcyA9IGZsb2F0X3NwZWNzKCk7CistICBpZiAoZGV0YWlsOjpzaWduYml0 KHZhbHVlKSkgeworLSAgICBmc3BlY3Muc2lnbiA9IHNpZ246Om1pbnVzOworLSAgICB2YWx1ZSA9 IC12YWx1ZTsKKy0gIH0KKy0KKy0gIGNvbnN0ZXhwciBhdXRvIHNwZWNzID0gYmFzaWNfZm9ybWF0 X3NwZWNzPENoYXI+KCk7CistICB1aW50IG1hc2sgPSBleHBvbmVudF9tYXNrPGZsb2F0eT4oKTsK Ky0gIGlmICgoYml0cyAmIG1hc2spID09IG1hc2spCistICAgIHJldHVybiB3cml0ZV9ub25maW5p dGUob3V0LCBzdGQ6OmlzaW5mKHZhbHVlKSwgc3BlY3MsIGZzcGVjcyk7CistCistICBhdXRvIGRl YyA9IGRyYWdvbmJveDo6dG9fZGVjaW1hbChzdGF0aWNfY2FzdDxmbG9hdHk+KHZhbHVlKSk7Cist ICByZXR1cm4gd3JpdGVfZmxvYXQob3V0LCBkZWMsIHNwZWNzLCBmc3BlY3MsIHt9KTsKKy19Cist CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBU LAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZh bHVlICYmCistICAgICAgICAgICAgICAgICAgICAgICAgIWlzX2Zhc3RfZmxvYXQ8VD46OnZhbHVl KT4KKy1pbmxpbmUgYXV0byB3cml0ZShPdXRwdXRJdCBvdXQsIFQgdmFsdWUpIC0+IE91dHB1dEl0 IHsKKy0gIHJldHVybiB3cml0ZShvdXQsIHZhbHVlLCBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4o KSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdD4K Ky1hdXRvIHdyaXRlKE91dHB1dEl0IG91dCwgbW9ub3N0YXRlLCBiYXNpY19mb3JtYXRfc3BlY3M8 Q2hhcj4gPSB7fSwKKy0gICAgICAgICAgIGxvY2FsZV9yZWYgPSB7fSkgLT4gT3V0cHV0SXQgewor LSAgRk1UX0FTU0VSVChmYWxzZSwgIiIpOworLSAgcmV0dXJuIG91dDsKKy19CistCistdGVtcGxh dGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0PgorLUZNVF9DT05TVEVYUFIgYXV0 byB3cml0ZShPdXRwdXRJdCBvdXQsIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IHZhbHVlKQorLSAg ICAtPiBPdXRwdXRJdCB7CistICBhdXRvIGl0ID0gcmVzZXJ2ZShvdXQsIHZhbHVlLnNpemUoKSk7 CistICBpdCA9IGNvcHlfc3RyX25vaW5saW5lPENoYXI+KHZhbHVlLmJlZ2luKCksIHZhbHVlLmVu ZCgpLCBpdCk7CistICByZXR1cm4gYmFzZV9pdGVyYXRvcihvdXQsIGl0KTsKKy19CistCistdGVt cGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBULAorLSAg ICAgICAgICBGTVRfRU5BQkxFX0lGKGlzX3N0cmluZzxUPjo6dmFsdWUpPgorLWNvbnN0ZXhwciBh dXRvIHdyaXRlKE91dHB1dEl0IG91dCwgY29uc3QgVCYgdmFsdWUpIC0+IE91dHB1dEl0IHsKKy0g IHJldHVybiB3cml0ZTxDaGFyPihvdXQsIHRvX3N0cmluZ192aWV3KHZhbHVlKSk7CistfQorLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgVCwK Ky0gICAgICAgICAgRk1UX0VOQUJMRV9JRihpc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYKKy0gICAg ICAgICAgICAgICAgICAgICAgICAhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSAmJgorLSAg ICAgICAgICAgICAgICAgICAgICAgICFzdGQ6OmlzX3NhbWU8VCwgQ2hhcj46OnZhbHVlKT4KKy1G TVRfQ09OU1RFWFBSIGF1dG8gd3JpdGUoT3V0cHV0SXQgb3V0LCBUIHZhbHVlKSAtPiBPdXRwdXRJ dCB7CistICBhdXRvIGFic192YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl9vcl82NF9vcl8xMjhf dDxUPj4odmFsdWUpOworLSAgYm9vbCBuZWdhdGl2ZSA9IGlzX25lZ2F0aXZlKHZhbHVlKTsKKy0g IC8vIERvbid0IGRvIC1hYnNfdmFsdWUgc2luY2UgaXQgdHJpcHMgdW5zaWduZWQtaW50ZWdlci1v dmVyZmxvdyBzYW5pdGl6ZXIuCistICBpZiAobmVnYXRpdmUpIGFic192YWx1ZSA9IH5hYnNfdmFs dWUgKyAxOworLSAgaW50IG51bV9kaWdpdHMgPSBjb3VudF9kaWdpdHMoYWJzX3ZhbHVlKTsKKy0g IGF1dG8gc2l6ZSA9IChuZWdhdGl2ZSA/IDEgOiAwKSArIHN0YXRpY19jYXN0PHNpemVfdD4obnVt X2RpZ2l0cyk7CistICBhdXRvIGl0ID0gcmVzZXJ2ZShvdXQsIHNpemUpOworLSAgaWYgKGF1dG8g cHRyID0gdG9fcG9pbnRlcjxDaGFyPihpdCwgc2l6ZSkpIHsKKy0gICAgaWYgKG5lZ2F0aXZlKSAq cHRyKysgPSBzdGF0aWNfY2FzdDxDaGFyPignLScpOworLSAgICBmb3JtYXRfZGVjaW1hbDxDaGFy PihwdHIsIGFic192YWx1ZSwgbnVtX2RpZ2l0cyk7CistICAgIHJldHVybiBvdXQ7CistICB9Cist ICBpZiAobmVnYXRpdmUpICppdCsrID0gc3RhdGljX2Nhc3Q8Q2hhcj4oJy0nKTsKKy0gIGl0ID0g Zm9ybWF0X2RlY2ltYWw8Q2hhcj4oaXQsIGFic192YWx1ZSwgbnVtX2RpZ2l0cykuZW5kOworLSAg cmV0dXJuIGJhc2VfaXRlcmF0b3Iob3V0LCBpdCk7CistfQorLQorLS8vIEZNVF9FTkFCTEVfSUYo KSBjb25kaXRpb24gc2VwYXJhdGVkIHRvIHdvcmthcm91bmQgYW4gTVNWQyBidWcuCistdGVtcGxh dGUgPAorLSAgICB0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgVCwK Ky0gICAgYm9vbCBjaGVjayA9CistICAgICAgICBzdGQ6OmlzX2VudW08VD46OnZhbHVlICYmICFz dGQ6OmlzX3NhbWU8VCwgQ2hhcj46OnZhbHVlICYmCistICAgICAgICBtYXBwZWRfdHlwZV9jb25z dGFudDxULCBiYXNpY19mb3JtYXRfY29udGV4dDxPdXRwdXRJdCwgQ2hhcj4+Ojp2YWx1ZSAhPQor LSAgICAgICAgICAgIHR5cGU6OmN1c3RvbV90eXBlLAorLSAgICBGTVRfRU5BQkxFX0lGKGNoZWNr KT4KKy1GTVRfQ09OU1RFWFBSIGF1dG8gd3JpdGUoT3V0cHV0SXQgb3V0LCBUIHZhbHVlKSAtPiBP dXRwdXRJdCB7CistICByZXR1cm4gd3JpdGU8Q2hhcj4oCistICAgICAgb3V0LCBzdGF0aWNfY2Fz dDx0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZT4odmFsdWUpKTsKKy19Cist CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBU LAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUp PgorLUZNVF9DT05TVEVYUFIgYXV0byB3cml0ZShPdXRwdXRJdCBvdXQsIFQgdmFsdWUsCistICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3Bl Y3MgPSB7fSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlX3JlZiA9IHt9KSAtPiBP dXRwdXRJdCB7CistICByZXR1cm4gc3BlY3MudHlwZSAhPSBwcmVzZW50YXRpb25fdHlwZTo6bm9u ZSAmJgorLSAgICAgICAgICAgICAgICAgc3BlY3MudHlwZSAhPSBwcmVzZW50YXRpb25fdHlwZTo6 c3RyaW5nCistICAgICAgICAgICAgID8gd3JpdGUob3V0LCB2YWx1ZSA/IDEgOiAwLCBzcGVjcywg e30pCistICAgICAgICAgICAgIDogd3JpdGVfYnl0ZXMob3V0LCB2YWx1ZSA/ICJ0cnVlIiA6ICJm YWxzZSIsIHNwZWNzKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1l IE91dHB1dEl0PgorLUZNVF9DT05TVEVYUFIgYXV0byB3cml0ZShPdXRwdXRJdCBvdXQsIENoYXIg dmFsdWUpIC0+IE91dHB1dEl0IHsKKy0gIGF1dG8gaXQgPSByZXNlcnZlKG91dCwgMSk7CistICAq aXQrKyA9IHZhbHVlOworLSAgcmV0dXJuIGJhc2VfaXRlcmF0b3Iob3V0LCBpdCk7CistfQorLQor LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdD4KKy1GTVRfQ09OU1RF WFBSX0NIQVJfVFJBSVRTIGF1dG8gd3JpdGUoT3V0cHV0SXQgb3V0LCBjb25zdCBDaGFyKiB2YWx1 ZSkKKy0gICAgLT4gT3V0cHV0SXQgeworLSAgaWYgKCF2YWx1ZSkgeworLSAgICB0aHJvd19mb3Jt YXRfZXJyb3IoInN0cmluZyBwb2ludGVyIGlzIG51bGwiKTsKKy0gIH0gZWxzZSB7CistICAgIG91 dCA9IHdyaXRlKG91dCwgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4odmFsdWUpKTsKKy0gIH0KKy0g IHJldHVybiBvdXQ7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBP dXRwdXRJdCwgdHlwZW5hbWUgVCwKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRihzdGQ6OmlzX3Nh bWU8VCwgdm9pZD46OnZhbHVlKT4KKy1hdXRvIHdyaXRlKE91dHB1dEl0IG91dCwgY29uc3QgVCog dmFsdWUsCistICAgICAgICAgICBjb25zdCBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNz ID0ge30sIGxvY2FsZV9yZWYgPSB7fSkKKy0gICAgLT4gT3V0cHV0SXQgeworLSAgY2hlY2tfcG9p bnRlcl90eXBlX3NwZWMoc3BlY3MudHlwZSwgZXJyb3JfaGFuZGxlcigpKTsKKy0gIHJldHVybiB3 cml0ZV9wdHI8Q2hhcj4ob3V0LCB0b191aW50cHRyKHZhbHVlKSwgJnNwZWNzKTsKKy19CistCist Ly8gQSB3cml0ZSBvdmVybG9hZCB0aGF0IGhhbmRsZXMgaW1wbGljaXQgY29udmVyc2lvbnMuCist dGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBULAor LSAgICAgICAgICB0eXBlbmFtZSBDb250ZXh0ID0gYmFzaWNfZm9ybWF0X2NvbnRleHQ8T3V0cHV0 SXQsIENoYXI+PgorLUZNVF9DT05TVEVYUFIgYXV0byB3cml0ZShPdXRwdXRJdCBvdXQsIGNvbnN0 IFQmIHZhbHVlKSAtPiBlbmFibGVfaWZfdDwKKy0gICAgc3RkOjppc19jbGFzczxUPjo6dmFsdWUg JiYgIWlzX3N0cmluZzxUPjo6dmFsdWUgJiYKKy0gICAgICAgICFzdGQ6OmlzX3NhbWU8VCwgQ2hh cj46OnZhbHVlICYmCistICAgICAgICAhc3RkOjppc19zYW1lPGNvbnN0IFQmLAorLSAgICAgICAg ICAgICAgICAgICAgICBkZWNsdHlwZShhcmdfbWFwcGVyPENvbnRleHQ+KCkubWFwKHZhbHVlKSk+ Ojp2YWx1ZSwKKy0gICAgT3V0cHV0SXQ+IHsKKy0gIHJldHVybiB3cml0ZTxDaGFyPihvdXQsIGFy Z19tYXBwZXI8Q29udGV4dD4oKS5tYXAodmFsdWUpKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVu YW1lIENoYXIsIHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBULAorLSAgICAgICAgICB0eXBl bmFtZSBDb250ZXh0ID0gYmFzaWNfZm9ybWF0X2NvbnRleHQ8T3V0cHV0SXQsIENoYXI+PgorLUZN VF9DT05TVEVYUFIgYXV0byB3cml0ZShPdXRwdXRJdCBvdXQsIGNvbnN0IFQmIHZhbHVlKQorLSAg ICAtPiBlbmFibGVfaWZfdDxtYXBwZWRfdHlwZV9jb25zdGFudDxULCBDb250ZXh0Pjo6dmFsdWUg PT0gdHlwZTo6Y3VzdG9tX3R5cGUsCistICAgICAgICAgICAgICAgICAgIE91dHB1dEl0PiB7Cist ICB1c2luZyBmb3JtYXR0ZXJfdHlwZSA9CistICAgICAgY29uZGl0aW9uYWxfdDxoYXNfZm9ybWF0 dGVyPFQsIENvbnRleHQ+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIENv bnRleHQ6OnRlbXBsYXRlIGZvcm1hdHRlcl90eXBlPFQ+LAorLSAgICAgICAgICAgICAgICAgICAg ZmFsbGJhY2tfZm9ybWF0dGVyPFQsIENoYXI+PjsKKy0gIGF1dG8gY3R4ID0gQ29udGV4dChvdXQs IHt9LCB7fSk7CistICByZXR1cm4gZm9ybWF0dGVyX3R5cGUoKS5mb3JtYXQodmFsdWUsIGN0eCk7 CistfQorLQorLS8vIEFuIGFyZ3VtZW50IHZpc2l0b3IgdGhhdCBmb3JtYXRzIHRoZSBhcmd1bWVu dCBhbmQgd3JpdGVzIGl0IHZpYSB0aGUgb3V0cHV0CistLy8gaXRlcmF0b3IuIEl0J3MgYSBjbGFz cyBhbmQgbm90IGEgZ2VuZXJpYyBsYW1iZGEgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDKysxMS4K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4gc3RydWN0IGRlZmF1bHRfYXJnX2Zvcm1hdHRlciB7 CistICB1c2luZyBpdGVyYXRvciA9IGJ1ZmZlcl9hcHBlbmRlcjxDaGFyPjsKKy0gIHVzaW5nIGNv bnRleHQgPSBidWZmZXJfY29udGV4dDxDaGFyPjsKKy0KKy0gIGl0ZXJhdG9yIG91dDsKKy0gIGJh c2ljX2Zvcm1hdF9hcmdzPGNvbnRleHQ+IGFyZ3M7CistICBsb2NhbGVfcmVmIGxvYzsKKy0KKy0g IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBhdXRvIG9wZXJhdG9yKCkoVCB2YWx1ZSkgLT4gaXRlcmF0 b3IgeworLSAgICByZXR1cm4gd3JpdGU8Q2hhcj4ob3V0LCB2YWx1ZSk7CistICB9CistICBhdXRv IG9wZXJhdG9yKCkodHlwZW5hbWUgYmFzaWNfZm9ybWF0X2FyZzxjb250ZXh0Pjo6aGFuZGxlIGgp IC0+IGl0ZXJhdG9yIHsKKy0gICAgYmFzaWNfZm9ybWF0X3BhcnNlX2NvbnRleHQ8Q2hhcj4gcGFy c2VfY3R4KHt9KTsKKy0gICAgY29udGV4dCBmb3JtYXRfY3R4KG91dCwgYXJncywgbG9jKTsKKy0g ICAgaC5mb3JtYXQocGFyc2VfY3R4LCBmb3JtYXRfY3R4KTsKKy0gICAgcmV0dXJuIGZvcm1hdF9j dHgub3V0KCk7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4gc3RydWN0 IGFyZ19mb3JtYXR0ZXIgeworLSAgdXNpbmcgaXRlcmF0b3IgPSBidWZmZXJfYXBwZW5kZXI8Q2hh cj47CistICB1c2luZyBjb250ZXh0ID0gYnVmZmVyX2NvbnRleHQ8Q2hhcj47CistCistICBpdGVy YXRvciBvdXQ7CistICBjb25zdCBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNzOworLSAg bG9jYWxlX3JlZiBsb2NhbGU7CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy0gIEZNVF9D T05TVEVYUFIgRk1UX0lOTElORSBhdXRvIG9wZXJhdG9yKCkoVCB2YWx1ZSkgLT4gaXRlcmF0b3Ig eworLSAgICByZXR1cm4gZGV0YWlsOjp3cml0ZShvdXQsIHZhbHVlLCBzcGVjcywgbG9jYWxlKTsK Ky0gIH0KKy0gIGF1dG8gb3BlcmF0b3IoKSh0eXBlbmFtZSBiYXNpY19mb3JtYXRfYXJnPGNvbnRl eHQ+OjpoYW5kbGUpIC0+IGl0ZXJhdG9yIHsKKy0gICAgLy8gVXNlci1kZWZpbmVkIHR5cGVzIGFy ZSBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGV5IHJlcXVpcmUgYWNjZXNzCistICAgIC8v IHRvIHRoZSBwYXJzZSBjb250ZXh0LgorLSAgICByZXR1cm4gb3V0OworLSAgfQorLX07CistCist dGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IHN0cnVjdCBjdXN0b21fZm9ybWF0dGVyIHsKKy0gIGJh c2ljX2Zvcm1hdF9wYXJzZV9jb250ZXh0PENoYXI+JiBwYXJzZV9jdHg7CistICBidWZmZXJfY29u dGV4dDxDaGFyPiYgY3R4OworLQorLSAgdm9pZCBvcGVyYXRvcigpKAorLSAgICAgIHR5cGVuYW1l IGJhc2ljX2Zvcm1hdF9hcmc8YnVmZmVyX2NvbnRleHQ8Q2hhcj4+OjpoYW5kbGUgaCkgY29uc3Qg eworLSAgICBoLmZvcm1hdChwYXJzZV9jdHgsIGN0eCk7CistICB9CistICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gdm9pZCBvcGVyYXRvcigpKFQpIGNvbnN0IHt9CistfTsKKy0KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy11c2luZyBpc19pbnRlZ2VyID0KKy0gICAgYm9vbF9jb25zdGFudDxpc19p bnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUgJiYKKy0g ICAgICAgICAgICAgICAgICAhc3RkOjppc19zYW1lPFQsIGNoYXI+Ojp2YWx1ZSAmJgorLSAgICAg ICAgICAgICAgICAgICFzdGQ6OmlzX3NhbWU8VCwgd2NoYXJfdD46OnZhbHVlPjsKKy0KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgRXJyb3JIYW5kbGVyPiBjbGFzcyB3aWR0aF9jaGVja2VyIHsKKy0gcHVi bGljOgorLSAgZXhwbGljaXQgRk1UX0NPTlNURVhQUiB3aWR0aF9jaGVja2VyKEVycm9ySGFuZGxl ciYgZWgpIDogaGFuZGxlcl8oZWgpIHt9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1U X0VOQUJMRV9JRihpc19pbnRlZ2VyPFQ+Ojp2YWx1ZSk+CistICBGTVRfQ09OU1RFWFBSIGF1dG8g b3BlcmF0b3IoKShUIHZhbHVlKSAtPiB1bnNpZ25lZCBsb25nIGxvbmcgeworLSAgICBpZiAoaXNf bmVnYXRpdmUodmFsdWUpKSBoYW5kbGVyXy5vbl9lcnJvcigibmVnYXRpdmUgd2lkdGgiKTsKKy0g ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odmFsdWUpOworLSAgfQor LQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoIWlzX2ludGVnZXI8VD46 OnZhbHVlKT4KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBvcGVyYXRvcigpKFQpIC0+IHVuc2lnbmVk IGxvbmcgbG9uZyB7CistICAgIGhhbmRsZXJfLm9uX2Vycm9yKCJ3aWR0aCBpcyBub3QgaW50ZWdl ciIpOworLSAgICByZXR1cm4gMDsKKy0gIH0KKy0KKy0gcHJpdmF0ZToKKy0gIEVycm9ySGFuZGxl ciYgaGFuZGxlcl87CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgRXJyb3JIYW5kbGVyPiBj bGFzcyBwcmVjaXNpb25fY2hlY2tlciB7CistIHB1YmxpYzoKKy0gIGV4cGxpY2l0IEZNVF9DT05T VEVYUFIgcHJlY2lzaW9uX2NoZWNrZXIoRXJyb3JIYW5kbGVyJiBlaCkgOiBoYW5kbGVyXyhlaCkg e30KKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKGlzX2ludGVnZXI8 VD46OnZhbHVlKT4KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBvcGVyYXRvcigpKFQgdmFsdWUpIC0+ IHVuc2lnbmVkIGxvbmcgbG9uZyB7CistICAgIGlmIChpc19uZWdhdGl2ZSh2YWx1ZSkpIGhhbmRs ZXJfLm9uX2Vycm9yKCJuZWdhdGl2ZSBwcmVjaXNpb24iKTsKKy0gICAgcmV0dXJuIHN0YXRpY19j YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odmFsdWUpOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoIWlzX2ludGVnZXI8VD46OnZhbHVlKT4KKy0gIEZNVF9D T05TVEVYUFIgYXV0byBvcGVyYXRvcigpKFQpIC0+IHVuc2lnbmVkIGxvbmcgbG9uZyB7CistICAg IGhhbmRsZXJfLm9uX2Vycm9yKCJwcmVjaXNpb24gaXMgbm90IGludGVnZXIiKTsKKy0gICAgcmV0 dXJuIDA7CistICB9CistCistIHByaXZhdGU6CistICBFcnJvckhhbmRsZXImIGhhbmRsZXJfOwor LX07CistCistdGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgSGFuZGxlciwgdHlw ZW5hbWUgRm9ybWF0QXJnLAorLSAgICAgICAgICB0eXBlbmFtZSBFcnJvckhhbmRsZXI+CistRk1U X0NPTlNURVhQUiBhdXRvIGdldF9keW5hbWljX3NwZWMoRm9ybWF0QXJnIGFyZywgRXJyb3JIYW5k bGVyIGVoKSAtPiBpbnQgeworLSAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlID0gdmlzaXRfZm9y bWF0X2FyZyhIYW5kbGVyPEVycm9ySGFuZGxlcj4oZWgpLCBhcmcpOworLSAgaWYgKHZhbHVlID4g dG9fdW5zaWduZWQobWF4X3ZhbHVlPGludD4oKSkpIGVoLm9uX2Vycm9yKCJudW1iZXIgaXMgdG9v IGJpZyIpOworLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odmFsdWUpOworLX0KKy0KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgQ29udGV4dCwgdHlwZW5hbWUgSUQ+CistRk1UX0NPTlNURVhQUiBhdXRv IGdldF9hcmcoQ29udGV4dCYgY3R4LCBJRCBpZCkgLT4KKy0gICAgdHlwZW5hbWUgQ29udGV4dDo6 Zm9ybWF0X2FyZyB7CistICBhdXRvIGFyZyA9IGN0eC5hcmcoaWQpOworLSAgaWYgKCFhcmcpIGN0 eC5vbl9lcnJvcigiYXJndW1lbnQgbm90IGZvdW5kIik7CistICByZXR1cm4gYXJnOworLX0KKy0K Ky0vLyBUaGUgc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciBoYW5kbGVyIHdpdGggY2hlY2tpbmcu CistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IGNsYXNzIHNwZWNzX2hhbmRsZXIgOiBwdWJsaWMg c3BlY3Nfc2V0dGVyPENoYXI+IHsKKy0gcHJpdmF0ZToKKy0gIGJhc2ljX2Zvcm1hdF9wYXJzZV9j b250ZXh0PENoYXI+JiBwYXJzZV9jb250ZXh0XzsKKy0gIGJ1ZmZlcl9jb250ZXh0PENoYXI+JiBj b250ZXh0XzsKKy0KKy0gIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkg d2l0aCBnY2MgNC40LgorLSAgdXNpbmcgZm9ybWF0X2FyZyA9IGJhc2ljX2Zvcm1hdF9hcmc8YnVm ZmVyX2NvbnRleHQ8Q2hhcj4+OworLQorLSAgRk1UX0NPTlNURVhQUiBhdXRvIGdldF9hcmcoYXV0 b19pZCkgLT4gZm9ybWF0X2FyZyB7CistICAgIHJldHVybiBkZXRhaWw6OmdldF9hcmcoY29udGV4 dF8sIHBhcnNlX2NvbnRleHRfLm5leHRfYXJnX2lkKCkpOworLSAgfQorLQorLSAgRk1UX0NPTlNU RVhQUiBhdXRvIGdldF9hcmcoaW50IGFyZ19pZCkgLT4gZm9ybWF0X2FyZyB7CistICAgIHBhcnNl X2NvbnRleHRfLmNoZWNrX2FyZ19pZChhcmdfaWQpOworLSAgICByZXR1cm4gZGV0YWlsOjpnZXRf YXJnKGNvbnRleHRfLCBhcmdfaWQpOworLSAgfQorLQorLSAgRk1UX0NPTlNURVhQUiBhdXRvIGdl dF9hcmcoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gYXJnX2lkKSAtPiBmb3JtYXRfYXJnIHsKKy0g ICAgcGFyc2VfY29udGV4dF8uY2hlY2tfYXJnX2lkKGFyZ19pZCk7CistICAgIHJldHVybiBkZXRh aWw6OmdldF9hcmcoY29udGV4dF8sIGFyZ19pZCk7CistICB9CistCistIHB1YmxpYzoKKy0gIEZN VF9DT05TVEVYUFIgc3BlY3NfaGFuZGxlcihiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4mIHNwZWNz LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX2Zvcm1hdF9wYXJzZV9jb250 ZXh0PENoYXI+JiBwYXJzZV9jdHgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm ZmVyX2NvbnRleHQ8Q2hhcj4mIGN0eCkKKy0gICAgICA6IHNwZWNzX3NldHRlcjxDaGFyPihzcGVj cyksIHBhcnNlX2NvbnRleHRfKHBhcnNlX2N0eCksIGNvbnRleHRfKGN0eCkge30KKy0KKy0gIHRl bXBsYXRlIDx0eXBlbmFtZSBJZD4gRk1UX0NPTlNURVhQUiB2b2lkIG9uX2R5bmFtaWNfd2lkdGgo SWQgYXJnX2lkKSB7CistICAgIHRoaXMtPnNwZWNzXy53aWR0aCA9IGdldF9keW5hbWljX3NwZWM8 d2lkdGhfY2hlY2tlcj4oCistICAgICAgICBnZXRfYXJnKGFyZ19pZCksIGNvbnRleHRfLmVycm9y X2hhbmRsZXIoKSk7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSWQ+IEZNVF9DT05T VEVYUFIgdm9pZCBvbl9keW5hbWljX3ByZWNpc2lvbihJZCBhcmdfaWQpIHsKKy0gICAgdGhpcy0+ c3BlY3NfLnByZWNpc2lvbiA9IGdldF9keW5hbWljX3NwZWM8cHJlY2lzaW9uX2NoZWNrZXI+KAor LSAgICAgICAgZ2V0X2FyZyhhcmdfaWQpLCBjb250ZXh0Xy5lcnJvcl9oYW5kbGVyKCkpOworLSAg fQorLQorLSAgdm9pZCBvbl9lcnJvcihjb25zdCBjaGFyKiBtZXNzYWdlKSB7IGNvbnRleHRfLm9u X2Vycm9yKG1lc3NhZ2UpOyB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1l PiBjbGFzcyBIYW5kbGVyLCB0eXBlbmFtZSBDb250ZXh0PgorLUZNVF9DT05TVEVYUFIgdm9pZCBo YW5kbGVfZHluYW1pY19zcGVjKGludCYgdmFsdWUsCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXJnX3JlZjx0eXBlbmFtZSBDb250ZXh0OjpjaGFyX3R5cGU+IHJlZiwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0JiBjdHgpIHsK Ky0gIHN3aXRjaCAocmVmLmtpbmQpIHsKKy0gIGNhc2UgYXJnX2lkX2tpbmQ6Om5vbmU6CistICAg IGJyZWFrOworLSAgY2FzZSBhcmdfaWRfa2luZDo6aW5kZXg6CistICAgIHZhbHVlID0gZGV0YWls OjpnZXRfZHluYW1pY19zcGVjPEhhbmRsZXI+KGN0eC5hcmcocmVmLnZhbC5pbmRleCksCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5lcnJvcl9oYW5k bGVyKCkpOworLSAgICBicmVhazsKKy0gIGNhc2UgYXJnX2lkX2tpbmQ6Om5hbWU6CistICAgIHZh bHVlID0gZGV0YWlsOjpnZXRfZHluYW1pY19zcGVjPEhhbmRsZXI+KGN0eC5hcmcocmVmLnZhbC5u YW1lKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4 LmVycm9yX2hhbmRsZXIoKSk7CistICAgIGJyZWFrOworLSAgfQorLX0KKy0KKy0jZGVmaW5lIEZN VF9TVFJJTkdfSU1QTChzLCBiYXNlLCBleHBsaWNpdCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCistICBbXSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAvKiBVc2UgdGhlIGhpZGRlbiB2 aXNpYmlsaXR5IGFzIGEgd29ya2Fyb3VuZCBmb3IgYSBHQ0MgYnVnICgjMTk3MykuICovIFwKKy0g ICAgLyogVXNlIGEgbWFjcm8tbGlrZSBuYW1lIHRvIGF2b2lkIHNoYWRvd2luZyB3YXJuaW5ncy4g Ki8gICAgICAgICAgICAgICBcCistICAgIHN0cnVjdCBGTVRfR0NDX1ZJU0lCSUxJVFlfSElEREVO IEZNVF9DT01QSUxFX1NUUklORyA6IGJhc2UgeyAgICAgICAgICAgXAorLSAgICAgIHVzaW5nIGNo YXJfdHlwZSA9IGZtdDo6cmVtb3ZlX2N2cmVmX3Q8ZGVjbHR5cGUoc1swXSk+OyAgICAgICAgICAg ICAgIFwKKy0gICAgICBGTVRfTUFZQkVfVU5VU0VEIEZNVF9DT05TVEVYUFIgZXhwbGljaXQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgb3BlcmF0b3IgZm10OjpiYXNpY19z dHJpbmdfdmlldzxjaGFyX3R5cGU+KCkgY29uc3QgeyAgICAgICAgICAgICAgICAgXAorLSAgICAg ICAgcmV0dXJuIGZtdDo6ZGV0YWlsX2V4cG9ydGVkOjpjb21waWxlX3N0cmluZ190b192aWV3PGNo YXJfdHlwZT4ocyk7IFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIH07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorLSAgICByZXR1cm4gRk1UX0NPTVBJTEVfU1RSSU5HKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIH0oKQorLQorLS8qKgorLSAgXHJzdAorLSAgQ29u c3RydWN0cyBhIGNvbXBpbGUtdGltZSBmb3JtYXQgc3RyaW5nIGZyb20gYSBzdHJpbmcgbGl0ZXJh bCAqcyouCistCistICAqKkV4YW1wbGUqKjo6CistCistICAgIC8vIEEgY29tcGlsZS10aW1lIGVy cm9yIGJlY2F1c2UgJ2QnIGlzIGFuIGludmFsaWQgc3BlY2lmaWVyIGZvciBzdHJpbmdzLgorLSAg ICBzdGQ6OnN0cmluZyBzID0gZm10Ojpmb3JtYXQoRk1UX1NUUklORygiezpkfSIpLCAiZm9vIik7 CistICBcZW5kcnN0CistICovCistI2RlZmluZSBGTVRfU1RSSU5HKHMpIEZNVF9TVFJJTkdfSU1Q TChzLCBmbXQ6OmNvbXBpbGVfc3RyaW5nLCApCistCistI2lmIEZNVF9VU0VfVVNFUl9ERUZJTkVE X0xJVEVSQUxTCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IHN0cnVjdCB1ZGxfZm9ybWF0dGVy IHsKKy0gIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IHN0cjsKKy0KKy0gIHRlbXBsYXRlIDx0eXBl bmFtZS4uLiBUPgorLSAgYXV0byBvcGVyYXRvcigpKFQmJi4uLiBhcmdzKSBjb25zdCAtPiBzdGQ6 OmJhc2ljX3N0cmluZzxDaGFyPiB7CistICAgIHJldHVybiB2Zm9ybWF0KHN0ciwgZm10OjptYWtl X2FyZ3NfY2hlY2tlZDxULi4uPihzdHIsIGFyZ3MuLi4pKTsKKy0gIH0KKy19OworLQorLSMgIGlm IEZNVF9VU0VfTk9OVFlQRV9URU1QTEFURV9QQVJBTUVURVJTCistdGVtcGxhdGUgPHR5cGVuYW1l IFQsIHR5cGVuYW1lIENoYXIsIHNpemVfdCBOLAorLSAgICAgICAgICBmbXQ6OmRldGFpbF9leHBv cnRlZDo6Zml4ZWRfc3RyaW5nPENoYXIsIE4+IFN0cj4KKy1zdHJ1Y3Qgc3RhdGljYWxseV9uYW1l ZF9hcmcgOiB2aWV3IHsKKy0gIHN0YXRpYyBjb25zdGV4cHIgYXV0byBuYW1lID0gU3RyLmRhdGE7 CistCistICBjb25zdCBUJiB2YWx1ZTsKKy0gIHN0YXRpY2FsbHlfbmFtZWRfYXJnKGNvbnN0IFQm IHYpIDogdmFsdWUodikge30KKy19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt ZSBDaGFyLCBzaXplX3QgTiwKKy0gICAgICAgICAgZm10OjpkZXRhaWxfZXhwb3J0ZWQ6OmZpeGVk X3N0cmluZzxDaGFyLCBOPiBTdHI+Cistc3RydWN0IGlzX25hbWVkX2FyZzxzdGF0aWNhbGx5X25h bWVkX2FyZzxULCBDaGFyLCBOLCBTdHI+PiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OworLQorLXRlbXBs YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBDaGFyLCBzaXplX3QgTiwKKy0gICAgICAgICAgZm10 OjpkZXRhaWxfZXhwb3J0ZWQ6OmZpeGVkX3N0cmluZzxDaGFyLCBOPiBTdHI+Cistc3RydWN0IGlz X3N0YXRpY2FsbHlfbmFtZWRfYXJnPHN0YXRpY2FsbHlfbmFtZWRfYXJnPFQsIENoYXIsIE4sIFN0 cj4+CistICAgIDogc3RkOjp0cnVlX3R5cGUge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENo YXIsIHNpemVfdCBOLAorLSAgICAgICAgICBmbXQ6OmRldGFpbF9leHBvcnRlZDo6Zml4ZWRfc3Ry aW5nPENoYXIsIE4+IFN0cj4KKy1zdHJ1Y3QgdWRsX2FyZyB7CistICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4gYXV0byBvcGVyYXRvcj0oVCYmIHZhbHVlKSBjb25zdCB7CistICAgIHJldHVybiBzdGF0 aWNhbGx5X25hbWVkX2FyZzxULCBDaGFyLCBOLCBTdHI+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkp OworLSAgfQorLX07CistIyAgZWxzZQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBzdHJ1Y3Qg dWRsX2FyZyB7CistICBjb25zdCBDaGFyKiBzdHI7CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gYXV0byBvcGVyYXRvcj0oVCYmIHZhbHVlKSBjb25zdCAtPiBuYW1lZF9hcmc8Q2hhciwgVD4g eworLSAgICByZXR1cm4ge3N0ciwgc3RkOjpmb3J3YXJkPFQ+KHZhbHVlKX07CistICB9CistfTsK Ky0jICBlbmRpZgorLSNlbmRpZiAgLy8gRk1UX1VTRV9VU0VSX0RFRklORURfTElURVJBTFMKKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgTG9jYWxlLCB0eXBlbmFtZSBDaGFyPgorLWF1dG8gdmZvcm1h dChjb25zdCBMb2NhbGUmIGxvYywgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gZm9ybWF0X3N0ciwK Ky0gICAgICAgICAgICAgYmFzaWNfZm9ybWF0X2FyZ3M8YnVmZmVyX2NvbnRleHQ8dHlwZV9pZGVu dGl0eV90PENoYXI+Pj4gYXJncykKKy0gICAgLT4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4gewor LSAgYmFzaWNfbWVtb3J5X2J1ZmZlcjxDaGFyPiBidWZmZXI7CistICBkZXRhaWw6OnZmb3JtYXRf dG8oYnVmZmVyLCBmb3JtYXRfc3RyLCBhcmdzLCBkZXRhaWw6OmxvY2FsZV9yZWYobG9jKSk7Cist ICByZXR1cm4ge2J1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCl9OworLX0KKy0KKy11c2luZyBm b3JtYXRfZnVuYyA9IHZvaWQgKCopKGRldGFpbDo6YnVmZmVyPGNoYXI+JiwgaW50LCBjb25zdCBj aGFyKik7CistCistRk1UX0FQSSB2b2lkIGZvcm1hdF9lcnJvcl9jb2RlKGJ1ZmZlcjxjaGFyPiYg b3V0LCBpbnQgZXJyb3JfY29kZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry aW5nX3ZpZXcgbWVzc2FnZSkgRk1UX05PRVhDRVBUOworLQorLUZNVF9BUEkgdm9pZCByZXBvcnRf ZXJyb3IoZm9ybWF0X2Z1bmMgZnVuYywgaW50IGVycm9yX2NvZGUsCistICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlKSBGTVRfTk9FWENFUFQ7CistRk1UX0VORF9E RVRBSUxfTkFNRVNQQUNFCistCistRk1UX0FQSSBhdXRvIHZzeXN0ZW1fZXJyb3IoaW50IGVycm9y X2NvZGUsIHN0cmluZ192aWV3IGZvcm1hdF9zdHIsCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9ybWF0X2FyZ3MgYXJncykgLT4gc3RkOjpzeXN0ZW1fZXJyb3I7CistCistLyoqCistIFxy c3QKKy0gQ29uc3RydWN0cyA6Y2xhc3M6YHN0ZDo6c3lzdGVtX2Vycm9yYCB3aXRoIGEgbWVzc2Fn ZSBmb3JtYXR0ZWQgd2l0aAorLSBgYGZtdDo6Zm9ybWF0KGZtdCwgYXJncy4uLilgYC4KKy0gICpl cnJvcl9jb2RlKiBpcyBhIHN5c3RlbSBlcnJvciBjb2RlIGFzIGdpdmVuIGJ5IGBgZXJybm9gYC4K Ky0KKy0gKipFeGFtcGxlKio6OgorLQorLSAgIC8vIFRoaXMgdGhyb3dzIHN0ZDo6c3lzdGVtX2Vy cm9yIHdpdGggdGhlIGRlc2NyaXB0aW9uCistICAgLy8gICBjYW5ub3Qgb3BlbiBmaWxlICdtYWRl dXAnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CistICAgLy8gb3Igc2ltaWxhciAoc3lzdGVt IG1lc3NhZ2UgbWF5IHZhcnkpLgorLSAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gIm1hZGV1cCI7 CistICAgc3RkOjpGSUxFKiBmaWxlID0gc3RkOjpmb3BlbihmaWxlbmFtZSwgInIiKTsKKy0gICBp ZiAoIWZpbGUpCistICAgICB0aHJvdyBmbXQ6OnN5c3RlbV9lcnJvcihlcnJubywgImNhbm5vdCBv cGVuIGZpbGUgJ3t9JyIsIGZpbGVuYW1lKTsKKy0gXGVuZHJzdAorLSovCistdGVtcGxhdGUgPHR5 cGVuYW1lLi4uIFQ+CistYXV0byBzeXN0ZW1fZXJyb3IoaW50IGVycm9yX2NvZGUsIGZvcm1hdF9z dHJpbmc8VC4uLj4gZm10LCBUJiYuLi4gYXJncykKKy0gICAgLT4gc3RkOjpzeXN0ZW1fZXJyb3Ig eworLSAgcmV0dXJuIHZzeXN0ZW1fZXJyb3IoZXJyb3JfY29kZSwgZm10LCBmbXQ6Om1ha2VfZm9y bWF0X2FyZ3MoYXJncy4uLikpOworLX0KKy0KKy0vKioKKy0gIFxyc3QKKy0gIEZvcm1hdHMgYW4g ZXJyb3IgbWVzc2FnZSBmb3IgYW4gZXJyb3IgcmV0dXJuZWQgYnkgYW4gb3BlcmF0aW5nIHN5c3Rl bSBvciBhCistICBsYW5ndWFnZSBydW50aW1lLCBmb3IgZXhhbXBsZSBhIGZpbGUgb3BlbmluZyBl cnJvciwgYW5kIHdyaXRlcyBpdCB0byAqb3V0Ki4KKy0gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUg YXMgdGhlIG9uZSB1c2VkIGJ5IGBgc3RkOjpzeXN0ZW1fZXJyb3IoZWMsIG1lc3NhZ2UpYGAKKy0g IHdoZXJlIGBgZWNgYCBpcyBgYHN0ZDo6ZXJyb3JfY29kZShlcnJvcl9jb2RlLCBzdGQ6OmdlbmVy aWNfY2F0ZWdvcnkoKX0pYGAuCistICBJdCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJ1dCBu b3JtYWxseSBsb29rcyBsaWtlOgorLQorLSAgLi4gcGFyc2VkLWxpdGVyYWw6OgorLSAgICAgKjxt ZXNzYWdlPio6ICo8c3lzdGVtLW1lc3NhZ2U+KgorLQorLSAgd2hlcmUgKjxtZXNzYWdlPiogaXMg dGhlIHBhc3NlZCBtZXNzYWdlIGFuZCAqPHN5c3RlbS1tZXNzYWdlPiogaXMgdGhlIHN5c3RlbQor LSAgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBlcnJvciBjb2RlLgorLSAgKmVycm9yX2Nv ZGUqIGlzIGEgc3lzdGVtIGVycm9yIGNvZGUgYXMgZ2l2ZW4gYnkgYGBlcnJub2BgLgorLSAgXGVu ZHJzdAorLSAqLworLUZNVF9BUEkgdm9pZCBmb3JtYXRfc3lzdGVtX2Vycm9yKGRldGFpbDo6YnVm ZmVyPGNoYXI+JiBvdXQsIGludCBlcnJvcl9jb2RlLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UpIEZNVF9OT0VYQ0VQVDsKKy0KKy0vLyBSZXBv cnRzIGEgc3lzdGVtIGVycm9yIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgorLS8vIENh biBiZSB1c2VkIHRvIHJlcG9ydCBlcnJvcnMgZnJvbSBkZXN0cnVjdG9ycy4KKy1GTVRfQVBJIHZv aWQgcmVwb3J0X3N5c3RlbV9lcnJvcihpbnQgZXJyb3JfY29kZSwKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlKSBGTVRfTk9FWENFUFQ7CistCist LyoqIEZhc3QgaW50ZWdlciBmb3JtYXR0ZXIuICovCistY2xhc3MgZm9ybWF0X2ludCB7CistIHBy aXZhdGU6CistICAvLyBCdWZmZXIgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCBk aWdpdHMgKGRpZ2l0czEwICsgMSksCistICAvLyBhIHNpZ24gYW5kIGEgbnVsbCBjaGFyYWN0ZXIu CistICBlbnVtIHsgYnVmZmVyX3NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxv bmcgbG9uZz46OmRpZ2l0czEwICsgMyB9OworLSAgbXV0YWJsZSBjaGFyIGJ1ZmZlcl9bYnVmZmVy X3NpemVdOworLSAgY2hhciogc3RyXzsKKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVSW50PiBh dXRvIGZvcm1hdF91bnNpZ25lZChVSW50IHZhbHVlKSAtPiBjaGFyKiB7CistICAgIGF1dG8gbiA9 IHN0YXRpY19jYXN0PGRldGFpbDo6dWludDMyX29yXzY0X29yXzEyOF90PFVJbnQ+Pih2YWx1ZSk7 CistICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9kZWNpbWFsKGJ1ZmZlcl8sIG4sIGJ1ZmZlcl9z aXplIC0gMSkuYmVnaW47CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50PiBhdXRv IGZvcm1hdF9zaWduZWQoSW50IHZhbHVlKSAtPiBjaGFyKiB7CistICAgIGF1dG8gYWJzX3ZhbHVl ID0gc3RhdGljX2Nhc3Q8ZGV0YWlsOjp1aW50MzJfb3JfNjRfb3JfMTI4X3Q8SW50Pj4odmFsdWUp OworLSAgICBib29sIG5lZ2F0aXZlID0gdmFsdWUgPCAwOworLSAgICBpZiAobmVnYXRpdmUpIGFi c192YWx1ZSA9IDAgLSBhYnNfdmFsdWU7CistICAgIGF1dG8gYmVnaW4gPSBmb3JtYXRfdW5zaWdu ZWQoYWJzX3ZhbHVlKTsKKy0gICAgaWYgKG5lZ2F0aXZlKSAqLS1iZWdpbiA9ICctJzsKKy0gICAg cmV0dXJuIGJlZ2luOworLSAgfQorLQorLSBwdWJsaWM6CistICBleHBsaWNpdCBmb3JtYXRfaW50 KGludCB2YWx1ZSkgOiBzdHJfKGZvcm1hdF9zaWduZWQodmFsdWUpKSB7fQorLSAgZXhwbGljaXQg Zm9ybWF0X2ludChsb25nIHZhbHVlKSA6IHN0cl8oZm9ybWF0X3NpZ25lZCh2YWx1ZSkpIHt9Cist ICBleHBsaWNpdCBmb3JtYXRfaW50KGxvbmcgbG9uZyB2YWx1ZSkgOiBzdHJfKGZvcm1hdF9zaWdu ZWQodmFsdWUpKSB7fQorLSAgZXhwbGljaXQgZm9ybWF0X2ludCh1bnNpZ25lZCB2YWx1ZSkgOiBz dHJfKGZvcm1hdF91bnNpZ25lZCh2YWx1ZSkpIHt9CistICBleHBsaWNpdCBmb3JtYXRfaW50KHVu c2lnbmVkIGxvbmcgdmFsdWUpIDogc3RyXyhmb3JtYXRfdW5zaWduZWQodmFsdWUpKSB7fQorLSAg ZXhwbGljaXQgZm9ybWF0X2ludCh1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCistICAgICAgOiBz dHJfKGZvcm1hdF91bnNpZ25lZCh2YWx1ZSkpIHt9CistCistICAvKiogUmV0dXJucyB0aGUgbnVt YmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gKi8KKy0gIGF1 dG8gc2l6ZSgpIGNvbnN0IC0+IHNpemVfdCB7CistICAgIHJldHVybiBkZXRhaWw6OnRvX3Vuc2ln bmVkKGJ1ZmZlcl8gLSBzdHJfICsgYnVmZmVyX3NpemUgLSAxKTsKKy0gIH0KKy0KKy0gIC8qKgor LSAgICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciBjb250ZW50LiBObyB0 ZXJtaW5hdGluZyBudWxsCistICAgIGNoYXJhY3RlciBpcyBhcHBlbmRlZC4KKy0gICAqLworLSAg YXV0byBkYXRhKCkgY29uc3QgLT4gY29uc3QgY2hhciogeyByZXR1cm4gc3RyXzsgfQorLQorLSAg LyoqCistICAgIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGNvbnRlbnQg d2l0aCB0ZXJtaW5hdGluZyBudWxsCistICAgIGNoYXJhY3RlciBhcHBlbmRlZC4KKy0gICAqLwor LSAgYXV0byBjX3N0cigpIGNvbnN0IC0+IGNvbnN0IGNoYXIqIHsKKy0gICAgYnVmZmVyX1tidWZm ZXJfc2l6ZSAtIDFdID0gJ1wwJzsKKy0gICAgcmV0dXJuIHN0cl87CistICB9CistCistICAvKioK Ky0gICAgXHJzdAorLSAgICBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBvdXRwdXQgYnVmZmVy IGFzIGFuIGBgc3RkOjpzdHJpbmdgYC4KKy0gICAgXGVuZHJzdAorLSAgICovCistICBhdXRvIHN0 cigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsgcmV0dXJuIHN0ZDo6c3RyaW5nKHN0cl8sIHNpemUo KSk7IH0KKy19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBDaGFyPgorLXRl bXBsYXRlIDx0eXBlbmFtZSBGb3JtYXRDb250ZXh0PgorLUZNVF9DT05TVEVYUFIgRk1UX0lOTElO RSBhdXRvCistZm9ybWF0dGVyPFQsIENoYXIsCistICAgICAgICAgIGVuYWJsZV9pZl90PGRldGFp bDo6dHlwZV9jb25zdGFudDxULCBDaGFyPjo6dmFsdWUgIT0KKy0gICAgICAgICAgICAgICAgICAg ICAgZGV0YWlsOjp0eXBlOjpjdXN0b21fdHlwZT4+Ojpmb3JtYXQoY29uc3QgVCYgdmFsLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG b3JtYXRDb250ZXh0JiBjdHgpCistICAgIGNvbnN0IC0+IGRlY2x0eXBlKGN0eC5vdXQoKSkgewor LSAgaWYgKHNwZWNzXy53aWR0aF9yZWYua2luZCAhPSBkZXRhaWw6OmFyZ19pZF9raW5kOjpub25l IHx8CistICAgICAgc3BlY3NfLnByZWNpc2lvbl9yZWYua2luZCAhPSBkZXRhaWw6OmFyZ19pZF9r aW5kOjpub25lKSB7CistICAgIGF1dG8gc3BlY3MgPSBzcGVjc187CistICAgIGRldGFpbDo6aGFu ZGxlX2R5bmFtaWNfc3BlYzxkZXRhaWw6OndpZHRoX2NoZWNrZXI+KHNwZWNzLndpZHRoLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVj cy53aWR0aF9yZWYsIGN0eCk7CistICAgIGRldGFpbDo6aGFuZGxlX2R5bmFtaWNfc3BlYzxkZXRh aWw6OnByZWNpc2lvbl9jaGVja2VyPigKKy0gICAgICAgIHNwZWNzLnByZWNpc2lvbiwgc3BlY3Mu cHJlY2lzaW9uX3JlZiwgY3R4KTsKKy0gICAgcmV0dXJuIGRldGFpbDo6d3JpdGU8Q2hhcj4oY3R4 Lm91dCgpLCB2YWwsIHNwZWNzLCBjdHgubG9jYWxlKCkpOworLSAgfQorLSAgcmV0dXJuIGRldGFp bDo6d3JpdGU8Q2hhcj4oY3R4Lm91dCgpLCB2YWwsIHNwZWNzXywgY3R4LmxvY2FsZSgpKTsKKy19 CistCistI2RlZmluZSBGTVRfRk9STUFUX0FTKFR5cGUsIEJhc2UpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgc3RydWN0IGZv cm1hdHRlcjxUeXBlLCBDaGFyPiA6IGZvcm1hdHRlcjxCYXNlLCBDaGFyPiB7ICAgICAgICAgICAg ICAgICBcCistICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGb3JtYXRDb250ZXh0PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgYXV0byBmb3JtYXQoVHlwZSBjb25zdCYg dmFsLCBGb3JtYXRDb250ZXh0JiBjdHgpIGNvbnN0ICAgICAgICAgICAgICAgXAorLSAgICAgICAg LT4gZGVjbHR5cGUoY3R4Lm91dCgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCistICAgICAgcmV0dXJuIGZvcm1hdHRlcjxCYXNlLCBDaGFyPjo6Zm9ybWF0KHN0 YXRpY19jYXN0PEJhc2U+KHZhbCksIGN0eCk7IFwKKy0gICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgfQor LQorLUZNVF9GT1JNQVRfQVMoc2lnbmVkIGNoYXIsIGludCk7CistRk1UX0ZPUk1BVF9BUyh1bnNp Z25lZCBjaGFyLCB1bnNpZ25lZCk7CistRk1UX0ZPUk1BVF9BUyhzaG9ydCwgaW50KTsKKy1GTVRf Rk9STUFUX0FTKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCk7CistRk1UX0ZPUk1BVF9BUyhsb25n LCBsb25nIGxvbmcpOworLUZNVF9GT1JNQVRfQVModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u ZyBsb25nKTsKKy1GTVRfRk9STUFUX0FTKENoYXIqLCBjb25zdCBDaGFyKik7CistRk1UX0ZPUk1B VF9BUyhzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiwgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4pOwor LUZNVF9GT1JNQVRfQVMoc3RkOjpudWxscHRyX3QsIGNvbnN0IHZvaWQqKTsKKy1GTVRfRk9STUFU X0FTKGRldGFpbDo6Ynl0ZSwgdW5zaWduZWQgY2hhcik7CistRk1UX0ZPUk1BVF9BUyhkZXRhaWw6 OnN0ZF9zdHJpbmdfdmlldzxDaGFyPiwgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4pOworLQorLXRl bXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLXN0cnVjdCBmb3JtYXR0ZXI8dm9pZCosIENoYXI+IDog Zm9ybWF0dGVyPGNvbnN0IHZvaWQqLCBDaGFyPiB7CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm9y bWF0Q29udGV4dD4KKy0gIGF1dG8gZm9ybWF0KHZvaWQqIHZhbCwgRm9ybWF0Q29udGV4dCYgY3R4 KSBjb25zdCAtPiBkZWNsdHlwZShjdHgub3V0KCkpIHsKKy0gICAgcmV0dXJuIGZvcm1hdHRlcjxj b25zdCB2b2lkKiwgQ2hhcj46OmZvcm1hdCh2YWwsIGN0eCk7CistICB9CistfTsKKy0KKy10ZW1w bGF0ZSA8dHlwZW5hbWUgQ2hhciwgc2l6ZV90IE4+Cistc3RydWN0IGZvcm1hdHRlcjxDaGFyW05d LCBDaGFyPiA6IGZvcm1hdHRlcjxiYXNpY19zdHJpbmdfdmlldzxDaGFyPiwgQ2hhcj4geworLSAg dGVtcGxhdGUgPHR5cGVuYW1lIEZvcm1hdENvbnRleHQ+CistICBGTVRfQ09OU1RFWFBSIGF1dG8g Zm9ybWF0KGNvbnN0IENoYXIqIHZhbCwgRm9ybWF0Q29udGV4dCYgY3R4KSBjb25zdAorLSAgICAg IC0+IGRlY2x0eXBlKGN0eC5vdXQoKSkgeworLSAgICByZXR1cm4gZm9ybWF0dGVyPGJhc2ljX3N0 cmluZ192aWV3PENoYXI+LCBDaGFyPjo6Zm9ybWF0KHZhbCwgY3R4KTsKKy0gIH0KKy19OworLQor LS8vIEEgZm9ybWF0dGVyIGZvciB0eXBlcyBrbm93biBvbmx5IGF0IHJ1biB0aW1lIHN1Y2ggYXMg dmFyaWFudCBhbHRlcm5hdGl2ZXMuCistLy8KKy0vLyBVc2FnZToKKy0vLyAgIHVzaW5nIHZhcmlh bnQgPSBzdGQ6OnZhcmlhbnQ8aW50LCBzdGQ6OnN0cmluZz47CistLy8gICB0ZW1wbGF0ZSA8Pgor LS8vICAgc3RydWN0IGZvcm1hdHRlcjx2YXJpYW50PjogZHluYW1pY19mb3JtYXR0ZXI8PiB7Cist Ly8gICAgIGF1dG8gZm9ybWF0KGNvbnN0IHZhcmlhbnQmIHYsIGZvcm1hdF9jb250ZXh0JiBjdHgp IHsKKy0vLyAgICAgICByZXR1cm4gdmlzaXQoWyZdKGNvbnN0IGF1dG8mIHZhbCkgeworLS8vICAg ICAgICAgICByZXR1cm4gZHluYW1pY19mb3JtYXR0ZXI8Pjo6Zm9ybWF0KHZhbCwgY3R4KTsKKy0v LyAgICAgICB9LCB2KTsKKy0vLyAgICAgfQorLS8vICAgfTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUg Q2hhciA9IGNoYXI+IGNsYXNzIGR5bmFtaWNfZm9ybWF0dGVyIHsKKy0gcHJpdmF0ZToKKy0gIGRl dGFpbDo6ZHluYW1pY19mb3JtYXRfc3BlY3M8Q2hhcj4gc3BlY3NfOworLSAgY29uc3QgQ2hhciog Zm9ybWF0X3N0cl87CistCistICBzdHJ1Y3QgbnVsbF9oYW5kbGVyIDogZGV0YWlsOjplcnJvcl9o YW5kbGVyIHsKKy0gICAgdm9pZCBvbl9hbGlnbihhbGlnbl90KSB7fQorLSAgICB2b2lkIG9uX3Np Z24oc2lnbl90KSB7fQorLSAgICB2b2lkIG9uX2hhc2goKSB7fQorLSAgfTsKKy0KKy0gIHRlbXBs YXRlIDx0eXBlbmFtZSBDb250ZXh0PiB2b2lkIGhhbmRsZV9zcGVjcyhDb250ZXh0JiBjdHgpIHsK Ky0gICAgZGV0YWlsOjpoYW5kbGVfZHluYW1pY19zcGVjPGRldGFpbDo6d2lkdGhfY2hlY2tlcj4o c3BlY3NfLndpZHRoLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzcGVjc18ud2lkdGhfcmVmLCBjdHgpOworLSAgICBkZXRhaWw6OmhhbmRs ZV9keW5hbWljX3NwZWM8ZGV0YWlsOjpwcmVjaXNpb25fY2hlY2tlcj4oCistICAgICAgICBzcGVj c18ucHJlY2lzaW9uLCBzcGVjc18ucHJlY2lzaW9uX3JlZiwgY3R4KTsKKy0gIH0KKy0KKy0gcHVi bGljOgorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFBhcnNlQ29udGV4dD4KKy0gIEZNVF9DT05TVEVY UFIgYXV0byBwYXJzZShQYXJzZUNvbnRleHQmIGN0eCkgLT4gZGVjbHR5cGUoY3R4LmJlZ2luKCkp IHsKKy0gICAgZm9ybWF0X3N0cl8gPSBjdHguYmVnaW4oKTsKKy0gICAgLy8gQ2hlY2tzIGFyZSBk ZWZlcnJlZCB0byBmb3JtYXR0aW5nIHRpbWUgd2hlbiB0aGUgYXJndW1lbnQgdHlwZSBpcyBrbm93 bi4KKy0gICAgZGV0YWlsOjpkeW5hbWljX3NwZWNzX2hhbmRsZXI8UGFyc2VDb250ZXh0PiBoYW5k bGVyKHNwZWNzXywgY3R4KTsKKy0gICAgcmV0dXJuIGRldGFpbDo6cGFyc2VfZm9ybWF0X3NwZWNz KGN0eC5iZWdpbigpLCBjdHguZW5kKCksIGhhbmRsZXIpOworLSAgfQorLQorLSAgdGVtcGxhdGUg PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZvcm1hdENvbnRleHQ+CistICBhdXRvIGZvcm1hdChjb25z dCBUJiB2YWwsIEZvcm1hdENvbnRleHQmIGN0eCkgLT4gZGVjbHR5cGUoY3R4Lm91dCgpKSB7Cist ICAgIGhhbmRsZV9zcGVjcyhjdHgpOworLSAgICBkZXRhaWw6OnNwZWNzX2NoZWNrZXI8bnVsbF9o YW5kbGVyPiBjaGVja2VyKAorLSAgICAgICAgbnVsbF9oYW5kbGVyKCksIGRldGFpbDo6bWFwcGVk X3R5cGVfY29uc3RhbnQ8VCwgRm9ybWF0Q29udGV4dD46OnZhbHVlKTsKKy0gICAgY2hlY2tlci5v bl9hbGlnbihzcGVjc18uYWxpZ24pOworLSAgICBpZiAoc3BlY3NfLnNpZ24gIT0gc2lnbjo6bm9u ZSkgY2hlY2tlci5vbl9zaWduKHNwZWNzXy5zaWduKTsKKy0gICAgaWYgKHNwZWNzXy5hbHQpIGNo ZWNrZXIub25faGFzaCgpOworLSAgICBpZiAoc3BlY3NfLnByZWNpc2lvbiA+PSAwKSBjaGVja2Vy LmVuZF9wcmVjaXNpb24oKTsKKy0gICAgcmV0dXJuIGRldGFpbDo6d3JpdGU8Q2hhcj4oY3R4Lm91 dCgpLCB2YWwsIHNwZWNzXywgY3R4LmxvY2FsZSgpKTsKKy0gIH0KKy19OworLQorLS8qKgorLSAg XHJzdAorLSAgQ29udmVydHMgYGBwYGAgdG8gYGBjb25zdCB2b2lkKmBgIGZvciBwb2ludGVyIGZv cm1hdHRpbmcuCistCistICAqKkV4YW1wbGUqKjo6CistCistICAgIGF1dG8gcyA9IGZtdDo6Zm9y bWF0KCJ7fSIsIGZtdDo6cHRyKHApKTsKKy0gIFxlbmRyc3QKKy0gKi8KKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gYXV0byBwdHIoVCBwKSAtPiBjb25zdCB2b2lkKiB7CistICBzdGF0aWNfYXNzZXJ0 KHN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUsICIiKTsKKy0gIHJldHVybiBkZXRhaWw6OmJpdF9j YXN0PGNvbnN0IHZvaWQqPihwKTsKKy19CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGF1dG8gcHRy KGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxUPiYgcCkgLT4gY29uc3Qgdm9pZCogeworLSAgcmV0dXJu IHAuZ2V0KCk7CistfQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBhdXRvIHB0cihjb25zdCBzdGQ6 OnNoYXJlZF9wdHI8VD4mIHApIC0+IGNvbnN0IHZvaWQqIHsKKy0gIHJldHVybiBwLmdldCgpOwor LX0KKy0KKy1jbGFzcyBieXRlcyB7CistIHByaXZhdGU6CistICBzdHJpbmdfdmlldyBkYXRhXzsK Ky0gIGZyaWVuZCBzdHJ1Y3QgZm9ybWF0dGVyPGJ5dGVzPjsKKy0KKy0gcHVibGljOgorLSAgZXhw bGljaXQgYnl0ZXMoc3RyaW5nX3ZpZXcgZGF0YSkgOiBkYXRhXyhkYXRhKSB7fQorLX07CistCist dGVtcGxhdGUgPD4gc3RydWN0IGZvcm1hdHRlcjxieXRlcz4geworLSBwcml2YXRlOgorLSAgZGV0 YWlsOjpkeW5hbWljX2Zvcm1hdF9zcGVjczxjaGFyPiBzcGVjc187CistCistIHB1YmxpYzoKKy0g IHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZUNvbnRleHQ+CistICBGTVRfQ09OU1RFWFBSIGF1dG8g cGFyc2UoUGFyc2VDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBlKGN0eC5iZWdpbigpKSB7CistICAg IHVzaW5nIGhhbmRsZXJfdHlwZSA9IGRldGFpbDo6ZHluYW1pY19zcGVjc19oYW5kbGVyPFBhcnNl Q29udGV4dD47CistICAgIGRldGFpbDo6c3BlY3NfY2hlY2tlcjxoYW5kbGVyX3R5cGU+IGhhbmRs ZXIoaGFuZGxlcl90eXBlKHNwZWNzXywgY3R4KSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6OnR5cGU6OnN0cmluZ190eXBlKTsKKy0gICAg YXV0byBpdCA9IHBhcnNlX2Zvcm1hdF9zcGVjcyhjdHguYmVnaW4oKSwgY3R4LmVuZCgpLCBoYW5k bGVyKTsKKy0gICAgZGV0YWlsOjpjaGVja19zdHJpbmdfdHlwZV9zcGVjKHNwZWNzXy50eXBlLCBj dHguZXJyb3JfaGFuZGxlcigpKTsKKy0gICAgcmV0dXJuIGl0OworLSAgfQorLQorLSAgdGVtcGxh dGUgPHR5cGVuYW1lIEZvcm1hdENvbnRleHQ+CistICBhdXRvIGZvcm1hdChieXRlcyBiLCBGb3Jt YXRDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBlKGN0eC5vdXQoKSkgeworLSAgICBkZXRhaWw6Omhh bmRsZV9keW5hbWljX3NwZWM8ZGV0YWlsOjp3aWR0aF9jaGVja2VyPihzcGVjc18ud2lkdGgsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNw ZWNzXy53aWR0aF9yZWYsIGN0eCk7CistICAgIGRldGFpbDo6aGFuZGxlX2R5bmFtaWNfc3BlYzxk ZXRhaWw6OnByZWNpc2lvbl9jaGVja2VyPigKKy0gICAgICAgIHNwZWNzXy5wcmVjaXNpb24sIHNw ZWNzXy5wcmVjaXNpb25fcmVmLCBjdHgpOworLSAgICByZXR1cm4gZGV0YWlsOjp3cml0ZV9ieXRl cyhjdHgub3V0KCksIGIuZGF0YV8sIHNwZWNzXyk7CistICB9CistfTsKKy0KKy0vLyBncm91cF9k aWdpdHNfdmlldyBpcyBub3QgZGVyaXZlZCBmcm9tIHZpZXcgYmVjYXVzZSBpdCBjb3BpZXMgdGhl IGFyZ3VtZW50LgorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgZ3JvdXBfZGlnaXRzX3Zp ZXcgeyBUIHZhbHVlOyB9OworLQorLS8qKgorLSAgXHJzdAorLSAgUmV0dXJucyBhIHZpZXcgdGhh dCBmb3JtYXRzIGFuIGludGVnZXIgdmFsdWUgdXNpbmcgJywnIGFzIGEgbG9jYWxlLWluZGVwZW5k ZW50CistICB0aG91c2FuZHMgc2VwYXJhdG9yLgorLQorLSAgKipFeGFtcGxlKio6OgorLQorLSAg ICBmbXQ6OnByaW50KCJ7fSIsIGZtdDo6Z3JvdXBfZGlnaXRzKDEyMzQ1KSk7CistICAgIC8vIE91 dHB1dDogIjEyLDM0NSIKKy0gIFxlbmRyc3QKKy0gKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g YXV0byBncm91cF9kaWdpdHMoVCB2YWx1ZSkgLT4gZ3JvdXBfZGlnaXRzX3ZpZXc8VD4geworLSAg cmV0dXJuIHt2YWx1ZX07CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgZm9y bWF0dGVyPGdyb3VwX2RpZ2l0c192aWV3PFQ+PiA6IGZvcm1hdHRlcjxUPiB7CistIHByaXZhdGU6 CistICBkZXRhaWw6OmR5bmFtaWNfZm9ybWF0X3NwZWNzPGNoYXI+IHNwZWNzXzsKKy0KKy0gcHVi bGljOgorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFBhcnNlQ29udGV4dD4KKy0gIEZNVF9DT05TVEVY UFIgYXV0byBwYXJzZShQYXJzZUNvbnRleHQmIGN0eCkgLT4gZGVjbHR5cGUoY3R4LmJlZ2luKCkp IHsKKy0gICAgdXNpbmcgaGFuZGxlcl90eXBlID0gZGV0YWlsOjpkeW5hbWljX3NwZWNzX2hhbmRs ZXI8UGFyc2VDb250ZXh0PjsKKy0gICAgZGV0YWlsOjpzcGVjc19jaGVja2VyPGhhbmRsZXJfdHlw ZT4gaGFuZGxlcihoYW5kbGVyX3R5cGUoc3BlY3NfLCBjdHgpLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6dHlwZTo6aW50X3R5cGUpOwor LSAgICBhdXRvIGl0ID0gcGFyc2VfZm9ybWF0X3NwZWNzKGN0eC5iZWdpbigpLCBjdHguZW5kKCks IGhhbmRsZXIpOworLSAgICBkZXRhaWw6OmNoZWNrX3N0cmluZ190eXBlX3NwZWMoc3BlY3NfLnR5 cGUsIGN0eC5lcnJvcl9oYW5kbGVyKCkpOworLSAgICByZXR1cm4gaXQ7CistICB9CistCistICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgRm9ybWF0Q29udGV4dD4KKy0gIGF1dG8gZm9ybWF0KGdyb3VwX2Rp Z2l0c192aWV3PFQ+IHQsIEZvcm1hdENvbnRleHQmIGN0eCkKKy0gICAgICAtPiBkZWNsdHlwZShj dHgub3V0KCkpIHsKKy0gICAgZGV0YWlsOjpoYW5kbGVfZHluYW1pY19zcGVjPGRldGFpbDo6d2lk dGhfY2hlY2tlcj4oc3BlY3NfLndpZHRoLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjc18ud2lkdGhfcmVmLCBjdHgpOworLSAgICBk ZXRhaWw6OmhhbmRsZV9keW5hbWljX3NwZWM8ZGV0YWlsOjpwcmVjaXNpb25fY2hlY2tlcj4oCist ICAgICAgICBzcGVjc18ucHJlY2lzaW9uLCBzcGVjc18ucHJlY2lzaW9uX3JlZiwgY3R4KTsKKy0g ICAgcmV0dXJuIGRldGFpbDo6d3JpdGVfaW50X2xvY2FsaXplZCgKKy0gICAgICAgIGN0eC5vdXQo KSwgc3RhdGljX2Nhc3Q8ZGV0YWlsOjp1aW50NjRfb3JfMTI4X3Q8VD4+KHQudmFsdWUpLCAwLCBz cGVjc18sCistICAgICAgICBkZXRhaWw6OmRpZ2l0X2dyb3VwaW5nPGNoYXI+KHsiXDMiLCAnLCd9 KSk7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgSXQsIHR5cGVuYW1lIFNlbnRp bmVsLCB0eXBlbmFtZSBDaGFyID0gY2hhcj4KKy1zdHJ1Y3Qgam9pbl92aWV3IDogZGV0YWlsOjp2 aWV3IHsKKy0gIEl0IGJlZ2luOworLSAgU2VudGluZWwgZW5kOworLSAgYmFzaWNfc3RyaW5nX3Zp ZXc8Q2hhcj4gc2VwOworLQorLSAgam9pbl92aWV3KEl0IGIsIFNlbnRpbmVsIGUsIGJhc2ljX3N0 cmluZ192aWV3PENoYXI+IHMpCistICAgICAgOiBiZWdpbihiKSwgZW5kKGUpLCBzZXAocykge30K Ky19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBJdCwgdHlwZW5hbWUgU2VudGluZWwsIHR5cGVu YW1lIENoYXI+CistdXNpbmcgYXJnX2pvaW4gRk1UX0RFUFJFQ0FURURfQUxJQVMgPSBqb2luX3Zp ZXc8SXQsIFNlbnRpbmVsLCBDaGFyPjsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgSXQsIHR5cGVu YW1lIFNlbnRpbmVsLCB0eXBlbmFtZSBDaGFyPgorLXN0cnVjdCBmb3JtYXR0ZXI8am9pbl92aWV3 PEl0LCBTZW50aW5lbCwgQ2hhcj4sIENoYXI+IHsKKy0gcHJpdmF0ZToKKy0gIHVzaW5nIHZhbHVl X3R5cGUgPQorLSNpZmRlZiBfX2NwcF9saWJfcmFuZ2VzCistICAgICAgc3RkOjppdGVyX3ZhbHVl X3Q8SXQ+OworLSNlbHNlCistICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXQ+ Ojp2YWx1ZV90eXBlOworLSNlbmRpZgorLSAgdXNpbmcgY29udGV4dCA9IGJ1ZmZlcl9jb250ZXh0 PENoYXI+OworLSAgdXNpbmcgbWFwcGVyID0gZGV0YWlsOjphcmdfbWFwcGVyPGNvbnRleHQ+Owor LQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoaGFzX2Zvcm1hdHRlcjxU LCBjb250ZXh0Pjo6dmFsdWUpPgorLSAgc3RhdGljIGF1dG8gbWFwKGNvbnN0IFQmIHZhbHVlKSAt PiBjb25zdCBUJiB7CistICAgIHJldHVybiB2YWx1ZTsKKy0gIH0KKy0gIHRlbXBsYXRlIDx0eXBl bmFtZSBULCBGTVRfRU5BQkxFX0lGKCFoYXNfZm9ybWF0dGVyPFQsIGNvbnRleHQ+Ojp2YWx1ZSk+ CistICBzdGF0aWMgYXV0byBtYXAoY29uc3QgVCYgdmFsdWUpIC0+IGRlY2x0eXBlKG1hcHBlcigp Lm1hcCh2YWx1ZSkpIHsKKy0gICAgcmV0dXJuIG1hcHBlcigpLm1hcCh2YWx1ZSk7CistICB9Cist CistICB1c2luZyBmb3JtYXR0ZXJfdHlwZSA9CistICAgICAgY29uZGl0aW9uYWxfdDxpc19mb3Jt YXR0YWJsZTx2YWx1ZV90eXBlLCBDaGFyPjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAgICBm b3JtYXR0ZXI8cmVtb3ZlX2N2cmVmX3Q8ZGVjbHR5cGUobWFwKAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Y29uc3QgdmFsdWVfdHlwZSY+KCkpKT4sCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcj4sCistICAgICAgICAgICAgICAgICAg ICBkZXRhaWw6OmZhbGxiYWNrX2Zvcm1hdHRlcjx2YWx1ZV90eXBlLCBDaGFyPj47CistCistICBm b3JtYXR0ZXJfdHlwZSB2YWx1ZV9mb3JtYXR0ZXJfOworLQorLSBwdWJsaWM6CistICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgUGFyc2VDb250ZXh0PgorLSAgRk1UX0NPTlNURVhQUiBhdXRvIHBhcnNlKFBh cnNlQ29udGV4dCYgY3R4KSAtPiBkZWNsdHlwZShjdHguYmVnaW4oKSkgeworLSAgICByZXR1cm4g dmFsdWVfZm9ybWF0dGVyXy5wYXJzZShjdHgpOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVu YW1lIEZvcm1hdENvbnRleHQ+CistICBhdXRvIGZvcm1hdChjb25zdCBqb2luX3ZpZXc8SXQsIFNl bnRpbmVsLCBDaGFyPiYgdmFsdWUsIEZvcm1hdENvbnRleHQmIGN0eCkKKy0gICAgICAtPiBkZWNs dHlwZShjdHgub3V0KCkpIHsKKy0gICAgYXV0byBpdCA9IHZhbHVlLmJlZ2luOworLSAgICBhdXRv IG91dCA9IGN0eC5vdXQoKTsKKy0gICAgaWYgKGl0ICE9IHZhbHVlLmVuZCkgeworLSAgICAgIG91 dCA9IHZhbHVlX2Zvcm1hdHRlcl8uZm9ybWF0KG1hcCgqaXQpLCBjdHgpOworLSAgICAgICsraXQ7 CistICAgICAgd2hpbGUgKGl0ICE9IHZhbHVlLmVuZCkgeworLSAgICAgICAgb3V0ID0gZGV0YWls Ojpjb3B5X3N0cjxDaGFyPih2YWx1ZS5zZXAuYmVnaW4oKSwgdmFsdWUuc2VwLmVuZCgpLCBvdXQp OworLSAgICAgICAgY3R4LmFkdmFuY2VfdG8ob3V0KTsKKy0gICAgICAgIG91dCA9IHZhbHVlX2Zv cm1hdHRlcl8uZm9ybWF0KG1hcCgqaXQpLCBjdHgpOworLSAgICAgICAgKytpdDsKKy0gICAgICB9 CistICAgIH0KKy0gICAgcmV0dXJuIG91dDsKKy0gIH0KKy19OworLQorLS8qKgorLSAgUmV0dXJu cyBhIHZpZXcgdGhhdCBmb3JtYXRzIHRoZSBpdGVyYXRvciByYW5nZSBgW2JlZ2luLCBlbmQpYCB3 aXRoIGVsZW1lbnRzCistICBzZXBhcmF0ZWQgYnkgYHNlcGAuCistICovCistdGVtcGxhdGUgPHR5 cGVuYW1lIEl0LCB0eXBlbmFtZSBTZW50aW5lbD4KKy1hdXRvIGpvaW4oSXQgYmVnaW4sIFNlbnRp bmVsIGVuZCwgc3RyaW5nX3ZpZXcgc2VwKSAtPiBqb2luX3ZpZXc8SXQsIFNlbnRpbmVsPiB7Cist ICByZXR1cm4ge2JlZ2luLCBlbmQsIHNlcH07CistfQorLQorLS8qKgorLSAgXHJzdAorLSAgUmV0 dXJucyBhIHZpZXcgdGhhdCBmb3JtYXRzIGByYW5nZWAgd2l0aCBlbGVtZW50cyBzZXBhcmF0ZWQg YnkgYHNlcGAuCistCistICAqKkV4YW1wbGUqKjo6CistCistICAgIHN0ZDo6dmVjdG9yPGludD4g diA9IHsxLCAyLCAzfTsKKy0gICAgZm10OjpwcmludCgie30iLCBmbXQ6OmpvaW4odiwgIiwgIikp OworLSAgICAvLyBPdXRwdXQ6ICIxLCAyLCAzIgorLQorLSAgYGBmbXQ6OmpvaW5gYCBhcHBsaWVz IHBhc3NlZCBmb3JtYXQgc3BlY2lmaWVycyB0byB0aGUgcmFuZ2UgZWxlbWVudHM6OgorLQorLSAg ICBmbXQ6OnByaW50KCJ7OjAyfSIsIGZtdDo6am9pbih2LCAiLCAiKSk7CistICAgIC8vIE91dHB1 dDogIjAxLCAwMiwgMDMiCistICBcZW5kcnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1lIFJh bmdlPgorLWF1dG8gam9pbihSYW5nZSYmIHJhbmdlLCBzdHJpbmdfdmlldyBzZXApCistICAgIC0+ IGpvaW5fdmlldzxkZXRhaWw6Oml0ZXJhdG9yX3Q8UmFuZ2U+LCBkZXRhaWw6OnNlbnRpbmVsX3Q8 UmFuZ2U+PiB7CistICByZXR1cm4gam9pbihzdGQ6OmJlZ2luKHJhbmdlKSwgc3RkOjplbmQocmFu Z2UpLCBzZXApOworLX0KKy0KKy0vKioKKy0gIFxyc3QKKy0gIENvbnZlcnRzICp2YWx1ZSogdG8g YGBzdGQ6OnN0cmluZ2BgIHVzaW5nIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgdHlwZSAqVCouCist CistICAqKkV4YW1wbGUqKjo6CistCistICAgICNpbmNsdWRlIDxmbXQvZm9ybWF0Lmg+CistCist ICAgIHN0ZDo6c3RyaW5nIGFuc3dlciA9IGZtdDo6dG9fc3RyaW5nKDQyKTsKKy0gIFxlbmRyc3QK Ky0gKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9JRighc3RkOjppc19pbnRl Z3JhbDxUPjo6dmFsdWUpPgorLWlubGluZSBhdXRvIHRvX3N0cmluZyhjb25zdCBUJiB2YWx1ZSkg LT4gc3RkOjpzdHJpbmcgeworLSAgYXV0byByZXN1bHQgPSBzdGQ6OnN0cmluZygpOworLSAgZGV0 YWlsOjp3cml0ZTxjaGFyPihzdGQ6OmJhY2tfaW5zZXJ0ZXIocmVzdWx0KSwgdmFsdWUpOworLSAg cmV0dXJuIHJlc3VsdDsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFCTEVf SUYoc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUpPgorLUZNVF9OT0RJU0NBUkQgaW5saW5lIGF1 dG8gdG9fc3RyaW5nKFQgdmFsdWUpIC0+IHN0ZDo6c3RyaW5nIHsKKy0gIC8vIFRoZSBidWZmZXIg c2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBzdG9yZSB0aGUgbnVtYmVyIGluY2x1ZGluZyB0aGUg c2lnbgorLSAgLy8gb3IgImZhbHNlIiBmb3IgYm9vbC4KKy0gIGNvbnN0ZXhwciBpbnQgbWF4X3Np emUgPSBkZXRhaWw6OmRpZ2l0czEwPFQ+KCkgKyAyOworLSAgY2hhciBidWZmZXJbbWF4X3NpemUg PiA1ID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1heF9zaXplKSA6IDVdOworLSAgY2hhciogYmVn aW4gPSBidWZmZXI7CistICByZXR1cm4gc3RkOjpzdHJpbmcoYmVnaW4sIGRldGFpbDo6d3JpdGU8 Y2hhcj4oYmVnaW4sIHZhbHVlKSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCBz aXplX3QgU0laRT4KKy1GTVRfTk9ESVNDQVJEIGF1dG8gdG9fc3RyaW5nKGNvbnN0IGJhc2ljX21l bW9yeV9idWZmZXI8Q2hhciwgU0laRT4mIGJ1ZikKKy0gICAgLT4gc3RkOjpiYXNpY19zdHJpbmc8 Q2hhcj4geworLSAgYXV0byBzaXplID0gYnVmLnNpemUoKTsKKy0gIGRldGFpbDo6YXNzdW1lKHNp emUgPCBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPigpLm1heF9zaXplKCkpOworLSAgcmV0dXJuIHN0 ZDo6YmFzaWNfc3RyaW5nPENoYXI+KGJ1Zi5kYXRhKCksIHNpemUpOworLX0KKy0KKy1GTVRfQkVH SU5fREVUQUlMX05BTUVTUEFDRQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorLXZvaWQg dmZvcm1hdF90bygKKy0gICAgYnVmZmVyPENoYXI+JiBidWYsIGJhc2ljX3N0cmluZ192aWV3PENo YXI+IGZtdCwKKy0gICAgYmFzaWNfZm9ybWF0X2FyZ3M8Rk1UX0JVRkZFUl9DT05URVhUKHR5cGVf aWRlbnRpdHlfdDxDaGFyPik+IGFyZ3MsCistICAgIGxvY2FsZV9yZWYgbG9jKSB7CistICAvLyB3 b3JrYXJvdW5kIGZvciBtc3ZjIGJ1ZyByZWdhcmRpbmcgbmFtZS1sb29rdXAgaW4gbW9kdWxlCist ICAvLyBsaW5rIG5hbWVzIGludG8gZnVuY3Rpb24gc2NvcGUKKy0gIHVzaW5nIGRldGFpbDo6YXJn X2Zvcm1hdHRlcjsKKy0gIHVzaW5nIGRldGFpbDo6YnVmZmVyX2FwcGVuZGVyOworLSAgdXNpbmcg ZGV0YWlsOjpjdXN0b21fZm9ybWF0dGVyOworLSAgdXNpbmcgZGV0YWlsOjpkZWZhdWx0X2FyZ19m b3JtYXR0ZXI7CistICB1c2luZyBkZXRhaWw6OmdldF9hcmc7CistICB1c2luZyBkZXRhaWw6Omxv Y2FsZV9yZWY7CistICB1c2luZyBkZXRhaWw6OnBhcnNlX2Zvcm1hdF9zcGVjczsKKy0gIHVzaW5n IGRldGFpbDo6c3BlY3NfY2hlY2tlcjsKKy0gIHVzaW5nIGRldGFpbDo6c3BlY3NfaGFuZGxlcjsK Ky0gIHVzaW5nIGRldGFpbDo6dG9fdW5zaWduZWQ7CistICB1c2luZyBkZXRhaWw6OnR5cGU7Cist ICB1c2luZyBkZXRhaWw6OndyaXRlOworLSAgYXV0byBvdXQgPSBidWZmZXJfYXBwZW5kZXI8Q2hh cj4oYnVmKTsKKy0gIGlmIChmbXQuc2l6ZSgpID09IDIgJiYgZXF1YWwyKGZtdC5kYXRhKCksICJ7 fSIpKSB7CistICAgIGF1dG8gYXJnID0gYXJncy5nZXQoMCk7CistICAgIGlmICghYXJnKSBlcnJv cl9oYW5kbGVyKCkub25fZXJyb3IoImFyZ3VtZW50IG5vdCBmb3VuZCIpOworLSAgICB2aXNpdF9m b3JtYXRfYXJnKGRlZmF1bHRfYXJnX2Zvcm1hdHRlcjxDaGFyPntvdXQsIGFyZ3MsIGxvY30sIGFy Zyk7CistICAgIHJldHVybjsKKy0gIH0KKy0KKy0gIHN0cnVjdCBmb3JtYXRfaGFuZGxlciA6IGVy cm9yX2hhbmRsZXIgeworLSAgICBiYXNpY19mb3JtYXRfcGFyc2VfY29udGV4dDxDaGFyPiBwYXJz ZV9jb250ZXh0OworLSAgICBidWZmZXJfY29udGV4dDxDaGFyPiBjb250ZXh0OworLQorLSAgICBm b3JtYXRfaGFuZGxlcihidWZmZXJfYXBwZW5kZXI8Q2hhcj4gb3V0LCBiYXNpY19zdHJpbmdfdmll dzxDaGFyPiBzdHIsCistICAgICAgICAgICAgICAgICAgIGJhc2ljX2Zvcm1hdF9hcmdzPGJ1ZmZl cl9jb250ZXh0PENoYXI+PiBhcmdzLCBsb2NhbGVfcmVmIGxvYykKKy0gICAgICAgIDogcGFyc2Vf Y29udGV4dChzdHIpLCBjb250ZXh0KG91dCwgYXJncywgbG9jKSB7fQorLQorLSAgICB2b2lkIG9u X3RleHQoY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0IENoYXIqIGVuZCkgeworLSAgICAgIGF1dG8g dGV4dCA9IGJhc2ljX3N0cmluZ192aWV3PENoYXI+KGJlZ2luLCB0b191bnNpZ25lZChlbmQgLSBi ZWdpbikpOworLSAgICAgIGNvbnRleHQuYWR2YW5jZV90byh3cml0ZTxDaGFyPihjb250ZXh0Lm91 dCgpLCB0ZXh0KSk7CistICAgIH0KKy0KKy0gICAgRk1UX0NPTlNURVhQUiBhdXRvIG9uX2FyZ19p ZCgpIC0+IGludCB7CistICAgICAgcmV0dXJuIHBhcnNlX2NvbnRleHQubmV4dF9hcmdfaWQoKTsK Ky0gICAgfQorLSAgICBGTVRfQ09OU1RFWFBSIGF1dG8gb25fYXJnX2lkKGludCBpZCkgLT4gaW50 IHsKKy0gICAgICByZXR1cm4gcGFyc2VfY29udGV4dC5jaGVja19hcmdfaWQoaWQpLCBpZDsKKy0g ICAgfQorLSAgICBGTVRfQ09OU1RFWFBSIGF1dG8gb25fYXJnX2lkKGJhc2ljX3N0cmluZ192aWV3 PENoYXI+IGlkKSAtPiBpbnQgeworLSAgICAgIGludCBhcmdfaWQgPSBjb250ZXh0LmFyZ19pZChp ZCk7CistICAgICAgaWYgKGFyZ19pZCA8IDApIG9uX2Vycm9yKCJhcmd1bWVudCBub3QgZm91bmQi KTsKKy0gICAgICByZXR1cm4gYXJnX2lkOworLSAgICB9CistCistICAgIEZNVF9JTkxJTkUgdm9p ZCBvbl9yZXBsYWNlbWVudF9maWVsZChpbnQgaWQsIGNvbnN0IENoYXIqKSB7CistICAgICAgYXV0 byBhcmcgPSBnZXRfYXJnKGNvbnRleHQsIGlkKTsKKy0gICAgICBjb250ZXh0LmFkdmFuY2VfdG8o dmlzaXRfZm9ybWF0X2FyZygKKy0gICAgICAgICAgZGVmYXVsdF9hcmdfZm9ybWF0dGVyPENoYXI+ e2NvbnRleHQub3V0KCksIGNvbnRleHQuYXJncygpLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29udGV4dC5sb2NhbGUoKX0sCistICAgICAgICAgIGFyZykpOworLSAg ICB9CistCistICAgIGF1dG8gb25fZm9ybWF0X3NwZWNzKGludCBpZCwgY29uc3QgQ2hhciogYmVn aW4sIGNvbnN0IENoYXIqIGVuZCkKKy0gICAgICAgIC0+IGNvbnN0IENoYXIqIHsKKy0gICAgICBh dXRvIGFyZyA9IGdldF9hcmcoY29udGV4dCwgaWQpOworLSAgICAgIGlmIChhcmcudHlwZSgpID09 IHR5cGU6OmN1c3RvbV90eXBlKSB7CistICAgICAgICBwYXJzZV9jb250ZXh0LmFkdmFuY2VfdG8o cGFyc2VfY29udGV4dC5iZWdpbigpICsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoYmVnaW4gLSAmKnBhcnNlX2NvbnRleHQuYmVnaW4oKSkpOworLSAgICAgICAgdmlzaXRfZm9y bWF0X2FyZyhjdXN0b21fZm9ybWF0dGVyPENoYXI+e3BhcnNlX2NvbnRleHQsIGNvbnRleHR9LCBh cmcpOworLSAgICAgICAgcmV0dXJuIHBhcnNlX2NvbnRleHQuYmVnaW4oKTsKKy0gICAgICB9Cist ICAgICAgYXV0byBzcGVjcyA9IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPigpOworLSAgICAgIHNw ZWNzX2NoZWNrZXI8c3BlY3NfaGFuZGxlcjxDaGFyPj4gaGFuZGxlcigKKy0gICAgICAgICAgc3Bl Y3NfaGFuZGxlcjxDaGFyPihzcGVjcywgcGFyc2VfY29udGV4dCwgY29udGV4dCksIGFyZy50eXBl KCkpOworLSAgICAgIGJlZ2luID0gcGFyc2VfZm9ybWF0X3NwZWNzKGJlZ2luLCBlbmQsIGhhbmRs ZXIpOworLSAgICAgIGlmIChiZWdpbiA9PSBlbmQgfHwgKmJlZ2luICE9ICd9JykKKy0gICAgICAg IG9uX2Vycm9yKCJtaXNzaW5nICd9JyBpbiBmb3JtYXQgc3RyaW5nIik7CistICAgICAgYXV0byBm ID0gYXJnX2Zvcm1hdHRlcjxDaGFyPntjb250ZXh0Lm91dCgpLCBzcGVjcywgY29udGV4dC5sb2Nh bGUoKX07CistICAgICAgY29udGV4dC5hZHZhbmNlX3RvKHZpc2l0X2Zvcm1hdF9hcmcoZiwgYXJn KSk7CistICAgICAgcmV0dXJuIGJlZ2luOworLSAgICB9CistICB9OworLSAgZGV0YWlsOjpwYXJz ZV9mb3JtYXRfc3RyaW5nPGZhbHNlPihmbXQsIGZvcm1hdF9oYW5kbGVyKG91dCwgZm10LCBhcmdz LCBsb2MpKTsKKy19CistCistI2lmbmRlZiBGTVRfSEVBREVSX09OTFkKKy1leHRlcm4gdGVtcGxh dGUgRk1UX0FQSSBhdXRvIHRob3VzYW5kc19zZXBfaW1wbDxjaGFyPihsb2NhbGVfcmVmKQorLSAg ICAtPiB0aG91c2FuZHNfc2VwX3Jlc3VsdDxjaGFyPjsKKy1leHRlcm4gdGVtcGxhdGUgRk1UX0FQ SSBhdXRvIHRob3VzYW5kc19zZXBfaW1wbDx3Y2hhcl90Pihsb2NhbGVfcmVmKQorLSAgICAtPiB0 aG91c2FuZHNfc2VwX3Jlc3VsdDx3Y2hhcl90PjsKKy1leHRlcm4gdGVtcGxhdGUgRk1UX0FQSSBh dXRvIGRlY2ltYWxfcG9pbnRfaW1wbChsb2NhbGVfcmVmKSAtPiBjaGFyOworLWV4dGVybiB0ZW1w bGF0ZSBGTVRfQVBJIGF1dG8gZGVjaW1hbF9wb2ludF9pbXBsKGxvY2FsZV9yZWYpIC0+IHdjaGFy X3Q7CistZXh0ZXJuIHRlbXBsYXRlIGF1dG8gZm9ybWF0X2Zsb2F0PGRvdWJsZT4oZG91YmxlIHZh bHVlLCBpbnQgcHJlY2lzaW9uLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZsb2F0X3NwZWNzIHNwZWNzLCBidWZmZXI8Y2hhcj4mIGJ1ZikKKy0gICAgLT4gaW50 OworLWV4dGVybiB0ZW1wbGF0ZSBhdXRvIGZvcm1hdF9mbG9hdDxsb25nIGRvdWJsZT4obG9uZyBk b3VibGUgdmFsdWUsIGludCBwcmVjaXNpb24sCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmbG9hdF9zcGVjcyBzcGVjcywKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjxjaGFyPiYgYnVmKSAtPiBpbnQ7 Cistdm9pZCBzbnByaW50Zl9mbG9hdChmbG9hdCwgaW50LCBmbG9hdF9zcGVjcywgYnVmZmVyPGNo YXI+JikgPSBkZWxldGU7CistZXh0ZXJuIHRlbXBsYXRlIGF1dG8gc25wcmludGZfZmxvYXQ8ZG91 YmxlPihkb3VibGUgdmFsdWUsIGludCBwcmVjaXNpb24sCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9zcGVjcyBzcGVjcywKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjxjaGFyPiYgYnVmKSAtPiBpbnQ7 CistZXh0ZXJuIHRlbXBsYXRlIGF1dG8gc25wcmludGZfZmxvYXQ8bG9uZyBkb3VibGU+KGxvbmcg ZG91YmxlIHZhbHVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcHJlY2lzaW9uLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmbG9hdF9zcGVjcyBzcGVjcywKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyPGNoYXI+JiBidWYpIC0+IGludDsK Ky0jZW5kaWYgIC8vIEZNVF9IRUFERVJfT05MWQorLQorLUZNVF9FTkRfREVUQUlMX05BTUVTUEFD RQorLQorLSNpZiBGTVRfVVNFX1VTRVJfREVGSU5FRF9MSVRFUkFMUworLWlubGluZSBuYW1lc3Bh Y2UgbGl0ZXJhbHMgeworLS8qKgorLSAgXHJzdAorLSAgVXNlci1kZWZpbmVkIGxpdGVyYWwgZXF1 aXZhbGVudCBvZiA6ZnVuYzpgZm10OjphcmdgLgorLQorLSAgKipFeGFtcGxlKio6OgorLQorLSAg ICB1c2luZyBuYW1lc3BhY2UgZm10OjpsaXRlcmFsczsKKy0gICAgZm10OjpwcmludCgiRWxhcHNl ZCB0aW1lOiB7czouMmZ9IHNlY29uZHMiLCAicyJfYT0xLjIzKTsKKy0gIFxlbmRyc3QKKy0gKi8K Ky0jICBpZiBGTVRfVVNFX05PTlRZUEVfVEVNUExBVEVfUEFSQU1FVEVSUworLXRlbXBsYXRlIDxk ZXRhaWxfZXhwb3J0ZWQ6OmZpeGVkX3N0cmluZyBTdHI+CistY29uc3RleHByIGF1dG8gb3BlcmF0 b3IiIl9hKCkKKy0gICAgLT4gZGV0YWlsOjp1ZGxfYXJnPHJlbW92ZV9jdnJlZl90PGRlY2x0eXBl KFN0ci5kYXRhWzBdKT4sCistICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoU3RyLmRhdGEp IC8gc2l6ZW9mKGRlY2x0eXBlKFN0ci5kYXRhWzBdKSksIFN0cj4geworLSAgcmV0dXJuIHt9Owor LX0KKy0jICBlbHNlCistY29uc3RleHByIGF1dG8gb3BlcmF0b3IiIiBfYShjb25zdCBjaGFyKiBz LCBzaXplX3QpIC0+IGRldGFpbDo6dWRsX2FyZzxjaGFyPiB7CistICByZXR1cm4ge3N9OworLX0K Ky0jICBlbmRpZgorLQorLS8vIERFUFJFQ0FURUQhCistLy8gVXNlci1kZWZpbmVkIGxpdGVyYWwg ZXF1aXZhbGVudCBvZiBmbXQ6OmZvcm1hdC4KKy1GTVRfREVQUkVDQVRFRCBjb25zdGV4cHIgYXV0 byBvcGVyYXRvciIiIF9mb3JtYXQoY29uc3QgY2hhciogcywgc2l6ZV90IG4pCistICAgIC0+IGRl dGFpbDo6dWRsX2Zvcm1hdHRlcjxjaGFyPiB7CistICByZXR1cm4ge3tzLCBufX07CistfQorLX0g IC8vIG5hbWVzcGFjZSBsaXRlcmFscworLSNlbmRpZiAgLy8gRk1UX1VTRV9VU0VSX0RFRklORURf TElURVJBTFMKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgTG9jYWxlLCBGTVRfRU5BQkxFX0lGKGRl dGFpbDo6aXNfbG9jYWxlPExvY2FsZT46OnZhbHVlKT4KKy1pbmxpbmUgYXV0byB2Zm9ybWF0KGNv bnN0IExvY2FsZSYgbG9jLCBzdHJpbmdfdmlldyBmbXQsIGZvcm1hdF9hcmdzIGFyZ3MpCistICAg IC0+IHN0ZDo6c3RyaW5nIHsKKy0gIHJldHVybiBkZXRhaWw6OnZmb3JtYXQobG9jLCBmbXQsIGFy Z3MpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgTG9jYWxlLCB0eXBlbmFtZS4uLiBULAor LSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNfbG9jYWxlPExvY2FsZT46OnZhbHVl KT4KKy1pbmxpbmUgYXV0byBmb3JtYXQoY29uc3QgTG9jYWxlJiBsb2MsIGZvcm1hdF9zdHJpbmc8 VC4uLj4gZm10LCBUJiYuLi4gYXJncykKKy0gICAgLT4gc3RkOjpzdHJpbmcgeworLSAgcmV0dXJu IHZmb3JtYXQobG9jLCBzdHJpbmdfdmlldyhmbXQpLCBmbXQ6Om1ha2VfZm9ybWF0X2FyZ3MoYXJn cy4uLikpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVCwgc2l6ZV90IFNJWkUsIHR5 cGVuYW1lIEFsbG9jYXRvcj4KKy1GTVRfREVQUkVDQVRFRCBhdXRvIGZvcm1hdF90byhiYXNpY19t ZW1vcnlfYnVmZmVyPGNoYXIsIFNJWkUsIEFsbG9jYXRvcj4mIGJ1ZiwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3JtYXRfc3RyaW5nPFQuLi4+IGZtdCwgVCYmLi4uIGFyZ3MpCist ICAgIC0+IGFwcGVuZGVyIHsKKy0gIGRldGFpbDo6dmZvcm1hdF90byhidWYsIHN0cmluZ192aWV3 KGZtdCksIGZtdDo6bWFrZV9mb3JtYXRfYXJncyhhcmdzLi4uKSk7CistICByZXR1cm4gYXBwZW5k ZXIoYnVmKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBM b2NhbGUsCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoZGV0YWlsOjppc19vdXRwdXRfaXRlcmF0 b3I8T3V0cHV0SXQsIGNoYXI+Ojp2YWx1ZSYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldGFpbDo6aXNfbG9jYWxlPExvY2FsZT46OnZhbHVlKT4KKy1hdXRvIHZmb3JtYXRfdG8oT3V0 cHV0SXQgb3V0LCBjb25zdCBMb2NhbGUmIGxvYywgc3RyaW5nX3ZpZXcgZm10LAorLSAgICAgICAg ICAgICAgICBmb3JtYXRfYXJncyBhcmdzKSAtPiBPdXRwdXRJdCB7CistICB1c2luZyBkZXRhaWw6 OmdldF9idWZmZXI7CistICBhdXRvJiYgYnVmID0gZ2V0X2J1ZmZlcjxjaGFyPihvdXQpOworLSAg ZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1ZiwgZm10LCBhcmdzLCBkZXRhaWw6OmxvY2FsZV9yZWYobG9j KSk7CistICByZXR1cm4gZGV0YWlsOjpnZXRfaXRlcmF0b3IoYnVmKTsKKy19CistCistdGVtcGxh dGUgPHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBMb2NhbGUsIHR5cGVuYW1lLi4uIFQsCist ICAgICAgICAgIEZNVF9FTkFCTEVfSUYoZGV0YWlsOjppc19vdXRwdXRfaXRlcmF0b3I8T3V0cHV0 SXQsIGNoYXI+Ojp2YWx1ZSYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6 aXNfbG9jYWxlPExvY2FsZT46OnZhbHVlKT4KKy1GTVRfSU5MSU5FIGF1dG8gZm9ybWF0X3RvKE91 dHB1dEl0IG91dCwgY29uc3QgTG9jYWxlJiBsb2MsCistICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3JtYXRfc3RyaW5nPFQuLi4+IGZtdCwgVCYmLi4uIGFyZ3MpIC0+IE91dHB1dEl0IHsKKy0g IHJldHVybiB2Zm9ybWF0X3RvKG91dCwgbG9jLCBmbXQsIGZtdDo6bWFrZV9mb3JtYXRfYXJncyhh cmdzLi4uKSk7CistfQorLQorLUZNVF9NT0RVTEVfRVhQT1JUX0VORAorLUZNVF9FTkRfTkFNRVNQ QUNFCistCistI2lmZGVmIEZNVF9ERVBSRUNBVEVEX0lOQ0xVREVfWENIQVIKKy0jICBpbmNsdWRl ICJ4Y2hhci5oIgorLSNlbmRpZgorLQorLSNpZmRlZiBGTVRfSEVBREVSX09OTFkKKy0jICBkZWZp bmUgRk1UX0ZVTkMgaW5saW5lCistIyAgaW5jbHVkZSAiZm9ybWF0LWlubC5oIgorLSNlbHNlCist IyAgZGVmaW5lIEZNVF9GVU5DCistI2VuZGlmCistCistI2VuZGlmICAvLyBGTVRfRk9STUFUX0hf CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvZm10L2xvY2FsZS5oIGIvaW5jbHVkZS9kcHAvZm10 L2xvY2FsZS5oCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDc1NzFiNTIuLjAwMDAw MDAKKy0tLSBhL2luY2x1ZGUvZHBwL2ZtdC9sb2NhbGUuaAorKysrIC9kZXYvbnVsbAorQEAgLTEs MiArMCwwIEBACistI2luY2x1ZGUgInhjaGFyLmgiCistI3dhcm5pbmcgZm10L2xvY2FsZS5oIGlz IGRlcHJlY2F0ZWQsIGluY2x1ZGUgZm10L2Zvcm1hdC5oIG9yIGZtdC94Y2hhci5oIGluc3RlYWQK K2RpZmYgLS1naXQgYS9pbmNsdWRlL2RwcC9mbXQvb3MuaCBiL2luY2x1ZGUvZHBwL2ZtdC9vcy5o CitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGI2NGY4YmIuLjAwMDAwMDAKKy0tLSBh L2luY2x1ZGUvZHBwL2ZtdC9vcy5oCisrKysgL2Rldi9udWxsCitAQCAtMSw1MjcgKzAsMCBAQAor LS8vIEZvcm1hdHRpbmcgbGlicmFyeSBmb3IgQysrIC0gb3B0aW9uYWwgT1Mtc3BlY2lmaWMgZnVu Y3Rpb25hbGl0eQorLS8vCistLy8gQ29weXJpZ2h0IChjKSAyMDEyIC0gcHJlc2VudCwgVmljdG9y IFp2ZXJvdmljaAorLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCistLy8KKy0vLyBGb3IgdGhlIGxp Y2Vuc2UgaW5mb3JtYXRpb24gcmVmZXIgdG8gZm9ybWF0LmguCistCistI2lmbmRlZiBGTVRfT1Nf SF8KKy0jZGVmaW5lIEZNVF9PU19IXworLQorLSNpbmNsdWRlIDxjZXJybm8+CistI2luY2x1ZGUg PGNsb2NhbGU+ICAvLyBsb2NhbGVfdAorLSNpbmNsdWRlIDxjc3RkZGVmPgorLSNpbmNsdWRlIDxj c3RkaW8+CistI2luY2x1ZGUgPGNzdGRsaWI+ICAgICAgIC8vIHN0cnRvZF9sCistI2luY2x1ZGUg PHN5c3RlbV9lcnJvcj4gIC8vIHN0ZDo6c3lzdGVtX2Vycm9yCistCistI2lmIGRlZmluZWQgX19B UFBMRV9fIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCistIyAgaW5jbHVkZSA8eGxvY2FsZS5oPiAg Ly8gZm9yIExDX05VTUVSSUNfTUFTSyBvbiBPUyBYCistI2VuZGlmCistCistI2luY2x1ZGUgImZv cm1hdC5oIgorLQorLSNpZm5kZWYgRk1UX1VTRV9GQ05UTAorLS8vIFVXUCBkb2Vzbid0IHByb3Zp ZGUgX3BpcGUuCistIyAgaWYgRk1UX0hBU19JTkNMVURFKCJ3aW5hcGlmYW1pbHkuaCIpCistIyAg ICBpbmNsdWRlIDx3aW5hcGlmYW1pbHkuaD4KKy0jICBlbmRpZgorLSMgIGlmIChGTVRfSEFTX0lO Q0xVREUoPGZjbnRsLmg+KSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgXAorLSAgICAgICBkZWZp bmVkKF9fbGludXhfXykpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAg ICghZGVmaW5lZChXSU5BUElfRkFNSUxZKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgXAor LSAgICAgICAoV0lOQVBJX0ZBTUlMWSA9PSBXSU5BUElfRkFNSUxZX0RFU0tUT1BfQVBQKSkKKy0j ICAgIGluY2x1ZGUgPGZjbnRsLmg+ICAvLyBmb3IgT19SRE9OTFkKKy0jICAgIGRlZmluZSBGTVRf VVNFX0ZDTlRMIDEKKy0jICBlbHNlCistIyAgICBkZWZpbmUgRk1UX1VTRV9GQ05UTCAwCistIyAg ZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWZuZGVmIEZNVF9QT1NJWAorLSMgIGlmIGRlZmluZWQoX1dJ TjMyKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKy0vLyBGaXggd2FybmluZ3MgYWJvdXQgZGVw cmVjYXRlZCBzeW1ib2xzLgorLSMgICAgZGVmaW5lIEZNVF9QT1NJWChjYWxsKSBfIyNjYWxsCist IyAgZWxzZQorLSMgICAgZGVmaW5lIEZNVF9QT1NJWChjYWxsKSBjYWxsCistIyAgZW5kaWYKKy0j ZW5kaWYKKy0KKy0vLyBDYWxscyB0byBzeXN0ZW0gZnVuY3Rpb25zIGFyZSB3cmFwcGVkIGluIEZN VF9TWVNURU0gZm9yIHRlc3RhYmlsaXR5LgorLSNpZmRlZiBGTVRfU1lTVEVNCistIyAgZGVmaW5l IEZNVF9QT1NJWF9DQUxMKGNhbGwpIEZNVF9TWVNURU0oY2FsbCkKKy0jZWxzZQorLSMgIGRlZmlu ZSBGTVRfU1lTVEVNKGNhbGwpIDo6Y2FsbAorLSMgIGlmZGVmIF9XSU4zMgorLS8vIEZpeCB3YXJu aW5ncyBhYm91dCBkZXByZWNhdGVkIHN5bWJvbHMuCistIyAgICBkZWZpbmUgRk1UX1BPU0lYX0NB TEwoY2FsbCkgOjpfIyNjYWxsCistIyAgZWxzZQorLSMgICAgZGVmaW5lIEZNVF9QT1NJWF9DQUxM KGNhbGwpIDo6Y2FsbAorLSMgIGVuZGlmCistI2VuZGlmCistCistLy8gUmV0cmllcyB0aGUgZXhw cmVzc2lvbiB3aGlsZSBpdCBldmFsdWF0ZXMgdG8gZXJyb3JfcmVzdWx0IGFuZCBlcnJubworLS8v IGVxdWFscyB0byBFSU5UUi4KKy0jaWZuZGVmIF9XSU4zMgorLSMgIGRlZmluZSBGTVRfUkVUUllf VkFMKHJlc3VsdCwgZXhwcmVzc2lvbiwgZXJyb3JfcmVzdWx0KSBcCistICAgIGRvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAocmVz dWx0KSA9IChleHByZXNzaW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9 IHdoaWxlICgocmVzdWx0KSA9PSAoZXJyb3JfcmVzdWx0KSAmJiBlcnJubyA9PSBFSU5UUikKKy0j ZWxzZQorLSMgIGRlZmluZSBGTVRfUkVUUllfVkFMKHJlc3VsdCwgZXhwcmVzc2lvbiwgZXJyb3Jf cmVzdWx0KSByZXN1bHQgPSAoZXhwcmVzc2lvbikKKy0jZW5kaWYKKy0KKy0jZGVmaW5lIEZNVF9S RVRSWShyZXN1bHQsIGV4cHJlc3Npb24pIEZNVF9SRVRSWV9WQUwocmVzdWx0LCBleHByZXNzaW9u LCAtMSkKKy0KKy1GTVRfQkVHSU5fTkFNRVNQQUNFCistRk1UX01PRFVMRV9FWFBPUlRfQkVHSU4K Ky0KKy0vKioKKy0gIFxyc3QKKy0gIEEgcmVmZXJlbmNlIHRvIGEgbnVsbC10ZXJtaW5hdGVkIHN0 cmluZy4gSXQgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gYSBDCistICBzdHJpbmcgb3IgYGBzdGQ6 OnN0cmluZ2BgLgorLQorLSAgWW91IGNhbiB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdHlwZSBh bGlhc2VzIGZvciBjb21tb24gY2hhcmFjdGVyIHR5cGVzOgorLQorLSAgKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy0gIHwgVHlwZSAgICAgICAgICB8IERl ZmluaXRpb24gICAgICAgICAgICAgICAgICB8CistICArPT09PT09PT09PT09PT09Kz09PT09PT09 PT09PT09PT09PT09PT09PT09PT09KworLSAgfCBjc3RyaW5nX3ZpZXcgIHwgYmFzaWNfY3N0cmlu Z192aWV3PGNoYXI+ICAgIHwKKy0gICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCistICB8IHdjc3RyaW5nX3ZpZXcgfCBiYXNpY19jc3RyaW5nX3ZpZXc8d2No YXJfdD4gfAorLSAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKKy0KKy0gIFRoaXMgY2xhc3MgaXMgbW9zdCB1c2VmdWwgYXMgYSBwYXJhbWV0ZXIgdHlwZSB0 byBhbGxvdyBwYXNzaW5nCistICBkaWZmZXJlbnQgdHlwZXMgb2Ygc3RyaW5ncyB0byBhIGZ1bmN0 aW9uLCBmb3IgZXhhbXBsZTo6CistCistICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgor LSAgICBzdGQ6OnN0cmluZyBmb3JtYXQoY3N0cmluZ192aWV3IGZvcm1hdF9zdHIsIGNvbnN0IEFy Z3MgJiAuLi4gYXJncyk7CistCistICAgIGZvcm1hdCgie30iLCA0Mik7CistICAgIGZvcm1hdChz dGQ6OnN0cmluZygie30iKSwgNDIpOworLSAgXGVuZHJzdAorLSAqLworLXRlbXBsYXRlIDx0eXBl bmFtZSBDaGFyPiBjbGFzcyBiYXNpY19jc3RyaW5nX3ZpZXcgeworLSBwcml2YXRlOgorLSAgY29u c3QgQ2hhciogZGF0YV87CistCistIHB1YmxpYzoKKy0gIC8qKiBDb25zdHJ1Y3RzIGEgc3RyaW5n IHJlZmVyZW5jZSBvYmplY3QgZnJvbSBhIEMgc3RyaW5nLiAqLworLSAgYmFzaWNfY3N0cmluZ192 aWV3KGNvbnN0IENoYXIqIHMpIDogZGF0YV8ocykge30KKy0KKy0gIC8qKgorLSAgICBccnN0Cist ICAgIENvbnN0cnVjdHMgYSBzdHJpbmcgcmVmZXJlbmNlIGZyb20gYW4gYGBzdGQ6OnN0cmluZ2Bg IG9iamVjdC4KKy0gICAgXGVuZHJzdAorLSAgICovCistICBiYXNpY19jc3RyaW5nX3ZpZXcoY29u c3Qgc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4mIHMpIDogZGF0YV8ocy5jX3N0cigpKSB7fQorLQor LSAgLyoqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gYSBDIHN0cmluZy4gKi8KKy0gIGNvbnN0IENo YXIqIGNfc3RyKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KKy19OworLQorLXVzaW5nIGNzdHJp bmdfdmlldyA9IGJhc2ljX2NzdHJpbmdfdmlldzxjaGFyPjsKKy11c2luZyB3Y3N0cmluZ192aWV3 ID0gYmFzaWNfY3N0cmluZ192aWV3PHdjaGFyX3Q+OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBD aGFyPiBzdHJ1Y3QgZm9ybWF0dGVyPHN0ZDo6ZXJyb3JfY29kZSwgQ2hhcj4geworLSAgdGVtcGxh dGUgPHR5cGVuYW1lIFBhcnNlQ29udGV4dD4KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBwYXJzZShQ YXJzZUNvbnRleHQmIGN0eCkgLT4gZGVjbHR5cGUoY3R4LmJlZ2luKCkpIHsKKy0gICAgcmV0dXJu IGN0eC5iZWdpbigpOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZvcm1hdENvbnRl eHQ+CistICBGTVRfQ09OU1RFWFBSIGF1dG8gZm9ybWF0KGNvbnN0IHN0ZDo6ZXJyb3JfY29kZSYg ZWMsIEZvcm1hdENvbnRleHQmIGN0eCkgY29uc3QKKy0gICAgICAtPiBkZWNsdHlwZShjdHgub3V0 KCkpIHsKKy0gICAgYXV0byBvdXQgPSBjdHgub3V0KCk7CistICAgIG91dCA9IGRldGFpbDo6d3Jp dGVfYnl0ZXMob3V0LCBlYy5jYXRlZ29yeSgpLm5hbWUoKSwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4oKSk7CistICAgIG91dCA9IGRldGFp bDo6d3JpdGU8Q2hhcj4ob3V0LCBDaGFyKCc6JykpOworLSAgICBvdXQgPSBkZXRhaWw6OndyaXRl PENoYXI+KG91dCwgZWMudmFsdWUoKSk7CistICAgIHJldHVybiBvdXQ7CistICB9CistfTsKKy0K Ky0jaWZkZWYgX1dJTjMyCistRk1UX0FQSSBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBzeXN0 ZW1fY2F0ZWdvcnkoKSBGTVRfTk9FWENFUFQ7CistCistRk1UX0JFR0lOX0RFVEFJTF9OQU1FU1BB Q0UKKy0vLyBBIGNvbnZlcnRlciBmcm9tIFVURi0xNiB0byBVVEYtOC4KKy0vLyBJdCBpcyBvbmx5 IHByb3ZpZGVkIGZvciBXaW5kb3dzIHNpbmNlIG90aGVyIHN5c3RlbXMgc3VwcG9ydCBVVEYtOCBu YXRpdmVseS4KKy1jbGFzcyB1dGYxNl90b191dGY4IHsKKy0gcHJpdmF0ZToKKy0gIG1lbW9yeV9i dWZmZXIgYnVmZmVyXzsKKy0KKy0gcHVibGljOgorLSAgdXRmMTZfdG9fdXRmOCgpIHt9CistICBG TVRfQVBJIGV4cGxpY2l0IHV0ZjE2X3RvX3V0ZjgoYmFzaWNfc3RyaW5nX3ZpZXc8d2NoYXJfdD4g cyk7CistICBvcGVyYXRvciBzdHJpbmdfdmlldygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ192aWV3 KCZidWZmZXJfWzBdLCBzaXplKCkpOyB9CistICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu IGJ1ZmZlcl8uc2l6ZSgpIC0gMTsgfQorLSAgY29uc3QgY2hhciogY19zdHIoKSBjb25zdCB7IHJl dHVybiAmYnVmZmVyX1swXTsgfQorLSAgc3RkOjpzdHJpbmcgc3RyKCkgY29uc3QgeyByZXR1cm4g c3RkOjpzdHJpbmcoJmJ1ZmZlcl9bMF0sIHNpemUoKSk7IH0KKy0KKy0gIC8vIFBlcmZvcm1zIGNv bnZlcnNpb24gcmV0dXJuaW5nIGEgc3lzdGVtIGVycm9yIGNvZGUgaW5zdGVhZCBvZgorLSAgLy8g dGhyb3dpbmcgZXhjZXB0aW9uIG9uIGNvbnZlcnNpb24gZXJyb3IuIFRoaXMgbWV0aG9kIG1heSBz dGlsbCB0aHJvdworLSAgLy8gaW4gY2FzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4KKy0g IEZNVF9BUEkgaW50IGNvbnZlcnQoYmFzaWNfc3RyaW5nX3ZpZXc8d2NoYXJfdD4gcyk7CistfTsK Ky0KKy1GTVRfQVBJIHZvaWQgZm9ybWF0X3dpbmRvd3NfZXJyb3IoYnVmZmVyPGNoYXI+JiBvdXQs IGludCBlcnJvcl9jb2RlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBtZXNzYWdlKSBGTVRfTk9FWENFUFQ7CistRk1UX0VORF9ERVRBSUxfTkFNRVNQQUNF CistCistRk1UX0FQSSBzdGQ6OnN5c3RlbV9lcnJvciB2d2luZG93c19lcnJvcihpbnQgZXJyb3Jf Y29kZSwgc3RyaW5nX3ZpZXcgZm9ybWF0X3N0ciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvcm1hdF9hcmdzIGFyZ3MpOworLQorLS8qKgorLSBccnN0CistIENv bnN0cnVjdHMgYSA6Y2xhc3M6YHN0ZDo6c3lzdGVtX2Vycm9yYCBvYmplY3Qgd2l0aCB0aGUgZGVz Y3JpcHRpb24KKy0gb2YgdGhlIGZvcm0KKy0KKy0gLi4gcGFyc2VkLWxpdGVyYWw6OgorLSAgICo8 bWVzc2FnZT4qOiAqPHN5c3RlbS1tZXNzYWdlPioKKy0KKy0gd2hlcmUgKjxtZXNzYWdlPiogaXMg dGhlIGZvcm1hdHRlZCBtZXNzYWdlIGFuZCAqPHN5c3RlbS1tZXNzYWdlPiogaXMgdGhlCistIHN5 c3RlbSBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVycm9yIGNvZGUuCistICplcnJvcl9j b2RlKiBpcyBhIFdpbmRvd3MgZXJyb3IgY29kZSBhcyBnaXZlbiBieSBgYEdldExhc3RFcnJvcmBg LgorLSBJZiAqZXJyb3JfY29kZSogaXMgbm90IGEgdmFsaWQgZXJyb3IgY29kZSBzdWNoIGFzIC0x LCB0aGUgc3lzdGVtIG1lc3NhZ2UKKy0gd2lsbCBsb29rIGxpa2UgImVycm9yIC0xIi4KKy0KKy0g KipFeGFtcGxlKio6OgorLQorLSAgIC8vIFRoaXMgdGhyb3dzIGEgc3lzdGVtX2Vycm9yIHdpdGgg dGhlIGRlc2NyaXB0aW9uCistICAgLy8gICBjYW5ub3Qgb3BlbiBmaWxlICdtYWRldXAnOiBUaGUg c3lzdGVtIGNhbm5vdCBmaW5kIHRoZSBmaWxlIHNwZWNpZmllZC4KKy0gICAvLyBvciBzaW1pbGFy IChzeXN0ZW0gbWVzc2FnZSBtYXkgdmFyeSkuCistICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSAi bWFkZXVwIjsKKy0gICBMUE9GU1RSVUNUIG9mID0gTFBPRlNUUlVDVCgpOworLSAgIEhGSUxFIGZp bGUgPSBPcGVuRmlsZShmaWxlbmFtZSwgJm9mLCBPRl9SRUFEKTsKKy0gICBpZiAoZmlsZSA9PSBI RklMRV9FUlJPUikgeworLSAgICAgdGhyb3cgZm10Ojp3aW5kb3dzX2Vycm9yKEdldExhc3RFcnJv cigpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgb3BlbiBmaWxlICd7 fSciLCBmaWxlbmFtZSk7CistICAgfQorLSBcZW5kcnN0CistKi8KKy10ZW1wbGF0ZSA8dHlwZW5h bWUuLi4gQXJncz4KKy1zdGQ6OnN5c3RlbV9lcnJvciB3aW5kb3dzX2Vycm9yKGludCBlcnJvcl9j b2RlLCBzdHJpbmdfdmlldyBtZXNzYWdlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQXJncyYuLi4gYXJncykgeworLSAgcmV0dXJuIHZ3aW5kb3dzX2Vycm9yKGVycm9y X2NvZGUsIG1lc3NhZ2UsIGZtdDo6bWFrZV9mb3JtYXRfYXJncyhhcmdzLi4uKSk7CistfQorLQor LS8vIFJlcG9ydHMgYSBXaW5kb3dzIGVycm9yIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9u LgorLS8vIENhbiBiZSB1c2VkIHRvIHJlcG9ydCBlcnJvcnMgZnJvbSBkZXN0cnVjdG9ycy4KKy1G TVRfQVBJIHZvaWQgcmVwb3J0X3dpbmRvd3NfZXJyb3IoaW50IGVycm9yX2NvZGUsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UpIEZNVF9OT0VY Q0VQVDsKKy0jZWxzZQorLWlubGluZSBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBzeXN0ZW1f Y2F0ZWdvcnkoKSBGTVRfTk9FWENFUFQgeworLSAgcmV0dXJuIHN0ZDo6c3lzdGVtX2NhdGVnb3J5 KCk7CistfQorLSNlbmRpZiAgLy8gX1dJTjMyCistCistLy8gc3RkOjpzeXN0ZW0gaXMgbm90IGF2 YWlsYWJsZSBvbiBzb21lIHBsYXRmb3JtcyBzdWNoIGFzIGlPUyAoIzIyNDgpLgorLSNpZmRlZiBf X09TWF9fCistdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lLi4uIEFyZ3MsIHR5cGVuYW1l IENoYXIgPSBjaGFyX3Q8Uz4+Cistdm9pZCBzYXkoY29uc3QgUyYgZm9ybWF0X3N0ciwgQXJncyYm Li4uIGFyZ3MpIHsKKy0gIHN0ZDo6c3lzdGVtKGZvcm1hdCgic2F5IFwie31cIiIsIGZvcm1hdChm b3JtYXRfc3RyLCBhcmdzLi4uKSkuY19zdHIoKSk7CistfQorLSNlbmRpZgorLQorLS8vIEEgYnVm ZmVyZWQgZmlsZS4KKy1jbGFzcyBidWZmZXJlZF9maWxlIHsKKy0gcHJpdmF0ZToKKy0gIEZJTEUq IGZpbGVfOworLQorLSAgZnJpZW5kIGNsYXNzIGZpbGU7CistCistICBleHBsaWNpdCBidWZmZXJl ZF9maWxlKEZJTEUqIGYpIDogZmlsZV8oZikge30KKy0KKy0gcHVibGljOgorLSAgYnVmZmVyZWRf ZmlsZShjb25zdCBidWZmZXJlZF9maWxlJikgPSBkZWxldGU7CistICB2b2lkIG9wZXJhdG9yPShj b25zdCBidWZmZXJlZF9maWxlJikgPSBkZWxldGU7CistCistICAvLyBDb25zdHJ1Y3RzIGEgYnVm ZmVyZWRfZmlsZSBvYmplY3Qgd2hpY2ggZG9lc24ndCByZXByZXNlbnQgYW55IGZpbGUuCistICBi dWZmZXJlZF9maWxlKCkgRk1UX05PRVhDRVBUIDogZmlsZV8obnVsbHB0cikge30KKy0KKy0gIC8v IERlc3Ryb3lzIHRoZSBvYmplY3QgY2xvc2luZyB0aGUgZmlsZSBpdCByZXByZXNlbnRzIGlmIGFu eS4KKy0gIEZNVF9BUEkgfmJ1ZmZlcmVkX2ZpbGUoKSBGTVRfTk9FWENFUFQ7CistCistIHB1Ymxp YzoKKy0gIGJ1ZmZlcmVkX2ZpbGUoYnVmZmVyZWRfZmlsZSYmIG90aGVyKSBGTVRfTk9FWENFUFQg OiBmaWxlXyhvdGhlci5maWxlXykgeworLSAgICBvdGhlci5maWxlXyA9IG51bGxwdHI7CistICB9 CistCistICBidWZmZXJlZF9maWxlJiBvcGVyYXRvcj0oYnVmZmVyZWRfZmlsZSYmIG90aGVyKSB7 CistICAgIGNsb3NlKCk7CistICAgIGZpbGVfID0gb3RoZXIuZmlsZV87CistICAgIG90aGVyLmZp bGVfID0gbnVsbHB0cjsKKy0gICAgcmV0dXJuICp0aGlzOworLSAgfQorLQorLSAgLy8gT3BlbnMg YSBmaWxlLgorLSAgRk1UX0FQSSBidWZmZXJlZF9maWxlKGNzdHJpbmdfdmlldyBmaWxlbmFtZSwg Y3N0cmluZ192aWV3IG1vZGUpOworLQorLSAgLy8gQ2xvc2VzIHRoZSBmaWxlLgorLSAgRk1UX0FQ SSB2b2lkIGNsb3NlKCk7CistCistICAvLyBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIGEgRklMRSBv YmplY3QgcmVwcmVzZW50aW5nIHRoaXMgZmlsZS4KKy0gIEZJTEUqIGdldCgpIGNvbnN0IEZNVF9O T0VYQ0VQVCB7IHJldHVybiBmaWxlXzsgfQorLQorLSAgLy8gV2UgcGxhY2UgcGFyZW50aGVzZXMg YXJvdW5kIGZpbGVubyB0byB3b3JrYXJvdW5kIGEgYnVnIGluIHNvbWUgdmVyc2lvbnMKKy0gIC8v IG9mIE1pbkdXIHRoYXQgZGVmaW5lIGZpbGVubyBhcyBhIG1hY3JvLgorLSAgRk1UX0FQSSBpbnQo ZmlsZW5vKSgpIGNvbnN0OworLQorLSAgdm9pZCB2cHJpbnQoc3RyaW5nX3ZpZXcgZm9ybWF0X3N0 ciwgZm9ybWF0X2FyZ3MgYXJncykgeworLSAgICBmbXQ6OnZwcmludChmaWxlXywgZm9ybWF0X3N0 ciwgYXJncyk7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKy0gIGlu bGluZSB2b2lkIHByaW50KHN0cmluZ192aWV3IGZvcm1hdF9zdHIsIGNvbnN0IEFyZ3MmLi4uIGFy Z3MpIHsKKy0gICAgdnByaW50KGZvcm1hdF9zdHIsIGZtdDo6bWFrZV9mb3JtYXRfYXJncyhhcmdz Li4uKSk7CistICB9CistfTsKKy0KKy0jaWYgRk1UX1VTRV9GQ05UTAorLS8vIEEgZmlsZS4gQ2xv c2VkIGZpbGUgaXMgcmVwcmVzZW50ZWQgYnkgYSBmaWxlIG9iamVjdCB3aXRoIGRlc2NyaXB0b3Ig LTEuCistLy8gTWV0aG9kcyB0aGF0IGFyZSBub3QgZGVjbGFyZWQgd2l0aCBGTVRfTk9FWENFUFQg bWF5IHRocm93CistLy8gZm10OjpzeXN0ZW1fZXJyb3IgaW4gY2FzZSBvZiBmYWlsdXJlLiBOb3Rl IHRoYXQgc29tZSBlcnJvcnMgc3VjaCBhcworLS8vIGNsb3NpbmcgdGhlIGZpbGUgbXVsdGlwbGUg dGltZXMgd2lsbCBjYXVzZSBhIGNyYXNoIG9uIFdpbmRvd3MgcmF0aGVyCistLy8gdGhhbiBhbiBl eGNlcHRpb24uIFlvdSBjYW4gZ2V0IHN0YW5kYXJkIGJlaGF2aW9yIGJ5IG92ZXJyaWRpbmcgdGhl CistLy8gaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciB3aXRoIF9zZXRfaW52YWxpZF9wYXJhbWV0 ZXJfaGFuZGxlci4KKy1jbGFzcyBmaWxlIHsKKy0gcHJpdmF0ZToKKy0gIGludCBmZF87ICAvLyBG aWxlIGRlc2NyaXB0b3IuCistCistICAvLyBDb25zdHJ1Y3RzIGEgZmlsZSBvYmplY3Qgd2l0aCBh IGdpdmVuIGRlc2NyaXB0b3IuCistICBleHBsaWNpdCBmaWxlKGludCBmZCkgOiBmZF8oZmQpIHt9 CistCistIHB1YmxpYzoKKy0gIC8vIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIG9mbGFnIGFyZ3Vt ZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci4KKy0gIGVudW0geworLSAgICBSRE9OTFkgPSBGTVRfUE9T SVgoT19SRE9OTFkpLCAgLy8gT3BlbiBmb3IgcmVhZGluZyBvbmx5LgorLSAgICBXUk9OTFkgPSBG TVRfUE9TSVgoT19XUk9OTFkpLCAgLy8gT3BlbiBmb3Igd3JpdGluZyBvbmx5LgorLSAgICBSRFdS ID0gRk1UX1BPU0lYKE9fUkRXUiksICAgICAgLy8gT3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGlu Zy4KKy0gICAgQ1JFQVRFID0gRk1UX1BPU0lYKE9fQ1JFQVQpLCAgIC8vIENyZWF0ZSBpZiB0aGUg ZmlsZSBkb2Vzbid0IGV4aXN0LgorLSAgICBBUFBFTkQgPSBGTVRfUE9TSVgoT19BUFBFTkQpLCAg Ly8gT3BlbiBpbiBhcHBlbmQgbW9kZS4KKy0gICAgVFJVTkMgPSBGTVRfUE9TSVgoT19UUlVOQykg ICAgIC8vIFRydW5jYXRlIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLgorLSAgfTsKKy0KKy0gIC8v IENvbnN0cnVjdHMgYSBmaWxlIG9iamVjdCB3aGljaCBkb2Vzbid0IHJlcHJlc2VudCBhbnkgZmls ZS4KKy0gIGZpbGUoKSBGTVRfTk9FWENFUFQgOiBmZF8oLTEpIHt9CistCistICAvLyBPcGVucyBh IGZpbGUgYW5kIGNvbnN0cnVjdHMgYSBmaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBmaWxl LgorLSAgRk1UX0FQSSBmaWxlKGNzdHJpbmdfdmlldyBwYXRoLCBpbnQgb2ZsYWcpOworLQorLSBw dWJsaWM6CistICBmaWxlKGNvbnN0IGZpbGUmKSA9IGRlbGV0ZTsKKy0gIHZvaWQgb3BlcmF0b3I9 KGNvbnN0IGZpbGUmKSA9IGRlbGV0ZTsKKy0KKy0gIGZpbGUoZmlsZSYmIG90aGVyKSBGTVRfTk9F WENFUFQgOiBmZF8ob3RoZXIuZmRfKSB7IG90aGVyLmZkXyA9IC0xOyB9CistCistICAvLyBNb3Zl IGFzc2lnbm1lbnQgaXMgbm90IG5vZXhjZXB0IGJlY2F1c2UgY2xvc2UgbWF5IHRocm93LgorLSAg ZmlsZSYgb3BlcmF0b3I9KGZpbGUmJiBvdGhlcikgeworLSAgICBjbG9zZSgpOworLSAgICBmZF8g PSBvdGhlci5mZF87CistICAgIG90aGVyLmZkXyA9IC0xOworLSAgICByZXR1cm4gKnRoaXM7Cist ICB9CistCistICAvLyBEZXN0cm95cyB0aGUgb2JqZWN0IGNsb3NpbmcgdGhlIGZpbGUgaXQgcmVw cmVzZW50cyBpZiBhbnkuCistICBGTVRfQVBJIH5maWxlKCkgRk1UX05PRVhDRVBUOworLQorLSAg Ly8gUmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yLgorLSAgaW50IGRlc2NyaXB0b3IoKSBjb25z dCBGTVRfTk9FWENFUFQgeyByZXR1cm4gZmRfOyB9CistCistICAvLyBDbG9zZXMgdGhlIGZpbGUu CistICBGTVRfQVBJIHZvaWQgY2xvc2UoKTsKKy0KKy0gIC8vIFJldHVybnMgdGhlIGZpbGUgc2l6 ZS4gVGhlIHNpemUgaGFzIHNpZ25lZCB0eXBlIGZvciBjb25zaXN0ZW5jeSB3aXRoCistICAvLyBz dGF0OjpzdF9zaXplLgorLSAgRk1UX0FQSSBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworLQorLSAg Ly8gQXR0ZW1wdHMgdG8gcmVhZCBjb3VudCBieXRlcyBmcm9tIHRoZSBmaWxlIGludG8gdGhlIHNw ZWNpZmllZCBidWZmZXIuCistICBGTVRfQVBJIHNpemVfdCByZWFkKHZvaWQqIGJ1ZmZlciwgc2l6 ZV90IGNvdW50KTsKKy0KKy0gIC8vIEF0dGVtcHRzIHRvIHdyaXRlIGNvdW50IGJ5dGVzIGZyb20g dGhlIHNwZWNpZmllZCBidWZmZXIgdG8gdGhlIGZpbGUuCistICBGTVRfQVBJIHNpemVfdCB3cml0 ZShjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCk7CistCistICAvLyBEdXBsaWNhdGVz IGEgZmlsZSBkZXNjcmlwdG9yIHdpdGggdGhlIGR1cCBmdW5jdGlvbiBhbmQgcmV0dXJucworLSAg Ly8gdGhlIGR1cGxpY2F0ZSBhcyBhIGZpbGUgb2JqZWN0LgorLSAgRk1UX0FQSSBzdGF0aWMgZmls ZSBkdXAoaW50IGZkKTsKKy0KKy0gIC8vIE1ha2VzIGZkIGJlIHRoZSBjb3B5IG9mIHRoaXMgZmls ZSBkZXNjcmlwdG9yLCBjbG9zaW5nIGZkIGZpcnN0IGlmCistICAvLyBuZWNlc3NhcnkuCistICBG TVRfQVBJIHZvaWQgZHVwMihpbnQgZmQpOworLQorLSAgLy8gTWFrZXMgZmQgYmUgdGhlIGNvcHkg b2YgdGhpcyBmaWxlIGRlc2NyaXB0b3IsIGNsb3NpbmcgZmQgZmlyc3QgaWYKKy0gIC8vIG5lY2Vz c2FyeS4KKy0gIEZNVF9BUEkgdm9pZCBkdXAyKGludCBmZCwgc3RkOjplcnJvcl9jb2RlJiBlYykg Rk1UX05PRVhDRVBUOworLQorLSAgLy8gQ3JlYXRlcyBhIHBpcGUgc2V0dGluZyB1cCByZWFkX2Vu ZCBhbmQgd3JpdGVfZW5kIGZpbGUgb2JqZWN0cyBmb3IgcmVhZGluZworLSAgLy8gYW5kIHdyaXRp bmcgcmVzcGVjdGl2ZWx5LgorLSAgRk1UX0FQSSBzdGF0aWMgdm9pZCBwaXBlKGZpbGUmIHJlYWRf ZW5kLCBmaWxlJiB3cml0ZV9lbmQpOworLQorLSAgLy8gQ3JlYXRlcyBhIGJ1ZmZlcmVkX2ZpbGUg b2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbGUgYW5kIGRldGFjaGVzCistICAvLyB0aGlz IGZpbGUgb2JqZWN0IGZyb20gdGhlIGZpbGUuCistICBGTVRfQVBJIGJ1ZmZlcmVkX2ZpbGUgZmRv cGVuKGNvbnN0IGNoYXIqIG1vZGUpOworLX07CistCistLy8gUmV0dXJucyB0aGUgbWVtb3J5IHBh Z2Ugc2l6ZS4KKy1sb25nIGdldHBhZ2VzaXplKCk7CistCistRk1UX0JFR0lOX0RFVEFJTF9OQU1F U1BBQ0UKKy0KKy1zdHJ1Y3QgYnVmZmVyX3NpemUgeworLSAgYnVmZmVyX3NpemUoKSA9IGRlZmF1 bHQ7CistICBzaXplX3QgdmFsdWUgPSAwOworLSAgYnVmZmVyX3NpemUgb3BlcmF0b3I9KHNpemVf dCB2YWwpIGNvbnN0IHsKKy0gICAgYXV0byBicyA9IGJ1ZmZlcl9zaXplKCk7CistICAgIGJzLnZh bHVlID0gdmFsOworLSAgICByZXR1cm4gYnM7CistICB9CistfTsKKy0KKy1zdHJ1Y3Qgb3N0cmVh bV9wYXJhbXMgeworLSAgaW50IG9mbGFnID0gZmlsZTo6V1JPTkxZIHwgZmlsZTo6Q1JFQVRFIHwg ZmlsZTo6VFJVTkM7CistICBzaXplX3QgYnVmZmVyX3NpemUgPSBCVUZTSVogPiAzMjc2OCA/IEJV RlNJWiA6IDMyNzY4OworLQorLSAgb3N0cmVhbV9wYXJhbXMoKSB7fQorLQorLSAgdGVtcGxhdGUg PHR5cGVuYW1lLi4uIFQ+CistICBvc3RyZWFtX3BhcmFtcyhULi4uIHBhcmFtcywgaW50IG5ld19v ZmxhZykgOiBvc3RyZWFtX3BhcmFtcyhwYXJhbXMuLi4pIHsKKy0gICAgb2ZsYWcgPSBuZXdfb2Zs YWc7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVD4KKy0gIG9zdHJlYW1fcGFy YW1zKFQuLi4gcGFyYW1zLCBkZXRhaWw6OmJ1ZmZlcl9zaXplIGJzKQorLSAgICAgIDogb3N0cmVh bV9wYXJhbXMocGFyYW1zLi4uKSB7CistICAgIHRoaXMtPmJ1ZmZlcl9zaXplID0gYnMudmFsdWU7 CistICB9CistCistLy8gSW50ZWwgaGFzIGEgYnVnIHRoYXQgcmVzdWx0cyBpbiBmYWlsdXJlIHRv IGRlZHVjZSBhIGNvbnN0cnVjdG9yCistLy8gZm9yIGVtcHR5IHBhcmFtZXRlciBwYWNrcy4KKy0j ICBpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIF9fSU5URUxfQ09NUElMRVIgPCAyMDAw CistICBvc3RyZWFtX3BhcmFtcyhpbnQgbmV3X29mbGFnKSA6IG9mbGFnKG5ld19vZmxhZykge30K Ky0gIG9zdHJlYW1fcGFyYW1zKGRldGFpbDo6YnVmZmVyX3NpemUgYnMpIDogYnVmZmVyX3NpemUo YnMudmFsdWUpIHt9CistIyAgZW5kaWYKKy19OworLQorLUZNVF9FTkRfREVUQUlMX05BTUVTUEFD RQorLQorLS8vIEFkZGVkIHt9IGJlbG93IHRvIHdvcmsgYXJvdW5kIGRlZmF1bHQgY29uc3RydWN0 b3IgZXJyb3Iga25vd24gdG8KKy0vLyBvY2N1ciBpbiBYY29kZSB2ZXJzaW9ucyA3LjIuMSBhbmQg OC4yLjEuCistY29uc3RleHByIGRldGFpbDo6YnVmZmVyX3NpemUgYnVmZmVyX3NpemV7fTsKKy0K Ky0vKiogQSBmYXN0IG91dHB1dCBzdHJlYW0gd2hpY2ggaXMgbm90IHRocmVhZC1zYWZlLiAqLwor LWNsYXNzIEZNVF9BUEkgb3N0cmVhbSBmaW5hbCA6IHByaXZhdGUgZGV0YWlsOjpidWZmZXI8Y2hh cj4geworLSBwcml2YXRlOgorLSAgZmlsZSBmaWxlXzsKKy0KKy0gIHZvaWQgZ3JvdyhzaXplX3Qp IG92ZXJyaWRlOworLQorLSAgb3N0cmVhbShjc3RyaW5nX3ZpZXcgcGF0aCwgY29uc3QgZGV0YWls Ojpvc3RyZWFtX3BhcmFtcyYgcGFyYW1zKQorLSAgICAgIDogZmlsZV8ocGF0aCwgcGFyYW1zLm9m bGFnKSB7CistICAgIHNldChuZXcgY2hhcltwYXJhbXMuYnVmZmVyX3NpemVdLCBwYXJhbXMuYnVm ZmVyX3NpemUpOworLSAgfQorLQorLSBwdWJsaWM6CistICBvc3RyZWFtKG9zdHJlYW0mJiBvdGhl cikKKy0gICAgICA6IGRldGFpbDo6YnVmZmVyPGNoYXI+KG90aGVyLmRhdGEoKSwgb3RoZXIuc2l6 ZSgpLCBvdGhlci5jYXBhY2l0eSgpKSwKKy0gICAgICAgIGZpbGVfKHN0ZDo6bW92ZShvdGhlci5m aWxlXykpIHsKKy0gICAgb3RoZXIuY2xlYXIoKTsKKy0gICAgb3RoZXIuc2V0KG51bGxwdHIsIDAp OworLSAgfQorLSAgfm9zdHJlYW0oKSB7CistICAgIGZsdXNoKCk7CistICAgIGRlbGV0ZVtdIGRh dGEoKTsKKy0gIH0KKy0KKy0gIHZvaWQgZmx1c2goKSB7CistICAgIGlmIChzaXplKCkgPT0gMCkg cmV0dXJuOworLSAgICBmaWxlXy53cml0ZShkYXRhKCksIHNpemUoKSk7CistICAgIGNsZWFyKCk7 CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVD4KKy0gIGZyaWVuZCBvc3RyZWFt IG91dHB1dF9maWxlKGNzdHJpbmdfdmlldyBwYXRoLCBULi4uIHBhcmFtcyk7CistCistICB2b2lk IGNsb3NlKCkgeworLSAgICBmbHVzaCgpOworLSAgICBmaWxlXy5jbG9zZSgpOworLSAgfQorLQor LSAgLyoqCistICAgIEZvcm1hdHMgYGBhcmdzYGAgYWNjb3JkaW5nIHRvIHNwZWNpZmljYXRpb25z IGluIGBgZm10YGAgYW5kIHdyaXRlcyB0aGUKKy0gICAgb3V0cHV0IHRvIHRoZSBmaWxlLgorLSAg ICovCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVD4gdm9pZCBwcmludChmb3JtYXRfc3RyaW5n PFQuLi4+IGZtdCwgVCYmLi4uIGFyZ3MpIHsKKy0gICAgdmZvcm1hdF90byhkZXRhaWw6OmJ1ZmZl cl9hcHBlbmRlcjxjaGFyPigqdGhpcyksIGZtdCwKKy0gICAgICAgICAgICAgICBmbXQ6Om1ha2Vf Zm9ybWF0X2FyZ3MoYXJncy4uLikpOworLSAgfQorLX07CistCistLyoqCistICBccnN0CistICBP cGVucyBhIGZpbGUgZm9yIHdyaXRpbmcuIFN1cHBvcnRlZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbiAq cGFyYW1zKjoKKy0KKy0gICogYGA8aW50ZWdlcj5gYDogRmxhZ3MgcGFzc2VkIHRvIGBvcGVuCist ICAgIDxodHRwczovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwNzkwNDg3NS9mdW5j dGlvbnMvb3Blbi5odG1sPmBfCistICAgIChgYGZpbGU6OldST05MWSB8IGZpbGU6OkNSRUFURWBg IGJ5IGRlZmF1bHQpCistICAqIGBgYnVmZmVyX3NpemU9PGludGVnZXI+YGA6IE91dHB1dCBidWZm ZXIgc2l6ZQorLQorLSAgKipFeGFtcGxlKio6OgorLQorLSAgICBhdXRvIG91dCA9IGZtdDo6b3V0 cHV0X2ZpbGUoImd1aWRlLnR4dCIpOworLSAgICBvdXQucHJpbnQoIkRvbid0IHt9IiwgIlBhbmlj Iik7CistICBcZW5kcnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFQ+CistaW5saW5l IG9zdHJlYW0gb3V0cHV0X2ZpbGUoY3N0cmluZ192aWV3IHBhdGgsIFQuLi4gcGFyYW1zKSB7Cist ICByZXR1cm4ge3BhdGgsIGRldGFpbDo6b3N0cmVhbV9wYXJhbXMocGFyYW1zLi4uKX07CistfQor LSNlbmRpZiAgLy8gRk1UX1VTRV9GQ05UTAorLQorLSNpZmRlZiBGTVRfTE9DQUxFCistLy8gQSAi QyIgbnVtZXJpYyBsb2NhbGUuCistY2xhc3MgbG9jYWxlIHsKKy0gcHJpdmF0ZToKKy0jICBpZmRl ZiBfV0lOMzIKKy0gIHVzaW5nIGxvY2FsZV90ID0gX2xvY2FsZV90OworLQorLSAgc3RhdGljIHZv aWQgZnJlZWxvY2FsZShsb2NhbGVfdCBsb2MpIHsgX2ZyZWVfbG9jYWxlKGxvYyk7IH0KKy0KKy0g IHN0YXRpYyBkb3VibGUgc3RydG9kX2woY29uc3QgY2hhciogbnB0ciwgY2hhcioqIGVuZHB0ciwg X2xvY2FsZV90IGxvYykgeworLSAgICByZXR1cm4gX3N0cnRvZF9sKG5wdHIsIGVuZHB0ciwgbG9j KTsKKy0gIH0KKy0jICBlbmRpZgorLQorLSAgbG9jYWxlX3QgbG9jYWxlXzsKKy0KKy0gcHVibGlj OgorLSAgdXNpbmcgdHlwZSA9IGxvY2FsZV90OworLSAgbG9jYWxlKGNvbnN0IGxvY2FsZSYpID0g ZGVsZXRlOworLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJikgPSBkZWxldGU7CistCist ICBsb2NhbGUoKSB7CistIyAgaWZuZGVmIF9XSU4zMgorLSAgICBsb2NhbGVfID0gRk1UX1NZU1RF TShuZXdsb2NhbGUoTENfTlVNRVJJQ19NQVNLLCAiQyIsIG51bGxwdHIpKTsKKy0jICBlbHNlCist ICAgIGxvY2FsZV8gPSBfY3JlYXRlX2xvY2FsZShMQ19OVU1FUklDLCAiQyIpOworLSMgIGVuZGlm CistICAgIGlmICghbG9jYWxlXykgRk1UX1RIUk9XKHN5c3RlbV9lcnJvcihlcnJubywgImNhbm5v dCBjcmVhdGUgbG9jYWxlIikpOworLSAgfQorLSAgfmxvY2FsZSgpIHsgZnJlZWxvY2FsZShsb2Nh bGVfKTsgfQorLQorLSAgdHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBsb2NhbGVfOyB9CistCist ICAvLyBDb252ZXJ0cyBzdHJpbmcgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyIGFuZCBhZHZhbmNl cyBzdHIgcGFzdCB0aGUgZW5kCistICAvLyBvZiB0aGUgcGFyc2VkIGlucHV0LgorLSAgRk1UX0RF UFJFQ0FURUQgZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiYgc3RyKSBjb25zdCB7CistICAgIGNo YXIqIGVuZCA9IG51bGxwdHI7CistICAgIGRvdWJsZSByZXN1bHQgPSBzdHJ0b2RfbChzdHIsICZl bmQsIGxvY2FsZV8pOworLSAgICBzdHIgPSBlbmQ7CistICAgIHJldHVybiByZXN1bHQ7CistICB9 CistfTsKKy11c2luZyBMb2NhbGUgRk1UX0RFUFJFQ0FURURfQUxJQVMgPSBsb2NhbGU7CistI2Vu ZGlmICAvLyBGTVRfTE9DQUxFCistRk1UX01PRFVMRV9FWFBPUlRfRU5ECistRk1UX0VORF9OQU1F U1BBQ0UKKy0KKy0jZW5kaWYgIC8vIEZNVF9PU19IXworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBw L2ZtdC9vc3RyZWFtLmggYi9pbmNsdWRlL2RwcC9mbXQvb3N0cmVhbS5oCitkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDNkNzE2ZWMuLjAwMDAwMDAKKy0tLSBhL2luY2x1ZGUvZHBwL2Zt dC9vc3RyZWFtLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDEzNSArMCwwIEBACistLy8gRm9ybWF0 dGluZyBsaWJyYXJ5IGZvciBDKysgLSBzdGQ6Om9zdHJlYW0gc3VwcG9ydAorLS8vCistLy8gQ29w eXJpZ2h0IChjKSAyMDEyIC0gcHJlc2VudCwgVmljdG9yIFp2ZXJvdmljaAorLS8vIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCistLy8KKy0vLyBGb3IgdGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gcmVmZXIg dG8gZm9ybWF0LmguCistCistI2lmbmRlZiBGTVRfT1NUUkVBTV9IXworLSNkZWZpbmUgRk1UX09T VFJFQU1fSF8KKy0KKy0jaW5jbHVkZSA8b3N0cmVhbT4KKy0KKy0jaW5jbHVkZSAiZm9ybWF0Lmgi CistCistRk1UX0JFR0lOX05BTUVTUEFDRQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJ dCwgdHlwZW5hbWUgQ2hhcj4gY2xhc3MgYmFzaWNfcHJpbnRmX2NvbnRleHQ7CistCistbmFtZXNw YWNlIGRldGFpbCB7CistCistLy8gQ2hlY2tzIGlmIFQgaGFzIGEgdXNlci1kZWZpbmVkIG9wZXJh dG9yPDwuCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIEVu YWJsZSA9IHZvaWQ+CistY2xhc3MgaXNfc3RyZWFtYWJsZSB7CistIHByaXZhdGU6CistICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVT4KKy0gIHN0YXRpYyBhdXRvIHRlc3QoaW50KQorLSAgICAgIC0+IGJv b2xfY29uc3RhbnQ8c2l6ZW9mKHN0ZDo6ZGVjbHZhbDxzdGQ6OmJhc2ljX29zdHJlYW08Q2hhcj4m PigpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpkZWNsdmFsPFU+KCkp ICE9IDA+OworLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lPiBzdGF0aWMgYXV0byB0ZXN0KC4uLikg LT4gc3RkOjpmYWxzZV90eXBlOworLQorLSAgdXNpbmcgcmVzdWx0ID0gZGVjbHR5cGUodGVzdDxU PigwKSk7CistCistIHB1YmxpYzoKKy0gIGlzX3N0cmVhbWFibGUoKSA9IGRlZmF1bHQ7CistCist ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHJlc3VsdDo6dmFsdWU7CistfTsKKy0KKy0vLyBG b3JtYXR0aW5nIG9mIGJ1aWx0LWluIHR5cGVzIGFuZCBhcnJheXMgaXMgaW50ZW50aW9uYWxseSBk aXNhYmxlZCBiZWNhdXNlCistLy8gaXQncyBoYW5kbGVkIGJ5IHN0YW5kYXJkIChub24tb3N0cmVh bSkgZm9ybWF0dGVycy4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ2hhcj4KKy1z dHJ1Y3QgaXNfc3RyZWFtYWJsZTwKKy0gICAgVCwgQ2hhciwKKy0gICAgZW5hYmxlX2lmX3Q8Cist ICAgICAgICBzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlIHx8IHN0ZDo6aXNfYXJyYXk8VD46 OnZhbHVlIHx8CistICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlIHx8IHN0ZDo6aXNf c2FtZTxULCBjaGFyOF90eXBlPjo6dmFsdWUgfHwKKy0gICAgICAgIHN0ZDo6aXNfc2FtZTxULCBz dGQ6OmJhc2ljX3N0cmluZzxDaGFyPj46OnZhbHVlIHx8CistICAgICAgICBzdGQ6OmlzX3NhbWU8 VCwgc3RkX3N0cmluZ192aWV3PENoYXI+Pjo6dmFsdWUgfHwKKy0gICAgICAgIChzdGQ6OmlzX2Nv bnZlcnRpYmxlPFQsIGludD46OnZhbHVlICYmICFzdGQ6OmlzX2VudW08VD46OnZhbHVlKT4+Cist ICAgIDogc3RkOjpmYWxzZV90eXBlIHt9OworLQorLS8vIFdyaXRlIHRoZSBjb250ZW50IG9mIGJ1 ZiB0byBvcy4KKy0vLyBJdCBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgcGFy dCBvZiB2cHJpbnQgdG8gc2ltcGxpZnkgdGVzdGluZy4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh cj4KKy12b2lkIHdyaXRlX2J1ZmZlcihzdGQ6OmJhc2ljX29zdHJlYW08Q2hhcj4mIG9zLCBidWZm ZXI8Q2hhcj4mIGJ1ZikgeworLSAgY29uc3QgQ2hhciogYnVmX2RhdGEgPSBidWYuZGF0YSgpOwor LSAgdXNpbmcgdW5zaWduZWRfc3RyZWFtc2l6ZSA9IHN0ZDo6bWFrZV91bnNpZ25lZDxzdGQ6OnN0 cmVhbXNpemU+Ojp0eXBlOworLSAgdW5zaWduZWRfc3RyZWFtc2l6ZSBzaXplID0gYnVmLnNpemUo KTsKKy0gIHVuc2lnbmVkX3N0cmVhbXNpemUgbWF4X3NpemUgPSB0b191bnNpZ25lZChtYXhfdmFs dWU8c3RkOjpzdHJlYW1zaXplPigpKTsKKy0gIGRvIHsKKy0gICAgdW5zaWduZWRfc3RyZWFtc2l6 ZSBuID0gc2l6ZSA8PSBtYXhfc2l6ZSA/IHNpemUgOiBtYXhfc2l6ZTsKKy0gICAgb3Mud3JpdGUo YnVmX2RhdGEsIHN0YXRpY19jYXN0PHN0ZDo6c3RyZWFtc2l6ZT4obikpOworLSAgICBidWZfZGF0 YSArPSBuOworLSAgICBzaXplIC09IG47CistICB9IHdoaWxlIChzaXplICE9IDApOworLX0KKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVD4KKy12b2lkIGZvcm1hdF92YWx1 ZShidWZmZXI8Q2hhcj4mIGJ1ZiwgY29uc3QgVCYgdmFsdWUsCistICAgICAgICAgICAgICAgICAg bG9jYWxlX3JlZiBsb2MgPSBsb2NhbGVfcmVmKCkpIHsKKy0gIGF1dG8mJiBmb3JtYXRfYnVmID0g Zm9ybWF0YnVmPHN0ZDo6YmFzaWNfc3RyZWFtYnVmPENoYXI+PihidWYpOworLSAgYXV0byYmIG91 dHB1dCA9IHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyPigmZm9ybWF0X2J1Zik7CistI2lmICFkZWZp bmVkKEZNVF9TVEFUSUNfVEhPVVNBTkRTX1NFUEFSQVRPUikKKy0gIGlmIChsb2MpIG91dHB1dC5p bWJ1ZShsb2MuZ2V0PHN0ZDo6bG9jYWxlPigpKTsKKy0jZW5kaWYKKy0gIG91dHB1dCA8PCB2YWx1 ZTsKKy0gIG91dHB1dC5leGNlcHRpb25zKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQgfCBzdGQ6Omlv c19iYXNlOjpiYWRiaXQpOworLSAgYnVmLnRyeV9yZXNpemUoYnVmLnNpemUoKSk7CistfQorLQor LS8vIEZvcm1hdHMgYW4gb2JqZWN0IG9mIHR5cGUgVCB0aGF0IGhhcyBhbiBvdmVybG9hZGVkIG9z dHJlYW0gb3BlcmF0b3I8PC4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ2hhcj4K Ky1zdHJ1Y3QgZmFsbGJhY2tfZm9ybWF0dGVyPFQsIENoYXIsIGVuYWJsZV9pZl90PGlzX3N0cmVh bWFibGU8VCwgQ2hhcj46OnZhbHVlPj4KKy0gICAgOiBwcml2YXRlIGZvcm1hdHRlcjxiYXNpY19z dHJpbmdfdmlldzxDaGFyPiwgQ2hhcj4geworLSAgdXNpbmcgZm9ybWF0dGVyPGJhc2ljX3N0cmlu Z192aWV3PENoYXI+LCBDaGFyPjo6cGFyc2U7CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0 cHV0SXQ+CistICBhdXRvIGZvcm1hdChjb25zdCBUJiB2YWx1ZSwgYmFzaWNfZm9ybWF0X2NvbnRl eHQ8T3V0cHV0SXQsIENoYXI+JiBjdHgpCistICAgICAgLT4gT3V0cHV0SXQgeworLSAgICBhdXRv IGJ1ZmZlciA9IGJhc2ljX21lbW9yeV9idWZmZXI8Q2hhcj4oKTsKKy0gICAgZm9ybWF0X3ZhbHVl KGJ1ZmZlciwgdmFsdWUsIGN0eC5sb2NhbGUoKSk7CistICAgIHJldHVybiBmb3JtYXR0ZXI8YmFz aWNfc3RyaW5nX3ZpZXc8Q2hhcj4sIENoYXI+Ojpmb3JtYXQoCistICAgICAgICB7YnVmZmVyLmRh dGEoKSwgYnVmZmVyLnNpemUoKX0sIGN0eCk7CistICB9CistCistICAvLyBERVBSRUNBVEVEIQor LSAgdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0PgorLSAgYXV0byBmb3JtYXQoY29uc3QgVCYg dmFsdWUsIGJhc2ljX3ByaW50Zl9jb250ZXh0PE91dHB1dEl0LCBDaGFyPiYgY3R4KQorLSAgICAg IC0+IE91dHB1dEl0IHsKKy0gICAgYXV0byBidWZmZXIgPSBiYXNpY19tZW1vcnlfYnVmZmVyPENo YXI+KCk7CistICAgIGZvcm1hdF92YWx1ZShidWZmZXIsIHZhbHVlLCBjdHgubG9jYWxlKCkpOwor LSAgICByZXR1cm4gc3RkOjpjb3B5KGJ1ZmZlci5iZWdpbigpLCBidWZmZXIuZW5kKCksIGN0eC5v dXQoKSk7CistICB9CistfTsKKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistCistRk1UX01PRFVM RV9FWFBPUlQKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy12b2lkIHZwcmludChzdGQ6OmJh c2ljX29zdHJlYW08Q2hhcj4mIG9zLCBiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBmb3JtYXRfc3Ry LAorLSAgICAgICAgICAgIGJhc2ljX2Zvcm1hdF9hcmdzPGJ1ZmZlcl9jb250ZXh0PHR5cGVfaWRl bnRpdHlfdDxDaGFyPj4+IGFyZ3MpIHsKKy0gIGF1dG8gYnVmZmVyID0gYmFzaWNfbWVtb3J5X2J1 ZmZlcjxDaGFyPigpOworLSAgZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1ZmZlciwgZm9ybWF0X3N0ciwg YXJncyk7CistICBkZXRhaWw6OndyaXRlX2J1ZmZlcihvcywgYnVmZmVyKTsKKy19CistCistLyoq CistICBccnN0CistICBQcmludHMgZm9ybWF0dGVkIGRhdGEgdG8gdGhlIHN0cmVhbSAqb3MqLgor LQorLSAgKipFeGFtcGxlKio6OgorLQorLSAgICBmbXQ6OnByaW50KGNlcnIsICJEb24ndCB7fSEi LCAicGFuaWMiKTsKKy0gIFxlbmRyc3QKKy0gKi8KKy1GTVRfTU9EVUxFX0VYUE9SVAorLXRlbXBs YXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZS4uLiBBcmdzLAorLSAgICAgICAgICB0eXBlbmFtZSBD aGFyID0gZW5hYmxlX2lmX3Q8ZGV0YWlsOjppc19zdHJpbmc8Uz46OnZhbHVlLCBjaGFyX3Q8Uz4+ PgorLXZvaWQgcHJpbnQoc3RkOjpiYXNpY19vc3RyZWFtPENoYXI+JiBvcywgY29uc3QgUyYgZm9y bWF0X3N0ciwgQXJncyYmLi4uIGFyZ3MpIHsKKy0gIHZwcmludChvcywgdG9fc3RyaW5nX3ZpZXco Zm9ybWF0X3N0ciksCistICAgICAgICAgZm10OjptYWtlX2FyZ3NfY2hlY2tlZDxBcmdzLi4uPihm b3JtYXRfc3RyLCBhcmdzLi4uKSk7CistfQorLUZNVF9FTkRfTkFNRVNQQUNFCistCistI2VuZGlm ICAvLyBGTVRfT1NUUkVBTV9IXworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL2ZtdC9wcmludGYu aCBiL2luY2x1ZGUvZHBwL2ZtdC9wcmludGYuaAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAxOWQ1NTBmLi4wMDAwMDAwCistLS0gYS9pbmNsdWRlL2RwcC9mbXQvcHJpbnRmLmgKKysr KyAvZGV2L251bGwKK0BAIC0xLDY1NyArMCwwIEBACistLy8gRm9ybWF0dGluZyBsaWJyYXJ5IGZv ciBDKysgLSBsZWdhY3kgcHJpbnRmIGltcGxlbWVudGF0aW9uCistLy8KKy0vLyBDb3B5cmlnaHQg KGMpIDIwMTIgLSAyMDE2LCBWaWN0b3IgWnZlcm92aWNoCistLy8gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKy0vLworLS8vIEZvciB0aGUgbGljZW5zZSBpbmZvcm1hdGlvbiByZWZlciB0byBmb3JtYXQu aC4KKy0KKy0jaWZuZGVmIEZNVF9QUklOVEZfSF8KKy0jZGVmaW5lIEZNVF9QUklOVEZfSF8KKy0K Ky0jaW5jbHVkZSA8YWxnb3JpdGhtPiAgLy8gc3RkOjptYXgKKy0jaW5jbHVkZSA8bGltaXRzPiAg ICAgLy8gc3RkOjpudW1lcmljX2xpbWl0cworLSNpbmNsdWRlIDxvc3RyZWFtPgorLQorLSNpbmNs dWRlICJmb3JtYXQuaCIKKy0KKy1GTVRfQkVHSU5fTkFNRVNQQUNFCistRk1UX01PRFVMRV9FWFBP UlRfQkVHSU4KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHByaW50Zl9mb3JtYXR0 ZXIgeyBwcmludGZfZm9ybWF0dGVyKCkgPSBkZWxldGU7IH07CistCistdGVtcGxhdGUgPHR5cGVu YW1lIENoYXI+CistY2xhc3MgYmFzaWNfcHJpbnRmX3BhcnNlX2NvbnRleHQgOiBwdWJsaWMgYmFz aWNfZm9ybWF0X3BhcnNlX2NvbnRleHQ8Q2hhcj4geworLSAgdXNpbmcgYmFzaWNfZm9ybWF0X3Bh cnNlX2NvbnRleHQ8Q2hhcj46OmJhc2ljX2Zvcm1hdF9wYXJzZV9jb250ZXh0OworLX07CistCist dGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0LCB0eXBlbmFtZSBDaGFyPiBjbGFzcyBiYXNpY19w cmludGZfY29udGV4dCB7CistIHByaXZhdGU6CistICBPdXRwdXRJdCBvdXRfOworLSAgYmFzaWNf Zm9ybWF0X2FyZ3M8YmFzaWNfcHJpbnRmX2NvbnRleHQ+IGFyZ3NfOworLQorLSBwdWJsaWM6Cist ICB1c2luZyBjaGFyX3R5cGUgPSBDaGFyOworLSAgdXNpbmcgZm9ybWF0X2FyZyA9IGJhc2ljX2Zv cm1hdF9hcmc8YmFzaWNfcHJpbnRmX2NvbnRleHQ+OworLSAgdXNpbmcgcGFyc2VfY29udGV4dF90 eXBlID0gYmFzaWNfcHJpbnRmX3BhcnNlX2NvbnRleHQ8Q2hhcj47CistICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gdXNpbmcgZm9ybWF0dGVyX3R5cGUgPSBwcmludGZfZm9ybWF0dGVyPFQ+OworLQor LSAgLyoqCistICAgIFxyc3QKKy0gICAgQ29uc3RydWN0cyBhIGBgcHJpbnRmX2NvbnRleHRgYCBv YmplY3QuIFJlZmVyZW5jZXMgdG8gdGhlIGFyZ3VtZW50cyBhcmUKKy0gICAgc3RvcmVkIGluIHRo ZSBjb250ZXh0IG9iamVjdCBzbyBtYWtlIHN1cmUgdGhleSBoYXZlIGFwcHJvcHJpYXRlIGxpZmV0 aW1lcy4KKy0gICAgXGVuZHJzdAorLSAgICovCistICBiYXNpY19wcmludGZfY29udGV4dChPdXRw dXRJdCBvdXQsCistICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19mb3JtYXRfYXJnczxiYXNp Y19wcmludGZfY29udGV4dD4gYXJncykKKy0gICAgICA6IG91dF8ob3V0KSwgYXJnc18oYXJncykg e30KKy0KKy0gIE91dHB1dEl0IG91dCgpIHsgcmV0dXJuIG91dF87IH0KKy0gIHZvaWQgYWR2YW5j ZV90byhPdXRwdXRJdCBpdCkgeyBvdXRfID0gaXQ7IH0KKy0KKy0gIGRldGFpbDo6bG9jYWxlX3Jl ZiBsb2NhbGUoKSB7IHJldHVybiB7fTsgfQorLQorLSAgZm9ybWF0X2FyZyBhcmcoaW50IGlkKSBj b25zdCB7IHJldHVybiBhcmdzXy5nZXQoaWQpOyB9CistCistICBGTVRfQ09OU1RFWFBSIHZvaWQg b25fZXJyb3IoY29uc3QgY2hhciogbWVzc2FnZSkgeworLSAgICBkZXRhaWw6OmVycm9yX2hhbmRs ZXIoKS5vbl9lcnJvcihtZXNzYWdlKTsKKy0gIH0KKy19OworLQorLUZNVF9CRUdJTl9ERVRBSUxf TkFNRVNQQUNFCistCistLy8gQ2hlY2tzIGlmIGEgdmFsdWUgZml0cyBpbiBpbnQgLSB1c2VkIHRv IGF2b2lkIHdhcm5pbmdzIGFib3V0IGNvbXBhcmluZworLS8vIHNpZ25lZCBhbmQgdW5zaWduZWQg aW50ZWdlcnMuCistdGVtcGxhdGUgPGJvb2wgSXNTaWduZWQ+IHN0cnVjdCBpbnRfY2hlY2tlciB7 CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgZml0c19pbl9pbnQoVCB2YWx1 ZSkgeworLSAgICB1bnNpZ25lZCBtYXggPSBtYXhfdmFsdWU8aW50PigpOworLSAgICByZXR1cm4g dmFsdWUgPD0gbWF4OworLSAgfQorLSAgc3RhdGljIGJvb2wgZml0c19pbl9pbnQoYm9vbCkgeyBy ZXR1cm4gdHJ1ZTsgfQorLX07CistCistdGVtcGxhdGUgPD4gc3RydWN0IGludF9jaGVja2VyPHRy dWU+IHsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCBmaXRzX2luX2ludChU IHZhbHVlKSB7CistICAgIHJldHVybiB2YWx1ZSA+PSAoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+ OjptaW4pKCkgJiYKKy0gICAgICAgICAgIHZhbHVlIDw9IG1heF92YWx1ZTxpbnQ+KCk7CistICB9 CistICBzdGF0aWMgYm9vbCBmaXRzX2luX2ludChpbnQpIHsgcmV0dXJuIHRydWU7IH0KKy19Owor LQorLWNsYXNzIHByaW50Zl9wcmVjaXNpb25faGFuZGxlciB7CistIHB1YmxpYzoKKy0gIHRlbXBs YXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVl KT4KKy0gIGludCBvcGVyYXRvcigpKFQgdmFsdWUpIHsKKy0gICAgaWYgKCFpbnRfY2hlY2tlcjxz dGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zaWduZWQ+OjpmaXRzX2luX2ludCh2YWx1ZSkpCist ICAgICAgRk1UX1RIUk9XKGZvcm1hdF9lcnJvcigibnVtYmVyIGlzIHRvbyBiaWciKSk7CistICAg IHJldHVybiAoc3RkOjptYXgpKHN0YXRpY19jYXN0PGludD4odmFsdWUpLCAwKTsKKy0gIH0KKy0K Ky0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKCFzdGQ6OmlzX2ludGVncmFs PFQ+Ojp2YWx1ZSk+CistICBpbnQgb3BlcmF0b3IoKShUKSB7CistICAgIEZNVF9USFJPVyhmb3Jt YXRfZXJyb3IoInByZWNpc2lvbiBpcyBub3QgaW50ZWdlciIpKTsKKy0gICAgcmV0dXJuIDA7Cist ICB9CistfTsKKy0KKy0vLyBBbiBhcmd1bWVudCB2aXNpdG9yIHRoYXQgcmV0dXJucyB0cnVlIGlm ZiBhcmcgaXMgYSB6ZXJvIGludGVnZXIuCistY2xhc3MgaXNfemVyb19pbnQgeworLSBwdWJsaWM6 CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9JRihzdGQ6OmlzX2ludGVncmFs PFQ+Ojp2YWx1ZSk+CistICBib29sIG9wZXJhdG9yKCkoVCB2YWx1ZSkgeworLSAgICByZXR1cm4g dmFsdWUgPT0gMDsKKy0gIH0KKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBGTVRfRU5BQkxF X0lGKCFzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSk+CistICBib29sIG9wZXJhdG9yKCkoVCkg eworLSAgICByZXR1cm4gZmFsc2U7CistICB9CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gc3RydWN0IG1ha2VfdW5zaWduZWRfb3JfYm9vbCA6IHN0ZDo6bWFrZV91bnNpZ25lZDxUPiB7 fTsKKy0KKy10ZW1wbGF0ZSA8PiBzdHJ1Y3QgbWFrZV91bnNpZ25lZF9vcl9ib29sPGJvb2w+IHsg dXNpbmcgdHlwZSA9IGJvb2w7IH07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l IENvbnRleHQ+IGNsYXNzIGFyZ19jb252ZXJ0ZXIgeworLSBwcml2YXRlOgorLSAgdXNpbmcgY2hh cl90eXBlID0gdHlwZW5hbWUgQ29udGV4dDo6Y2hhcl90eXBlOworLQorLSAgYmFzaWNfZm9ybWF0 X2FyZzxDb250ZXh0PiYgYXJnXzsKKy0gIGNoYXJfdHlwZSB0eXBlXzsKKy0KKy0gcHVibGljOgor LSAgYXJnX2NvbnZlcnRlcihiYXNpY19mb3JtYXRfYXJnPENvbnRleHQ+JiBhcmcsIGNoYXJfdHlw ZSB0eXBlKQorLSAgICAgIDogYXJnXyhhcmcpLCB0eXBlXyh0eXBlKSB7fQorLQorLSAgdm9pZCBv cGVyYXRvcigpKGJvb2wgdmFsdWUpIHsKKy0gICAgaWYgKHR5cGVfICE9ICdzJykgb3BlcmF0b3Io KTxib29sPih2YWx1ZSk7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgRk1UX0VO QUJMRV9JRihzdGQ6OmlzX2ludGVncmFsPFU+Ojp2YWx1ZSk+CistICB2b2lkIG9wZXJhdG9yKCko VSB2YWx1ZSkgeworLSAgICBib29sIGlzX3NpZ25lZCA9IHR5cGVfID09ICdkJyB8fCB0eXBlXyA9 PSAnaSc7CistICAgIHVzaW5nIHRhcmdldF90eXBlID0gY29uZGl0aW9uYWxfdDxzdGQ6OmlzX3Nh bWU8VCwgdm9pZD46OnZhbHVlLCBVLCBUPjsKKy0gICAgaWYgKGNvbnN0X2NoZWNrKHNpemVvZih0 YXJnZXRfdHlwZSkgPD0gc2l6ZW9mKGludCkpKSB7CistICAgICAgLy8gRXh0cmEgY2FzdHMgYXJl IHVzZWQgdG8gc2lsZW5jZSB3YXJuaW5ncy4KKy0gICAgICBpZiAoaXNfc2lnbmVkKSB7CistICAg ICAgICBhcmdfID0gZGV0YWlsOjptYWtlX2FyZzxDb250ZXh0PigKKy0gICAgICAgICAgICBzdGF0 aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PHRhcmdldF90eXBlPih2YWx1ZSkpKTsKKy0gICAgICB9 IGVsc2UgeworLSAgICAgICAgdXNpbmcgdW5zaWduZWRfdHlwZSA9IHR5cGVuYW1lIG1ha2VfdW5z aWduZWRfb3JfYm9vbDx0YXJnZXRfdHlwZT46OnR5cGU7CistICAgICAgICBhcmdfID0gZGV0YWls OjptYWtlX2FyZzxDb250ZXh0PigKKy0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o c3RhdGljX2Nhc3Q8dW5zaWduZWRfdHlwZT4odmFsdWUpKSk7CistICAgICAgfQorLSAgICB9IGVs c2UgeworLSAgICAgIGlmIChpc19zaWduZWQpIHsKKy0gICAgICAgIC8vIGdsaWJjJ3MgcHJpbnRm IGRvZXNuJ3Qgc2lnbiBleHRlbmQgYXJndW1lbnRzIG9mIHNtYWxsZXIgdHlwZXM6CistICAgICAg ICAvLyAgIHN0ZDo6cHJpbnRmKCIlbGxkIiwgLTQyKTsgIC8vIHByaW50cyAiNDI5NDk2NzI1NCIK Ky0gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoZSBzYW1lIGJlY2F1c2UgaXQn cyBhIFVCLgorLSAgICAgICAgYXJnXyA9IGRldGFpbDo6bWFrZV9hcmc8Q29udGV4dD4oc3RhdGlj X2Nhc3Q8bG9uZyBsb25nPih2YWx1ZSkpOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBhcmdf ID0gZGV0YWlsOjptYWtlX2FyZzxDb250ZXh0PigKKy0gICAgICAgICAgICBzdGF0aWNfY2FzdDx0 eXBlbmFtZSBtYWtlX3Vuc2lnbmVkX29yX2Jvb2w8VT46OnR5cGU+KHZhbHVlKSk7CistICAgICAg fQorLSAgICB9CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgRk1UX0VOQUJMRV9J Righc3RkOjppc19pbnRlZ3JhbDxVPjo6dmFsdWUpPgorLSAgdm9pZCBvcGVyYXRvcigpKFUpIHt9 ICAvLyBObyBjb252ZXJzaW9uIG5lZWRlZCBmb3Igbm9uLWludGVncmFsIHR5cGVzLgorLX07Cist CistLy8gQ29udmVydHMgYW4gaW50ZWdlciBhcmd1bWVudCB0byBUIGZvciBwcmludGYsIGlmIFQg aXMgYW4gaW50ZWdyYWwgdHlwZS4KKy0vLyBJZiBUIGlzIHZvaWQsIHRoZSBhcmd1bWVudCBpcyBj b252ZXJ0ZWQgdG8gY29ycmVzcG9uZGluZyBzaWduZWQgb3IgdW5zaWduZWQKKy0vLyB0eXBlIGRl cGVuZGluZyBvbiB0aGUgdHlwZSBzcGVjaWZpZXI6ICdkJyBhbmQgJ2knIC0gc2lnbmVkLCBvdGhl ciAtCistLy8gdW5zaWduZWQpLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb250 ZXh0LCB0eXBlbmFtZSBDaGFyPgorLXZvaWQgY29udmVydF9hcmcoYmFzaWNfZm9ybWF0X2FyZzxD b250ZXh0PiYgYXJnLCBDaGFyIHR5cGUpIHsKKy0gIHZpc2l0X2Zvcm1hdF9hcmcoYXJnX2NvbnZl cnRlcjxULCBDb250ZXh0PihhcmcsIHR5cGUpLCBhcmcpOworLX0KKy0KKy0vLyBDb252ZXJ0cyBh biBpbnRlZ2VyIGFyZ3VtZW50IHRvIGNoYXIgZm9yIHByaW50Zi4KKy10ZW1wbGF0ZSA8dHlwZW5h bWUgQ29udGV4dD4gY2xhc3MgY2hhcl9jb252ZXJ0ZXIgeworLSBwcml2YXRlOgorLSAgYmFzaWNf Zm9ybWF0X2FyZzxDb250ZXh0PiYgYXJnXzsKKy0KKy0gcHVibGljOgorLSAgZXhwbGljaXQgY2hh cl9jb252ZXJ0ZXIoYmFzaWNfZm9ybWF0X2FyZzxDb250ZXh0PiYgYXJnKSA6IGFyZ18oYXJnKSB7 fQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFCTEVfSUYoc3RkOjppc19pbnRl Z3JhbDxUPjo6dmFsdWUpPgorLSAgdm9pZCBvcGVyYXRvcigpKFQgdmFsdWUpIHsKKy0gICAgYXJn XyA9IGRldGFpbDo6bWFrZV9hcmc8Q29udGV4dD4oCistICAgICAgICBzdGF0aWNfY2FzdDx0eXBl bmFtZSBDb250ZXh0OjpjaGFyX3R5cGU+KHZhbHVlKSk7CistICB9CistCistICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVCwgRk1UX0VOQUJMRV9JRighc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUpPgor LSAgdm9pZCBvcGVyYXRvcigpKFQpIHt9ICAvLyBObyBjb252ZXJzaW9uIG5lZWRlZCBmb3Igbm9u LWludGVncmFsIHR5cGVzLgorLX07CistCistLy8gQW4gYXJndW1lbnQgdmlzaXRvciB0aGF0IHJl dHVybiBhIHBvaW50ZXIgdG8gYSBDIHN0cmluZyBpZiBhcmd1bWVudCBpcyBhCistLy8gc3RyaW5n IG9yIG51bGwgb3RoZXJ3aXNlLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPiBzdHJ1Y3QgZ2V0 X2NzdHJpbmcgeworLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNvbnN0IENoYXIqIG9wZXJhdG9y KCkoVCkgeyByZXR1cm4gbnVsbHB0cjsgfQorLSAgY29uc3QgQ2hhciogb3BlcmF0b3IoKShjb25z dCBDaGFyKiBzKSB7IHJldHVybiBzOyB9CistfTsKKy0KKy0vLyBDaGVja3MgaWYgYW4gYXJndW1l bnQgaXMgYSB2YWxpZCBwcmludGYgd2lkdGggc3BlY2lmaWVyIGFuZCBzZXRzCistLy8gbGVmdCBh bGlnbm1lbnQgaWYgaXQgaXMgbmVnYXRpdmUuCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IGNs YXNzIHByaW50Zl93aWR0aF9oYW5kbGVyIHsKKy0gcHJpdmF0ZToKKy0gIHVzaW5nIGZvcm1hdF9z cGVjcyA9IGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPjsKKy0KKy0gIGZvcm1hdF9zcGVjcyYgc3Bl Y3NfOworLQorLSBwdWJsaWM6CistICBleHBsaWNpdCBwcmludGZfd2lkdGhfaGFuZGxlcihmb3Jt YXRfc3BlY3MmIHNwZWNzKSA6IHNwZWNzXyhzcGVjcykge30KKy0KKy0gIHRlbXBsYXRlIDx0eXBl bmFtZSBULCBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlKT4KKy0gIHVu c2lnbmVkIG9wZXJhdG9yKCkoVCB2YWx1ZSkgeworLSAgICBhdXRvIHdpZHRoID0gc3RhdGljX2Nh c3Q8dWludDMyX29yXzY0X29yXzEyOF90PFQ+Pih2YWx1ZSk7CistICAgIGlmIChkZXRhaWw6Omlz X25lZ2F0aXZlKHZhbHVlKSkgeworLSAgICAgIHNwZWNzXy5hbGlnbiA9IGFsaWduOjpsZWZ0Owor LSAgICAgIHdpZHRoID0gMCAtIHdpZHRoOworLSAgICB9CistICAgIHVuc2lnbmVkIGludF9tYXgg PSBtYXhfdmFsdWU8aW50PigpOworLSAgICBpZiAod2lkdGggPiBpbnRfbWF4KSBGTVRfVEhST1co Zm9ybWF0X2Vycm9yKCJudW1iZXIgaXMgdG9vIGJpZyIpKTsKKy0gICAgcmV0dXJuIHN0YXRpY19j YXN0PHVuc2lnbmVkPih3aWR0aCk7CistICB9CistCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg Rk1UX0VOQUJMRV9JRighc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUpPgorLSAgdW5zaWduZWQg b3BlcmF0b3IoKShUKSB7CistICAgIEZNVF9USFJPVyhmb3JtYXRfZXJyb3IoIndpZHRoIGlzIG5v dCBpbnRlZ2VyIikpOworLSAgICByZXR1cm4gMDsKKy0gIH0KKy19OworLQorLS8vIFRoZSBgYHBy aW50ZmBgIGFyZ3VtZW50IGZvcm1hdHRlci4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQs IHR5cGVuYW1lIENoYXI+CistY2xhc3MgcHJpbnRmX2FyZ19mb3JtYXR0ZXIgOiBwdWJsaWMgYXJn X2Zvcm1hdHRlcjxDaGFyPiB7CistIHByaXZhdGU6CistICB1c2luZyBiYXNlID0gYXJnX2Zvcm1h dHRlcjxDaGFyPjsKKy0gIHVzaW5nIGNvbnRleHRfdHlwZSA9IGJhc2ljX3ByaW50Zl9jb250ZXh0 PE91dHB1dEl0LCBDaGFyPjsKKy0gIHVzaW5nIGZvcm1hdF9zcGVjcyA9IGJhc2ljX2Zvcm1hdF9z cGVjczxDaGFyPjsKKy0KKy0gIGNvbnRleHRfdHlwZSYgY29udGV4dF87CistCistICBPdXRwdXRJ dCB3cml0ZV9udWxsX3BvaW50ZXIoYm9vbCBpc19zdHJpbmcgPSBmYWxzZSkgeworLSAgICBhdXRv IHMgPSB0aGlzLT5zcGVjczsKKy0gICAgcy50eXBlID0gcHJlc2VudGF0aW9uX3R5cGU6Om5vbmU7 CistICAgIHJldHVybiB3cml0ZV9ieXRlcyh0aGlzLT5vdXQsIGlzX3N0cmluZyA/ICIobnVsbCki IDogIihuaWwpIiwgcyk7CistICB9CistCistIHB1YmxpYzoKKy0gIHByaW50Zl9hcmdfZm9ybWF0 dGVyKE91dHB1dEl0IGl0ZXIsIGZvcm1hdF9zcGVjcyYgcywgY29udGV4dF90eXBlJiBjdHgpCist ICAgICAgOiBiYXNle2l0ZXIsIHMsIGxvY2FsZV9yZWYoKX0sIGNvbnRleHRfKGN0eCkge30KKy0K Ky0gIE91dHB1dEl0IG9wZXJhdG9yKCkobW9ub3N0YXRlIHZhbHVlKSB7IHJldHVybiBiYXNlOjpv cGVyYXRvcigpKHZhbHVlKTsgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEZNVF9FTkFC TEVfSUYoZGV0YWlsOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUpPgorLSAgT3V0cHV0SXQgb3BlcmF0 b3IoKShUIHZhbHVlKSB7CistICAgIC8vIE1TVkMyMDEzIGZhaWxzIHRvIGNvbXBpbGUgc2VwYXJh dGUgb3ZlcmxvYWRzIGZvciBib29sIGFuZCBDaGFyIHNvIHVzZQorLSAgICAvLyBzdGQ6OmlzX3Nh bWUgaW5zdGVhZC4KKy0gICAgaWYgKHN0ZDo6aXNfc2FtZTxULCBDaGFyPjo6dmFsdWUpIHsKKy0g ICAgICBmb3JtYXRfc3BlY3MgZm10X3NwZWNzID0gdGhpcy0+c3BlY3M7CistICAgICAgaWYgKGZt dF9zcGVjcy50eXBlICE9IHByZXNlbnRhdGlvbl90eXBlOjpub25lICYmCistICAgICAgICAgIGZt dF9zcGVjcy50eXBlICE9IHByZXNlbnRhdGlvbl90eXBlOjpjaHIpIHsKKy0gICAgICAgIHJldHVy biAoKnRoaXMpKHN0YXRpY19jYXN0PGludD4odmFsdWUpKTsKKy0gICAgICB9CistICAgICAgZm10 X3NwZWNzLnNpZ24gPSBzaWduOjpub25lOworLSAgICAgIGZtdF9zcGVjcy5hbHQgPSBmYWxzZTsK Ky0gICAgICBmbXRfc3BlY3MuZmlsbFswXSA9ICcgJzsgIC8vIElnbm9yZSAnMCcgZmxhZyBmb3Ig Y2hhciB0eXBlcy4KKy0gICAgICAvLyBhbGlnbjo6bnVtZXJpYyBuZWVkcyB0byBiZSBvdmVyd3Jp dHRlbiBoZXJlIHNpbmNlIHRoZSAnMCcgZmxhZyBpcworLSAgICAgIC8vIGlnbm9yZWQgZm9yIG5v bi1udW1lcmljIHR5cGVzCistICAgICAgaWYgKGZtdF9zcGVjcy5hbGlnbiA9PSBhbGlnbjo6bm9u ZSB8fCBmbXRfc3BlY3MuYWxpZ24gPT0gYWxpZ246Om51bWVyaWMpCistICAgICAgICBmbXRfc3Bl Y3MuYWxpZ24gPSBhbGlnbjo6cmlnaHQ7CistICAgICAgcmV0dXJuIHdyaXRlPENoYXI+KHRoaXMt Pm91dCwgc3RhdGljX2Nhc3Q8Q2hhcj4odmFsdWUpLCBmbXRfc3BlY3MpOworLSAgICB9CistICAg IHJldHVybiBiYXNlOjpvcGVyYXRvcigpKHZhbHVlKTsKKy0gIH0KKy0KKy0gIHRlbXBsYXRlIDx0 eXBlbmFtZSBULCBGTVRfRU5BQkxFX0lGKHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVl KT4KKy0gIE91dHB1dEl0IG9wZXJhdG9yKCkoVCB2YWx1ZSkgeworLSAgICByZXR1cm4gYmFzZTo6 b3BlcmF0b3IoKSh2YWx1ZSk7CistICB9CistCistICAvKiogRm9ybWF0cyBhIG51bGwtdGVybWlu YXRlZCBDIHN0cmluZy4gKi8KKy0gIE91dHB1dEl0IG9wZXJhdG9yKCkoY29uc3QgY2hhciogdmFs dWUpIHsKKy0gICAgaWYgKHZhbHVlKSByZXR1cm4gYmFzZTo6b3BlcmF0b3IoKSh2YWx1ZSk7Cist ICAgIHJldHVybiB3cml0ZV9udWxsX3BvaW50ZXIodGhpcy0+c3BlY3MudHlwZSAhPSBwcmVzZW50 YXRpb25fdHlwZTo6cG9pbnRlcik7CistICB9CistCistICAvKiogRm9ybWF0cyBhIG51bGwtdGVy bWluYXRlZCB3aWRlIEMgc3RyaW5nLiAqLworLSAgT3V0cHV0SXQgb3BlcmF0b3IoKShjb25zdCB3 Y2hhcl90KiB2YWx1ZSkgeworLSAgICBpZiAodmFsdWUpIHJldHVybiBiYXNlOjpvcGVyYXRvcigp KHZhbHVlKTsKKy0gICAgcmV0dXJuIHdyaXRlX251bGxfcG9pbnRlcih0aGlzLT5zcGVjcy50eXBl ICE9IHByZXNlbnRhdGlvbl90eXBlOjpwb2ludGVyKTsKKy0gIH0KKy0KKy0gIE91dHB1dEl0IG9w ZXJhdG9yKCkoYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4gdmFsdWUpIHsKKy0gICAgcmV0dXJuIGJh c2U6Om9wZXJhdG9yKCkodmFsdWUpOworLSAgfQorLQorLSAgLyoqIEZvcm1hdHMgYSBwb2ludGVy LiAqLworLSAgT3V0cHV0SXQgb3BlcmF0b3IoKShjb25zdCB2b2lkKiB2YWx1ZSkgeworLSAgICBy ZXR1cm4gdmFsdWUgPyBiYXNlOjpvcGVyYXRvcigpKHZhbHVlKSA6IHdyaXRlX251bGxfcG9pbnRl cigpOworLSAgfQorLQorLSAgLyoqIEZvcm1hdHMgYW4gYXJndW1lbnQgb2YgYSBjdXN0b20gKHVz ZXItZGVmaW5lZCkgdHlwZS4gKi8KKy0gIE91dHB1dEl0IG9wZXJhdG9yKCkodHlwZW5hbWUgYmFz aWNfZm9ybWF0X2FyZzxjb250ZXh0X3R5cGU+OjpoYW5kbGUgaGFuZGxlKSB7CistICAgIGF1dG8g cGFyc2VfY3R4ID0KKy0gICAgICAgIGJhc2ljX3ByaW50Zl9wYXJzZV9jb250ZXh0PENoYXI+KGJh c2ljX3N0cmluZ192aWV3PENoYXI+KCkpOworLSAgICBoYW5kbGUuZm9ybWF0KHBhcnNlX2N0eCwg Y29udGV4dF8pOworLSAgICByZXR1cm4gdGhpcy0+b3V0OworLSAgfQorLX07CistCistdGVtcGxh dGUgPHR5cGVuYW1lIENoYXI+Cistdm9pZCBwYXJzZV9mbGFncyhiYXNpY19mb3JtYXRfc3BlY3M8 Q2hhcj4mIHNwZWNzLCBjb25zdCBDaGFyKiYgaXQsCistICAgICAgICAgICAgICAgICBjb25zdCBD aGFyKiBlbmQpIHsKKy0gIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKy0gICAgc3dpdGNoICgq aXQpIHsKKy0gICAgY2FzZSAnLSc6CistICAgICAgc3BlY3MuYWxpZ24gPSBhbGlnbjo6bGVmdDsK Ky0gICAgICBicmVhazsKKy0gICAgY2FzZSAnKyc6CistICAgICAgc3BlY3Muc2lnbiA9IHNpZ246 OnBsdXM7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgJzAnOgorLSAgICAgIHNwZWNzLmZpbGxb MF0gPSAnMCc7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgJyAnOgorLSAgICAgIGlmIChzcGVj cy5zaWduICE9IHNpZ246OnBsdXMpIHsKKy0gICAgICAgIHNwZWNzLnNpZ24gPSBzaWduOjpzcGFj ZTsKKy0gICAgICB9CistICAgICAgYnJlYWs7CistICAgIGNhc2UgJyMnOgorLSAgICAgIHNwZWNz LmFsdCA9IHRydWU7CistICAgICAgYnJlYWs7CistICAgIGRlZmF1bHQ6CistICAgICAgcmV0dXJu OworLSAgICB9CistICB9CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFt ZSBHZXRBcmc+CistaW50IHBhcnNlX2hlYWRlcihjb25zdCBDaGFyKiYgaXQsIGNvbnN0IENoYXIq IGVuZCwKKy0gICAgICAgICAgICAgICAgIGJhc2ljX2Zvcm1hdF9zcGVjczxDaGFyPiYgc3BlY3Ms IEdldEFyZyBnZXRfYXJnKSB7CistICBpbnQgYXJnX2luZGV4ID0gLTE7CistICBDaGFyIGMgPSAq aXQ7CistICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKy0gICAgLy8gUGFyc2UgYW4gYXJn dW1lbnQgaW5kZXggKGlmIGZvbGxvd2VkIGJ5ICckJykgb3IgYSB3aWR0aCBwb3NzaWJseQorLSAg ICAvLyBwcmVjZWRlZCB3aXRoICcwJyBmbGFnKHMpLgorLSAgICBpbnQgdmFsdWUgPSBwYXJzZV9u b25uZWdhdGl2ZV9pbnQoaXQsIGVuZCwgLTEpOworLSAgICBpZiAoaXQgIT0gZW5kICYmICppdCA9 PSAnJCcpIHsgIC8vIHZhbHVlIGlzIGFuIGFyZ3VtZW50IGluZGV4CistICAgICAgKytpdDsKKy0g ICAgICBhcmdfaW5kZXggPSB2YWx1ZSAhPSAtMSA/IHZhbHVlIDogbWF4X3ZhbHVlPGludD4oKTsK Ky0gICAgfSBlbHNlIHsKKy0gICAgICBpZiAoYyA9PSAnMCcpIHNwZWNzLmZpbGxbMF0gPSAnMCc7 CistICAgICAgaWYgKHZhbHVlICE9IDApIHsKKy0gICAgICAgIC8vIE5vbnplcm8gdmFsdWUgbWVh bnMgdGhhdCB3ZSBwYXJzZWQgd2lkdGggYW5kIGRvbid0IG5lZWQgdG8KKy0gICAgICAgIC8vIHBh cnNlIGl0IG9yIGZsYWdzIGFnYWluLCBzbyByZXR1cm4gbm93LgorLSAgICAgICAgaWYgKHZhbHVl ID09IC0xKSBGTVRfVEhST1coZm9ybWF0X2Vycm9yKCJudW1iZXIgaXMgdG9vIGJpZyIpKTsKKy0g ICAgICAgIHNwZWNzLndpZHRoID0gdmFsdWU7CistICAgICAgICByZXR1cm4gYXJnX2luZGV4Owor LSAgICAgIH0KKy0gICAgfQorLSAgfQorLSAgcGFyc2VfZmxhZ3Moc3BlY3MsIGl0LCBlbmQpOwor LSAgLy8gUGFyc2Ugd2lkdGguCistICBpZiAoaXQgIT0gZW5kKSB7CistICAgIGlmICgqaXQgPj0g JzAnICYmICppdCA8PSAnOScpIHsKKy0gICAgICBzcGVjcy53aWR0aCA9IHBhcnNlX25vbm5lZ2F0 aXZlX2ludChpdCwgZW5kLCAtMSk7CistICAgICAgaWYgKHNwZWNzLndpZHRoID09IC0xKSBGTVRf VEhST1coZm9ybWF0X2Vycm9yKCJudW1iZXIgaXMgdG9vIGJpZyIpKTsKKy0gICAgfSBlbHNlIGlm ICgqaXQgPT0gJyonKSB7CistICAgICAgKytpdDsKKy0gICAgICBzcGVjcy53aWR0aCA9IHN0YXRp Y19jYXN0PGludD4odmlzaXRfZm9ybWF0X2FyZygKKy0gICAgICAgICAgZGV0YWlsOjpwcmludGZf d2lkdGhfaGFuZGxlcjxDaGFyPihzcGVjcyksIGdldF9hcmcoLTEpKSk7CistICAgIH0KKy0gIH0K Ky0gIHJldHVybiBhcmdfaW5kZXg7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0 eXBlbmFtZSBDb250ZXh0PgorLXZvaWQgdnByaW50ZihidWZmZXI8Q2hhcj4mIGJ1ZiwgYmFzaWNf c3RyaW5nX3ZpZXc8Q2hhcj4gZm9ybWF0LAorLSAgICAgICAgICAgICBiYXNpY19mb3JtYXRfYXJn czxDb250ZXh0PiBhcmdzKSB7CistICB1c2luZyBPdXRwdXRJdCA9IGJ1ZmZlcl9hcHBlbmRlcjxD aGFyPjsKKy0gIGF1dG8gb3V0ID0gT3V0cHV0SXQoYnVmKTsKKy0gIGF1dG8gY29udGV4dCA9IGJh c2ljX3ByaW50Zl9jb250ZXh0PE91dHB1dEl0LCBDaGFyPihvdXQsIGFyZ3MpOworLSAgYXV0byBw YXJzZV9jdHggPSBiYXNpY19wcmludGZfcGFyc2VfY29udGV4dDxDaGFyPihmb3JtYXQpOworLQor LSAgLy8gUmV0dXJucyB0aGUgYXJndW1lbnQgd2l0aCBzcGVjaWZpZWQgaW5kZXggb3IsIGlmIGFy Z19pbmRleCBpcyAtMSwgdGhlIG5leHQKKy0gIC8vIGFyZ3VtZW50LgorLSAgYXV0byBnZXRfYXJn ID0gWyZdKGludCBhcmdfaW5kZXgpIHsKKy0gICAgaWYgKGFyZ19pbmRleCA8IDApCistICAgICAg YXJnX2luZGV4ID0gcGFyc2VfY3R4Lm5leHRfYXJnX2lkKCk7CistICAgIGVsc2UKKy0gICAgICBw YXJzZV9jdHguY2hlY2tfYXJnX2lkKC0tYXJnX2luZGV4KTsKKy0gICAgcmV0dXJuIGRldGFpbDo6 Z2V0X2FyZyhjb250ZXh0LCBhcmdfaW5kZXgpOworLSAgfTsKKy0KKy0gIGNvbnN0IENoYXIqIHN0 YXJ0ID0gcGFyc2VfY3R4LmJlZ2luKCk7CistICBjb25zdCBDaGFyKiBlbmQgPSBwYXJzZV9jdHgu ZW5kKCk7CistICBhdXRvIGl0ID0gc3RhcnQ7CistICB3aGlsZSAoaXQgIT0gZW5kKSB7CistICAg IGlmICghZGV0YWlsOjpmaW5kPGZhbHNlLCBDaGFyPihpdCwgZW5kLCAnJScsIGl0KSkgeworLSAg ICAgIGl0ID0gZW5kOyAgLy8gZGV0YWlsOjpmaW5kIGxlYXZlcyBpdCA9PSBudWxscHRyIGlmIGl0 IGRvZXNuJ3QgZmluZCAnJScKKy0gICAgICBicmVhazsKKy0gICAgfQorLSAgICBDaGFyIGMgPSAq aXQrKzsKKy0gICAgaWYgKGl0ICE9IGVuZCAmJiAqaXQgPT0gYykgeworLSAgICAgIG91dCA9IGRl dGFpbDo6d3JpdGUoCistICAgICAgICAgIG91dCwgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4oc3Rh cnQsIGRldGFpbDo6dG9fdW5zaWduZWQoaXQgLSBzdGFydCkpKTsKKy0gICAgICBzdGFydCA9ICsr aXQ7CistICAgICAgY29udGludWU7CistICAgIH0KKy0gICAgb3V0ID0gZGV0YWlsOjp3cml0ZShv dXQsIGJhc2ljX3N0cmluZ192aWV3PENoYXI+KAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXJ0LCBkZXRhaWw6OnRvX3Vuc2lnbmVkKGl0IC0gMSAtIHN0YXJ0KSkpOworLQor LSAgICBiYXNpY19mb3JtYXRfc3BlY3M8Q2hhcj4gc3BlY3M7CistICAgIHNwZWNzLmFsaWduID0g YWxpZ246OnJpZ2h0OworLQorLSAgICAvLyBQYXJzZSBhcmd1bWVudCBpbmRleCwgZmxhZ3MgYW5k IHdpZHRoLgorLSAgICBpbnQgYXJnX2luZGV4ID0gcGFyc2VfaGVhZGVyKGl0LCBlbmQsIHNwZWNz LCBnZXRfYXJnKTsKKy0gICAgaWYgKGFyZ19pbmRleCA9PSAwKSBwYXJzZV9jdHgub25fZXJyb3Io ImFyZ3VtZW50IG5vdCBmb3VuZCIpOworLQorLSAgICAvLyBQYXJzZSBwcmVjaXNpb24uCistICAg IGlmIChpdCAhPSBlbmQgJiYgKml0ID09ICcuJykgeworLSAgICAgICsraXQ7CistICAgICAgYyA9 IGl0ICE9IGVuZCA/ICppdCA6IDA7CistICAgICAgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKSB7 CistICAgICAgICBzcGVjcy5wcmVjaXNpb24gPSBwYXJzZV9ub25uZWdhdGl2ZV9pbnQoaXQsIGVu ZCwgMCk7CistICAgICAgfSBlbHNlIGlmIChjID09ICcqJykgeworLSAgICAgICAgKytpdDsKKy0g ICAgICAgIHNwZWNzLnByZWNpc2lvbiA9IHN0YXRpY19jYXN0PGludD4oCistICAgICAgICAgICAg dmlzaXRfZm9ybWF0X2FyZyhkZXRhaWw6OnByaW50Zl9wcmVjaXNpb25faGFuZGxlcigpLCBnZXRf YXJnKC0xKSkpOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBzcGVjcy5wcmVjaXNpb24gPSAw OworLSAgICAgIH0KKy0gICAgfQorLQorLSAgICBhdXRvIGFyZyA9IGdldF9hcmcoYXJnX2luZGV4 KTsKKy0gICAgLy8gRm9yIGQsIGksIG8sIHUsIHgsIGFuZCBYIGNvbnZlcnNpb24gc3BlY2lmaWVy cywgaWYgYSBwcmVjaXNpb24gaXMKKy0gICAgLy8gc3BlY2lmaWVkLCB0aGUgJzAnIGZsYWcgaXMg aWdub3JlZAorLSAgICBpZiAoc3BlY3MucHJlY2lzaW9uID49IDAgJiYgYXJnLmlzX2ludGVncmFs KCkpCistICAgICAgc3BlY3MuZmlsbFswXSA9CistICAgICAgICAgICcgJzsgIC8vIElnbm9yZSAn MCcgZmxhZyBmb3Igbm9uLW51bWVyaWMgdHlwZXMgb3IgaWYgJy0nIHByZXNlbnQuCistICAgIGlm IChzcGVjcy5wcmVjaXNpb24gPj0gMCAmJiBhcmcudHlwZSgpID09IGRldGFpbDo6dHlwZTo6Y3N0 cmluZ190eXBlKSB7CistICAgICAgYXV0byBzdHIgPSB2aXNpdF9mb3JtYXRfYXJnKGRldGFpbDo6 Z2V0X2NzdHJpbmc8Q2hhcj4oKSwgYXJnKTsKKy0gICAgICBhdXRvIHN0cl9lbmQgPSBzdHIgKyBz cGVjcy5wcmVjaXNpb247CistICAgICAgYXV0byBudWwgPSBzdGQ6OmZpbmQoc3RyLCBzdHJfZW5k LCBDaGFyKCkpOworLSAgICAgIGFyZyA9IGRldGFpbDo6bWFrZV9hcmc8YmFzaWNfcHJpbnRmX2Nv bnRleHQ8T3V0cHV0SXQsIENoYXI+PigKKy0gICAgICAgICAgYmFzaWNfc3RyaW5nX3ZpZXc8Q2hh cj4oCistICAgICAgICAgICAgICBzdHIsIGRldGFpbDo6dG9fdW5zaWduZWQobnVsICE9IHN0cl9l bmQgPyBudWwgLSBzdHIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IHNwZWNzLnByZWNpc2lvbikpKTsKKy0gICAgfQorLSAgICBpZiAoc3Bl Y3MuYWx0ICYmIHZpc2l0X2Zvcm1hdF9hcmcoZGV0YWlsOjppc196ZXJvX2ludCgpLCBhcmcpKQor LSAgICAgIHNwZWNzLmFsdCA9IGZhbHNlOworLSAgICBpZiAoc3BlY3MuZmlsbFswXSA9PSAnMCcp IHsKKy0gICAgICBpZiAoYXJnLmlzX2FyaXRobWV0aWMoKSAmJiBzcGVjcy5hbGlnbiAhPSBhbGln bjo6bGVmdCkKKy0gICAgICAgIHNwZWNzLmFsaWduID0gYWxpZ246Om51bWVyaWM7CistICAgICAg ZWxzZQorLSAgICAgICAgc3BlY3MuZmlsbFswXSA9ICcgJzsgIC8vIElnbm9yZSAnMCcgZmxhZyBm b3Igbm9uLW51bWVyaWMgdHlwZXMgb3IgaWYgJy0nCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gZmxhZyBpcyBhbHNvIHByZXNlbnQuCistICAgIH0KKy0KKy0gICAgLy8gUGFyc2Ug bGVuZ3RoIGFuZCBjb252ZXJ0IHRoZSBhcmd1bWVudCB0byB0aGUgcmVxdWlyZWQgdHlwZS4KKy0g ICAgYyA9IGl0ICE9IGVuZCA/ICppdCsrIDogMDsKKy0gICAgQ2hhciB0ID0gaXQgIT0gZW5kID8g Kml0IDogMDsKKy0gICAgdXNpbmcgZGV0YWlsOjpjb252ZXJ0X2FyZzsKKy0gICAgc3dpdGNoIChj KSB7CistICAgIGNhc2UgJ2gnOgorLSAgICAgIGlmICh0ID09ICdoJykgeworLSAgICAgICAgKytp dDsKKy0gICAgICAgIHQgPSBpdCAhPSBlbmQgPyAqaXQgOiAwOworLSAgICAgICAgY29udmVydF9h cmc8c2lnbmVkIGNoYXI+KGFyZywgdCk7CistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIGNvbnZl cnRfYXJnPHNob3J0PihhcmcsIHQpOworLSAgICAgIH0KKy0gICAgICBicmVhazsKKy0gICAgY2Fz ZSAnbCc6CistICAgICAgaWYgKHQgPT0gJ2wnKSB7CistICAgICAgICArK2l0OworLSAgICAgICAg dCA9IGl0ICE9IGVuZCA/ICppdCA6IDA7CistICAgICAgICBjb252ZXJ0X2FyZzxsb25nIGxvbmc+ KGFyZywgdCk7CistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIGNvbnZlcnRfYXJnPGxvbmc+KGFy ZywgdCk7CistICAgICAgfQorLSAgICAgIGJyZWFrOworLSAgICBjYXNlICdqJzoKKy0gICAgICBj b252ZXJ0X2FyZzxpbnRtYXhfdD4oYXJnLCB0KTsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAn eic6CistICAgICAgY29udmVydF9hcmc8c2l6ZV90PihhcmcsIHQpOworLSAgICAgIGJyZWFrOwor LSAgICBjYXNlICd0JzoKKy0gICAgICBjb252ZXJ0X2FyZzxzdGQ6OnB0cmRpZmZfdD4oYXJnLCB0 KTsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAnTCc6CistICAgICAgLy8gcHJpbnRmIHByb2R1 Y2VzIGdhcmJhZ2Ugd2hlbiAnTCcgaXMgb21pdHRlZCBmb3IgbG9uZyBkb3VibGUsIG5vCistICAg ICAgLy8gbmVlZCB0byBkbyB0aGUgc2FtZS4KKy0gICAgICBicmVhazsKKy0gICAgZGVmYXVsdDoK Ky0gICAgICAtLWl0OworLSAgICAgIGNvbnZlcnRfYXJnPHZvaWQ+KGFyZywgYyk7CistICAgIH0K Ky0KKy0gICAgLy8gUGFyc2UgdHlwZS4KKy0gICAgaWYgKGl0ID09IGVuZCkgRk1UX1RIUk9XKGZv cm1hdF9lcnJvcigiaW52YWxpZCBmb3JtYXQgc3RyaW5nIikpOworLSAgICBjaGFyIHR5cGUgPSBz dGF0aWNfY2FzdDxjaGFyPigqaXQrKyk7CistICAgIGlmIChhcmcuaXNfaW50ZWdyYWwoKSkgewor LSAgICAgIC8vIE5vcm1hbGl6ZSB0eXBlLgorLSAgICAgIHN3aXRjaCAodHlwZSkgeworLSAgICAg IGNhc2UgJ2knOgorLSAgICAgIGNhc2UgJ3UnOgorLSAgICAgICAgdHlwZSA9ICdkJzsKKy0gICAg ICAgIGJyZWFrOworLSAgICAgIGNhc2UgJ2MnOgorLSAgICAgICAgdmlzaXRfZm9ybWF0X2FyZygK Ky0gICAgICAgICAgICBkZXRhaWw6OmNoYXJfY29udmVydGVyPGJhc2ljX3ByaW50Zl9jb250ZXh0 PE91dHB1dEl0LCBDaGFyPj4oYXJnKSwKKy0gICAgICAgICAgICBhcmcpOworLSAgICAgICAgYnJl YWs7CistICAgICAgfQorLSAgICB9CistICAgIHNwZWNzLnR5cGUgPSBwYXJzZV9wcmVzZW50YXRp b25fdHlwZSh0eXBlKTsKKy0gICAgaWYgKHNwZWNzLnR5cGUgPT0gcHJlc2VudGF0aW9uX3R5cGU6 Om5vbmUpCistICAgICAgcGFyc2VfY3R4Lm9uX2Vycm9yKCJpbnZhbGlkIHR5cGUgc3BlY2lmaWVy Iik7CistCistICAgIHN0YXJ0ID0gaXQ7CistCistICAgIC8vIEZvcm1hdCBhcmd1bWVudC4KKy0g ICAgb3V0ID0gdmlzaXRfZm9ybWF0X2FyZygKKy0gICAgICAgIGRldGFpbDo6cHJpbnRmX2FyZ19m b3JtYXR0ZXI8T3V0cHV0SXQsIENoYXI+KG91dCwgc3BlY3MsIGNvbnRleHQpLCBhcmcpOworLSAg fQorLSAgZGV0YWlsOjp3cml0ZShvdXQsIGJhc2ljX3N0cmluZ192aWV3PENoYXI+KHN0YXJ0LCB0 b191bnNpZ25lZChpdCAtIHN0YXJ0KSkpOworLX0KKy1GTVRfRU5EX0RFVEFJTF9OQU1FU1BBQ0UK Ky0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKy11c2luZyBiYXNpY19wcmludGZfY29udGV4 dF90ID0KKy0gICAgYmFzaWNfcHJpbnRmX2NvbnRleHQ8ZGV0YWlsOjpidWZmZXJfYXBwZW5kZXI8 Q2hhcj4sIENoYXI+OworLQorLXVzaW5nIHByaW50Zl9jb250ZXh0ID0gYmFzaWNfcHJpbnRmX2Nv bnRleHRfdDxjaGFyPjsKKy11c2luZyB3cHJpbnRmX2NvbnRleHQgPSBiYXNpY19wcmludGZfY29u dGV4dF90PHdjaGFyX3Q+OworLQorLXVzaW5nIHByaW50Zl9hcmdzID0gYmFzaWNfZm9ybWF0X2Fy Z3M8cHJpbnRmX2NvbnRleHQ+OworLXVzaW5nIHdwcmludGZfYXJncyA9IGJhc2ljX2Zvcm1hdF9h cmdzPHdwcmludGZfY29udGV4dD47CistCistLyoqCistICBccnN0CistICBDb25zdHJ1Y3RzIGFu IGB+Zm10Ojpmb3JtYXRfYXJnX3N0b3JlYCBvYmplY3QgdGhhdCBjb250YWlucyByZWZlcmVuY2Vz IHRvCistICBhcmd1bWVudHMgYW5kIGNhbiBiZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byBgfmZt dDo6cHJpbnRmX2FyZ3NgLgorLSAgXGVuZHJzdAorLSAqLworLXRlbXBsYXRlIDx0eXBlbmFtZS4u LiBUPgorLWlubGluZSBhdXRvIG1ha2VfcHJpbnRmX2FyZ3MoY29uc3QgVCYuLi4gYXJncykKKy0g ICAgLT4gZm9ybWF0X2FyZ19zdG9yZTxwcmludGZfY29udGV4dCwgVC4uLj4geworLSAgcmV0dXJu IHthcmdzLi4ufTsKKy19CistCistLyoqCistICBccnN0CistICBDb25zdHJ1Y3RzIGFuIGB+Zm10 Ojpmb3JtYXRfYXJnX3N0b3JlYCBvYmplY3QgdGhhdCBjb250YWlucyByZWZlcmVuY2VzIHRvCist ICBhcmd1bWVudHMgYW5kIGNhbiBiZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byBgfmZtdDo6d3By aW50Zl9hcmdzYC4KKy0gIFxlbmRyc3QKKy0gKi8KKy10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVD4K Ky1pbmxpbmUgYXV0byBtYWtlX3dwcmludGZfYXJncyhjb25zdCBUJi4uLiBhcmdzKQorLSAgICAt PiBmb3JtYXRfYXJnX3N0b3JlPHdwcmludGZfY29udGV4dCwgVC4uLj4geworLSAgcmV0dXJuIHth cmdzLi4ufTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIENoYXIgPSBj aGFyX3Q8Uz4+CistaW5saW5lIGF1dG8gdnNwcmludGYoCistICAgIGNvbnN0IFMmIGZtdCwKKy0g ICAgYmFzaWNfZm9ybWF0X2FyZ3M8YmFzaWNfcHJpbnRmX2NvbnRleHRfdDx0eXBlX2lkZW50aXR5 X3Q8Q2hhcj4+PiBhcmdzKQorLSAgICAtPiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB7CistICBi YXNpY19tZW1vcnlfYnVmZmVyPENoYXI+IGJ1ZmZlcjsKKy0gIHZwcmludGYoYnVmZmVyLCB0b19z dHJpbmdfdmlldyhmbXQpLCBhcmdzKTsKKy0gIHJldHVybiB0b19zdHJpbmcoYnVmZmVyKTsKKy19 CistCistLyoqCistICBccnN0CistICBGb3JtYXRzIGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUg cmVzdWx0IGFzIGEgc3RyaW5nLgorLQorLSAgKipFeGFtcGxlKio6OgorLQorLSAgICBzdGQ6OnN0 cmluZyBtZXNzYWdlID0gZm10OjpzcHJpbnRmKCJUaGUgYW5zd2VyIGlzICVkIiwgNDIpOworLSAg XGVuZHJzdAorLSovCistdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lLi4uIFQsCistICAg ICAgICAgIHR5cGVuYW1lIENoYXIgPSBlbmFibGVfaWZfdDxkZXRhaWw6OmlzX3N0cmluZzxTPjo6 dmFsdWUsIGNoYXJfdDxTPj4+CistaW5saW5lIGF1dG8gc3ByaW50Zihjb25zdCBTJiBmbXQsIGNv bnN0IFQmLi4uIGFyZ3MpIC0+IHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+IHsKKy0gIHVzaW5nIGNv bnRleHQgPSBiYXNpY19wcmludGZfY29udGV4dF90PENoYXI+OworLSAgcmV0dXJuIHZzcHJpbnRm KHRvX3N0cmluZ192aWV3KGZtdCksIGZtdDo6bWFrZV9mb3JtYXRfYXJnczxjb250ZXh0Pihhcmdz Li4uKSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBDaGFyID0gY2hh cl90PFM+PgorLWlubGluZSBhdXRvIHZmcHJpbnRmKAorLSAgICBzdGQ6OkZJTEUqIGYsIGNvbnN0 IFMmIGZtdCwKKy0gICAgYmFzaWNfZm9ybWF0X2FyZ3M8YmFzaWNfcHJpbnRmX2NvbnRleHRfdDx0 eXBlX2lkZW50aXR5X3Q8Q2hhcj4+PiBhcmdzKQorLSAgICAtPiBpbnQgeworLSAgYmFzaWNfbWVt b3J5X2J1ZmZlcjxDaGFyPiBidWZmZXI7CistICB2cHJpbnRmKGJ1ZmZlciwgdG9fc3RyaW5nX3Zp ZXcoZm10KSwgYXJncyk7CistICBzaXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7CistICByZXR1 cm4gc3RkOjpmd3JpdGUoYnVmZmVyLmRhdGEoKSwgc2l6ZW9mKENoYXIpLCBzaXplLCBmKSA8IHNp emUKKy0gICAgICAgICAgICAgPyAtMQorLSAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PGludD4o c2l6ZSk7CistfQorLQorLS8qKgorLSAgXHJzdAorLSAgUHJpbnRzIGZvcm1hdHRlZCBkYXRhIHRv IHRoZSBmaWxlICpmKi4KKy0KKy0gICoqRXhhbXBsZSoqOjoKKy0KKy0gICAgZm10OjpmcHJpbnRm KHN0ZGVyciwgIkRvbid0ICVzISIsICJwYW5pYyIpOworLSAgXGVuZHJzdAorLSAqLworLXRlbXBs YXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZS4uLiBULCB0eXBlbmFtZSBDaGFyID0gY2hhcl90PFM+ PgorLWlubGluZSBhdXRvIGZwcmludGYoc3RkOjpGSUxFKiBmLCBjb25zdCBTJiBmbXQsIGNvbnN0 IFQmLi4uIGFyZ3MpIC0+IGludCB7CistICB1c2luZyBjb250ZXh0ID0gYmFzaWNfcHJpbnRmX2Nv bnRleHRfdDxDaGFyPjsKKy0gIHJldHVybiB2ZnByaW50ZihmLCB0b19zdHJpbmdfdmlldyhmbXQp LAorLSAgICAgICAgICAgICAgICAgIGZtdDo6bWFrZV9mb3JtYXRfYXJnczxjb250ZXh0Pihhcmdz Li4uKSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBDaGFyID0gY2hh cl90PFM+PgorLWlubGluZSBhdXRvIHZwcmludGYoCistICAgIGNvbnN0IFMmIGZtdCwKKy0gICAg YmFzaWNfZm9ybWF0X2FyZ3M8YmFzaWNfcHJpbnRmX2NvbnRleHRfdDx0eXBlX2lkZW50aXR5X3Q8 Q2hhcj4+PiBhcmdzKQorLSAgICAtPiBpbnQgeworLSAgcmV0dXJuIHZmcHJpbnRmKHN0ZG91dCwg dG9fc3RyaW5nX3ZpZXcoZm10KSwgYXJncyk7CistfQorLQorLS8qKgorLSAgXHJzdAorLSAgUHJp bnRzIGZvcm1hdHRlZCBkYXRhIHRvIGBgc3Rkb3V0YGAuCistCistICAqKkV4YW1wbGUqKjo6Cist CistICAgIGZtdDo6cHJpbnRmKCJFbGFwc2VkIHRpbWU6ICUuMmYgc2Vjb25kcyIsIDEuMjMpOwor LSAgXGVuZHJzdAorLSAqLworLXRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZS4uLiBULCBG TVRfRU5BQkxFX0lGKGRldGFpbDo6aXNfc3RyaW5nPFM+Ojp2YWx1ZSk+CistaW5saW5lIGF1dG8g cHJpbnRmKGNvbnN0IFMmIGZtdCwgY29uc3QgVCYuLi4gYXJncykgLT4gaW50IHsKKy0gIHJldHVy biB2cHJpbnRmKAorLSAgICAgIHRvX3N0cmluZ192aWV3KGZtdCksCistICAgICAgZm10OjptYWtl X2Zvcm1hdF9hcmdzPGJhc2ljX3ByaW50Zl9jb250ZXh0X3Q8Y2hhcl90PFM+Pj4oYXJncy4uLikp OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUgQ2hhciA9IGNoYXJfdDxT Pj4KKy1GTVRfREVQUkVDQVRFRCBhdXRvIHZmcHJpbnRmKAorLSAgICBzdGQ6OmJhc2ljX29zdHJl YW08Q2hhcj4mIG9zLCBjb25zdCBTJiBmbXQsCistICAgIGJhc2ljX2Zvcm1hdF9hcmdzPGJhc2lj X3ByaW50Zl9jb250ZXh0X3Q8dHlwZV9pZGVudGl0eV90PENoYXI+Pj4gYXJncykKKy0gICAgLT4g aW50IHsKKy0gIGJhc2ljX21lbW9yeV9idWZmZXI8Q2hhcj4gYnVmZmVyOworLSAgdnByaW50Zihi dWZmZXIsIHRvX3N0cmluZ192aWV3KGZtdCksIGFyZ3MpOworLSAgb3Mud3JpdGUoYnVmZmVyLmRh dGEoKSwgc3RhdGljX2Nhc3Q8c3RkOjpzdHJlYW1zaXplPihidWZmZXIuc2l6ZSgpKSk7CistICBy ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihidWZmZXIuc2l6ZSgpKTsKKy19CistdGVtcGxhdGUgPHR5 cGVuYW1lIFMsIHR5cGVuYW1lLi4uIFQsIHR5cGVuYW1lIENoYXIgPSBjaGFyX3Q8Uz4+CistRk1U X0RFUFJFQ0FURUQgYXV0byBmcHJpbnRmKHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyPiYgb3MsIGNv bnN0IFMmIGZtdCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYuLi4gYXJn cykgLT4gaW50IHsKKy0gIHJldHVybiB2ZnByaW50ZihvcywgdG9fc3RyaW5nX3ZpZXcoZm10KSwK Ky0gICAgICAgICAgICAgICAgICBmbXQ6Om1ha2VfZm9ybWF0X2FyZ3M8YmFzaWNfcHJpbnRmX2Nv bnRleHRfdDxDaGFyPj4oYXJncy4uLikpOworLX0KKy0KKy1GTVRfTU9EVUxFX0VYUE9SVF9FTkQK Ky1GTVRfRU5EX05BTUVTUEFDRQorLQorLSNlbmRpZiAgLy8gRk1UX1BSSU5URl9IXworZGlmZiAt LWdpdCBhL2luY2x1ZGUvZHBwL2ZtdC9yYW5nZXMuaCBiL2luY2x1ZGUvZHBwL2ZtdC9yYW5nZXMu aAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCBlYjlmYjhhLi4wMDAwMDAwCistLS0g YS9pbmNsdWRlL2RwcC9mbXQvcmFuZ2VzLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDc5MyArMCww IEBACistLy8gRm9ybWF0dGluZyBsaWJyYXJ5IGZvciBDKysgLSBleHBlcmltZW50YWwgcmFuZ2Ug c3VwcG9ydAorLS8vCistLy8gQ29weXJpZ2h0IChjKSAyMDEyIC0gcHJlc2VudCwgVmljdG9yIFp2 ZXJvdmljaAorLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCistLy8KKy0vLyBGb3IgdGhlIGxpY2Vu c2UgaW5mb3JtYXRpb24gcmVmZXIgdG8gZm9ybWF0LmguCistLy8KKy0vLyBDb3B5cmlnaHQgKGMp IDIwMTggLSBwcmVzZW50LCBSZW1vdGlvbiAoSWdvciBTY2h1bHopCistLy8gQWxsIFJpZ2h0cyBS ZXNlcnZlZAorLS8vIHtmbXR9IHN1cHBvcnQgZm9yIHJhbmdlcywgY29udGFpbmVycyBhbmQgdHlw ZXMgdHVwbGUgaW50ZXJmYWNlLgorLQorLSNpZm5kZWYgRk1UX1JBTkdFU19IXworLSNkZWZpbmUg Rk1UX1JBTkdFU19IXworLQorLSNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorLSNpbmNsdWRl IDx0dXBsZT4KKy0jaW5jbHVkZSA8dHlwZV90cmFpdHM+CistCistI2luY2x1ZGUgImZvcm1hdC5o IgorLQorLUZNVF9CRUdJTl9OQU1FU1BBQ0UKKy0KKy1uYW1lc3BhY2UgZGV0YWlsIHsKKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2VULCB0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcj4KKy1PdXRw dXRJdGVyYXRvciBjb3B5KGNvbnN0IFJhbmdlVCYgcmFuZ2UsIE91dHB1dEl0ZXJhdG9yIG91dCkg eworLSAgZm9yIChhdXRvIGl0ID0gcmFuZ2UuYmVnaW4oKSwgZW5kID0gcmFuZ2UuZW5kKCk7IGl0 ICE9IGVuZDsgKytpdCkKKy0gICAgKm91dCsrID0gKml0OworLSAgcmV0dXJuIG91dDsKKy19Cist CistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yPgorLU91dHB1dEl0ZXJhdG9yIGNv cHkoY29uc3QgY2hhciogc3RyLCBPdXRwdXRJdGVyYXRvciBvdXQpIHsKKy0gIHdoaWxlICgqc3Ry KSAqb3V0KysgPSAqc3RyKys7CistICByZXR1cm4gb3V0OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgT3V0cHV0SXRlcmF0b3I+CistT3V0cHV0SXRlcmF0b3IgY29weShjaGFyIGNoLCBPdXRw dXRJdGVyYXRvciBvdXQpIHsKKy0gICpvdXQrKyA9IGNoOworLSAgcmV0dXJuIG91dDsKKy19Cist CistdGVtcGxhdGUgPHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yPgorLU91dHB1dEl0ZXJhdG9yIGNv cHkod2NoYXJfdCBjaCwgT3V0cHV0SXRlcmF0b3Igb3V0KSB7CistICAqb3V0KysgPSBjaDsKKy0g IHJldHVybiBvdXQ7CistfQorLQorLS8vIFJldHVybnMgdHJ1ZSBpZiBUIGhhcyBhIHN0ZDo6c3Ry aW5nLWxpa2UgaW50ZXJmYWNlLCBsaWtlIHN0ZDo6c3RyaW5nX3ZpZXcuCistdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+IGNsYXNzIGlzX3N0ZF9zdHJpbmdfbGlrZSB7CistICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVT4KKy0gIHN0YXRpYyBhdXRvIGNoZWNrKFUqIHApCistICAgICAgLT4gZGVjbHR5cGUoKHZv aWQpcC0+ZmluZCgnYScpLCBwLT5sZW5ndGgoKSwgKHZvaWQpcC0+ZGF0YSgpLCBpbnQoKSk7Cist ICB0ZW1wbGF0ZSA8dHlwZW5hbWU+IHN0YXRpYyB2b2lkIGNoZWNrKC4uLik7CistCistIHB1Ymxp YzoKKy0gIHN0YXRpYyBGTVRfQ09OU1RFWFBSX0RFQ0wgY29uc3QgYm9vbCB2YWx1ZSA9CistICAg ICAgaXNfc3RyaW5nPFQ+Ojp2YWx1ZSB8fAorLSAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8VCwg c3RkX3N0cmluZ192aWV3PGNoYXI+Pjo6dmFsdWUgfHwKKy0gICAgICAhc3RkOjppc192b2lkPGRl Y2x0eXBlKGNoZWNrPFQ+KG51bGxwdHIpKT46OnZhbHVlOworLX07CistCistdGVtcGxhdGUgPHR5 cGVuYW1lIENoYXI+Cistc3RydWN0IGlzX3N0ZF9zdHJpbmdfbGlrZTxmbXQ6OmJhc2ljX3N0cmlu Z192aWV3PENoYXI+PiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OworLQorLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPiBjbGFzcyBpc19tYXAgeworLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IHN0YXRpYyBhdXRv IGNoZWNrKFUqKSAtPiB0eXBlbmFtZSBVOjptYXBwZWRfdHlwZTsKKy0gIHRlbXBsYXRlIDx0eXBl bmFtZT4gc3RhdGljIHZvaWQgY2hlY2soLi4uKTsKKy0KKy0gcHVibGljOgorLSNpZmRlZiBGTVRf Rk9STUFUX01BUF9BU19MSVNUCistICBzdGF0aWMgRk1UX0NPTlNURVhQUl9ERUNMIGNvbnN0IGJv b2wgdmFsdWUgPSBmYWxzZTsKKy0jZWxzZQorLSAgc3RhdGljIEZNVF9DT05TVEVYUFJfREVDTCBj b25zdCBib29sIHZhbHVlID0KKy0gICAgICAhc3RkOjppc192b2lkPGRlY2x0eXBlKGNoZWNrPFQ+ KG51bGxwdHIpKT46OnZhbHVlOworLSNlbmRpZgorLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IGNsYXNzIGlzX3NldCB7CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gc3RhdGljIGF1dG8g Y2hlY2soVSopIC0+IHR5cGVuYW1lIFU6OmtleV90eXBlOworLSAgdGVtcGxhdGUgPHR5cGVuYW1l PiBzdGF0aWMgdm9pZCBjaGVjayguLi4pOworLQorLSBwdWJsaWM6CistI2lmZGVmIEZNVF9GT1JN QVRfU0VUX0FTX0xJU1QKKy0gIHN0YXRpYyBGTVRfQ09OU1RFWFBSX0RFQ0wgY29uc3QgYm9vbCB2 YWx1ZSA9IGZhbHNlOworLSNlbHNlCistICBzdGF0aWMgRk1UX0NPTlNURVhQUl9ERUNMIGNvbnN0 IGJvb2wgdmFsdWUgPQorLSAgICAgICFzdGQ6OmlzX3ZvaWQ8ZGVjbHR5cGUoY2hlY2s8VD4obnVs bHB0cikpPjo6dmFsdWUgJiYgIWlzX21hcDxUPjo6dmFsdWU7CistI2VuZGlmCistfTsKKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+IHN0cnVjdCBjb25kaXRpb25hbF9oZWxwZXIge307Cist CistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIF8gPSB2b2lkPiBzdHJ1Y3QgaXNfcmFu Z2VfIDogc3RkOjpmYWxzZV90eXBlIHt9OworLQorLSNpZiAhRk1UX01TQ19WRVIgfHwgRk1UX01T Q19WRVIgPiAxODAwCistCistIyAgZGVmaW5lIEZNVF9ERUNMVFlQRV9SRVRVUk4odmFsKSAgXAor LSAgICAtPmRlY2x0eXBlKHZhbCkgeyByZXR1cm4gdmFsOyB9IFwKKy0gICAgc3RhdGljX2Fzc2Vy dCggICAgICAgICAgICAgICAgICBcCistICAgICAgICB0cnVlLCAiIikgIC8vIFRoaXMgbWFrZXMg aXQgc28gdGhhdCBhIHNlbWljb2xvbiBpcyByZXF1aXJlZCBhZnRlciB0aGUKKy0gICAgICAgICAg ICAgICAgICAgLy8gbWFjcm8sIHdoaWNoIGhlbHBzIGNsYW5nLWZvcm1hdCBoYW5kbGUgdGhlIGZv cm1hdHRpbmcuCistCistLy8gQyBhcnJheSBvdmVybG9hZAorLXRlbXBsYXRlIDx0eXBlbmFtZSBU LCBzdGQ6OnNpemVfdCBOPgorLWF1dG8gcmFuZ2VfYmVnaW4oY29uc3QgVCAoJmFycilbTl0pIC0+ IGNvbnN0IFQqIHsKKy0gIHJldHVybiBhcnI7CistfQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBz dGQ6OnNpemVfdCBOPgorLWF1dG8gcmFuZ2VfZW5kKGNvbnN0IFQgKCZhcnIpW05dKSAtPiBjb25z dCBUKiB7CistICByZXR1cm4gYXJyICsgTjsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQs IHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cistc3RydWN0IGhhc19tZW1iZXJfZm5fYmVnaW5fZW5k X3QgOiBzdGQ6OmZhbHNlX3R5cGUge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3Ry dWN0IGhhc19tZW1iZXJfZm5fYmVnaW5fZW5kX3Q8VCwgdm9pZF90PGRlY2x0eXBlKHN0ZDo6ZGVj bHZhbDxUPigpLmJlZ2luKCkpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4oKS5lbmQoKSk+PgorLSAgICA6IHN0ZDo6 dHJ1ZV90eXBlIHt9OworLQorLS8vIE1lbWJlciBmdW5jdGlvbiBvdmVybG9hZAorLXRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLWF1dG8gcmFuZ2VfYmVnaW4oVCYmIHJuZykgRk1UX0RFQ0xUWVBFX1JF VFVSTihzdGF0aWNfY2FzdDxUJiY+KHJuZykuYmVnaW4oKSk7CistdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CistYXV0byByYW5nZV9lbmQoVCYmIHJuZykgRk1UX0RFQ0xUWVBFX1JFVFVSTihzdGF0aWNf Y2FzdDxUJiY+KHJuZykuZW5kKCkpOworLQorLS8vIEFETCBvdmVybG9hZC4gT25seSBwYXJ0aWNp cGF0ZXMgaW4gb3ZlcmxvYWQgcmVzb2x1dGlvbiBpZiBtZW1iZXIgZnVuY3Rpb25zCistLy8gYXJl IG5vdCBmb3VuZC4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1hdXRvIHJhbmdlX2JlZ2luKFQm JiBybmcpCistICAgIC0+IGVuYWJsZV9pZl90PCFoYXNfbWVtYmVyX2ZuX2JlZ2luX2VuZF90PFQm Jj46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShiZWdpbihzdGF0aWNfY2Fz dDxUJiY+KHJuZykpKT4geworLSAgcmV0dXJuIGJlZ2luKHN0YXRpY19jYXN0PFQmJj4ocm5nKSk7 CistfQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWF1dG8gcmFuZ2VfZW5kKFQmJiBybmcpIC0+ IGVuYWJsZV9pZl90PCFoYXNfbWVtYmVyX2ZuX2JlZ2luX2VuZF90PFQmJj46OnZhbHVlLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2x0eXBlKGVuZChzdGF0aWNf Y2FzdDxUJiY+KHJuZykpKT4geworLSAgcmV0dXJuIGVuZChzdGF0aWNfY2FzdDxUJiY+KHJuZykp OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4K Ky1zdHJ1Y3QgaGFzX2NvbnN0X2JlZ2luX2VuZCA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKKy10ZW1w bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKy1zdHJ1Y3QgaGFzX211 dGFibGVfYmVnaW5fZW5kIDogc3RkOjpmYWxzZV90eXBlIHt9OworLQorLXRlbXBsYXRlIDx0eXBl bmFtZSBUPgorLXN0cnVjdCBoYXNfY29uc3RfYmVnaW5fZW5kPAorLSAgICBULAorLSAgICB2b2lk X3Q8CistICAgICAgICBkZWNsdHlwZShkZXRhaWw6OnJhbmdlX2JlZ2luKHN0ZDo6ZGVjbHZhbDxj b25zdCByZW1vdmVfY3ZyZWZfdDxUPiY+KCkpKSwKKy0gICAgICAgIGRlY2x0eXBlKGRldGFpbDo6 cmFuZ2VfZW5kKHN0ZDo6ZGVjbHZhbDxjb25zdCByZW1vdmVfY3ZyZWZfdDxUPiY+KCkpKT4+Cist ICAgIDogc3RkOjp0cnVlX3R5cGUge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3Ry dWN0IGhhc19tdXRhYmxlX2JlZ2luX2VuZDwKKy0gICAgVCwgdm9pZF90PGRlY2x0eXBlKGRldGFp bDo6cmFuZ2VfYmVnaW4oc3RkOjpkZWNsdmFsPFQ+KCkpKSwKKy0gICAgICAgICAgICAgIGRlY2x0 eXBlKGRldGFpbDo6cmFuZ2VfZW5kKHN0ZDo6ZGVjbHZhbDxUPigpKSksCistICAgICAgICAgICAg ICBlbmFibGVfaWZfdDxzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxUPjo6dmFsdWU+Pj4KKy0g ICAgOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1zdHJ1 Y3QgaXNfcmFuZ2VfPFQsIHZvaWQ+CistICAgIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29s LCAoaGFzX2NvbnN0X2JlZ2luX2VuZDxUPjo6dmFsdWUgfHwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBoYXNfbXV0YWJsZV9iZWdpbl9lbmQ8VD46OnZhbHVlKT4ge307Cist IyAgdW5kZWYgRk1UX0RFQ0xUWVBFX1JFVFVSTgorLSNlbmRpZgorLQorLS8vIHR1cGxlX3NpemUg YW5kIHR1cGxlX2VsZW1lbnQgY2hlY2suCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIGlz X3R1cGxlX2xpa2VfIHsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorLSAgc3RhdGljIGF1dG8g Y2hlY2soVSogcCkgLT4gZGVjbHR5cGUoc3RkOjp0dXBsZV9zaXplPFU+Ojp2YWx1ZSwgaW50KCkp OworLSAgdGVtcGxhdGUgPHR5cGVuYW1lPiBzdGF0aWMgdm9pZCBjaGVjayguLi4pOworLQorLSBw dWJsaWM6CistICBzdGF0aWMgRk1UX0NPTlNURVhQUl9ERUNMIGNvbnN0IGJvb2wgdmFsdWUgPQor LSAgICAgICFzdGQ6OmlzX3ZvaWQ8ZGVjbHR5cGUoY2hlY2s8VD4obnVsbHB0cikpPjo6dmFsdWU7 CistfTsKKy0KKy0vLyBDaGVjayBmb3IgaW50ZWdlcl9zZXF1ZW5jZQorLSNpZiBkZWZpbmVkKF9f Y3BwX2xpYl9pbnRlZ2VyX3NlcXVlbmNlKSB8fCBGTVRfTVNDX1ZFUiA+PSAxOTAwCistdGVtcGxh dGUgPHR5cGVuYW1lIFQsIFQuLi4gTj4KKy11c2luZyBpbnRlZ2VyX3NlcXVlbmNlID0gc3RkOjpp bnRlZ2VyX3NlcXVlbmNlPFQsIE4uLi4+OworLXRlbXBsYXRlIDxzaXplX3QuLi4gTj4gdXNpbmcg aW5kZXhfc2VxdWVuY2UgPSBzdGQ6OmluZGV4X3NlcXVlbmNlPE4uLi4+OworLXRlbXBsYXRlIDxz aXplX3QgTj4gdXNpbmcgbWFrZV9pbmRleF9zZXF1ZW5jZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1 ZW5jZTxOPjsKKy0jZWxzZQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBULi4uIE4+IHN0cnVjdCBp bnRlZ2VyX3NlcXVlbmNlIHsKKy0gIHVzaW5nIHZhbHVlX3R5cGUgPSBUOworLQorLSAgc3RhdGlj IEZNVF9DT05TVEVYUFIgc2l6ZV90IHNpemUoKSB7IHJldHVybiBzaXplb2YuLi4oTik7IH0KKy19 OworLQorLXRlbXBsYXRlIDxzaXplX3QuLi4gTj4gdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBpbnRl Z2VyX3NlcXVlbmNlPHNpemVfdCwgTi4uLj47CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNp emVfdCBOLCBULi4uIE5zPgorLXN0cnVjdCBtYWtlX2ludGVnZXJfc2VxdWVuY2UgOiBtYWtlX2lu dGVnZXJfc2VxdWVuY2U8VCwgTiAtIDEsIE4gLSAxLCBOcy4uLj4ge307CistdGVtcGxhdGUgPHR5 cGVuYW1lIFQsIFQuLi4gTnM+Cistc3RydWN0IG1ha2VfaW50ZWdlcl9zZXF1ZW5jZTxULCAwLCBO cy4uLj4gOiBpbnRlZ2VyX3NlcXVlbmNlPFQsIE5zLi4uPiB7fTsKKy0KKy10ZW1wbGF0ZSA8c2l6 ZV90IE4+CistdXNpbmcgbWFrZV9pbmRleF9zZXF1ZW5jZSA9IG1ha2VfaW50ZWdlcl9zZXF1ZW5j ZTxzaXplX3QsIE4+OworLSNlbmRpZgorLQorLXRlbXBsYXRlIDxjbGFzcyBUdXBsZSwgY2xhc3Mg Riwgc2l6ZV90Li4uIElzPgorLXZvaWQgZm9yX2VhY2goaW5kZXhfc2VxdWVuY2U8SXMuLi4+LCBU dXBsZSYmIHR1cCwgRiYmIGYpIEZNVF9OT0VYQ0VQVCB7CistICB1c2luZyBzdGQ6OmdldDsKKy0g IC8vIHVzaW5nIGZyZWUgZnVuY3Rpb24gZ2V0PEk+KFQpIG5vdy4KKy0gIGNvbnN0IGludCBfW10g PSB7MCwgKCh2b2lkKWYoZ2V0PElzPih0dXApKSwgMCkuLi59OworLSAgKHZvaWQpXzsgIC8vIGJs b2NrcyB3YXJuaW5ncworLX0KKy0KKy10ZW1wbGF0ZSA8Y2xhc3MgVD4KKy1GTVRfQ09OU1RFWFBS IG1ha2VfaW5kZXhfc2VxdWVuY2U8c3RkOjp0dXBsZV9zaXplPFQ+Ojp2YWx1ZT4gZ2V0X2luZGV4 ZXMoCistICAgIFQgY29uc3QmKSB7CistICByZXR1cm4ge307CistfQorLQorLXRlbXBsYXRlIDxj bGFzcyBUdXBsZSwgY2xhc3MgRj4gdm9pZCBmb3JfZWFjaChUdXBsZSYmIHR1cCwgRiYmIGYpIHsK Ky0gIGNvbnN0IGF1dG8gaW5kZXhlcyA9IGdldF9pbmRleGVzKHR1cCk7CistICBmb3JfZWFjaChp bmRleGVzLCBzdGQ6OmZvcndhcmQ8VHVwbGU+KHR1cCksIHN0ZDo6Zm9yd2FyZDxGPihmKSk7Cist fQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KKy11c2luZyB2YWx1ZV90eXBlID0KKy0g ICAgcmVtb3ZlX2N2cmVmX3Q8ZGVjbHR5cGUoKmRldGFpbDo6cmFuZ2VfYmVnaW4oc3RkOjpkZWNs dmFsPFJhbmdlPigpKSk+OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdD4gT3V0cHV0 SXQgd3JpdGVfZGVsaW1pdGVyKE91dHB1dEl0IG91dCkgeworLSAgKm91dCsrID0gJywnOworLSAg Km91dCsrID0gJyAnOworLSAgcmV0dXJuIG91dDsKKy19CistCistc3RydWN0IHNpbmdsZXRvbiB7 CistICB1bnNpZ25lZCBjaGFyIHVwcGVyOworLSAgdW5zaWduZWQgY2hhciBsb3dlcl9jb3VudDsK Ky19OworLQorLWlubGluZSBhdXRvIGlzX3ByaW50YWJsZSh1aW50MTZfdCB4LCBjb25zdCBzaW5n bGV0b24qIHNpbmdsZXRvbnMsCistICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaW5n bGV0b25zX3NpemUsCistICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIqIHNpbmdsZXRvbl9sb3dlcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqIG5vcm1hbCwgc2l6ZV90IG5vcm1hbF9zaXplKQorLSAgICAtPiBib29sIHsK Ky0gIGF1dG8gdXBwZXIgPSB4ID4+IDg7CistICBhdXRvIGxvd2VyX3N0YXJ0ID0gMDsKKy0gIGZv ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2luZ2xldG9uc19zaXplOyArK2kpIHsKKy0gICAgYXV0byBz ID0gc2luZ2xldG9uc1tpXTsKKy0gICAgYXV0byBsb3dlcl9lbmQgPSBsb3dlcl9zdGFydCArIHMu bG93ZXJfY291bnQ7CistICAgIGlmICh1cHBlciA8IHMudXBwZXIpIGJyZWFrOworLSAgICBpZiAo dXBwZXIgPT0gcy51cHBlcikgeworLSAgICAgIGZvciAoYXV0byBqID0gbG93ZXJfc3RhcnQ7IGog PCBsb3dlcl9lbmQ7ICsraikgeworLSAgICAgICAgaWYgKHNpbmdsZXRvbl9sb3dlcnNbal0gPT0g KHggJiAweGZmKSkgcmV0dXJuIGZhbHNlOworLSAgICAgIH0KKy0gICAgfQorLSAgICBsb3dlcl9z dGFydCA9IGxvd2VyX2VuZDsKKy0gIH0KKy0KKy0gIGF1dG8geHNpZ25lZCA9IHN0YXRpY19jYXN0 PGludD4oeCk7CistICBhdXRvIGN1cnJlbnQgPSB0cnVlOworLSAgZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBub3JtYWxfc2l6ZTsgKytpKSB7CistICAgIGF1dG8gdiA9IHN0YXRpY19jYXN0PGludD4o bm9ybWFsW2ldKTsKKy0gICAgYXV0byBsZW4gPSAodiAmIDB4ODApICE9IDAgPyAodiAmIDB4N2Yp IDw8IDggfCBub3JtYWxbKytpXSA6IHY7CistICAgIHhzaWduZWQgLT0gbGVuOworLSAgICBpZiAo eHNpZ25lZCA8IDApIGJyZWFrOworLSAgICBjdXJyZW50ID0gIWN1cnJlbnQ7CistICB9CistICBy ZXR1cm4gY3VycmVudDsKKy19CistCistLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgY29kZSBwb2lu dCBjcCBpcyBwcmludGFibGUuCistLy8gVGhpcyBjb2RlIGlzIGdlbmVyYXRlZCBieSBzdXBwb3J0 L3ByaW50YWJsZS5weS4KKy1pbmxpbmUgYXV0byBpc19wcmludGFibGUodWludDMyX3QgY3ApIC0+ IGJvb2wgeworLSAgc3RhdGljIGNvbnN0ZXhwciBzaW5nbGV0b24gc2luZ2xldG9uczBbXSA9IHsK Ky0gICAgICB7MHgwMCwgMX0sICB7MHgwMywgNX0sICB7MHgwNSwgNn0sICB7MHgwNiwgM30sICB7 MHgwNywgNn0sICB7MHgwOCwgOH0sCistICAgICAgezB4MDksIDE3fSwgezB4MGEsIDI4fSwgezB4 MGIsIDI1fSwgezB4MGMsIDIwfSwgezB4MGQsIDE2fSwgezB4MGUsIDEzfSwKKy0gICAgICB7MHgw ZiwgNH0sICB7MHgxMCwgM30sICB7MHgxMiwgMTh9LCB7MHgxMywgOX0sICB7MHgxNiwgMX0sICB7 MHgxNywgNX0sCistICAgICAgezB4MTgsIDJ9LCAgezB4MTksIDN9LCAgezB4MWEsIDd9LCAgezB4 MWMsIDJ9LCAgezB4MWQsIDF9LCAgezB4MWYsIDIyfSwKKy0gICAgICB7MHgyMCwgM30sICB7MHgy YiwgM30sICB7MHgyYywgMn0sICB7MHgyZCwgMTF9LCB7MHgyZSwgMX0sICB7MHgzMCwgM30sCist ICAgICAgezB4MzEsIDJ9LCAgezB4MzIsIDF9LCAgezB4YTcsIDJ9LCAgezB4YTksIDJ9LCAgezB4 YWEsIDR9LCAgezB4YWIsIDh9LAorLSAgICAgIHsweGZhLCAyfSwgIHsweGZiLCA1fSwgIHsweGZk LCA0fSwgIHsweGZlLCAzfSwgIHsweGZmLCA5fSwKKy0gIH07CistICBzdGF0aWMgY29uc3RleHBy IHVuc2lnbmVkIGNoYXIgc2luZ2xldG9uczBfbG93ZXJbXSA9IHsKKy0gICAgICAweGFkLCAweDc4 LCAweDc5LCAweDhiLCAweDhkLCAweGEyLCAweDMwLCAweDU3LCAweDU4LCAweDhiLCAweDhjLCAw eDkwLAorLSAgICAgIDB4MWMsIDB4MWQsIDB4ZGQsIDB4MGUsIDB4MGYsIDB4NGIsIDB4NGMsIDB4 ZmIsIDB4ZmMsIDB4MmUsIDB4MmYsIDB4M2YsCistICAgICAgMHg1YywgMHg1ZCwgMHg1ZiwgMHhi NSwgMHhlMiwgMHg4NCwgMHg4ZCwgMHg4ZSwgMHg5MSwgMHg5MiwgMHhhOSwgMHhiMSwKKy0gICAg ICAweGJhLCAweGJiLCAweGM1LCAweGM2LCAweGM5LCAweGNhLCAweGRlLCAweGU0LCAweGU1LCAw eGZmLCAweDAwLCAweDA0LAorLSAgICAgIDB4MTEsIDB4MTIsIDB4MjksIDB4MzEsIDB4MzQsIDB4 MzcsIDB4M2EsIDB4M2IsIDB4M2QsIDB4NDksIDB4NGEsIDB4NWQsCistICAgICAgMHg4NCwgMHg4 ZSwgMHg5MiwgMHhhOSwgMHhiMSwgMHhiNCwgMHhiYSwgMHhiYiwgMHhjNiwgMHhjYSwgMHhjZSwg MHhjZiwKKy0gICAgICAweGU0LCAweGU1LCAweDAwLCAweDA0LCAweDBkLCAweDBlLCAweDExLCAw eDEyLCAweDI5LCAweDMxLCAweDM0LCAweDNhLAorLSAgICAgIDB4M2IsIDB4NDUsIDB4NDYsIDB4 NDksIDB4NGEsIDB4NWUsIDB4NjQsIDB4NjUsIDB4ODQsIDB4OTEsIDB4OWIsIDB4OWQsCistICAg ICAgMHhjOSwgMHhjZSwgMHhjZiwgMHgwZCwgMHgxMSwgMHgyOSwgMHg0NSwgMHg0OSwgMHg1Nywg MHg2NCwgMHg2NSwgMHg4ZCwKKy0gICAgICAweDkxLCAweGE5LCAweGI0LCAweGJhLCAweGJiLCAw eGM1LCAweGM5LCAweGRmLCAweGU0LCAweGU1LCAweGYwLCAweDBkLAorLSAgICAgIDB4MTEsIDB4 NDUsIDB4NDksIDB4NjQsIDB4NjUsIDB4ODAsIDB4ODQsIDB4YjIsIDB4YmMsIDB4YmUsIDB4YmYs IDB4ZDUsCistICAgICAgMHhkNywgMHhmMCwgMHhmMSwgMHg4MywgMHg4NSwgMHg4YiwgMHhhNCwg MHhhNiwgMHhiZSwgMHhiZiwgMHhjNSwgMHhjNywKKy0gICAgICAweGNlLCAweGNmLCAweGRhLCAw eGRiLCAweDQ4LCAweDk4LCAweGJkLCAweGNkLCAweGM2LCAweGNlLCAweGNmLCAweDQ5LAorLSAg ICAgIDB4NGUsIDB4NGYsIDB4NTcsIDB4NTksIDB4NWUsIDB4NWYsIDB4ODksIDB4OGUsIDB4OGYs IDB4YjEsIDB4YjYsIDB4YjcsCistICAgICAgMHhiZiwgMHhjMSwgMHhjNiwgMHhjNywgMHhkNywg MHgxMSwgMHgxNiwgMHgxNywgMHg1YiwgMHg1YywgMHhmNiwgMHhmNywKKy0gICAgICAweGZlLCAw eGZmLCAweDgwLCAweDBkLCAweDZkLCAweDcxLCAweGRlLCAweGRmLCAweDBlLCAweDBmLCAweDFm LCAweDZlLAorLSAgICAgIDB4NmYsIDB4MWMsIDB4MWQsIDB4NWYsIDB4N2QsIDB4N2UsIDB4YWUs IDB4YWYsIDB4YmIsIDB4YmMsIDB4ZmEsIDB4MTYsCistICAgICAgMHgxNywgMHgxZSwgMHgxZiwg MHg0NiwgMHg0NywgMHg0ZSwgMHg0ZiwgMHg1OCwgMHg1YSwgMHg1YywgMHg1ZSwgMHg3ZSwKKy0g ICAgICAweDdmLCAweGI1LCAweGM1LCAweGQ0LCAweGQ1LCAweGRjLCAweGYwLCAweGYxLCAweGY1 LCAweDcyLCAweDczLCAweDhmLAorLSAgICAgIDB4NzQsIDB4NzUsIDB4OTYsIDB4MmYsIDB4NWYs IDB4MjYsIDB4MmUsIDB4MmYsIDB4YTcsIDB4YWYsIDB4YjcsIDB4YmYsCistICAgICAgMHhjNywg MHhjZiwgMHhkNywgMHhkZiwgMHg5YSwgMHg0MCwgMHg5NywgMHg5OCwgMHgzMCwgMHg4ZiwgMHgx ZiwgMHhjMCwKKy0gICAgICAweGMxLCAweGNlLCAweGZmLCAweDRlLCAweDRmLCAweDVhLCAweDVi LCAweDA3LCAweDA4LCAweDBmLCAweDEwLCAweDI3LAorLSAgICAgIDB4MmYsIDB4ZWUsIDB4ZWYs IDB4NmUsIDB4NmYsIDB4MzcsIDB4M2QsIDB4M2YsIDB4NDIsIDB4NDUsIDB4OTAsIDB4OTEsCist ICAgICAgMHhmZSwgMHhmZiwgMHg1MywgMHg2NywgMHg3NSwgMHhjOCwgMHhjOSwgMHhkMCwgMHhk MSwgMHhkOCwgMHhkOSwgMHhlNywKKy0gICAgICAweGZlLCAweGZmLAorLSAgfTsKKy0gIHN0YXRp YyBjb25zdGV4cHIgc2luZ2xldG9uIHNpbmdsZXRvbnMxW10gPSB7CistICAgICAgezB4MDAsIDZ9 LCAgezB4MDEsIDF9LCB7MHgwMywgMX0sICB7MHgwNCwgMn0sIHsweDA4LCA4fSwgIHsweDA5LCAy fSwKKy0gICAgICB7MHgwYSwgNX0sICB7MHgwYiwgMn0sIHsweDBlLCA0fSwgIHsweDEwLCAxfSwg ezB4MTEsIDJ9LCAgezB4MTIsIDV9LAorLSAgICAgIHsweDEzLCAxN30sIHsweDE0LCAxfSwgezB4 MTUsIDJ9LCAgezB4MTcsIDJ9LCB7MHgxOSwgMTN9LCB7MHgxYywgNX0sCistICAgICAgezB4MWQs IDh9LCAgezB4MjQsIDF9LCB7MHg2YSwgM30sICB7MHg2YiwgMn0sIHsweGJjLCAyfSwgIHsweGQx LCAyfSwKKy0gICAgICB7MHhkNCwgMTJ9LCB7MHhkNSwgOX0sIHsweGQ2LCAyfSwgIHsweGQ3LCAy fSwgezB4ZGEsIDF9LCAgezB4ZTAsIDV9LAorLSAgICAgIHsweGUxLCAyfSwgIHsweGU4LCAyfSwg ezB4ZWUsIDMyfSwgezB4ZjAsIDR9LCB7MHhmOCwgMn0sICB7MHhmOSwgMn0sCistICAgICAgezB4 ZmEsIDJ9LCAgezB4ZmIsIDF9LAorLSAgfTsKKy0gIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg Y2hhciBzaW5nbGV0b25zMV9sb3dlcltdID0geworLSAgICAgIDB4MGMsIDB4MjcsIDB4M2IsIDB4 M2UsIDB4NGUsIDB4NGYsIDB4OGYsIDB4OWUsIDB4OWUsIDB4OWYsIDB4MDYsIDB4MDcsCistICAg ICAgMHgwOSwgMHgzNiwgMHgzZCwgMHgzZSwgMHg1NiwgMHhmMywgMHhkMCwgMHhkMSwgMHgwNCwg MHgxNCwgMHgxOCwgMHgzNiwKKy0gICAgICAweDM3LCAweDU2LCAweDU3LCAweDdmLCAweGFhLCAw eGFlLCAweGFmLCAweGJkLCAweDM1LCAweGUwLCAweDEyLCAweDg3LAorLSAgICAgIDB4ODksIDB4 OGUsIDB4OWUsIDB4MDQsIDB4MGQsIDB4MGUsIDB4MTEsIDB4MTIsIDB4MjksIDB4MzEsIDB4MzQs IDB4M2EsCistICAgICAgMHg0NSwgMHg0NiwgMHg0OSwgMHg0YSwgMHg0ZSwgMHg0ZiwgMHg2NCwg MHg2NSwgMHg1YywgMHhiNiwgMHhiNywgMHgxYiwKKy0gICAgICAweDFjLCAweDA3LCAweDA4LCAw eDBhLCAweDBiLCAweDE0LCAweDE3LCAweDM2LCAweDM5LCAweDNhLCAweGE4LCAweGE5LAorLSAg ICAgIDB4ZDgsIDB4ZDksIDB4MDksIDB4MzcsIDB4OTAsIDB4OTEsIDB4YTgsIDB4MDcsIDB4MGEs IDB4M2IsIDB4M2UsIDB4NjYsCistICAgICAgMHg2OSwgMHg4ZiwgMHg5MiwgMHg2ZiwgMHg1Ziwg MHhlZSwgMHhlZiwgMHg1YSwgMHg2MiwgMHg5YSwgMHg5YiwgMHgyNywKKy0gICAgICAweDI4LCAw eDU1LCAweDlkLCAweGEwLCAweGExLCAweGEzLCAweGE0LCAweGE3LCAweGE4LCAweGFkLCAweGJh LCAweGJjLAorLSAgICAgIDB4YzQsIDB4MDYsIDB4MGIsIDB4MGMsIDB4MTUsIDB4MWQsIDB4M2Es IDB4M2YsIDB4NDUsIDB4NTEsIDB4YTYsIDB4YTcsCistICAgICAgMHhjYywgMHhjZCwgMHhhMCwg MHgwNywgMHgxOSwgMHgxYSwgMHgyMiwgMHgyNSwgMHgzZSwgMHgzZiwgMHhjNSwgMHhjNiwKKy0g ICAgICAweDA0LCAweDIwLCAweDIzLCAweDI1LCAweDI2LCAweDI4LCAweDMzLCAweDM4LCAweDNh LCAweDQ4LCAweDRhLCAweDRjLAorLSAgICAgIDB4NTAsIDB4NTMsIDB4NTUsIDB4NTYsIDB4NTgs IDB4NWEsIDB4NWMsIDB4NWUsIDB4NjAsIDB4NjMsIDB4NjUsIDB4NjYsCistICAgICAgMHg2Yiwg MHg3MywgMHg3OCwgMHg3ZCwgMHg3ZiwgMHg4YSwgMHhhNCwgMHhhYSwgMHhhZiwgMHhiMCwgMHhj MCwgMHhkMCwKKy0gICAgICAweGFlLCAweGFmLCAweDc5LCAweGNjLCAweDZlLCAweDZmLCAweDkz LAorLSAgfTsKKy0gIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2hhciBub3JtYWwwW10gPSB7 CistICAgICAgMHgwMCwgMHgyMCwgMHg1ZiwgMHgyMiwgMHg4MiwgMHhkZiwgMHgwNCwgMHg4Miwg MHg0NCwgMHgwOCwgMHgxYiwgMHgwNCwKKy0gICAgICAweDA2LCAweDExLCAweDgxLCAweGFjLCAw eDBlLCAweDgwLCAweGFiLCAweDM1LCAweDI4LCAweDBiLCAweDgwLCAweGUwLAorLSAgICAgIDB4 MDMsIDB4MTksIDB4MDgsIDB4MDEsIDB4MDQsIDB4MmYsIDB4MDQsIDB4MzQsIDB4MDQsIDB4MDcs IDB4MDMsIDB4MDEsCistICAgICAgMHgwNywgMHgwNiwgMHgwNywgMHgxMSwgMHgwYSwgMHg1MCwg MHgwZiwgMHgxMiwgMHgwNywgMHg1NSwgMHgwNywgMHgwMywKKy0gICAgICAweDA0LCAweDFjLCAw eDBhLCAweDA5LCAweDAzLCAweDA4LCAweDAzLCAweDA3LCAweDAzLCAweDAyLCAweDAzLCAweDAz LAorLSAgICAgIDB4MDMsIDB4MGMsIDB4MDQsIDB4MDUsIDB4MDMsIDB4MGIsIDB4MDYsIDB4MDEs IDB4MGUsIDB4MTUsIDB4MDUsIDB4M2EsCistICAgICAgMHgwMywgMHgxMSwgMHgwNywgMHgwNiwg MHgwNSwgMHgxMCwgMHgwNywgMHg1NywgMHgwNywgMHgwMiwgMHgwNywgMHgxNSwKKy0gICAgICAw eDBkLCAweDUwLCAweDA0LCAweDQzLCAweDAzLCAweDJkLCAweDAzLCAweDAxLCAweDA0LCAweDEx LCAweDA2LCAweDBmLAorLSAgICAgIDB4MGMsIDB4M2EsIDB4MDQsIDB4MWQsIDB4MjUsIDB4NWYs IDB4MjAsIDB4NmQsIDB4MDQsIDB4NmEsIDB4MjUsIDB4ODAsCistICAgICAgMHhjOCwgMHgwNSwg MHg4MiwgMHhiMCwgMHgwMywgMHgxYSwgMHgwNiwgMHg4MiwgMHhmZCwgMHgwMywgMHg1OSwgMHgw NywKKy0gICAgICAweDE1LCAweDBiLCAweDE3LCAweDA5LCAweDE0LCAweDBjLCAweDE0LCAweDBj LCAweDZhLCAweDA2LCAweDBhLCAweDA2LAorLSAgICAgIDB4MWEsIDB4MDYsIDB4NTksIDB4MDcs IDB4MmIsIDB4MDUsIDB4NDYsIDB4MGEsIDB4MmMsIDB4MDQsIDB4MGMsIDB4MDQsCistICAgICAg MHgwMSwgMHgwMywgMHgzMSwgMHgwYiwgMHgyYywgMHgwNCwgMHgxYSwgMHgwNiwgMHgwYiwgMHgw MywgMHg4MCwgMHhhYywKKy0gICAgICAweDA2LCAweDBhLCAweDA2LCAweDIxLCAweDNmLCAweDRj LCAweDA0LCAweDJkLCAweDAzLCAweDc0LCAweDA4LCAweDNjLAorLSAgICAgIDB4MDMsIDB4MGYs IDB4MDMsIDB4M2MsIDB4MDcsIDB4MzgsIDB4MDgsIDB4MmIsIDB4MDUsIDB4ODIsIDB4ZmYsIDB4 MTEsCistICAgICAgMHgxOCwgMHgwOCwgMHgyZiwgMHgxMSwgMHgyZCwgMHgwMywgMHgyMCwgMHgx MCwgMHgyMSwgMHgwZiwgMHg4MCwgMHg4YywKKy0gICAgICAweDA0LCAweDgyLCAweDk3LCAweDE5 LCAweDBiLCAweDE1LCAweDg4LCAweDk0LCAweDA1LCAweDJmLCAweDA1LCAweDNiLAorLSAgICAg IDB4MDcsIDB4MDIsIDB4MGUsIDB4MTgsIDB4MDksIDB4ODAsIDB4YjMsIDB4MmQsIDB4NzQsIDB4 MGMsIDB4ODAsIDB4ZDYsCistICAgICAgMHgxYSwgMHgwYywgMHgwNSwgMHg4MCwgMHhmZiwgMHgw NSwgMHg4MCwgMHhkZiwgMHgwYywgMHhlZSwgMHgwZCwgMHgwMywKKy0gICAgICAweDg0LCAweDhk LCAweDAzLCAweDM3LCAweDA5LCAweDgxLCAweDVjLCAweDE0LCAweDgwLCAweGI4LCAweDA4LCAw eDgwLAorLSAgICAgIDB4Y2IsIDB4MmEsIDB4MzgsIDB4MDMsIDB4MGEsIDB4MDYsIDB4MzgsIDB4 MDgsIDB4NDYsIDB4MDgsIDB4MGMsIDB4MDYsCistICAgICAgMHg3NCwgMHgwYiwgMHgxZSwgMHgw MywgMHg1YSwgMHgwNCwgMHg1OSwgMHgwOSwgMHg4MCwgMHg4MywgMHgxOCwgMHgxYywKKy0gICAg ICAweDBhLCAweDE2LCAweDA5LCAweDRjLCAweDA0LCAweDgwLCAweDhhLCAweDA2LCAweGFiLCAw eGE0LCAweDBjLCAweDE3LAorLSAgICAgIDB4MDQsIDB4MzEsIDB4YTEsIDB4MDQsIDB4ODEsIDB4 ZGEsIDB4MjYsIDB4MDcsIDB4MGMsIDB4MDUsIDB4MDUsIDB4ODAsCistICAgICAgMHhhNSwgMHgx MSwgMHg4MSwgMHg2ZCwgMHgxMCwgMHg3OCwgMHgyOCwgMHgyYSwgMHgwNiwgMHg0YywgMHgwNCwg MHg4MCwKKy0gICAgICAweDhkLCAweDA0LCAweDgwLCAweGJlLCAweDAzLCAweDFiLCAweDAzLCAw eDBmLCAweDBkLAorLSAgfTsKKy0gIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2hhciBub3Jt YWwxW10gPSB7CistICAgICAgMHg1ZSwgMHgyMiwgMHg3YiwgMHgwNSwgMHgwMywgMHgwNCwgMHgy ZCwgMHgwMywgMHg2NiwgMHgwMywgMHgwMSwgMHgyZiwKKy0gICAgICAweDJlLCAweDgwLCAweDgy LCAweDFkLCAweDAzLCAweDMxLCAweDBmLCAweDFjLCAweDA0LCAweDI0LCAweDA5LCAweDFlLAor LSAgICAgIDB4MDUsIDB4MmIsIDB4MDUsIDB4NDQsIDB4MDQsIDB4MGUsIDB4MmEsIDB4ODAsIDB4 YWEsIDB4MDYsIDB4MjQsIDB4MDQsCistICAgICAgMHgyNCwgMHgwNCwgMHgyOCwgMHgwOCwgMHgz NCwgMHgwYiwgMHgwMSwgMHg4MCwgMHg5MCwgMHg4MSwgMHgzNywgMHgwOSwKKy0gICAgICAweDE2 LCAweDBhLCAweDA4LCAweDgwLCAweDk4LCAweDM5LCAweDAzLCAweDYzLCAweDA4LCAweDA5LCAw eDMwLCAweDE2LAorLSAgICAgIDB4MDUsIDB4MjEsIDB4MDMsIDB4MWIsIDB4MDUsIDB4MDEsIDB4 NDAsIDB4MzgsIDB4MDQsIDB4NGIsIDB4MDUsIDB4MmYsCistICAgICAgMHgwNCwgMHgwYSwgMHgw NywgMHgwOSwgMHgwNywgMHg0MCwgMHgyMCwgMHgyNywgMHgwNCwgMHgwYywgMHgwOSwgMHgzNiwK Ky0gICAgICAweDAzLCAweDNhLCAweDA1LCAweDFhLCAweDA3LCAweDA0LCAweDBjLCAweDA3LCAw eDUwLCAweDQ5LCAweDM3LCAweDMzLAorLSAgICAgIDB4MGQsIDB4MzMsIDB4MDcsIDB4MmUsIDB4 MDgsIDB4MGEsIDB4ODEsIDB4MjYsIDB4NTIsIDB4NGUsIDB4MjgsIDB4MDgsCistICAgICAgMHgy YSwgMHg1NiwgMHgxYywgMHgxNCwgMHgxNywgMHgwOSwgMHg0ZSwgMHgwNCwgMHgxZSwgMHgwZiwg MHg0MywgMHgwZSwKKy0gICAgICAweDE5LCAweDA3LCAweDBhLCAweDA2LCAweDQ4LCAweDA4LCAw eDI3LCAweDA5LCAweDc1LCAweDBiLCAweDNmLCAweDQxLAorLSAgICAgIDB4MmEsIDB4MDYsIDB4 M2IsIDB4MDUsIDB4MGEsIDB4MDYsIDB4NTEsIDB4MDYsIDB4MDEsIDB4MDUsIDB4MTAsIDB4MDMs CistICAgICAgMHgwNSwgMHg4MCwgMHg4YiwgMHg2MiwgMHgxZSwgMHg0OCwgMHgwOCwgMHgwYSwg MHg4MCwgMHhhNiwgMHg1ZSwgMHgyMiwKKy0gICAgICAweDQ1LCAweDBiLCAweDBhLCAweDA2LCAw eDBkLCAweDEzLCAweDM5LCAweDA3LCAweDBhLCAweDM2LCAweDJjLCAweDA0LAorLSAgICAgIDB4 MTAsIDB4ODAsIDB4YzAsIDB4M2MsIDB4NjQsIDB4NTMsIDB4MGMsIDB4NDgsIDB4MDksIDB4MGEs IDB4NDYsIDB4NDUsCistICAgICAgMHgxYiwgMHg0OCwgMHgwOCwgMHg1MywgMHgxZCwgMHgzOSwg MHg4MSwgMHgwNywgMHg0NiwgMHgwYSwgMHgxZCwgMHgwMywKKy0gICAgICAweDQ3LCAweDQ5LCAw eDM3LCAweDAzLCAweDBlLCAweDA4LCAweDBhLCAweDA2LCAweDM5LCAweDA3LCAweDBhLCAweDgx LAorLSAgICAgIDB4MzYsIDB4MTksIDB4ODAsIDB4YjcsIDB4MDEsIDB4MGYsIDB4MzIsIDB4MGQs IDB4ODMsIDB4OWIsIDB4NjYsIDB4NzUsCistICAgICAgMHgwYiwgMHg4MCwgMHhjNCwgMHg4YSwg MHhiYywgMHg4NCwgMHgyZiwgMHg4ZiwgMHhkMSwgMHg4MiwgMHg0NywgMHhhMSwKKy0gICAgICAw eGI5LCAweDgyLCAweDM5LCAweDA3LCAweDJhLCAweDA0LCAweDAyLCAweDYwLCAweDI2LCAweDBh LCAweDQ2LCAweDBhLAorLSAgICAgIDB4MjgsIDB4MDUsIDB4MTMsIDB4ODIsIDB4YjAsIDB4NWIs IDB4NjUsIDB4NGIsIDB4MDQsIDB4MzksIDB4MDcsIDB4MTEsCistICAgICAgMHg0MCwgMHgwNSwg MHgwYiwgMHgwMiwgMHgwZSwgMHg5NywgMHhmOCwgMHgwOCwgMHg4NCwgMHhkNiwgMHgyYSwgMHgw OSwKKy0gICAgICAweGEyLCAweGY3LCAweDgxLCAweDFmLCAweDMxLCAweDAzLCAweDExLCAweDA0 LCAweDA4LCAweDgxLCAweDhjLCAweDg5LAorLSAgICAgIDB4MDQsIDB4NmIsIDB4MDUsIDB4MGQs IDB4MDMsIDB4MDksIDB4MDcsIDB4MTAsIDB4OTMsIDB4NjAsIDB4ODAsIDB4ZjYsCistICAgICAg MHgwYSwgMHg3MywgMHgwOCwgMHg2ZSwgMHgxNywgMHg0NiwgMHg4MCwgMHg5YSwgMHgxNCwgMHgw YywgMHg1NywgMHgwOSwKKy0gICAgICAweDE5LCAweDgwLCAweDg3LCAweDgxLCAweDQ3LCAweDAz LCAweDg1LCAweDQyLCAweDBmLCAweDE1LCAweDg1LCAweDUwLAorLSAgICAgIDB4MmIsIDB4ODAs IDB4ZDUsIDB4MmQsIDB4MDMsIDB4MWEsIDB4MDQsIDB4MDIsIDB4ODEsIDB4NzAsIDB4M2EsIDB4 MDUsCistICAgICAgMHgwMSwgMHg4NSwgMHgwMCwgMHg4MCwgMHhkNywgMHgyOSwgMHg0YywgMHgw NCwgMHgwYSwgMHgwNCwgMHgwMiwgMHg4MywKKy0gICAgICAweDExLCAweDQ0LCAweDRjLCAweDNk LCAweDgwLCAweGMyLCAweDNjLCAweDA2LCAweDAxLCAweDA0LCAweDU1LCAweDA1LAorLSAgICAg IDB4MWIsIDB4MzQsIDB4MDIsIDB4ODEsIDB4MGUsIDB4MmMsIDB4MDQsIDB4NjQsIDB4MGMsIDB4 NTYsIDB4MGEsIDB4ODAsCistICAgICAgMHhhZSwgMHgzOCwgMHgxZCwgMHgwZCwgMHgyYywgMHgw NCwgMHgwOSwgMHgwNywgMHgwMiwgMHgwZSwgMHgwNiwgMHg4MCwKKy0gICAgICAweDlhLCAweDgz LCAweGQ4LCAweDA4LCAweDBkLCAweDAzLCAweDBkLCAweDAzLCAweDc0LCAweDBjLCAweDU5LCAw eDA3LAorLSAgICAgIDB4MGMsIDB4MTQsIDB4MGMsIDB4MDQsIDB4MzgsIDB4MDgsIDB4MGEsIDB4 MDYsIDB4MjgsIDB4MDgsIDB4MjIsIDB4NGUsCistICAgICAgMHg4MSwgMHg1NCwgMHgwYywgMHgx NSwgMHgwMywgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgxOSwgMHgwNywgMHgwNywKKy0gICAg ICAweDA5LCAweDAzLCAweDBkLCAweDA3LCAweDI5LCAweDgwLCAweGNiLCAweDI1LCAweDBhLCAw eDg0LCAweDA2LAorLSAgfTsKKy0gIGF1dG8gbG93ZXIgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4o Y3ApOworLSAgaWYgKGNwIDwgMHgxMDAwMCkgeworLSAgICByZXR1cm4gaXNfcHJpbnRhYmxlKGxv d2VyLCBzaW5nbGV0b25zMCwKKy0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2luZ2xl dG9uczApIC8gc2l6ZW9mKCpzaW5nbGV0b25zMCksCistICAgICAgICAgICAgICAgICAgICAgICAg c2luZ2xldG9uczBfbG93ZXIsIG5vcm1hbDAsIHNpemVvZihub3JtYWwwKSk7CistICB9CistICBp ZiAoY3AgPCAweDIwMDAwKSB7CistICAgIHJldHVybiBpc19wcmludGFibGUobG93ZXIsIHNpbmds ZXRvbnMxLAorLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzaW5nbGV0b25zMSkgLyBz aXplb2YoKnNpbmdsZXRvbnMxKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGV0b25z MV9sb3dlciwgbm9ybWFsMSwgc2l6ZW9mKG5vcm1hbDEpKTsKKy0gIH0KKy0gIGlmICgweDJhNmRl IDw9IGNwICYmIGNwIDwgMHgyYTcwMCkgcmV0dXJuIGZhbHNlOworLSAgaWYgKDB4MmI3MzUgPD0g Y3AgJiYgY3AgPCAweDJiNzQwKSByZXR1cm4gZmFsc2U7CistICBpZiAoMHgyYjgxZSA8PSBjcCAm JiBjcCA8IDB4MmI4MjApIHJldHVybiBmYWxzZTsKKy0gIGlmICgweDJjZWEyIDw9IGNwICYmIGNw IDwgMHgyY2ViMCkgcmV0dXJuIGZhbHNlOworLSAgaWYgKDB4MmViZTEgPD0gY3AgJiYgY3AgPCAw eDJmODAwKSByZXR1cm4gZmFsc2U7CistICBpZiAoMHgyZmExZSA8PSBjcCAmJiBjcCA8IDB4MzAw MDApIHJldHVybiBmYWxzZTsKKy0gIGlmICgweDMxMzRiIDw9IGNwICYmIGNwIDwgMHhlMDEwMCkg cmV0dXJuIGZhbHNlOworLSAgaWYgKDB4ZTAxZjAgPD0gY3AgJiYgY3AgPCAweDExMDAwMCkgcmV0 dXJuIGZhbHNlOworLSAgcmV0dXJuIGNwIDwgMHgxMTAwMDA7CistfQorLQorLWlubGluZSBhdXRv IG5lZWRzX2VzY2FwZSh1aW50MzJfdCBjcCkgLT4gYm9vbCB7CistICByZXR1cm4gY3AgPCAweDIw IHx8IGNwID09IDB4N2YgfHwgY3AgPT0gJyInIHx8IGNwID09ICdcXCcgfHwKKy0gICAgICAgICAh aXNfcHJpbnRhYmxlKGNwKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+IHN0cnVj dCBmaW5kX2VzY2FwZV9yZXN1bHQgeworLSAgY29uc3QgQ2hhciogYmVnaW47CistICBjb25zdCBD aGFyKiBlbmQ7CistICB1aW50MzJfdCBjcDsKKy19OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBD aGFyPgorLWF1dG8gZmluZF9lc2NhcGUoY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0IENoYXIqIGVu ZCkKKy0gICAgLT4gZmluZF9lc2NhcGVfcmVzdWx0PENoYXI+IHsKKy0gIGZvciAoOyBiZWdpbiAh PSBlbmQ7ICsrYmVnaW4pIHsKKy0gICAgYXV0byBjcCA9IHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0 ZDo6bWFrZV91bnNpZ25lZDxDaGFyPjo6dHlwZT4oKmJlZ2luKTsKKy0gICAgaWYgKHNpemVvZihD aGFyKSA9PSAxICYmIGNwID49IDB4ODApIGNvbnRpbnVlOworLSAgICBpZiAobmVlZHNfZXNjYXBl KGNwKSkgcmV0dXJuIHtiZWdpbiwgYmVnaW4gKyAxLCBjcH07CistICB9CistICByZXR1cm4ge2Jl Z2luLCBudWxscHRyLCAwfTsKKy19CistCistaW5saW5lIGF1dG8gZmluZF9lc2NhcGUoY29uc3Qg Y2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKKy0gICAgLT4gZmluZF9lc2NhcGVfcmVzdWx0 PGNoYXI+IHsKKy0gIGlmICghaXNfdXRmOCgpKSByZXR1cm4gZmluZF9lc2NhcGU8Y2hhcj4oYmVn aW4sIGVuZCk7CistICBhdXRvIHJlc3VsdCA9IGZpbmRfZXNjYXBlX3Jlc3VsdDxjaGFyPntlbmQs IG51bGxwdHIsIDB9OworLSAgZm9yX2VhY2hfY29kZXBvaW50KHN0cmluZ192aWV3KGJlZ2luLCB0 b191bnNpZ25lZChlbmQgLSBiZWdpbikpLAorLSAgICAgICAgICAgICAgICAgICAgIFsmXSh1aW50 MzJfdCBjcCwgc3RyaW5nX3ZpZXcgc3YpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgIGlmIChu ZWVkc19lc2NhcGUoY3ApKSB7CistICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtz di5iZWdpbigpLCBzdi5lbmQoKSwgY3B9OworLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7CistICAgICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgICAgICAgICAgICAgICAgICB9KTsKKy0gIHJldHVybiBy ZXN1bHQ7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJ dD4KKy1hdXRvIHdyaXRlX3JhbmdlX2VudHJ5KE91dHB1dEl0IG91dCwgYmFzaWNfc3RyaW5nX3Zp ZXc8Q2hhcj4gc3RyKSAtPiBPdXRwdXRJdCB7CistICAqb3V0KysgPSAnIic7CistICBhdXRvIGJl Z2luID0gc3RyLmJlZ2luKCksIGVuZCA9IHN0ci5lbmQoKTsKKy0gIGRvIHsKKy0gICAgYXV0byBl c2NhcGUgPSBmaW5kX2VzY2FwZShiZWdpbiwgZW5kKTsKKy0gICAgb3V0ID0gY29weV9zdHI8Q2hh cj4oYmVnaW4sIGVzY2FwZS5iZWdpbiwgb3V0KTsKKy0gICAgYmVnaW4gPSBlc2NhcGUuZW5kOwor LSAgICBpZiAoIWJlZ2luKSBicmVhazsKKy0gICAgYXV0byBjID0gc3RhdGljX2Nhc3Q8Q2hhcj4o ZXNjYXBlLmNwKTsKKy0gICAgc3dpdGNoIChlc2NhcGUuY3ApIHsKKy0gICAgY2FzZSAnXG4nOgor LSAgICAgICpvdXQrKyA9ICdcXCc7CistICAgICAgYyA9ICduJzsKKy0gICAgICBicmVhazsKKy0g ICAgY2FzZSAnXHInOgorLSAgICAgICpvdXQrKyA9ICdcXCc7CistICAgICAgYyA9ICdyJzsKKy0g ICAgICBicmVhazsKKy0gICAgY2FzZSAnXHQnOgorLSAgICAgICpvdXQrKyA9ICdcXCc7CistICAg ICAgYyA9ICd0JzsKKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAnIic6CistICAgICAgRk1UX0ZB TExUSFJPVUdIOworLSAgICBjYXNlICdcXCc6CistICAgICAgKm91dCsrID0gJ1xcJzsKKy0gICAg ICBicmVhazsKKy0gICAgZGVmYXVsdDoKKy0gICAgICBpZiAoaXNfdXRmOCgpKSB7CistICAgICAg ICBpZiAoZXNjYXBlLmNwIDwgMHgxMDApIHsKKy0gICAgICAgICAgb3V0ID0gZm9ybWF0X3RvKG91 dCwgIlxceHs6MDJ4fSIsIGVzY2FwZS5jcCk7CistICAgICAgICAgIGNvbnRpbnVlOworLSAgICAg ICAgfQorLSAgICAgICAgaWYgKGVzY2FwZS5jcCA8IDB4MTAwMDApIHsKKy0gICAgICAgICAgb3V0 ID0gZm9ybWF0X3RvKG91dCwgIlxcdXs6MDR4fSIsIGVzY2FwZS5jcCk7CistICAgICAgICAgIGNv bnRpbnVlOworLSAgICAgICAgfQorLSAgICAgICAgaWYgKGVzY2FwZS5jcCA8IDB4MTEwMDAwKSB7 CistICAgICAgICAgIG91dCA9IGZvcm1hdF90byhvdXQsICJcXFV7OjA4eH0iLCBlc2NhcGUuY3Ap OworLSAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgZm9y IChDaGFyIGVzY2FwZV9jaGFyIDogYmFzaWNfc3RyaW5nX3ZpZXc8Q2hhcj4oCistICAgICAgICAg ICAgICAgZXNjYXBlLmJlZ2luLCB0b191bnNpZ25lZChlc2NhcGUuZW5kIC0gZXNjYXBlLmJlZ2lu KSkpIHsKKy0gICAgICAgIG91dCA9IGZvcm1hdF90bygKKy0gICAgICAgICAgICBvdXQsICJcXHh7 OjAyeH0iLAorLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNp Z25lZDxDaGFyPjo6dHlwZT4oZXNjYXBlX2NoYXIpKTsKKy0gICAgICB9CistICAgICAgY29udGlu dWU7CistICAgIH0KKy0gICAgKm91dCsrID0gYzsKKy0gIH0gd2hpbGUgKGJlZ2luICE9IGVuZCk7 CistICAqb3V0KysgPSAnIic7CistICByZXR1cm4gb3V0OworLX0KKy0KKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgQ2hhciwgdHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIFQsCistICAgICAgICAgIEZN VF9FTkFCTEVfSUYoc3RkOjppc19jb252ZXJ0aWJsZTxULCBzdGRfc3RyaW5nX3ZpZXc8Y2hhcj4+ Ojp2YWx1ZSk+CistaW5saW5lIGF1dG8gd3JpdGVfcmFuZ2VfZW50cnkoT3V0cHV0SXQgb3V0LCBj b25zdCBUJiBzdHIpIC0+IE91dHB1dEl0IHsKKy0gIGF1dG8gc3YgPSBzdGRfc3RyaW5nX3ZpZXc8 Q2hhcj4oc3RyKTsKKy0gIHJldHVybiB3cml0ZV9yYW5nZV9lbnRyeTxDaGFyPihvdXQsIGJhc2lj X3N0cmluZ192aWV3PENoYXI+KHN2KSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy LCB0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgQXJnLAorLSAgICAgICAgICBGTVRfRU5BQkxF X0lGKHN0ZDo6aXNfc2FtZTxBcmcsIENoYXI+Ojp2YWx1ZSk+CistT3V0cHV0SXQgd3JpdGVfcmFu Z2VfZW50cnkoT3V0cHV0SXQgb3V0LCBjb25zdCBBcmcgdikgeworLSAgKm91dCsrID0gJ1wnJzsK Ky0gICpvdXQrKyA9IHY7CistICAqb3V0KysgPSAnXCcnOworLSAgcmV0dXJuIG91dDsKKy19Cist CistdGVtcGxhdGUgPAorLSAgICB0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBPdXRwdXRJdCwgdHlw ZW5hbWUgQXJnLAorLSAgICBGTVRfRU5BQkxFX0lGKCFpc19zdGRfc3RyaW5nX2xpa2U8dHlwZW5h bWUgc3RkOjpkZWNheTxBcmc+Ojp0eXBlPjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgICAgICAh c3RkOjppc19zYW1lPEFyZywgQ2hhcj46OnZhbHVlKT4KKy1PdXRwdXRJdCB3cml0ZV9yYW5nZV9l bnRyeShPdXRwdXRJdCBvdXQsIGNvbnN0IEFyZyYgdikgeworLSAgcmV0dXJuIHdyaXRlPENoYXI+ KG91dCwgdik7CistfQorLQorLX0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKy0KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4gc3RydWN0IGlzX3R1cGxlX2xpa2UgeworLSAgc3RhdGljIEZNVF9DT05TVEVY UFJfREVDTCBjb25zdCBib29sIHZhbHVlID0KKy0gICAgICBkZXRhaWw6OmlzX3R1cGxlX2xpa2Vf PFQ+Ojp2YWx1ZSAmJiAhZGV0YWlsOjppc19yYW5nZV88VD46OnZhbHVlOworLX07CistCistdGVt cGxhdGUgPHR5cGVuYW1lIFR1cGxlVCwgdHlwZW5hbWUgQ2hhcj4KKy1zdHJ1Y3QgZm9ybWF0dGVy PFR1cGxlVCwgQ2hhciwgZW5hYmxlX2lmX3Q8Zm10Ojppc190dXBsZV9saWtlPFR1cGxlVD46OnZh bHVlPj4geworLSBwcml2YXRlOgorLSAgLy8gQysrMTEgZ2VuZXJpYyBsYW1iZGEgZm9yIGZvcm1h dCgpLgorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZvcm1hdENvbnRleHQ+IHN0cnVjdCBmb3JtYXRf ZWFjaCB7CistICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg VCYgdikgeworLSAgICAgIGlmIChpID4gMCkgb3V0ID0gZGV0YWlsOjp3cml0ZV9kZWxpbWl0ZXIo b3V0KTsKKy0gICAgICBvdXQgPSBkZXRhaWw6OndyaXRlX3JhbmdlX2VudHJ5PENoYXI+KG91dCwg dik7CistICAgICAgKytpOworLSAgICB9CistICAgIGludCBpOworLSAgICB0eXBlbmFtZSBGb3Jt YXRDb250ZXh0OjppdGVyYXRvciYgb3V0OworLSAgfTsKKy0KKy0gcHVibGljOgorLSAgdGVtcGxh dGUgPHR5cGVuYW1lIFBhcnNlQ29udGV4dD4KKy0gIEZNVF9DT05TVEVYUFIgYXV0byBwYXJzZShQ YXJzZUNvbnRleHQmIGN0eCkgLT4gZGVjbHR5cGUoY3R4LmJlZ2luKCkpIHsKKy0gICAgcmV0dXJu IGN0eC5iZWdpbigpOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZvcm1hdENvbnRl eHQgPSBmb3JtYXRfY29udGV4dD4KKy0gIGF1dG8gZm9ybWF0KGNvbnN0IFR1cGxlVCYgdmFsdWVz LCBGb3JtYXRDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBlKGN0eC5vdXQoKSkgeworLSAgICBhdXRv IG91dCA9IGN0eC5vdXQoKTsKKy0gICAgKm91dCsrID0gJygnOworLSAgICBkZXRhaWw6OmZvcl9l YWNoKHZhbHVlcywgZm9ybWF0X2VhY2g8Rm9ybWF0Q29udGV4dD57MCwgb3V0fSk7CistICAgICpv dXQrKyA9ICcpJzsKKy0gICAgcmV0dXJuIG91dDsKKy0gIH0KKy19OworLQorLXRlbXBsYXRlIDx0 eXBlbmFtZSBULCB0eXBlbmFtZSBDaGFyPiBzdHJ1Y3QgaXNfcmFuZ2UgeworLSAgc3RhdGljIEZN VF9DT05TVEVYUFJfREVDTCBjb25zdCBib29sIHZhbHVlID0KKy0gICAgICBkZXRhaWw6OmlzX3Jh bmdlXzxUPjo6dmFsdWUgJiYgIWRldGFpbDo6aXNfc3RkX3N0cmluZ19saWtlPFQ+Ojp2YWx1ZSAm JgorLSAgICAgICFkZXRhaWw6OmlzX21hcDxUPjo6dmFsdWUgJiYKKy0gICAgICAhc3RkOjppc19j b252ZXJ0aWJsZTxULCBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPj46OnZhbHVlICYmCistICAgICAg IXN0ZDo6aXNfY29uc3RydWN0aWJsZTxkZXRhaWw6OnN0ZF9zdHJpbmdfdmlldzxDaGFyPiwgVD46 OnZhbHVlOworLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENoYXI+Cist c3RydWN0IGZvcm1hdHRlcjwKKy0gICAgVCwgQ2hhciwKKy0gICAgZW5hYmxlX2lmX3Q8CistICAg ICAgICBmbXQ6OmlzX3JhbmdlPFQsIENoYXI+Ojp2YWx1ZQorLS8vIFdvcmthcm91bmQgYSBidWcg aW4gTVNWQyAyMDE5IGFuZCBlYXJsaWVyLgorLSNpZiAhRk1UX01TQ19WRVIKKy0gICAgICAgICYm IChpc19mb3JtYXR0YWJsZTxkZXRhaWw6OnZhbHVlX3R5cGU8VD4sIENoYXI+Ojp2YWx1ZSB8fAor LSAgICAgICAgICAgIGRldGFpbDo6aGFzX2ZhbGxiYWNrX2Zvcm1hdHRlcjxkZXRhaWw6OnZhbHVl X3R5cGU8VD4sIENoYXI+Ojp2YWx1ZSkKKy0jZW5kaWYKKy0gICAgICAgID4+IHsKKy0gIHRlbXBs YXRlIDx0eXBlbmFtZSBQYXJzZUNvbnRleHQ+CistICBGTVRfQ09OU1RFWFBSIGF1dG8gcGFyc2Uo UGFyc2VDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBlKGN0eC5iZWdpbigpKSB7CistICAgIHJldHVy biBjdHguYmVnaW4oKTsKKy0gIH0KKy0KKy0gIHRlbXBsYXRlIDwKKy0gICAgICB0eXBlbmFtZSBG b3JtYXRDb250ZXh0LCB0eXBlbmFtZSBVLAorLSAgICAgIEZNVF9FTkFCTEVfSUYoCistICAgICAg ICAgIHN0ZDo6aXNfc2FtZTxVLCBjb25kaXRpb25hbF90PGRldGFpbDo6aGFzX2NvbnN0X2JlZ2lu X2VuZDxUPjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFQsIFQ+Pjo6dmFsdWUpPgorLSAgYXV0byBmb3JtYXQoVSYgcmFuZ2UsIEZvcm1hdENv bnRleHQmIGN0eCkgLT4gZGVjbHR5cGUoY3R4Lm91dCgpKSB7CistI2lmZGVmIEZNVF9ERVBSRUNB VEVEX0JSQUNFRF9SQU5HRVMKKy0gICAgQ2hhciBwcmVmaXggPSAneyc7CistICAgIENoYXIgcG9z dGZpeCA9ICd9JzsKKy0jZWxzZQorLSAgICBDaGFyIHByZWZpeCA9IGRldGFpbDo6aXNfc2V0PFQ+ Ojp2YWx1ZSA/ICd7JyA6ICdbJzsKKy0gICAgQ2hhciBwb3N0Zml4ID0gZGV0YWlsOjppc19zZXQ8 VD46OnZhbHVlID8gJ30nIDogJ10nOworLSNlbmRpZgorLSAgICBhdXRvIG91dCA9IGN0eC5vdXQo KTsKKy0gICAgKm91dCsrID0gcHJlZml4OworLSAgICBpbnQgaSA9IDA7CistICAgIGF1dG8gaXQg PSBzdGQ6OmJlZ2luKHJhbmdlKTsKKy0gICAgYXV0byBlbmQgPSBzdGQ6OmVuZChyYW5nZSk7Cist ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKy0gICAgICBpZiAoaSA+IDApIG91dCA9IGRl dGFpbDo6d3JpdGVfZGVsaW1pdGVyKG91dCk7CistICAgICAgb3V0ID0gZGV0YWlsOjp3cml0ZV9y YW5nZV9lbnRyeTxDaGFyPihvdXQsICppdCk7CistICAgICAgKytpOworLSAgICB9CistICAgICpv dXQrKyA9IHBvc3RmaXg7CistICAgIHJldHVybiBvdXQ7CistICB9CistfTsKKy0KKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ2hhcj4KKy1zdHJ1Y3QgZm9ybWF0dGVyPAorLSAgICBU LCBDaGFyLAorLSAgICBlbmFibGVfaWZfdDwKKy0gICAgICAgIGRldGFpbDo6aXNfbWFwPFQ+Ojp2 YWx1ZQorLS8vIFdvcmthcm91bmQgYSBidWcgaW4gTVNWQyAyMDE5IGFuZCBlYXJsaWVyLgorLSNp ZiAhRk1UX01TQ19WRVIKKy0gICAgICAgICYmIChpc19mb3JtYXR0YWJsZTxkZXRhaWw6OnZhbHVl X3R5cGU8VD4sIENoYXI+Ojp2YWx1ZSB8fAorLSAgICAgICAgICAgIGRldGFpbDo6aGFzX2ZhbGxi YWNrX2Zvcm1hdHRlcjxkZXRhaWw6OnZhbHVlX3R5cGU8VD4sIENoYXI+Ojp2YWx1ZSkKKy0jZW5k aWYKKy0gICAgICAgID4+IHsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZUNvbnRleHQ+Cist ICBGTVRfQ09OU1RFWFBSIGF1dG8gcGFyc2UoUGFyc2VDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBl KGN0eC5iZWdpbigpKSB7CistICAgIHJldHVybiBjdHguYmVnaW4oKTsKKy0gIH0KKy0KKy0gIHRl bXBsYXRlIDwKKy0gICAgICB0eXBlbmFtZSBGb3JtYXRDb250ZXh0LCB0eXBlbmFtZSBVLAorLSAg ICAgIEZNVF9FTkFCTEVfSUYoCistICAgICAgICAgIHN0ZDo6aXNfc2FtZTxVLCBjb25kaXRpb25h bF90PGRldGFpbDo6aGFzX2NvbnN0X2JlZ2luX2VuZDxUPjo6dmFsdWUsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQsIFQ+Pjo6dmFsdWUpPgorLSAgYXV0 byBmb3JtYXQoVSYgbWFwLCBGb3JtYXRDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBlKGN0eC5vdXQo KSkgeworLSAgICBhdXRvIG91dCA9IGN0eC5vdXQoKTsKKy0gICAgKm91dCsrID0gJ3snOworLSAg ICBpbnQgaSA9IDA7CistICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IG1hcCkgeworLSAgICAg IGlmIChpID4gMCkgb3V0ID0gZGV0YWlsOjp3cml0ZV9kZWxpbWl0ZXIob3V0KTsKKy0gICAgICBv dXQgPSBkZXRhaWw6OndyaXRlX3JhbmdlX2VudHJ5PENoYXI+KG91dCwgaXRlbS5maXJzdCk7Cist ICAgICAgKm91dCsrID0gJzonOworLSAgICAgICpvdXQrKyA9ICcgJzsKKy0gICAgICBvdXQgPSBk ZXRhaWw6OndyaXRlX3JhbmdlX2VudHJ5PENoYXI+KG91dCwgaXRlbS5zZWNvbmQpOworLSAgICAg ICsraTsKKy0gICAgfQorLSAgICAqb3V0KysgPSAnfSc7CistICAgIHJldHVybiBvdXQ7CistICB9 CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUuLi4gVD4gc3RydWN0 IHR1cGxlX2pvaW5fdmlldyA6IGRldGFpbDo6dmlldyB7CistICBjb25zdCBzdGQ6OnR1cGxlPFQu Li4+JiB0dXBsZTsKKy0gIGJhc2ljX3N0cmluZ192aWV3PENoYXI+IHNlcDsKKy0KKy0gIHR1cGxl X2pvaW5fdmlldyhjb25zdCBzdGQ6OnR1cGxlPFQuLi4+JiB0LCBiYXNpY19zdHJpbmdfdmlldzxD aGFyPiBzKQorLSAgICAgIDogdHVwbGUodCksIHNlcHtzfSB7fQorLX07CistCistdGVtcGxhdGUg PHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lLi4uIFQ+CistdXNpbmcgdHVwbGVfYXJnX2pvaW4gPSB0 dXBsZV9qb2luX3ZpZXc8Q2hhciwgVC4uLj47CistCistLy8gRGVmaW5lIEZNVF9UVVBMRV9KT0lO X1NQRUNJRklFUlMgdG8gZW5hYmxlIGV4cGVyaW1lbnRhbCBmb3JtYXQgc3BlY2lmaWVycworLS8v IHN1cHBvcnQgaW4gdHVwbGVfam9pbi4gSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNl IG9mIGlzc3VlcyB3aXRoCistLy8gdGhlIGR5bmFtaWMgd2lkdGggYW5kIHByZWNpc2lvbi4KKy0j aWZuZGVmIEZNVF9UVVBMRV9KT0lOX1NQRUNJRklFUlMKKy0jICBkZWZpbmUgRk1UX1RVUExFX0pP SU5fU1BFQ0lGSUVSUyAwCistI2VuZGlmCistCistdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5 cGVuYW1lLi4uIFQ+Cistc3RydWN0IGZvcm1hdHRlcjx0dXBsZV9qb2luX3ZpZXc8Q2hhciwgVC4u Lj4sIENoYXI+IHsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZUNvbnRleHQ+CistICBGTVRf Q09OU1RFWFBSIGF1dG8gcGFyc2UoUGFyc2VDb250ZXh0JiBjdHgpIC0+IGRlY2x0eXBlKGN0eC5i ZWdpbigpKSB7CistICAgIHJldHVybiBkb19wYXJzZShjdHgsIHN0ZDo6aW50ZWdyYWxfY29uc3Rh bnQ8c2l6ZV90LCBzaXplb2YuLi4oVCk+KCkpOworLSAgfQorLQorLSAgdGVtcGxhdGUgPHR5cGVu YW1lIEZvcm1hdENvbnRleHQ+CistICBhdXRvIGZvcm1hdChjb25zdCB0dXBsZV9qb2luX3ZpZXc8 Q2hhciwgVC4uLj4mIHZhbHVlLAorLSAgICAgICAgICAgICAgRm9ybWF0Q29udGV4dCYgY3R4KSBj b25zdCAtPiB0eXBlbmFtZSBGb3JtYXRDb250ZXh0OjppdGVyYXRvciB7CistICAgIHJldHVybiBk b19mb3JtYXQodmFsdWUsIGN0eCwKKy0gICAgICAgICAgICAgICAgICAgICBzdGQ6OmludGVncmFs X2NvbnN0YW50PHNpemVfdCwgc2l6ZW9mLi4uKFQpPigpKTsKKy0gIH0KKy0KKy0gcHJpdmF0ZToK Ky0gIHN0ZDo6dHVwbGU8Zm9ybWF0dGVyPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGUsIENo YXI+Li4uPiBmb3JtYXR0ZXJzXzsKKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZUNvbnRl eHQ+CistICBGTVRfQ09OU1RFWFBSIGF1dG8gZG9fcGFyc2UoUGFyc2VDb250ZXh0JiBjdHgsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzaXpl X3QsIDA+KQorLSAgICAgIC0+IGRlY2x0eXBlKGN0eC5iZWdpbigpKSB7CistICAgIHJldHVybiBj dHguYmVnaW4oKTsKKy0gIH0KKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZUNvbnRleHQs IHNpemVfdCBOPgorLSAgRk1UX0NPTlNURVhQUiBhdXRvIGRvX3BhcnNlKFBhcnNlQ29udGV4dCYg Y3R4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW50ZWdyYWxfY29uc3Rh bnQ8c2l6ZV90LCBOPikKKy0gICAgICAtPiBkZWNsdHlwZShjdHguYmVnaW4oKSkgeworLSAgICBh dXRvIGVuZCA9IGN0eC5iZWdpbigpOworLSNpZiBGTVRfVFVQTEVfSk9JTl9TUEVDSUZJRVJTCist ICAgIGVuZCA9IHN0ZDo6Z2V0PHNpemVvZi4uLihUKSAtIE4+KGZvcm1hdHRlcnNfKS5wYXJzZShj dHgpOworLSAgICBpZiAoTiA+IDEpIHsKKy0gICAgICBhdXRvIGVuZDEgPSBkb19wYXJzZShjdHgs IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBOIC0gMT4oKSk7CistICAgICAgaWYgKGVu ZCAhPSBlbmQxKQorLSAgICAgICAgRk1UX1RIUk9XKGZvcm1hdF9lcnJvcigiaW5jb21wYXRpYmxl IGZvcm1hdCBzcGVjcyBmb3IgdHVwbGUgZWxlbWVudHMiKSk7CistICAgIH0KKy0jZW5kaWYKKy0g ICAgcmV0dXJuIGVuZDsKKy0gIH0KKy0KKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGb3JtYXRDb250 ZXh0PgorLSAgYXV0byBkb19mb3JtYXQoY29uc3QgdHVwbGVfam9pbl92aWV3PENoYXIsIFQuLi4+ JiwgRm9ybWF0Q29udGV4dCYgY3R4LAorLSAgICAgICAgICAgICAgICAgc3RkOjppbnRlZ3JhbF9j b25zdGFudDxzaXplX3QsIDA+KSBjb25zdCAtPgorLSAgICAgIHR5cGVuYW1lIEZvcm1hdENvbnRl eHQ6Oml0ZXJhdG9yIHsKKy0gICAgcmV0dXJuIGN0eC5vdXQoKTsKKy0gIH0KKy0KKy0gIHRlbXBs YXRlIDx0eXBlbmFtZSBGb3JtYXRDb250ZXh0LCBzaXplX3QgTj4KKy0gIGF1dG8gZG9fZm9ybWF0 KGNvbnN0IHR1cGxlX2pvaW5fdmlldzxDaGFyLCBULi4uPiYgdmFsdWUsIEZvcm1hdENvbnRleHQm IGN0eCwKKy0gICAgICAgICAgICAgICAgIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBO PikgY29uc3QgLT4KKy0gICAgICB0eXBlbmFtZSBGb3JtYXRDb250ZXh0OjppdGVyYXRvciB7Cist ICAgIGF1dG8gb3V0ID0gc3RkOjpnZXQ8c2l6ZW9mLi4uKFQpIC0gTj4oZm9ybWF0dGVyc18pCist ICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc3RkOjpnZXQ8c2l6ZW9mLi4uKFQpIC0gTj4odmFs dWUudHVwbGUpLCBjdHgpOworLSAgICBpZiAoTiA+IDEpIHsKKy0gICAgICBvdXQgPSBzdGQ6OmNv cHkodmFsdWUuc2VwLmJlZ2luKCksIHZhbHVlLnNlcC5lbmQoKSwgb3V0KTsKKy0gICAgICBjdHgu YWR2YW5jZV90byhvdXQpOworLSAgICAgIHJldHVybiBkb19mb3JtYXQodmFsdWUsIGN0eCwgc3Rk OjppbnRlZ3JhbF9jb25zdGFudDxzaXplX3QsIE4gLSAxPigpKTsKKy0gICAgfQorLSAgICByZXR1 cm4gb3V0OworLSAgfQorLX07CistCistRk1UX01PRFVMRV9FWFBPUlRfQkVHSU4KKy0KKy0vKioK Ky0gIFxyc3QKKy0gIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgZm9ybWF0cyBgdHVwbGVgIHdpdGgg ZWxlbWVudHMgc2VwYXJhdGVkIGJ5IGBzZXBgLgorLQorLSAgKipFeGFtcGxlKio6OgorLQorLSAg ICBzdGQ6OnR1cGxlPGludCwgY2hhcj4gdCA9IHsxLCAnYSd9OworLSAgICBmbXQ6OnByaW50KCJ7 fSIsIGZtdDo6am9pbih0LCAiLCAiKSk7CistICAgIC8vIE91dHB1dDogIjEsIGEiCistICBcZW5k cnN0CistICovCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFQ+CistRk1UX0NPTlNURVhQUiBhdXRv IGpvaW4oY29uc3Qgc3RkOjp0dXBsZTxULi4uPiYgdHVwbGUsIHN0cmluZ192aWV3IHNlcCkKKy0g ICAgLT4gdHVwbGVfam9pbl92aWV3PGNoYXIsIFQuLi4+IHsKKy0gIHJldHVybiB7dHVwbGUsIHNl cH07CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUPgorLUZNVF9DT05TVEVYUFIgYXV0 byBqb2luKGNvbnN0IHN0ZDo6dHVwbGU8VC4uLj4mIHR1cGxlLAorLSAgICAgICAgICAgICAgICAg ICAgICAgIGJhc2ljX3N0cmluZ192aWV3PHdjaGFyX3Q+IHNlcCkKKy0gICAgLT4gdHVwbGVfam9p bl92aWV3PHdjaGFyX3QsIFQuLi4+IHsKKy0gIHJldHVybiB7dHVwbGUsIHNlcH07CistfQorLQor LS8qKgorLSAgXHJzdAorLSAgUmV0dXJucyBhbiBvYmplY3QgdGhhdCBmb3JtYXRzIGBpbml0aWFs aXplcl9saXN0YCB3aXRoIGVsZW1lbnRzIHNlcGFyYXRlZCBieQorLSAgYHNlcGAuCistCistICAq KkV4YW1wbGUqKjo6CistCistICAgIGZtdDo6cHJpbnQoInt9IiwgZm10Ojpqb2luKHsxLCAyLCAz fSwgIiwgIikpOworLSAgICAvLyBPdXRwdXQ6ICIxLCAyLCAzIgorLSAgXGVuZHJzdAorLSAqLwor LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWF1dG8gam9pbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8 VD4gbGlzdCwgc3RyaW5nX3ZpZXcgc2VwKQorLSAgICAtPiBqb2luX3ZpZXc8Y29uc3QgVCosIGNv bnN0IFQqPiB7CistICByZXR1cm4gam9pbihzdGQ6OmJlZ2luKGxpc3QpLCBzdGQ6OmVuZChsaXN0 KSwgc2VwKTsKKy19CistCistRk1UX01PRFVMRV9FWFBPUlRfRU5ECistRk1UX0VORF9OQU1FU1BB Q0UKKy0KKy0jZW5kaWYgIC8vIEZNVF9SQU5HRVNfSF8KK2RpZmYgLS1naXQgYS9pbmNsdWRlL2Rw cC9mbXQveGNoYXIuaCBiL2luY2x1ZGUvZHBwL2ZtdC94Y2hhci5oCitkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKK2luZGV4IDU1ODI1MDcuLjAwMDAwMDAKKy0tLSBhL2luY2x1ZGUvZHBwL2ZtdC94 Y2hhci5oCisrKysgL2Rldi9udWxsCitAQCAtMSwyMzYgKzAsMCBAQAorLS8vIEZvcm1hdHRpbmcg bGlicmFyeSBmb3IgQysrIC0gb3B0aW9uYWwgd2NoYXJfdCBhbmQgZXhvdGljIGNoYXJhY3RlciBz dXBwb3J0CistLy8KKy0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgLSBwcmVzZW50LCBWaWN0b3IgWnZl cm92aWNoCistLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0vLworLS8vIEZvciB0aGUgbGljZW5z ZSBpbmZvcm1hdGlvbiByZWZlciB0byBmb3JtYXQuaC4KKy0KKy0jaWZuZGVmIEZNVF9YQ0hBUl9I XworLSNkZWZpbmUgRk1UX1hDSEFSX0hfCistCistI2luY2x1ZGUgPGN3Y2hhcj4KKy0jaW5jbHVk ZSA8dHVwbGU+CistCistI2luY2x1ZGUgImZvcm1hdC5oIgorLQorLUZNVF9CRUdJTl9OQU1FU1BB Q0UKKy1uYW1lc3BhY2UgZGV0YWlsIHsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy11c2luZyBp c19leG90aWNfY2hhciA9IGJvb2xfY29uc3RhbnQ8IXN0ZDo6aXNfc2FtZTxULCBjaGFyPjo6dmFs dWU+OworLX0KKy0KKy1GTVRfTU9EVUxFX0VYUE9SVF9CRUdJTgorLQorLXVzaW5nIHdzdHJpbmdf dmlldyA9IGJhc2ljX3N0cmluZ192aWV3PHdjaGFyX3Q+OworLXVzaW5nIHdmb3JtYXRfcGFyc2Vf Y29udGV4dCA9IGJhc2ljX2Zvcm1hdF9wYXJzZV9jb250ZXh0PHdjaGFyX3Q+OworLXVzaW5nIHdm b3JtYXRfY29udGV4dCA9IGJ1ZmZlcl9jb250ZXh0PHdjaGFyX3Q+OworLXVzaW5nIHdmb3JtYXRf YXJncyA9IGJhc2ljX2Zvcm1hdF9hcmdzPHdmb3JtYXRfY29udGV4dD47CistdXNpbmcgd21lbW9y eV9idWZmZXIgPSBiYXNpY19tZW1vcnlfYnVmZmVyPHdjaGFyX3Q+OworLQorLSNpZiBGTVRfR0ND X1ZFUlNJT04gJiYgRk1UX0dDQ19WRVJTSU9OIDwgNDA5CistLy8gV29ya2Fyb3VuZCBicm9rZW4g Y29udmVyc2lvbiBvbiBvbGRlciBnY2MuCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+IHVz aW5nIHdmb3JtYXRfc3RyaW5nID0gd3N0cmluZ192aWV3OworLSNlbHNlCistdGVtcGxhdGUgPHR5 cGVuYW1lLi4uIEFyZ3M+CistdXNpbmcgd2Zvcm1hdF9zdHJpbmcgPSBiYXNpY19mb3JtYXRfc3Ry aW5nPHdjaGFyX3QsIHR5cGVfaWRlbnRpdHlfdDxBcmdzPi4uLj47CistI2VuZGlmCistCistdGVt cGxhdGUgPD4gc3RydWN0IGlzX2NoYXI8d2NoYXJfdD4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy10 ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY2hhcjxkZXRhaWw6OmNoYXI4X3R5cGU+IDogc3RkOjp0cnVl X3R5cGUge307CistdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NoYXI8Y2hhcjE2X3Q+IDogc3RkOjp0 cnVlX3R5cGUge307CistdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NoYXI8Y2hhcjMyX3Q+IDogc3Rk Ojp0cnVlX3R5cGUge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CistY29uc3Rl eHByIGZvcm1hdF9hcmdfc3RvcmU8d2Zvcm1hdF9jb250ZXh0LCBBcmdzLi4uPiBtYWtlX3dmb3Jt YXRfYXJncygKKy0gICAgY29uc3QgQXJncyYuLi4gYXJncykgeworLSAgcmV0dXJuIHthcmdzLi4u fTsKKy19CistCistaW5saW5lIG5hbWVzcGFjZSBsaXRlcmFscyB7CistY29uc3RleHByIGF1dG8g b3BlcmF0b3IiIiBfZm9ybWF0KGNvbnN0IHdjaGFyX3QqIHMsIHNpemVfdCBuKQorLSAgICAtPiBk ZXRhaWw6OnVkbF9mb3JtYXR0ZXI8d2NoYXJfdD4geworLSAgcmV0dXJuIHt7cywgbn19OworLX0K Ky0KKy0jaWYgRk1UX1VTRV9VU0VSX0RFRklORURfTElURVJBTFMgJiYgIUZNVF9VU0VfTk9OVFlQ RV9URU1QTEFURV9QQVJBTUVURVJTCistY29uc3RleHByIGRldGFpbDo6dWRsX2FyZzx3Y2hhcl90 PiBvcGVyYXRvciIiIF9hKGNvbnN0IHdjaGFyX3QqIHMsIHNpemVfdCkgeworLSAgcmV0dXJuIHtz fTsKKy19CistI2VuZGlmCistfSAgLy8gbmFtZXNwYWNlIGxpdGVyYWxzCistCistdGVtcGxhdGUg PHR5cGVuYW1lIEl0LCB0eXBlbmFtZSBTZW50aW5lbD4KKy1hdXRvIGpvaW4oSXQgYmVnaW4sIFNl bnRpbmVsIGVuZCwgd3N0cmluZ192aWV3IHNlcCkKKy0gICAgLT4gam9pbl92aWV3PEl0LCBTZW50 aW5lbCwgd2NoYXJfdD4geworLSAgcmV0dXJuIHtiZWdpbiwgZW5kLCBzZXB9OworLX0KKy0KKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2U+CistYXV0byBqb2luKFJhbmdlJiYgcmFuZ2UsIHdzdHJp bmdfdmlldyBzZXApCistICAgIC0+IGpvaW5fdmlldzxkZXRhaWw6Oml0ZXJhdG9yX3Q8UmFuZ2U+ LCBkZXRhaWw6OnNlbnRpbmVsX3Q8UmFuZ2U+LAorLSAgICAgICAgICAgICAgICAgd2NoYXJfdD4g eworLSAgcmV0dXJuIGpvaW4oc3RkOjpiZWdpbihyYW5nZSksIHN0ZDo6ZW5kKHJhbmdlKSwgc2Vw KTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistYXV0byBqb2luKHN0ZDo6aW5pdGlh bGl6ZXJfbGlzdDxUPiBsaXN0LCB3c3RyaW5nX3ZpZXcgc2VwKQorLSAgICAtPiBqb2luX3ZpZXc8 Y29uc3QgVCosIGNvbnN0IFQqLCB3Y2hhcl90PiB7CistICByZXR1cm4gam9pbihzdGQ6OmJlZ2lu KGxpc3QpLCBzdGQ6OmVuZChsaXN0KSwgc2VwKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVuYW1l IENoYXIsIEZNVF9FTkFCTEVfSUYoIXN0ZDo6aXNfc2FtZTxDaGFyLCBjaGFyPjo6dmFsdWUpPgor LWF1dG8gdmZvcm1hdChiYXNpY19zdHJpbmdfdmlldzxDaGFyPiBmb3JtYXRfc3RyLAorLSAgICAg ICAgICAgICBiYXNpY19mb3JtYXRfYXJnczxidWZmZXJfY29udGV4dDx0eXBlX2lkZW50aXR5X3Q8 Q2hhcj4+PiBhcmdzKQorLSAgICAtPiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB7CistICBiYXNp Y19tZW1vcnlfYnVmZmVyPENoYXI+IGJ1ZmZlcjsKKy0gIGRldGFpbDo6dmZvcm1hdF90byhidWZm ZXIsIGZvcm1hdF9zdHIsIGFyZ3MpOworLSAgcmV0dXJuIHRvX3N0cmluZyhidWZmZXIpOworLX0K Ky0KKy0vLyBQYXNzIGNoYXJfdCBhcyBhIGRlZmF1bHQgdGVtcGxhdGUgcGFyYW1ldGVyIGluc3Rl YWQgb2YgdXNpbmcKKy0vLyBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyX3Q8Uz4+IHRvIHJlZHVjZSB0 aGUgc3ltYm9sIHNpemUuCistdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lLi4uIEFyZ3Ms IHR5cGVuYW1lIENoYXIgPSBjaGFyX3Q8Uz4sCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYoIXN0 ZDo6aXNfc2FtZTxDaGFyLCBjaGFyPjo6dmFsdWUpPgorLWF1dG8gZm9ybWF0KGNvbnN0IFMmIGZv cm1hdF9zdHIsIEFyZ3MmJi4uLiBhcmdzKSAtPiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB7Cist ICBjb25zdCBhdXRvJiB2YXJncyA9IGZtdDo6bWFrZV9hcmdzX2NoZWNrZWQ8QXJncy4uLj4oZm9y bWF0X3N0ciwgYXJncy4uLik7CistICByZXR1cm4gdmZvcm1hdCh0b19zdHJpbmdfdmlldyhmb3Jt YXRfc3RyKSwgdmFyZ3MpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgTG9jYWxlLCB0eXBl bmFtZSBTLCB0eXBlbmFtZSBDaGFyID0gY2hhcl90PFM+LAorLSAgICAgICAgICBGTVRfRU5BQkxF X0lGKGRldGFpbDo6aXNfbG9jYWxlPExvY2FsZT46OnZhbHVlJiYKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGV0YWlsOjppc19leG90aWNfY2hhcjxDaGFyPjo6dmFsdWUpPgorLWlubGlu ZSBhdXRvIHZmb3JtYXQoCistICAgIGNvbnN0IExvY2FsZSYgbG9jLCBjb25zdCBTJiBmb3JtYXRf c3RyLAorLSAgICBiYXNpY19mb3JtYXRfYXJnczxidWZmZXJfY29udGV4dDx0eXBlX2lkZW50aXR5 X3Q8Q2hhcj4+PiBhcmdzKQorLSAgICAtPiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB7CistICBy ZXR1cm4gZGV0YWlsOjp2Zm9ybWF0KGxvYywgdG9fc3RyaW5nX3ZpZXcoZm9ybWF0X3N0ciksIGFy Z3MpOworLX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgTG9jYWxlLCB0eXBlbmFtZSBTLCB0eXBl bmFtZS4uLiBBcmdzLAorLSAgICAgICAgICB0eXBlbmFtZSBDaGFyID0gY2hhcl90PFM+LAorLSAg ICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNfbG9jYWxlPExvY2FsZT46OnZhbHVlJiYK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOjppc19leG90aWNfY2hhcjxDaGFy Pjo6dmFsdWUpPgorLWlubGluZSBhdXRvIGZvcm1hdChjb25zdCBMb2NhbGUmIGxvYywgY29uc3Qg UyYgZm9ybWF0X3N0ciwgQXJncyYmLi4uIGFyZ3MpCistICAgIC0+IHN0ZDo6YmFzaWNfc3RyaW5n PENoYXI+IHsKKy0gIHJldHVybiBkZXRhaWw6OnZmb3JtYXQobG9jLCB0b19zdHJpbmdfdmlldyhm b3JtYXRfc3RyKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgZm10OjptYWtlX2FyZ3NfY2hl Y2tlZDxBcmdzLi4uPihmb3JtYXRfc3RyLCBhcmdzLi4uKSk7CistfQorLQorLXRlbXBsYXRlIDx0 eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgUywgdHlwZW5hbWUgQ2hhciA9IGNoYXJfdDxTPiwK Ky0gICAgICAgICAgRk1UX0VOQUJMRV9JRihkZXRhaWw6OmlzX291dHB1dF9pdGVyYXRvcjxPdXRw dXRJdCwgQ2hhcj46OnZhbHVlJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWls Ojppc19leG90aWNfY2hhcjxDaGFyPjo6dmFsdWUpPgorLWF1dG8gdmZvcm1hdF90byhPdXRwdXRJ dCBvdXQsIGNvbnN0IFMmIGZvcm1hdF9zdHIsCistICAgICAgICAgICAgICAgIGJhc2ljX2Zvcm1h dF9hcmdzPGJ1ZmZlcl9jb250ZXh0PHR5cGVfaWRlbnRpdHlfdDxDaGFyPj4+IGFyZ3MpCistICAg IC0+IE91dHB1dEl0IHsKKy0gIGF1dG8mJiBidWYgPSBkZXRhaWw6OmdldF9idWZmZXI8Q2hhcj4o b3V0KTsKKy0gIGRldGFpbDo6dmZvcm1hdF90byhidWYsIHRvX3N0cmluZ192aWV3KGZvcm1hdF9z dHIpLCBhcmdzKTsKKy0gIHJldHVybiBkZXRhaWw6OmdldF9pdGVyYXRvcihidWYpOworLX0KKy0K Ky10ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIFMsIHR5cGVuYW1lLi4uIEFy Z3MsCistICAgICAgICAgIHR5cGVuYW1lIENoYXIgPSBjaGFyX3Q8Uz4sCistICAgICAgICAgIEZN VF9FTkFCTEVfSUYoZGV0YWlsOjppc19vdXRwdXRfaXRlcmF0b3I8T3V0cHV0SXQsIENoYXI+Ojp2 YWx1ZSYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6aXNfZXhvdGljX2No YXI8Q2hhcj46OnZhbHVlKT4KKy1pbmxpbmUgYXV0byBmb3JtYXRfdG8oT3V0cHV0SXQgb3V0LCBj b25zdCBTJiBmbXQsIEFyZ3MmJi4uLiBhcmdzKSAtPiBPdXRwdXRJdCB7CistICBjb25zdCBhdXRv JiB2YXJncyA9IGZtdDo6bWFrZV9hcmdzX2NoZWNrZWQ8QXJncy4uLj4oZm10LCBhcmdzLi4uKTsK Ky0gIHJldHVybiB2Zm9ybWF0X3RvKG91dCwgdG9fc3RyaW5nX3ZpZXcoZm10KSwgdmFyZ3MpOwor LX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUuLi4gQXJncywgdHlwZW5hbWUg Q2hhciwgc2l6ZV90IFNJWkUsCistICAgICAgICAgIHR5cGVuYW1lIEFsbG9jYXRvciwgRk1UX0VO QUJMRV9JRihkZXRhaWw6OmlzX3N0cmluZzxTPjo6dmFsdWUpPgorLUZNVF9ERVBSRUNBVEVEIGF1 dG8gZm9ybWF0X3RvKGJhc2ljX21lbW9yeV9idWZmZXI8Q2hhciwgU0laRSwgQWxsb2NhdG9yPiYg YnVmLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFMmIGZvcm1hdF9zdHIs IEFyZ3MmJi4uLiBhcmdzKSAtPgorLSAgICB0eXBlbmFtZSBidWZmZXJfY29udGV4dDxDaGFyPjo6 aXRlcmF0b3IgeworLSAgY29uc3QgYXV0byYgdmFyZ3MgPSBmbXQ6Om1ha2VfYXJnc19jaGVja2Vk PEFyZ3MuLi4+KGZvcm1hdF9zdHIsIGFyZ3MuLi4pOworLSAgZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1 ZiwgdG9fc3RyaW5nX3ZpZXcoZm9ybWF0X3N0ciksIHZhcmdzLCB7fSk7CistICByZXR1cm4gZGV0 YWlsOjpidWZmZXJfYXBwZW5kZXI8Q2hhcj4oYnVmKTsKKy19CistCistdGVtcGxhdGUgPHR5cGVu YW1lIExvY2FsZSwgdHlwZW5hbWUgUywgdHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lLi4uIEFy Z3MsCistICAgICAgICAgIHR5cGVuYW1lIENoYXIgPSBjaGFyX3Q8Uz4sCistICAgICAgICAgIEZN VF9FTkFCTEVfSUYoZGV0YWlsOjppc19vdXRwdXRfaXRlcmF0b3I8T3V0cHV0SXQsIENoYXI+Ojp2 YWx1ZSYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6aXNfbG9jYWxlPExv Y2FsZT46OnZhbHVlJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6 aXNfZXhvdGljX2NoYXI8Q2hhcj46OnZhbHVlKT4KKy1pbmxpbmUgYXV0byB2Zm9ybWF0X3RvKAor LSAgICBPdXRwdXRJdCBvdXQsIGNvbnN0IExvY2FsZSYgbG9jLCBjb25zdCBTJiBmb3JtYXRfc3Ry LAorLSAgICBiYXNpY19mb3JtYXRfYXJnczxidWZmZXJfY29udGV4dDx0eXBlX2lkZW50aXR5X3Q8 Q2hhcj4+PiBhcmdzKSAtPiBPdXRwdXRJdCB7CistICBhdXRvJiYgYnVmID0gZGV0YWlsOjpnZXRf YnVmZmVyPENoYXI+KG91dCk7CistICB2Zm9ybWF0X3RvKGJ1ZiwgdG9fc3RyaW5nX3ZpZXcoZm9y bWF0X3N0ciksIGFyZ3MsIGRldGFpbDo6bG9jYWxlX3JlZihsb2MpKTsKKy0gIHJldHVybiBkZXRh aWw6OmdldF9pdGVyYXRvcihidWYpOworLX0KKy0KKy10ZW1wbGF0ZSA8CistICAgIHR5cGVuYW1l IE91dHB1dEl0LCB0eXBlbmFtZSBMb2NhbGUsIHR5cGVuYW1lIFMsIHR5cGVuYW1lLi4uIEFyZ3Ms CistICAgIHR5cGVuYW1lIENoYXIgPSBjaGFyX3Q8Uz4sCistICAgIGJvb2wgZW5hYmxlID0gZGV0 YWlsOjppc19vdXRwdXRfaXRlcmF0b3I8T3V0cHV0SXQsIENoYXI+Ojp2YWx1ZSYmCistICAgICAg ICBkZXRhaWw6OmlzX2xvY2FsZTxMb2NhbGU+Ojp2YWx1ZSYmIGRldGFpbDo6aXNfZXhvdGljX2No YXI8Q2hhcj46OnZhbHVlPgorLWlubGluZSBhdXRvIGZvcm1hdF90byhPdXRwdXRJdCBvdXQsIGNv bnN0IExvY2FsZSYgbG9jLCBjb25zdCBTJiBmb3JtYXRfc3RyLAorLSAgICAgICAgICAgICAgICAg ICAgICBBcmdzJiYuLi4gYXJncykgLT4KKy0gICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ZW5h YmxlLCBPdXRwdXRJdD46OnR5cGUgeworLSAgY29uc3QgYXV0byYgdmFyZ3MgPSBmbXQ6Om1ha2Vf YXJnc19jaGVja2VkPEFyZ3MuLi4+KGZvcm1hdF9zdHIsIGFyZ3MuLi4pOworLSAgcmV0dXJuIHZm b3JtYXRfdG8ob3V0LCBsb2MsIHRvX3N0cmluZ192aWV3KGZvcm1hdF9zdHIpLCB2YXJncyk7Cist fQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRJdCwgdHlwZW5hbWUgQ2hhciwgdHlwZW5h bWUuLi4gQXJncywKKy0gICAgICAgICAgRk1UX0VOQUJMRV9JRihkZXRhaWw6OmlzX291dHB1dF9p dGVyYXRvcjxPdXRwdXRJdCwgQ2hhcj46OnZhbHVlJiYKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGV0YWlsOjppc19leG90aWNfY2hhcjxDaGFyPjo6dmFsdWUpPgorLWlubGluZSBhdXRv IHZmb3JtYXRfdG9fbigKKy0gICAgT3V0cHV0SXQgb3V0LCBzaXplX3QgbiwgYmFzaWNfc3RyaW5n X3ZpZXc8Q2hhcj4gZm9ybWF0X3N0ciwKKy0gICAgYmFzaWNfZm9ybWF0X2FyZ3M8YnVmZmVyX2Nv bnRleHQ8dHlwZV9pZGVudGl0eV90PENoYXI+Pj4gYXJncykKKy0gICAgLT4gZm9ybWF0X3RvX25f cmVzdWx0PE91dHB1dEl0PiB7CistICBkZXRhaWw6Oml0ZXJhdG9yX2J1ZmZlcjxPdXRwdXRJdCwg Q2hhciwgZGV0YWlsOjpmaXhlZF9idWZmZXJfdHJhaXRzPiBidWYob3V0LAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG4pOworLSAgZGV0YWlsOjp2Zm9ybWF0X3RvKGJ1ZiwgZm9ybWF0X3N0ciwgYXJncyk7 CistICByZXR1cm4ge2J1Zi5vdXQoKSwgYnVmLmNvdW50KCl9OworLX0KKy0KKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgT3V0cHV0SXQsIHR5cGVuYW1lIFMsIHR5cGVuYW1lLi4uIEFyZ3MsCistICAgICAg ICAgIHR5cGVuYW1lIENoYXIgPSBjaGFyX3Q8Uz4sCistICAgICAgICAgIEZNVF9FTkFCTEVfSUYo ZGV0YWlsOjppc19vdXRwdXRfaXRlcmF0b3I8T3V0cHV0SXQsIENoYXI+Ojp2YWx1ZSYmCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6aXNfZXhvdGljX2NoYXI8Q2hhcj46OnZh bHVlKT4KKy1pbmxpbmUgYXV0byBmb3JtYXRfdG9fbihPdXRwdXRJdCBvdXQsIHNpemVfdCBuLCBj b25zdCBTJiBmbXQsCistICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJncyYuLi4gYXJn cykgLT4gZm9ybWF0X3RvX25fcmVzdWx0PE91dHB1dEl0PiB7CistICBjb25zdCBhdXRvJiB2YXJn cyA9IGZtdDo6bWFrZV9hcmdzX2NoZWNrZWQ8QXJncy4uLj4oZm10LCBhcmdzLi4uKTsKKy0gIHJl dHVybiB2Zm9ybWF0X3RvX24ob3V0LCBuLCB0b19zdHJpbmdfdmlldyhmbXQpLCB2YXJncyk7Cist fQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZS4uLiBBcmdzLCB0eXBlbmFtZSBD aGFyID0gY2hhcl90PFM+LAorLSAgICAgICAgICBGTVRfRU5BQkxFX0lGKGRldGFpbDo6aXNfZXhv dGljX2NoYXI8Q2hhcj46OnZhbHVlKT4KKy1pbmxpbmUgYXV0byBmb3JtYXR0ZWRfc2l6ZShjb25z dCBTJiBmbXQsIEFyZ3MmJi4uLiBhcmdzKSAtPiBzaXplX3QgeworLSAgZGV0YWlsOjpjb3VudGlu Z19idWZmZXI8Q2hhcj4gYnVmOworLSAgY29uc3QgYXV0byYgdmFyZ3MgPSBmbXQ6Om1ha2VfYXJn c19jaGVja2VkPEFyZ3MuLi4+KGZtdCwgYXJncy4uLik7CistICBkZXRhaWw6OnZmb3JtYXRfdG8o YnVmLCB0b19zdHJpbmdfdmlldyhmbXQpLCB2YXJncyk7CistICByZXR1cm4gYnVmLmNvdW50KCk7 CistfQorLQorLWlubGluZSB2b2lkIHZwcmludChzdGQ6OkZJTEUqIGYsIHdzdHJpbmdfdmlldyBm bXQsIHdmb3JtYXRfYXJncyBhcmdzKSB7CistICB3bWVtb3J5X2J1ZmZlciBidWZmZXI7CistICBk ZXRhaWw6OnZmb3JtYXRfdG8oYnVmZmVyLCBmbXQsIGFyZ3MpOworLSAgYnVmZmVyLnB1c2hfYmFj ayhMJ1wwJyk7CistICBpZiAoc3RkOjpmcHV0d3MoYnVmZmVyLmRhdGEoKSwgZikgPT0gLTEpCist ICAgIEZNVF9USFJPVyhzeXN0ZW1fZXJyb3IoZXJybm8sIEZNVF9TVFJJTkcoImNhbm5vdCB3cml0 ZSB0byBmaWxlIikpKTsKKy19CistCistaW5saW5lIHZvaWQgdnByaW50KHdzdHJpbmdfdmlldyBm bXQsIHdmb3JtYXRfYXJncyBhcmdzKSB7CistICB2cHJpbnQoc3Rkb3V0LCBmbXQsIGFyZ3MpOwor LX0KKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVD4KKy12b2lkIHByaW50KHN0ZDo6RklMRSog Ziwgd2Zvcm1hdF9zdHJpbmc8VC4uLj4gZm10LCBUJiYuLi4gYXJncykgeworLSAgcmV0dXJuIHZw cmludChmLCB3c3RyaW5nX3ZpZXcoZm10KSwgZm10OjptYWtlX3dmb3JtYXRfYXJncyhhcmdzLi4u KSk7CistfQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUPiB2b2lkIHByaW50KHdmb3JtYXRf c3RyaW5nPFQuLi4+IGZtdCwgVCYmLi4uIGFyZ3MpIHsKKy0gIHJldHVybiB2cHJpbnQod3N0cmlu Z192aWV3KGZtdCksIGZtdDo6bWFrZV93Zm9ybWF0X2FyZ3MoYXJncy4uLikpOworLX0KKy0KKy0v KioKKy0gIENvbnZlcnRzICp2YWx1ZSogdG8gYGBzdGQ6OndzdHJpbmdgYCB1c2luZyB0aGUgZGVm YXVsdCBmb3JtYXQgZm9yIHR5cGUgKlQqLgorLSAqLworLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBp bmxpbmUgYXV0byB0b193c3RyaW5nKGNvbnN0IFQmIHZhbHVlKSAtPiBzdGQ6OndzdHJpbmcgewor LSAgcmV0dXJuIGZvcm1hdChGTVRfU1RSSU5HKEwie30iKSwgdmFsdWUpOworLX0KKy1GTVRfTU9E VUxFX0VYUE9SVF9FTkQKKy1GTVRfRU5EX05BTUVTUEFDRQorLQorLSNlbmRpZiAgLy8gRk1UX1hD SEFSX0hfCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvaW50ZWdyYXRpb24uaCBiL2luY2x1ZGUv ZHBwL2ludGVncmF0aW9uLmgKK2luZGV4IDQyMGM4ZDguLjY4MTVjM2MgMTAwNjQ0CistLS0gYS9p bmNsdWRlL2RwcC9pbnRlZ3JhdGlvbi5oCisrKysgYi9pbmNsdWRlL2RwcC9pbnRlZ3JhdGlvbi5o CitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvZXhwb3J0Lmg+CisgI2luY2x1ZGUg PGRwcC9zbm93Zmxha2UuaD4KKyAjaW5jbHVkZSA8ZHBwL21hbmFnZWQuaD4KKy0jaW5jbHVkZSA8 ZHBwL25sb2htYW5uL2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbl9md2Qu aHBwPgorICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorICNpbmNsdWRlIDxkcHAvanNvbl9pbnRl cmZhY2UuaD4KKyAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2RwcC9pbnZpdGUuaCBiL2luY2x1ZGUv ZHBwL2ludml0ZS5oCitpbmRleCBlYWU2MmE5Li5lODk3N2E4IDEwMDY0NAorLS0tIGEvaW5jbHVk ZS9kcHAvaW52aXRlLmgKKysrKyBiL2luY2x1ZGUvZHBwL2ludml0ZS5oCitAQCAtMjEsNyArMjEs NyBAQAorICNwcmFnbWEgb25jZQorICNpbmNsdWRlIDxkcHAvZXhwb3J0Lmg+CisgI2luY2x1ZGUg PGRwcC9zbm93Zmxha2UuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndkLmhwcD4K KysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbl9md2QuaHBwPgorICNpbmNsdWRlIDxkcHAvc3RhZ2Vf aW5zdGFuY2UuaD4KKyAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyAjaW5jbHVkZSA8ZHBwL2pz b25faW50ZXJmYWNlLmg+CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvanNvbl9pbnRlcmZhY2Uu aCBiL2luY2x1ZGUvZHBwL2pzb25faW50ZXJmYWNlLmgKK2luZGV4IDMwMjY0MmQuLmUyZTQ2N2Eg MTAwNjQ0CistLS0gYS9pbmNsdWRlL2RwcC9qc29uX2ludGVyZmFjZS5oCisrKysgYi9pbmNsdWRl L2RwcC9qc29uX2ludGVyZmFjZS5oCitAQCAtMjIsNyArMjIsNyBAQAorICNwcmFnbWEgb25jZQor ICNpbmNsdWRlIDxkcHAvZXhwb3J0Lmg+CisgI2luY2x1ZGUgPGRwcC9leGNlcHRpb24uaD4KKy0j aW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4v anNvbl9md2QuaHBwPgorIAorIG5hbWVzcGFjZSBkcHAgeworIAkvKioKK2RpZmYgLS1naXQgYS9p bmNsdWRlL2RwcC9tZXNzYWdlLmggYi9pbmNsdWRlL2RwcC9tZXNzYWdlLmgKK2luZGV4IDFjODA1 NTMuLjA4ZGU0YzAgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2RwcC9tZXNzYWdlLmgKKysrKyBiL2lu Y2x1ZGUvZHBwL21lc3NhZ2UuaAorQEAgLTI3LDcgKzI3LDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2d1 aWxkLmg+CisgI2luY2x1ZGUgPG9wdGlvbmFsPgorICNpbmNsdWRlIDx2YXJpYW50PgorLSNpbmNs dWRlIDxkcHAvbmxvaG1hbm4vanNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29u X2Z3ZC5ocHA+CisgI2luY2x1ZGUgPGRwcC9qc29uX2ludGVyZmFjZS5oPgorIAorIG5hbWVzcGFj ZSBkcHAgeworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL25sb2htYW5uL2pzb24uaHBwIGIvaW5j bHVkZS9kcHAvbmxvaG1hbm4vanNvbi5ocHAKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5k ZXggY2IyN2UwNS4uMDAwMDAwMAorLS0tIGEvaW5jbHVkZS9kcHAvbmxvaG1hbm4vanNvbi5ocHAK KysrKyAvZGV2L251bGwKK0BAIC0xLDIyMDkxICswLDAgQEAKKy0vKgorLSAgICBfXyBfX19fXyBf X19fXyBfX19fXworLSBfX3wgIHwgICBfX3wgICAgIHwgICB8IHwgIEpTT04gZm9yIE1vZGVybiBD KysKKy18ICB8ICB8X18gICB8ICB8ICB8IHwgfCB8ICB2ZXJzaW9uIDMuMTAuNQorLXxfX19fX3xf X19fX3xfX19fX3xffF9fX3wgIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uCistCist TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIDxodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvTUlUPi4KKy1TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCistQ29weXJpZ2h0IChj KSAyMDEzLTIwMjIgTmllbHMgTG9obWFubiA8aHR0cDovL25sb2htYW5uLm1lPi4KKy0KKy1QZXJt aXNzaW9uIGlzIGhlcmVieSAgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSAgcGVyc29u IG9idGFpbmluZyBhIGNvcHkKKy1vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkICBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKy1pbiB0aGUgU29mdHdh cmUgIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0ICBsaW1pdGF0aW9uIHRo ZSByaWdodHMKKy10byAgdXNlLCBjb3B5LCAgbW9kaWZ5LCBtZXJnZSwgIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsICBzdWJsaWNlbnNlLCBhbmQvb3IgIHNlbGwKKy1jb3BpZXMgIG9mICB0aGUgU29mdHdh cmUsICBhbmQgIHRvICBwZXJtaXQgcGVyc29ucyAgdG8gIHdob20gIHRoZSBTb2Z0d2FyZSAgaXMK Ky1mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorLQorLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorLWNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCistCistVEhFIFNPRlRXQVJFICBJUyBQUk9WSURFRCAiQVMg IElTIiwgV0lUSE9VVCBXQVJSQU5UWSAgT0YgQU5ZIEtJTkQsICBFWFBSRVNTIE9SCistSU1QTElF RCwgIElOQ0xVRElORyBCVVQgIE5PVCAgTElNSVRFRCBUTyAgVEhFICBXQVJSQU5USUVTIE9GICBN RVJDSEFOVEFCSUxJVFksCistRklUTkVTUyBGT1IgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCAg Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCAgU0hBTEwgVEhFCistQVVUSE9SUyAgT1IgQ09Q WVJJR0hUICBIT0xERVJTICBCRSAgTElBQkxFIEZPUiAgQU5ZICBDTEFJTSwgIERBTUFHRVMgT1Ig IE9USEVSCistTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiAgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCistT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCist U09GVFdBUkUuCistKi8KKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKy0gKiBOb3RlIG9uIGRv Y3VtZW50YXRpb246IFRoZSBzb3VyY2UgZmlsZXMgY29udGFpbiBsaW5rcyB0byB0aGUgb25saW5l ICAgICAgKgorLSAqIGRvY3VtZW50YXRpb24gb2YgdGhlIHB1YmxpYyBBUEkgYXQgaHR0cHM6Ly9q c29uLm5sb2htYW5uLm1lLiBUaGlzIFVSTCAgICAqCistICogY29udGFpbnMgdGhlIG1vc3QgcmVj ZW50IGRvY3VtZW50YXRpb24gYW5kIHNob3VsZCBhbHNvIGJlIGFwcGxpY2FibGUgdG8gICoKKy0g KiBwcmV2aW91cyB2ZXJzaW9uczsgZG9jdW1lbnRhdGlvbiBmb3IgZGVwcmVjYXRlZCBmdW5jdGlv bnMgaXMgbm90ICAgICAgICAgKgorLSAqIHJlbW92ZWQsIGJ1dCBtYXJrZWQgZGVwcmVjYXRlZC4g U2VlICJHZW5lcmF0ZSBkb2N1bWVudGF0aW9uIiBzZWN0aW9uIGluICAqCistICogZmlsZSBkb2Mv UkVBRE1FLm1kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICoKKy1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0KKy0jaWZuZGVmIElOQ0xVREVfTkxP SE1BTk5fSlNPTl9IUFBfCistI2RlZmluZSBJTkNMVURFX05MT0hNQU5OX0pTT05fSFBQXworLQor LSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9WRVJTSU9OX01BSk9SIDMKKy0jZGVmaW5lIE5MT0hNQU5O X0pTT05fVkVSU0lPTl9NSU5PUiAxMAorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9WRVJTSU9OX1BB VENIIDUKKy0KKy0jaW5jbHVkZSA8YWxnb3JpdGhtPiAvLyBhbGxfb2YsIGZpbmQsIGZvcl9lYWNo CistI2luY2x1ZGUgPGNzdGRkZWY+IC8vIG51bGxwdHJfdCwgcHRyZGlmZl90LCBzaXplX3QKKy0j aW5jbHVkZSA8ZnVuY3Rpb25hbD4gLy8gaGFzaCwgbGVzcworLSNpbmNsdWRlIDxpbml0aWFsaXpl cl9saXN0PiAvLyBpbml0aWFsaXplcl9saXN0CistI2lmbmRlZiBKU09OX05PX0lPCistICAgICNp bmNsdWRlIDxpb3Nmd2Q+IC8vIGlzdHJlYW0sIG9zdHJlYW0KKy0jZW5kaWYgIC8vIEpTT05fTk9f SU8KKy0jaW5jbHVkZSA8aXRlcmF0b3I+IC8vIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnCist I2luY2x1ZGUgPG1lbW9yeT4gLy8gdW5pcXVlX3B0cgorLSNpbmNsdWRlIDxudW1lcmljPiAvLyBh Y2N1bXVsYXRlCistI2luY2x1ZGUgPHN0cmluZz4gLy8gc3RyaW5nLCBzdG9pLCB0b19zdHJpbmcK Ky0jaW5jbHVkZSA8dXRpbGl0eT4gLy8gZGVjbHZhbCwgZm9yd2FyZCwgbW92ZSwgcGFpciwgc3dh cAorLSNpbmNsdWRlIDx2ZWN0b3I+IC8vIHZlY3RvcgorLQorLS8vICNpbmNsdWRlIDxubG9obWFu bi9hZGxfc2VyaWFsaXplci5ocHA+CistCistCistI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorLSNp bmNsdWRlIDx1dGlsaXR5PgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvY29udmVy c2lvbnMvZnJvbV9qc29uLmhwcD4KKy0KKy0KKy0jaW5jbHVkZSA8YWxnb3JpdGhtPiAvLyB0cmFu c2Zvcm0KKy0jaW5jbHVkZSA8YXJyYXk+IC8vIGFycmF5CistI2luY2x1ZGUgPGZvcndhcmRfbGlz dD4gLy8gZm9yd2FyZF9saXN0CistI2luY2x1ZGUgPGl0ZXJhdG9yPiAvLyBpbnNlcnRlciwgZnJv bnRfaW5zZXJ0ZXIsIGVuZAorLSNpbmNsdWRlIDxtYXA+IC8vIG1hcAorLSNpbmNsdWRlIDxzdHJp bmc+IC8vIHN0cmluZworLSNpbmNsdWRlIDx0dXBsZT4gLy8gdHVwbGUsIG1ha2VfdHVwbGUKKy0j aW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIGlzX2FyaXRobWV0aWMsIGlzX3NhbWUsIGlzX2VudW0s IHVuZGVybHlpbmdfdHlwZSwgaXNfY29udmVydGlibGUKKy0jaW5jbHVkZSA8dW5vcmRlcmVkX21h cD4gLy8gdW5vcmRlcmVkX21hcAorLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBwYWlyLCBkZWNsdmFs CistI2luY2x1ZGUgPHZhbGFycmF5PiAvLyB2YWxhcnJheQorLQorLS8vICNpbmNsdWRlIDxubG9o bWFubi9kZXRhaWwvZXhjZXB0aW9ucy5ocHA+CistCistCistI2luY2x1ZGUgPGV4Y2VwdGlvbj4g Ly8gZXhjZXB0aW9uCistI2luY2x1ZGUgPHN0ZGV4Y2VwdD4gLy8gcnVudGltZV9lcnJvcgorLSNp bmNsdWRlIDxzdHJpbmc+IC8vIHRvX3N0cmluZworLSNpbmNsdWRlIDx2ZWN0b3I+IC8vIHZlY3Rv cgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvdmFsdWVfdC5ocHA+CistCistCist I2luY2x1ZGUgPGFycmF5PiAvLyBhcnJheQorLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QK Ky0jaW5jbHVkZSA8Y3N0ZGludD4gLy8gdWludDhfdAorLSNpbmNsdWRlIDxzdHJpbmc+IC8vIHN0 cmluZworLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCistewor LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLS8vIEpTT04gdHlwZSBlbnVtZXJhdGlvbiAv LworLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLS8qIQorLUBicmllZiB0aGUgSlNP TiB0eXBlIGVudW1lcmF0aW9uCistCistVGhpcyBlbnVtZXJhdGlvbiBjb2xsZWN0cyB0aGUgZGlm ZmVyZW50IEpTT04gdHlwZXMuIEl0IGlzIGludGVybmFsbHkgdXNlZCB0bworLWRpc3Rpbmd1aXNo IHRoZSBzdG9yZWQgdmFsdWVzLCBhbmQgdGhlIGZ1bmN0aW9ucyBAcmVmIGJhc2ljX2pzb246Omlz X251bGwoKSwKKy1AcmVmIGJhc2ljX2pzb246OmlzX29iamVjdCgpLCBAcmVmIGJhc2ljX2pzb246 OmlzX2FycmF5KCksCistQHJlZiBiYXNpY19qc29uOjppc19zdHJpbmcoKSwgQHJlZiBiYXNpY19q c29uOjppc19ib29sZWFuKCksCistQHJlZiBiYXNpY19qc29uOjppc19udW1iZXIoKSAod2l0aCBA cmVmIGJhc2ljX2pzb246OmlzX251bWJlcl9pbnRlZ2VyKCksCistQHJlZiBiYXNpY19qc29uOjpp c19udW1iZXJfdW5zaWduZWQoKSwgYW5kIEByZWYgYmFzaWNfanNvbjo6aXNfbnVtYmVyX2Zsb2F0 KCkpLAorLUByZWYgYmFzaWNfanNvbjo6aXNfZGlzY2FyZGVkKCksIEByZWYgYmFzaWNfanNvbjo6 aXNfcHJpbWl0aXZlKCksIGFuZAorLUByZWYgYmFzaWNfanNvbjo6aXNfc3RydWN0dXJlZCgpIHJl bHkgb24gaXQuCistCistQG5vdGUgVGhlcmUgYXJlIHRocmVlIGVudW1lcmF0aW9uIGVudHJpZXMg KG51bWJlcl9pbnRlZ2VyLCBudW1iZXJfdW5zaWduZWQsIGFuZAorLW51bWJlcl9mbG9hdCksIGJl Y2F1c2UgdGhlIGxpYnJhcnkgZGlzdGluZ3Vpc2hlcyB0aGVzZSB0aHJlZSB0eXBlcyBmb3IgbnVt YmVyczoKKy1AcmVmIGJhc2ljX2pzb246Om51bWJlcl91bnNpZ25lZF90IGlzIHVzZWQgZm9yIHVu c2lnbmVkIGludGVnZXJzLAorLUByZWYgYmFzaWNfanNvbjo6bnVtYmVyX2ludGVnZXJfdCBpcyB1 c2VkIGZvciBzaWduZWQgaW50ZWdlcnMsIGFuZAorLUByZWYgYmFzaWNfanNvbjo6bnVtYmVyX2Zs b2F0X3QgaXMgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBvciB0bworLWFwcHJveGlt YXRlIGludGVnZXJzIHdoaWNoIGRvIG5vdCBmaXQgaW4gdGhlIGxpbWl0cyBvZiB0aGVpciByZXNw ZWN0aXZlIHR5cGUuCistCistQHNhIHNlZSBAcmVmIGJhc2ljX2pzb246OmJhc2ljX2pzb24oY29u c3QgdmFsdWVfdCB2YWx1ZV90eXBlKSAtLSBjcmVhdGUgYSBKU09OCistdmFsdWUgd2l0aCB0aGUg ZGVmYXVsdCB2YWx1ZSBmb3IgYSBnaXZlbiB0eXBlCistCistQHNpbmNlIHZlcnNpb24gMS4wLjAK Ky0qLworLWVudW0gY2xhc3MgdmFsdWVfdCA6IHN0ZDo6dWludDhfdAorLXsKKy0gICAgbnVsbCwg ICAgICAgICAgICAgLy8vPCBudWxsIHZhbHVlCistICAgIG9iamVjdCwgICAgICAgICAgIC8vLzwg b2JqZWN0ICh1bm9yZGVyZWQgc2V0IG9mIG5hbWUvdmFsdWUgcGFpcnMpCistICAgIGFycmF5LCAg ICAgICAgICAgIC8vLzwgYXJyYXkgKG9yZGVyZWQgY29sbGVjdGlvbiBvZiB2YWx1ZXMpCistICAg IHN0cmluZywgICAgICAgICAgIC8vLzwgc3RyaW5nIHZhbHVlCistICAgIGJvb2xlYW4sICAgICAg ICAgIC8vLzwgYm9vbGVhbiB2YWx1ZQorLSAgICBudW1iZXJfaW50ZWdlciwgICAvLy88IG51bWJl ciB2YWx1ZSAoc2lnbmVkIGludGVnZXIpCistICAgIG51bWJlcl91bnNpZ25lZCwgIC8vLzwgbnVt YmVyIHZhbHVlICh1bnNpZ25lZCBpbnRlZ2VyKQorLSAgICBudW1iZXJfZmxvYXQsICAgICAvLy88 IG51bWJlciB2YWx1ZSAoZmxvYXRpbmctcG9pbnQpCistICAgIGJpbmFyeSwgICAgICAgICAgIC8v LzwgYmluYXJ5IGFycmF5IChvcmRlcmVkIGNvbGxlY3Rpb24gb2YgYnl0ZXMpCistICAgIGRpc2Nh cmRlZCAgICAgICAgIC8vLzwgZGlzY2FyZGVkIGJ5IHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rp b24KKy19OworLQorLS8qIQorLUBicmllZiBjb21wYXJpc29uIG9wZXJhdG9yIGZvciBKU09OIHR5 cGVzCistCistUmV0dXJucyBhbiBvcmRlcmluZyB0aGF0IGlzIHNpbWlsYXIgdG8gUHl0aG9uOgor LS0gb3JkZXI6IG51bGwgPCBib29sZWFuIDwgbnVtYmVyIDwgb2JqZWN0IDwgYXJyYXkgPCBzdHJp bmcgPCBiaW5hcnkKKy0tIGZ1cnRoZXJtb3JlLCBlYWNoIHR5cGUgaXMgbm90IHNtYWxsZXIgdGhh biBpdHNlbGYKKy0tIGRpc2NhcmRlZCB2YWx1ZXMgYXJlIG5vdCBjb21wYXJhYmxlCistLSBiaW5h cnkgaXMgcmVwcmVzZW50ZWQgYXMgYSBiIiIgc3RyaW5nIGluIHB5dGhvbiBhbmQgZGlyZWN0bHkg Y29tcGFyYWJsZSB0byBhCistICBzdHJpbmc7IGhvd2V2ZXIsIG1ha2luZyBhIGJpbmFyeSBhcnJh eSBkaXJlY3RseSBjb21wYXJhYmxlIHdpdGggYSBzdHJpbmcgd291bGQKKy0gIGJlIHN1cnByaXNp bmcgYmVoYXZpb3IgaW4gYSBKU09OIGZpbGUuCistCistQHNpbmNlIHZlcnNpb24gMS4wLjAKKy0q LworLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCB2YWx1ZV90IGxocywgY29uc3QgdmFsdWVf dCByaHMpIG5vZXhjZXB0CisteworLSAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8c3Rk Ojp1aW50OF90LCA5PiBvcmRlciA9IHt7CistICAgICAgICAgICAgMCAvKiBudWxsICovLCAzIC8q IG9iamVjdCAqLywgNCAvKiBhcnJheSAqLywgNSAvKiBzdHJpbmcgKi8sCistICAgICAgICAgICAg MSAvKiBib29sZWFuICovLCAyIC8qIGludGVnZXIgKi8sIDIgLyogdW5zaWduZWQgKi8sIDIgLyog ZmxvYXQgKi8sCistICAgICAgICAgICAgNiAvKiBiaW5hcnkgKi8KKy0gICAgICAgIH0KKy0gICAg fTsKKy0KKy0gICAgY29uc3QgYXV0byBsX2luZGV4ID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+ KGxocyk7CistICAgIGNvbnN0IGF1dG8gcl9pbmRleCA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90 PihyaHMpOworLSAgICByZXR1cm4gbF9pbmRleCA8IG9yZGVyLnNpemUoKSAmJiByX2luZGV4IDwg b3JkZXIuc2l6ZSgpICYmIG9yZGVyW2xfaW5kZXhdIDwgb3JkZXJbcl9pbmRleF07CistfQorLX0g IC8vIG5hbWVzcGFjZSBkZXRhaWwKKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAj aW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL3N0cmluZ19lc2NhcGUuaHBwPgorLQorLQorLSNpbmNs dWRlIDxzdHJpbmc+CistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tYWNyb19zY29wZS5o cHA+CistCistCistI2luY2x1ZGUgPHV0aWxpdHk+IC8vIGRlY2x2YWwsIHBhaXIKKy0vLyAjaW5j bHVkZSA8bmxvaG1hbm4vdGhpcmRwYXJ0eS9oZWRsZXkvaGVkbGV5LmhwcD4KKy0KKy0KKy0vKiBI ZWRsZXkgLSBodHRwczovL25lbWVxdS5naXRodWIuaW8vaGVkbGV5CistICogQ3JlYXRlZCBieSBF dmFuIE5lbWVyc29uIDxldmFuQG5lbWVyc29uLmNvbT4KKy0gKgorLSAqIFRvIHRoZSBleHRlbnQg cG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbAorLSAq IGNvcHlyaWdodCBhbmQgcmVsYXRlZCBhbmQgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoaXMgc29m dHdhcmUgdG8KKy0gKiB0aGUgcHVibGljIGRvbWFpbiB3b3JsZHdpZGUuIFRoaXMgc29mdHdhcmUg aXMgZGlzdHJpYnV0ZWQgd2l0aG91dAorLSAqIGFueSB3YXJyYW50eS4KKy0gKgorLSAqIEZvciBk ZXRhaWxzLCBzZWUgPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJv LzEuMC8+LgorLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBDQzAtMS4wCistICovCistCist I2lmICFkZWZpbmVkKEpTT05fSEVETEVZX1ZFUlNJT04pIHx8IChKU09OX0hFRExFWV9WRVJTSU9O IDwgMTUpCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVkVSU0lPTikKKy0gICAgI3VuZGVmIEpT T05fSEVETEVZX1ZFUlNJT04KKy0jZW5kaWYKKy0jZGVmaW5lIEpTT05fSEVETEVZX1ZFUlNJT04g MTUKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9TVFJJTkdJRllfRVgpCistICAgICN1bmRl ZiBKU09OX0hFRExFWV9TVFJJTkdJRllfRVgKKy0jZW5kaWYKKy0jZGVmaW5lIEpTT05fSEVETEVZ X1NUUklOR0lGWV9FWCh4KSAjeAorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1NUUklOR0lG WSkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1NUUklOR0lGWQorLSNlbmRpZgorLSNkZWZpbmUg SlNPTl9IRURMRVlfU1RSSU5HSUZZKHgpIEpTT05fSEVETEVZX1NUUklOR0lGWV9FWCh4KQorLQor LSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NPTkNBVF9FWCkKKy0gICAgI3VuZGVmIEpTT05fSEVE TEVZX0NPTkNBVF9FWAorLSNlbmRpZgorLSNkZWZpbmUgSlNPTl9IRURMRVlfQ09OQ0FUX0VYKGEs YikgYSMjYgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NPTkNBVCkKKy0gICAgI3VuZGVm IEpTT05fSEVETEVZX0NPTkNBVAorLSNlbmRpZgorLSNkZWZpbmUgSlNPTl9IRURMRVlfQ09OQ0FU KGEsYikgSlNPTl9IRURMRVlfQ09OQ0FUX0VYKGEsYikKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hF RExFWV9DT05DQVQzX0VYKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQ09OQ0FUM19FWAorLSNl bmRpZgorLSNkZWZpbmUgSlNPTl9IRURMRVlfQ09OQ0FUM19FWChhLGIsYykgYSMjYiMjYworLQor LSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NPTkNBVDMpCistICAgICN1bmRlZiBKU09OX0hFRExF WV9DT05DQVQzCistI2VuZGlmCistI2RlZmluZSBKU09OX0hFRExFWV9DT05DQVQzKGEsYixjKSBK U09OX0hFRExFWV9DT05DQVQzX0VYKGEsYixjKQorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZ X1ZFUlNJT05fRU5DT0RFKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUK Ky0jZW5kaWYKKy0jZGVmaW5lIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKG1ham9yLG1pbm9y LHJldmlzaW9uKSAoKChtYWpvcikgKiAxMDAwMDAwKSArICgobWlub3IpICogMTAwMCkgKyAocmV2 aXNpb24pKQorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1ZFUlNJT05fREVDT0RFX01BSk9S KQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVkVSU0lPTl9ERUNPREVfTUFKT1IKKy0jZW5kaWYK Ky0jZGVmaW5lIEpTT05fSEVETEVZX1ZFUlNJT05fREVDT0RFX01BSk9SKHZlcnNpb24pICgodmVy c2lvbikgLyAxMDAwMDAwKQorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1ZFUlNJT05fREVD T0RFX01JTk9SKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVkVSU0lPTl9ERUNPREVfTUlOT1IK Ky0jZW5kaWYKKy0jZGVmaW5lIEpTT05fSEVETEVZX1ZFUlNJT05fREVDT0RFX01JTk9SKHZlcnNp b24pICgoKHZlcnNpb24pICUgMTAwMDAwMCkgLyAxMDAwKQorLQorLSNpZiBkZWZpbmVkKEpTT05f SEVETEVZX1ZFUlNJT05fREVDT0RFX1JFVklTSU9OKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlf VkVSU0lPTl9ERUNPREVfUkVWSVNJT04KKy0jZW5kaWYKKy0jZGVmaW5lIEpTT05fSEVETEVZX1ZF UlNJT05fREVDT0RFX1JFVklTSU9OKHZlcnNpb24pICgodmVyc2lvbikgJSAxMDAwKQorLQorLSNp ZiBkZWZpbmVkKEpTT05fSEVETEVZX0dOVUNfVkVSU0lPTikKKy0gICAgI3VuZGVmIEpTT05fSEVE TEVZX0dOVUNfVkVSU0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZp bmVkKF9fR05VQ19QQVRDSExFVkVMX18pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfR05VQ19W RVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKF9fR05VQ19fLCBfX0dOVUNfTUlOT1Jf XywgX19HTlVDX1BBVENITEVWRUxfXykKKy0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorLSAgICAj ZGVmaW5lIEpTT05fSEVETEVZX0dOVUNfVkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09E RShfX0dOVUNfXywgX19HTlVDX01JTk9SX18sIDApCistI2VuZGlmCistCistI2lmIGRlZmluZWQo SlNPTl9IRURMRVlfR05VQ19WRVJTSU9OX0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlf R05VQ19WRVJTSU9OX0NIRUNLCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfR05V Q19WRVJTSU9OKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dOVUNfVkVSU0lPTl9DSEVDSyht YWpvcixtaW5vcixwYXRjaCkgKEpTT05fSEVETEVZX0dOVUNfVkVSU0lPTiA+PSBKU09OX0hFRExF WV9WRVJTSU9OX0VOQ09ERShtYWpvciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVm aW5lIEpTT05fSEVETEVZX0dOVUNfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKDAp CistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OKQorLSAg ICAjdW5kZWYgSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OCistI2VuZGlmCistI2lmIGRlZmluZWQo X01TQ19GVUxMX1ZFUikgJiYgKF9NU0NfRlVMTF9WRVIgPj0gMTQwMDAwMDAwKSAmJiAhZGVmaW5l ZChfX0lDTCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT04gSlNPTl9IRURM RVlfVkVSU0lPTl9FTkNPREUoX01TQ19GVUxMX1ZFUiAvIDEwMDAwMDAwLCAoX01TQ19GVUxMX1ZF UiAlIDEwMDAwMDAwKSAvIDEwMDAwMCwgKF9NU0NfRlVMTF9WRVIgJSAxMDAwMDApIC8gMTAwKQor LSNlbGlmIGRlZmluZWQoX01TQ19GVUxMX1ZFUikgJiYgIWRlZmluZWQoX19JQ0wpCistICAgICNk ZWZpbmUgSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RF KF9NU0NfRlVMTF9WRVIgLyAxMDAwMDAwLCAoX01TQ19GVUxMX1ZFUiAlIDEwMDAwMDApIC8gMTAw MDAsIChfTVNDX0ZVTExfVkVSICUgMTAwMDApIC8gMTApCistI2VsaWYgZGVmaW5lZChfTVNDX1ZF UikgJiYgIWRlZmluZWQoX19JQ0wpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTVNWQ19WRVJT SU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKF9NU0NfVkVSIC8gMTAwLCBfTVNDX1ZFUiAl IDEwMCwgMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9NU1ZDX1ZFUlNJ T05fQ0hFQ0spCistICAgICN1bmRlZiBKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT05fQ0hFQ0sKKy0j ZW5kaWYKKy0jaWYgIWRlZmluZWQoSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OKQorLSAgICAjZGVm aW5lIEpTT05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKDAp CistI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCistICAgICNk ZWZpbmUgSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAo X01TQ19GVUxMX1ZFUiA+PSAoKG1ham9yICogMTAwMDAwMDApICsgKG1pbm9yICogMTAwMDAwKSAr IChwYXRjaCkpKQorLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxMjAw KQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5v cixwYXRjaCkgKF9NU0NfRlVMTF9WRVIgPj0gKChtYWpvciAqIDEwMDAwMDApICsgKG1pbm9yICog MTAwMDApICsgKHBhdGNoKSkpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9NU1ZD X1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpIChfTVNDX1ZFUiA+PSAoKG1ham9yICog MTAwKSArIChtaW5vcikpKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0lO VEVMX1ZFUlNJT04pCistICAgICN1bmRlZiBKU09OX0hFRExFWV9JTlRFTF9WRVJTSU9OCistI2Vu ZGlmCistI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgZGVmaW5lZChfX0lOVEVMX0NP TVBJTEVSX1VQREFURSkgJiYgIWRlZmluZWQoX19JQ0wpCistICAgICNkZWZpbmUgSlNPTl9IRURM RVlfSU5URUxfVkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX0lOVEVMX0NPTVBJ TEVSIC8gMTAwLCBfX0lOVEVMX0NPTVBJTEVSICUgMTAwLCBfX0lOVEVMX0NPTVBJTEVSX1VQREFU RSkKKy0jZWxpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmICFkZWZpbmVkKF9fSUNMKQor LSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT04gSlNPTl9IRURMRVlfVkVSU0lP Tl9FTkNPREUoX19JTlRFTF9DT01QSUxFUiAvIDEwMCwgX19JTlRFTF9DT01QSUxFUiAlIDEwMCwg MCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9JTlRFTF9WRVJTSU9OX0NI RUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfSU5URUxfVkVSU0lPTl9DSEVDSworLSNlbmRp ZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT04pCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfSU5URUxfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKEpTT05f SEVETEVZX0lOVEVMX1ZFUlNJT04gPj0gSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUobWFqb3Is IG1pbm9yLCBwYXRjaCkpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9JTlRFTF9W RVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVm aW5lZChKU09OX0hFRExFWV9JTlRFTF9DTF9WRVJTSU9OKQorLSAgICAjdW5kZWYgSlNPTl9IRURM RVlfSU5URUxfQ0xfVkVSU0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElM RVIpICYmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUl9VUERBVEUpICYmIGRlZmluZWQoX19JQ0wp CistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfSU5URUxfQ0xfVkVSU0lPTiBKU09OX0hFRExFWV9W RVJTSU9OX0VOQ09ERShfX0lOVEVMX0NPTVBJTEVSLCBfX0lOVEVMX0NPTVBJTEVSX1VQREFURSwg MCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9JTlRFTF9DTF9WRVJTSU9O X0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfSU5URUxfQ0xfVkVSU0lPTl9DSEVDSwor LSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0lOVEVMX0NMX1ZFUlNJT04pCistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfSU5URUxfQ0xfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixw YXRjaCkgKEpTT05fSEVETEVZX0lOVEVMX0NMX1ZFUlNJT04gPj0gSlNPTl9IRURMRVlfVkVSU0lP Tl9FTkNPREUobWFqb3IsIG1pbm9yLCBwYXRjaCkpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09O X0hFRExFWV9JTlRFTF9DTF9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0j ZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9QR0lfVkVSU0lPTikKKy0gICAgI3Vu ZGVmIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OCistI2VuZGlmCistI2lmIGRlZmluZWQoX19QR0kp ICYmIGRlZmluZWQoX19QR0lDX18pICYmIGRlZmluZWQoX19QR0lDX01JTk9SX18pICYmIGRlZmlu ZWQoX19QR0lDX1BBVENITEVWRUxfXykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9QR0lfVkVS U0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX1BHSUNfXywgX19QR0lDX01JTk9SX18s IF9fUEdJQ19QQVRDSExFVkVMX18pCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURM RVlfUEdJX1ZFUlNJT05fQ0hFQ0spCistICAgICN1bmRlZiBKU09OX0hFRExFWV9QR0lfVkVSU0lP Tl9DSEVDSworLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1BHSV9WRVJTSU9OKQor LSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBh dGNoKSAoSlNPTl9IRURMRVlfUEdJX1ZFUlNJT04gPj0gSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNP REUobWFqb3IsIG1pbm9yLCBwYXRjaCkpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9QR0lfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKDApCistI2VuZGlmCistCist I2lmIGRlZmluZWQoSlNPTl9IRURMRVlfU1VOUFJPX1ZFUlNJT04pCistICAgICN1bmRlZiBKU09O X0hFRExFWV9TVU5QUk9fVkVSU0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9fU1VOUFJPX0Mp ICYmIChfX1NVTlBST19DID4gMHgxMDAwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1NVTlBS T19WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKCgoKF9fU1VOUFJPX0MgPj4gMTYp ICYgMHhmKSAqIDEwKSArICgoX19TVU5QUk9fQyA+PiAxMikgJiAweGYpLCAoKChfX1NVTlBST19D ID4+IDgpICYgMHhmKSAqIDEwKSArICgoX19TVU5QUk9fQyA+PiA0KSAmIDB4ZiksIChfX1NVTlBS T19DICYgMHhmKSAqIDEwKQorLSNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykKKy0gICAgI2RlZmlu ZSBKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERSgo X19TVU5QUk9fQyA+PiA4KSAmIDB4ZiwgKF9fU1VOUFJPX0MgPj4gNCkgJiAweGYsIChfX1NVTlBS T19DKSAmIDB4ZikKKy0jZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiAoX19TVU5QUk9fQ0Mg PiAweDEwMDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfU1VOUFJPX1ZFUlNJT04gSlNPTl9I RURMRVlfVkVSU0lPTl9FTkNPREUoKCgoX19TVU5QUk9fQ0MgPj4gMTYpICYgMHhmKSAqIDEwKSAr ICgoX19TVU5QUk9fQ0MgPj4gMTIpICYgMHhmKSwgKCgoX19TVU5QUk9fQ0MgPj4gOCkgJiAweGYp ICogMTApICsgKChfX1NVTlBST19DQyA+PiA0KSAmIDB4ZiksIChfX1NVTlBST19DQyAmIDB4Zikg KiAxMCkKKy0jZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQorLSAgICAjZGVmaW5lIEpTT05fSEVE TEVZX1NVTlBST19WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKChfX1NVTlBST19D QyA+PiA4KSAmIDB4ZiwgKF9fU1VOUFJPX0NDID4+IDQpICYgMHhmLCAoX19TVU5QUk9fQ0MpICYg MHhmKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1NVTlBST19WRVJTSU9O X0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfU1VOUFJPX1ZFUlNJT05fQ0hFQ0sKKy0j ZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTikKKy0gICAgI2Rl ZmluZSBKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkg KEpTT05fSEVETEVZX1NVTlBST19WRVJTSU9OID49IEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RF KG1ham9yLCBtaW5vciwgcGF0Y2gpKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlf U1VOUFJPX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpICgwKQorLSNlbmRpZgorLQor LSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0VNU0NSSVBURU5fVkVSU0lPTikKKy0gICAgI3VuZGVm IEpTT05fSEVETEVZX0VNU0NSSVBURU5fVkVSU0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9f RU1TQ1JJUFRFTl9fKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0VNU0NSSVBURU5fVkVSU0lP TiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX0VNU0NSSVBURU5fbWFqb3JfXywgX19FTVND UklQVEVOX21pbm9yX18sIF9fRU1TQ1JJUFRFTl90aW55X18pCistI2VuZGlmCistCistI2lmIGRl ZmluZWQoSlNPTl9IRURMRVlfRU1TQ1JJUFRFTl9WRVJTSU9OX0NIRUNLKQorLSAgICAjdW5kZWYg SlNPTl9IRURMRVlfRU1TQ1JJUFRFTl9WRVJTSU9OX0NIRUNLCistI2VuZGlmCistI2lmIGRlZmlu ZWQoSlNPTl9IRURMRVlfRU1TQ1JJUFRFTl9WRVJTSU9OKQorLSAgICAjZGVmaW5lIEpTT05fSEVE TEVZX0VNU0NSSVBURU5fVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKEpTT05fSEVE TEVZX0VNU0NSSVBURU5fVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShtYWpv ciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0VNU0NS SVBURU5fVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKDApCistI2VuZGlmCistCist I2lmIGRlZmluZWQoSlNPTl9IRURMRVlfQVJNX1ZFUlNJT04pCistICAgICN1bmRlZiBKU09OX0hF RExFWV9BUk1fVkVSU0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9fQ0NfQVJNKSAmJiBkZWZp bmVkKF9fQVJNQ09NUElMRVJfVkVSU0lPTikKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9BUk1f VkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX0FSTUNPTVBJTEVSX1ZFUlNJT04g LyAxMDAwMDAwLCAoX19BUk1DT01QSUxFUl9WRVJTSU9OICUgMTAwMDAwMCkgLyAxMDAwMCwgKF9f QVJNQ09NUElMRVJfVkVSU0lPTiAlIDEwMDAwKSAvIDEwMCkKKy0jZWxpZiBkZWZpbmVkKF9fQ0Nf QVJNKSAmJiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9BUk1fVkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX0FSTUNDX1ZFUlNJT04g LyAxMDAwMDAwLCAoX19BUk1DQ19WRVJTSU9OICUgMTAwMDAwMCkgLyAxMDAwMCwgKF9fQVJNQ0Nf VkVSU0lPTiAlIDEwMDAwKSAvIDEwMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hF RExFWV9BUk1fVkVSU0lPTl9DSEVDSykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0FSTV9WRVJT SU9OX0NIRUNLCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfQVJNX1ZFUlNJT04p CistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3Is cGF0Y2gpIChKU09OX0hFRExFWV9BUk1fVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VO Q09ERShtYWpvciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVE TEVZX0FSTV9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0K Ky0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9JQk1fVkVSU0lPTikKKy0gICAgI3VuZGVmIEpTT05f SEVETEVZX0lCTV9WRVJTSU9OCistI2VuZGlmCistI2lmIGRlZmluZWQoX19pYm14bF9fKQorLSAg ICAjZGVmaW5lIEpTT05fSEVETEVZX0lCTV9WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5D T0RFKF9faWJteGxfdmVyc2lvbl9fLCBfX2libXhsX3JlbGVhc2VfXywgX19pYm14bF9tb2RpZmlj YXRpb25fXykKKy0jZWxpZiBkZWZpbmVkKF9feGxDX18pICYmIGRlZmluZWQoX194bENfdmVyX18p CistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfSUJNX1ZFUlNJT04gSlNPTl9IRURMRVlfVkVSU0lP Tl9FTkNPREUoX194bENfXyA+PiA4LCBfX3hsQ19fICYgMHhmZiwgKF9feGxDX3Zlcl9fID4+IDgp ICYgMHhmZikKKy0jZWxpZiBkZWZpbmVkKF9feGxDX18pCistICAgICNkZWZpbmUgSlNPTl9IRURM RVlfSUJNX1ZFUlNJT04gSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUoX194bENfXyA+PiA4LCBf X3hsQ19fICYgMHhmZiwgMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9J Qk1fVkVSU0lPTl9DSEVDSykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0lCTV9WRVJTSU9OX0NI RUNLCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfSUJNX1ZFUlNJT04pCistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfSUJNX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gp IChKU09OX0hFRExFWV9JQk1fVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERSht YWpvciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0lC TV9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYg ZGVmaW5lZChKU09OX0hFRExFWV9USV9WRVJTSU9OKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlf VElfVkVSU0lPTgorLSNlbmRpZgorLSNpZiBcCistICAgIGRlZmluZWQoX19USV9DT01QSUxFUl9W RVJTSU9OX18pICYmIFwKKy0gICAgKCBcCistICAgICAgZGVmaW5lZChfX1RNUzQ3MF9fKSB8fCBk ZWZpbmVkKF9fVElfQVJNX18pIHx8IFwKKy0gICAgICBkZWZpbmVkKF9fTVNQNDMwX18pIHx8IFwK Ky0gICAgICBkZWZpbmVkKF9fVE1TMzIwQzIwMDBfXykgXAorLSAgICApCistI2lmIChfX1RJX0NP TVBJTEVSX1ZFUlNJT05fXyA+PSAxNjAwMDAwMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9U SV9WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKF9fVElfQ09NUElMRVJfVkVSU0lP Tl9fIC8gMTAwMDAwMCwgKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fICUgMTAwMDAwMCkgLyAxMDAw LCAoX19USV9DT01QSUxFUl9WRVJTSU9OX18gJSAxMDAwKSkKKy0jZW5kaWYKKy0jZW5kaWYKKy0K Ky0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKQorLSAgICAjdW5kZWYg SlNPTl9IRURMRVlfVElfVkVSU0lPTl9DSEVDSworLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05f SEVETEVZX1RJX1ZFUlNJT04pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVElfVkVSU0lPTl9D SEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKEpTT05fSEVETEVZX1RJX1ZFUlNJT04gPj0gSlNPTl9I RURMRVlfVkVSU0lPTl9FTkNPREUobWFqb3IsIG1pbm9yLCBwYXRjaCkpCistI2Vsc2UKKy0gICAg I2RlZmluZSBKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAo MCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9USV9DTDIwMDBfVkVSU0lP TikKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OCistI2VuZGlmCist I2lmIGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pICYmIGRlZmluZWQoX19UTVMzMjBD MjAwMF9fKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OIEpTT05f SEVETEVZX1ZFUlNJT05fRU5DT0RFKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fIC8gMTAwMDAwMCwg KF9fVElfQ09NUElMRVJfVkVSU0lPTl9fICUgMTAwMDAwMCkgLyAxMDAwLCAoX19USV9DT01QSUxF Ul9WRVJTSU9OX18gJSAxMDAwKSkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExF WV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1RJX0NM MjAwMF9WRVJTSU9OX0NIRUNLCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElf Q0wyMDAwX1ZFUlNJT04pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJ T05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpIChKU09OX0hFRExFWV9USV9DTDIwMDBfVkVSU0lP TiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShtYWpvciwgbWlub3IsIHBhdGNoKSkKKy0j ZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OX0NIRUNLKG1h am9yLG1pbm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExF WV9USV9DTDQzMF9WRVJTSU9OKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVS U0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSAmJiBk ZWZpbmVkKF9fTVNQNDMwX18pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVS U0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXyAv IDEwMDAwMDAsIChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXyAlIDEwMDAwMDApIC8gMTAwMCwgKF9f VElfQ09NUElMRVJfVkVSU0lPTl9fICUgMTAwMCkpCistI2VuZGlmCistCistI2lmIGRlZmluZWQo SlNPTl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSykKKy0gICAgI3VuZGVmIEpTT05fSEVE TEVZX1RJX0NMNDMwX1ZFUlNJT05fQ0hFQ0sKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX0hF RExFWV9USV9DTDQzMF9WRVJTSU9OKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1RJX0NMNDMw X1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpIChKU09OX0hFRExFWV9USV9DTDQzMF9W RVJTSU9OID49IEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKG1ham9yLCBtaW5vciwgcGF0Y2gp KQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVD SyhtYWpvcixtaW5vcixwYXRjaCkgKDApCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9I RURMRVlfVElfQVJNQ0xfVkVSU0lPTikKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1RJX0FSTUNM X1ZFUlNJT04KKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykg JiYgKGRlZmluZWQoX19UTVM0NzBfXykgfHwgZGVmaW5lZChfX1RJX0FSTV9fKSkKKy0gICAgI2Rl ZmluZSBKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5D T0RFKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fIC8gMTAwMDAwMCwgKF9fVElfQ09NUElMRVJfVkVS U0lPTl9fICUgMTAwMDAwMCkgLyAxMDAwLCAoX19USV9DT01QSUxFUl9WRVJTSU9OX18gJSAxMDAw KSkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9O X0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVElfQVJNQ0xfVkVSU0lPTl9DSEVDSwor LSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT04pCistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfVElfQVJNQ0xfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixw YXRjaCkgKEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT04gPj0gSlNPTl9IRURMRVlfVkVSU0lP Tl9FTkNPREUobWFqb3IsIG1pbm9yLCBwYXRjaCkpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09O X0hFRExFWV9USV9BUk1DTF9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0j ZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT04pCistICAg ICN1bmRlZiBKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT04KKy0jZW5kaWYKKy0jaWYgZGVmaW5l ZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgJiYgZGVmaW5lZChfX1RNUzMyMEM2WF9fKQorLSAg ICAjZGVmaW5lIEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9O X0VOQ09ERShfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXyAvIDEwMDAwMDAsIChfX1RJX0NPTVBJTEVS X1ZFUlNJT05fXyAlIDEwMDAwMDApIC8gMTAwMCwgKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fICUg MTAwMCkpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJT SU9OX0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNL CistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OKQorLSAg ICAjZGVmaW5lIEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixw YXRjaCkgKEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9O X0VOQ09ERShtYWpvciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05f SEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKDApCistI2Vu ZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9OKQorLSAgICAj dW5kZWYgSlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9OCistI2VuZGlmCistI2lmIGRlZmluZWQo X19USV9DT01QSUxFUl9WRVJTSU9OX18pICYmIGRlZmluZWQoX19DNzAwMF9fKQorLSAgICAjZGVm aW5lIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09E RShfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXyAvIDEwMDAwMDAsIChfX1RJX0NPTVBJTEVSX1ZFUlNJ T05fXyAlIDEwMDAwMDApIC8gMTAwMCwgKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fICUgMTAwMCkp CistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9OX0NI RUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9OX0NIRUNLCistI2Vu ZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9OKQorLSAgICAjZGVm aW5lIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkg KEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09E RShtYWpvciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZ X1RJX0NMN1hfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKDApCistI2VuZGlmCist CistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTikKKy0gICAgI3VuZGVm IEpTT05fSEVETEVZX1RJX0NMUFJVX1ZFUlNJT04KKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX1RJ X0NPTVBJTEVSX1ZFUlNJT05fXykgJiYgZGVmaW5lZChfX1BSVV9fKQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX1RJX0NMUFJVX1ZFUlNJT04gSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUoX19U SV9DT01QSUxFUl9WRVJTSU9OX18gLyAxMDAwMDAwLCAoX19USV9DT01QSUxFUl9WRVJTSU9OX18g JSAxMDAwMDAwKSAvIDEwMDAsIChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXyAlIDEwMDApKQorLSNl bmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1RJX0NMUFJVX1ZFUlNJT05fQ0hFQ0sp CistICAgICN1bmRlZiBKU09OX0hFRExFWV9USV9DTFBSVV9WRVJTSU9OX0NIRUNLCistI2VuZGlm CistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTikKKy0gICAgI2RlZmlu ZSBKU09OX0hFRExFWV9USV9DTFBSVV9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAo SlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09E RShtYWpvciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZ X1RJX0NMUFJVX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpICgwKQorLSNlbmRpZgor LQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NSQVlfVkVSU0lPTikKKy0gICAgI3VuZGVmIEpT T05fSEVETEVZX0NSQVlfVkVSU0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9DUkFZQykKKy0g ICAgI2lmIGRlZmluZWQoX1JFTEVBU0VfUEFUQ0hMRVZFTCkKKy0gICAgICAgICNkZWZpbmUgSlNP Tl9IRURMRVlfQ1JBWV9WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKF9SRUxFQVNF X01BSk9SLCBfUkVMRUFTRV9NSU5PUiwgX1JFTEVBU0VfUEFUQ0hMRVZFTCkKKy0gICAgI2Vsc2UK Ky0gICAgICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQ1JBWV9WRVJTSU9OIEpTT05fSEVETEVZX1ZF UlNJT05fRU5DT0RFKF9SRUxFQVNFX01BSk9SLCBfUkVMRUFTRV9NSU5PUiwgMCkKKy0gICAgI2Vu ZGlmCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfQ1JBWV9WRVJTSU9OX0NI RUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQ1JBWV9WRVJTSU9OX0NIRUNLCistI2VuZGlm CistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfQ1JBWV9WRVJTSU9OKQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX0NSQVlfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKEpTT05fSEVE TEVZX0NSQVlfVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShtYWpvciwgbWlu b3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0NSQVlfVkVSU0lP Tl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKDApCistI2VuZGlmCistCistI2lmIGRlZmluZWQo SlNPTl9IRURMRVlfSUFSX1ZFUlNJT04pCistICAgICN1bmRlZiBKU09OX0hFRExFWV9JQVJfVkVS U0lPTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCistICAgICNp ZiBfX1ZFUl9fID4gMTAwMAorLSAgICAgICAgI2RlZmluZSBKU09OX0hFRExFWV9JQVJfVkVSU0lP TiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERSgoX19WRVJfXyAvIDEwMDAwMDApLCAoKF9fVkVS X18gLyAxMDAwKSAlIDEwMDApLCAoX19WRVJfXyAlIDEwMDApKQorLSAgICAjZWxzZQorLSAgICAg ICAgI2RlZmluZSBKU09OX0hFRExFWV9JQVJfVkVSU0lPTiBKU09OX0hFRExFWV9WRVJTSU9OX0VO Q09ERShfX1ZFUl9fIC8gMTAwLCBfX1ZFUl9fICUgMTAwLCAwKQorLSAgICAjZW5kaWYKKy0jZW5k aWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9JQVJfVkVSU0lPTl9DSEVDSykKKy0gICAg I3VuZGVmIEpTT05fSEVETEVZX0lBUl9WRVJTSU9OX0NIRUNLCistI2VuZGlmCistI2lmIGRlZmlu ZWQoSlNPTl9IRURMRVlfSUFSX1ZFUlNJT04pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfSUFS X1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpIChKU09OX0hFRExFWV9JQVJfVkVSU0lP TiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShtYWpvciwgbWlub3IsIHBhdGNoKSkKKy0j ZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0lBUl9WRVJTSU9OX0NIRUNLKG1ham9yLG1p bm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9USU5Z Q19WRVJTSU9OKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfVElOWUNfVkVSU0lPTgorLSNlbmRp ZgorLSNpZiBkZWZpbmVkKF9fVElOWUNfXykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9USU5Z Q19WRVJTSU9OIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFKF9fVElOWUNfXyAvIDEwMDAsIChf X1RJTllDX18gLyAxMDApICUgMTAsIF9fVElOWUNfXyAlIDEwMCkKKy0jZW5kaWYKKy0KKy0jaWYg ZGVmaW5lZChKU09OX0hFRExFWV9USU5ZQ19WRVJTSU9OX0NIRUNLKQorLSAgICAjdW5kZWYgSlNP Tl9IRURMRVlfVElOWUNfVkVSU0lPTl9DSEVDSworLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05f SEVETEVZX1RJTllDX1ZFUlNJT04pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVElOWUNfVkVS U0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKEpTT05fSEVETEVZX1RJTllDX1ZFUlNJT04g Pj0gSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUobWFqb3IsIG1pbm9yLCBwYXRjaCkpCistI2Vs c2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9USU5ZQ19WRVJTSU9OX0NIRUNLKG1ham9yLG1p bm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9ETUNf VkVSU0lPTikKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0RNQ19WRVJTSU9OCistI2VuZGlmCist I2lmIGRlZmluZWQoX19ETUNfXykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ETUNfVkVSU0lP TiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX0RNQ19fID4+IDgsIChfX0RNQ19fID4+IDQp ICYgMHhmLCBfX0RNQ19fICYgMHhmKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVE TEVZX0RNQ19WRVJTSU9OX0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfRE1DX1ZFUlNJ T05fQ0hFQ0sKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9ETUNfVkVSU0lPTikK Ky0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ETUNfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixw YXRjaCkgKEpTT05fSEVETEVZX0RNQ19WRVJTSU9OID49IEpTT05fSEVETEVZX1ZFUlNJT05fRU5D T0RFKG1ham9yLCBtaW5vciwgcGF0Y2gpKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURM RVlfRE1DX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpICgwKQorLSNlbmRpZgorLQor LSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NPTVBDRVJUX1ZFUlNJT04pCistICAgICN1bmRlZiBK U09OX0hFRExFWV9DT01QQ0VSVF9WRVJTSU9OCistI2VuZGlmCistI2lmIGRlZmluZWQoX19DT01Q Q0VSVF9WRVJTSU9OX18pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQ09NUENFUlRfVkVSU0lP TiBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERShfX0NPTVBDRVJUX1ZFUlNJT05fXyAvIDEwMDAw LCAoX19DT01QQ0VSVF9WRVJTSU9OX18gLyAxMDApICUgMTAwLCBfX0NPTVBDRVJUX1ZFUlNJT05f XyAlIDEwMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9DT01QQ0VSVF9W RVJTSU9OX0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQ09NUENFUlRfVkVSU0lPTl9D SEVDSworLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NPTVBDRVJUX1ZFUlNJT04p CistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQ09NUENFUlRfVkVSU0lPTl9DSEVDSyhtYWpvcixt aW5vcixwYXRjaCkgKEpTT05fSEVETEVZX0NPTVBDRVJUX1ZFUlNJT04gPj0gSlNPTl9IRURMRVlf VkVSU0lPTl9FTkNPREUobWFqb3IsIG1pbm9yLCBwYXRjaCkpCistI2Vsc2UKKy0gICAgI2RlZmlu ZSBKU09OX0hFRExFWV9DT01QQ0VSVF9WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAo MCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9QRUxMRVNfVkVSU0lPTikK Ky0gICAgI3VuZGVmIEpTT05fSEVETEVZX1BFTExFU19WRVJTSU9OCistI2VuZGlmCistI2lmIGRl ZmluZWQoX19QT0NDX18pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfUEVMTEVTX1ZFUlNJT04g SlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUoX19QT0NDX18gLyAxMDAsIF9fUE9DQ19fICUgMTAw LCAwKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1BFTExFU19WRVJTSU9O X0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfUEVMTEVTX1ZFUlNJT05fQ0hFQ0sKKy0j ZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9QRUxMRVNfVkVSU0lPTikKKy0gICAgI2Rl ZmluZSBKU09OX0hFRExFWV9QRUxMRVNfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkg KEpTT05fSEVETEVZX1BFTExFU19WRVJTSU9OID49IEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RF KG1ham9yLCBtaW5vciwgcGF0Y2gpKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlf UEVMTEVTX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpICgwKQorLSNlbmRpZgorLQor LSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX01DU1RfTENDX1ZFUlNJT04pCistICAgICN1bmRlZiBK U09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OCistI2VuZGlmCistI2lmIGRlZmluZWQoX19MQ0Nf XykgJiYgZGVmaW5lZChfX0xDQ19NSU5PUl9fKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX01D U1RfTENDX1ZFUlNJT04gSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUoX19MQ0NfXyAvIDEwMCwg X19MQ0NfXyAlIDEwMCwgX19MQ0NfTUlOT1JfXykKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChK U09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNLKQorLSAgICAjdW5kZWYgSlNPTl9IRURM RVlfTUNTVF9MQ0NfVkVSU0lPTl9DSEVDSworLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVE TEVZX01DU1RfTENDX1ZFUlNJT04pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTUNTVF9MQ0Nf VkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkgKEpTT05fSEVETEVZX01DU1RfTENDX1ZF UlNJT04gPj0gSlNPTl9IRURMRVlfVkVSU0lPTl9FTkNPREUobWFqb3IsIG1pbm9yLCBwYXRjaCkp CistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNL KG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hF RExFWV9HQ0NfVkVSU0lPTikKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0dDQ19WRVJTSU9OCist I2VuZGlmCistI2lmIFwKKy0gICAgZGVmaW5lZChKU09OX0hFRExFWV9HTlVDX1ZFUlNJT04pICYm IFwKKy0gICAgIWRlZmluZWQoX19jbGFuZ19fKSAmJiBcCistICAgICFkZWZpbmVkKEpTT05fSEVE TEVZX0lOVEVMX1ZFUlNJT04pICYmIFwKKy0gICAgIWRlZmluZWQoSlNPTl9IRURMRVlfUEdJX1ZF UlNJT04pICYmIFwKKy0gICAgIWRlZmluZWQoSlNPTl9IRURMRVlfQVJNX1ZFUlNJT04pICYmIFwK Ky0gICAgIWRlZmluZWQoSlNPTl9IRURMRVlfQ1JBWV9WRVJTSU9OKSAmJiBcCistICAgICFkZWZp bmVkKEpTT05fSEVETEVZX1RJX1ZFUlNJT04pICYmIFwKKy0gICAgIWRlZmluZWQoSlNPTl9IRURM RVlfVElfQVJNQ0xfVkVSU0lPTikgJiYgXAorLSAgICAhZGVmaW5lZChKU09OX0hFRExFWV9USV9D TDQzMF9WRVJTSU9OKSAmJiBcCistICAgICFkZWZpbmVkKEpTT05fSEVETEVZX1RJX0NMMjAwMF9W RVJTSU9OKSAmJiBcCistICAgICFkZWZpbmVkKEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTikg JiYgXAorLSAgICAhZGVmaW5lZChKU09OX0hFRExFWV9USV9DTDdYX1ZFUlNJT04pICYmIFwKKy0g ICAgIWRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTikgJiYgXAorLSAgICAhZGVm aW5lZChfX0NPTVBDRVJUX18pICYmIFwKKy0gICAgIWRlZmluZWQoSlNPTl9IRURMRVlfTUNTVF9M Q0NfVkVSU0lPTikKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTiBKU09OX0hF RExFWV9HTlVDX1ZFUlNJT04KKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9H Q0NfVkVSU0lPTl9DSEVDSykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0dDQ19WRVJTSU9OX0NI RUNLCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfR0NDX1ZFUlNJT04pCistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gp IChKU09OX0hFRExFWV9HQ0NfVkVSU0lPTiA+PSBKU09OX0hFRExFWV9WRVJTSU9OX0VOQ09ERSht YWpvciwgbWlub3IsIHBhdGNoKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dD Q19WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYg ZGVmaW5lZChKU09OX0hFRExFWV9IQVNfQVRUUklCVVRFKQorLSAgICAjdW5kZWYgSlNPTl9IRURM RVlfSEFTX0FUVFJJQlVURQorLSNlbmRpZgorLSNpZiBcCistICBkZWZpbmVkKF9faGFzX2F0dHJp YnV0ZSkgJiYgXAorLSAgKCBcCistICAgICghZGVmaW5lZChKU09OX0hFRExFWV9JQVJfVkVSU0lP TikgfHwgSlNPTl9IRURMRVlfSUFSX1ZFUlNJT05fQ0hFQ0soOCw1LDkpKSBcCistICApCistIyAg ZGVmaW5lIEpTT05fSEVETEVZX0hBU19BVFRSSUJVVEUoYXR0cmlidXRlKSBfX2hhc19hdHRyaWJ1 dGUoYXR0cmlidXRlKQorLSNlbHNlCistIyAgZGVmaW5lIEpTT05fSEVETEVZX0hBU19BVFRSSUJV VEUoYXR0cmlidXRlKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9H TlVDX0hBU19BVFRSSUJVVEUpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9HTlVDX0hBU19BVFRS SUJVVEUKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX2hhc19hdHRyaWJ1dGUpCistICAgICNkZWZp bmUgSlNPTl9IRURMRVlfR05VQ19IQVNfQVRUUklCVVRFKGF0dHJpYnV0ZSxtYWpvcixtaW5vcixw YXRjaCkgSlNPTl9IRURMRVlfSEFTX0FUVFJJQlVURShhdHRyaWJ1dGUpCistI2Vsc2UKKy0gICAg I2RlZmluZSBKU09OX0hFRExFWV9HTlVDX0hBU19BVFRSSUJVVEUoYXR0cmlidXRlLG1ham9yLG1p bm9yLHBhdGNoKSBKU09OX0hFRExFWV9HTlVDX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0 Y2gpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfR0NDX0hBU19BVFRSSUJV VEUpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9HQ0NfSEFTX0FUVFJJQlVURQorLSNlbmRpZgor LSNpZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9H Q0NfSEFTX0FUVFJJQlVURShhdHRyaWJ1dGUsbWFqb3IsbWlub3IscGF0Y2gpIEpTT05fSEVETEVZ X0hBU19BVFRSSUJVVEUoYXR0cmlidXRlKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURM RVlfR0NDX0hBU19BVFRSSUJVVEUoYXR0cmlidXRlLG1ham9yLG1pbm9yLHBhdGNoKSBKU09OX0hF RExFWV9HQ0NfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkKKy0jZW5kaWYKKy0KKy0j aWYgZGVmaW5lZChKU09OX0hFRExFWV9IQVNfQ1BQX0FUVFJJQlVURSkKKy0gICAgI3VuZGVmIEpT T05fSEVETEVZX0hBU19DUFBfQVRUUklCVVRFCistI2VuZGlmCistI2lmIFwKKy0gICAgZGVmaW5l ZChfX2hhc19jcHBfYXR0cmlidXRlKSAmJiBcCistICAgIGRlZmluZWQoX19jcGx1c3BsdXMpICYm IFwKKy0gICAgKCFkZWZpbmVkKEpTT05fSEVETEVZX1NVTlBST19WRVJTSU9OKSB8fCBKU09OX0hF RExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyg1LDE1LDApKQorLSAgICAjZGVmaW5lIEpTT05fSEVE TEVZX0hBU19DUFBfQVRUUklCVVRFKGF0dHJpYnV0ZSkgX19oYXNfY3BwX2F0dHJpYnV0ZShhdHRy aWJ1dGUpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9IQVNfQ1BQX0FUVFJJQlVU RShhdHRyaWJ1dGUpICgwKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0hB U19DUFBfQVRUUklCVVRFX05TKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfSEFTX0NQUF9BVFRS SUJVVEVfTlMKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8ICFkZWZpbmVk KF9faGFzX2NwcF9hdHRyaWJ1dGUpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfSEFTX0NQUF9B VFRSSUJVVEVfTlMobnMsYXR0cmlidXRlKSAoMCkKKy0jZWxpZiBcCistICAgICFkZWZpbmVkKEpT T05fSEVETEVZX1BHSV9WRVJTSU9OKSAmJiBcCistICAgICFkZWZpbmVkKEpTT05fSEVETEVZX0lB Ul9WRVJTSU9OKSAmJiBcCistICAgICghZGVmaW5lZChKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lP TikgfHwgSlNPTl9IRURMRVlfU1VOUFJPX1ZFUlNJT05fQ0hFQ0soNSwxNSwwKSkgJiYgXAorLSAg ICAoIWRlZmluZWQoSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OKSB8fCBKU09OX0hFRExFWV9NU1ZD X1ZFUlNJT05fQ0hFQ0soMTksMjAsMCkpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfSEFTX0NQ UF9BVFRSSUJVVEVfTlMobnMsYXR0cmlidXRlKSBKU09OX0hFRExFWV9IQVNfQ1BQX0FUVFJJQlVU RShuczo6YXR0cmlidXRlKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfSEFTX0NQ UF9BVFRSSUJVVEVfTlMobnMsYXR0cmlidXRlKSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5l ZChKU09OX0hFRExFWV9HTlVDX0hBU19DUFBfQVRUUklCVVRFKQorLSAgICAjdW5kZWYgSlNPTl9I RURMRVlfR05VQ19IQVNfQ1BQX0FUVFJJQlVURQorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9faGFz X2NwcF9hdHRyaWJ1dGUpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCistICAgICNkZWZpbmUgSlNP Tl9IRURMRVlfR05VQ19IQVNfQ1BQX0FUVFJJQlVURShhdHRyaWJ1dGUsbWFqb3IsbWlub3IscGF0 Y2gpIF9faGFzX2NwcF9hdHRyaWJ1dGUoYXR0cmlidXRlKQorLSNlbHNlCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfR05VQ19IQVNfQ1BQX0FUVFJJQlVURShhdHRyaWJ1dGUsbWFqb3IsbWlub3Is cGF0Y2gpIEpTT05fSEVETEVZX0dOVUNfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkK Ky0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9HQ0NfSEFTX0NQUF9BVFRSSUJV VEUpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9HQ0NfSEFTX0NQUF9BVFRSSUJVVEUKKy0jZW5k aWYKKy0jaWYgZGVmaW5lZChfX2hhc19jcHBfYXR0cmlidXRlKSAmJiBkZWZpbmVkKF9fY3BsdXNw bHVzKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dDQ19IQVNfQ1BQX0FUVFJJQlVURShhdHRy aWJ1dGUsbWFqb3IsbWlub3IscGF0Y2gpIF9faGFzX2NwcF9hdHRyaWJ1dGUoYXR0cmlidXRlKQor LSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfR0NDX0hBU19DUFBfQVRUUklCVVRFKGF0 dHJpYnV0ZSxtYWpvcixtaW5vcixwYXRjaCkgSlNPTl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0so bWFqb3IsbWlub3IscGF0Y2gpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlf SEFTX0JVSUxUSU4pCistICAgICN1bmRlZiBKU09OX0hFRExFWV9IQVNfQlVJTFRJTgorLSNlbmRp ZgorLSNpZiBkZWZpbmVkKF9faGFzX2J1aWx0aW4pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlf SEFTX0JVSUxUSU4oYnVpbHRpbikgX19oYXNfYnVpbHRpbihidWlsdGluKQorLSNlbHNlCistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfSEFTX0JVSUxUSU4oYnVpbHRpbikgKDApCistI2VuZGlmCist CistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfR05VQ19IQVNfQlVJTFRJTikKKy0gICAgI3VuZGVm IEpTT05fSEVETEVZX0dOVUNfSEFTX0JVSUxUSU4KKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX2hh c19idWlsdGluKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dOVUNfSEFTX0JVSUxUSU4oYnVp bHRpbixtYWpvcixtaW5vcixwYXRjaCkgX19oYXNfYnVpbHRpbihidWlsdGluKQorLSNlbHNlCist ICAgICNkZWZpbmUgSlNPTl9IRURMRVlfR05VQ19IQVNfQlVJTFRJTihidWlsdGluLG1ham9yLG1p bm9yLHBhdGNoKSBKU09OX0hFRExFWV9HTlVDX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0 Y2gpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfR0NDX0hBU19CVUlMVElO KQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfR0NDX0hBU19CVUlMVElOCistI2VuZGlmCistI2lm IGRlZmluZWQoX19oYXNfYnVpbHRpbikKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9HQ0NfSEFT X0JVSUxUSU4oYnVpbHRpbixtYWpvcixtaW5vcixwYXRjaCkgX19oYXNfYnVpbHRpbihidWlsdGlu KQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfR0NDX0hBU19CVUlMVElOKGJ1aWx0 aW4sbWFqb3IsbWlub3IscGF0Y2gpIEpTT05fSEVETEVZX0dDQ19WRVJTSU9OX0NIRUNLKG1ham9y LG1pbm9yLHBhdGNoKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0hBU19G RUFUVVJFKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfSEFTX0ZFQVRVUkUKKy0jZW5kaWYKKy0j aWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0hBU19G RUFUVVJFKGZlYXR1cmUpIF9faGFzX2ZlYXR1cmUoZmVhdHVyZSkKKy0jZWxzZQorLSAgICAjZGVm aW5lIEpTT05fSEVETEVZX0hBU19GRUFUVVJFKGZlYXR1cmUpICgwKQorLSNlbmRpZgorLQorLSNp ZiBkZWZpbmVkKEpTT05fSEVETEVZX0dOVUNfSEFTX0ZFQVRVUkUpCistICAgICN1bmRlZiBKU09O X0hFRExFWV9HTlVDX0hBU19GRUFUVVJFCistI2VuZGlmCistI2lmIGRlZmluZWQoX19oYXNfZmVh dHVyZSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9HTlVDX0hBU19GRUFUVVJFKGZlYXR1cmUs bWFqb3IsbWlub3IscGF0Y2gpIF9faGFzX2ZlYXR1cmUoZmVhdHVyZSkKKy0jZWxzZQorLSAgICAj ZGVmaW5lIEpTT05fSEVETEVZX0dOVUNfSEFTX0ZFQVRVUkUoZmVhdHVyZSxtYWpvcixtaW5vcixw YXRjaCkgSlNPTl9IRURMRVlfR05VQ19WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKQor LSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0dDQ19IQVNfRkVBVFVSRSkKKy0g ICAgI3VuZGVmIEpTT05fSEVETEVZX0dDQ19IQVNfRkVBVFVSRQorLSNlbmRpZgorLSNpZiBkZWZp bmVkKF9faGFzX2ZlYXR1cmUpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfR0NDX0hBU19GRUFU VVJFKGZlYXR1cmUsbWFqb3IsbWlub3IscGF0Y2gpIF9faGFzX2ZlYXR1cmUoZmVhdHVyZSkKKy0j ZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dDQ19IQVNfRkVBVFVSRShmZWF0dXJlLG1h am9yLG1pbm9yLHBhdGNoKSBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5v cixwYXRjaCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9IQVNfRVhURU5T SU9OKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfSEFTX0VYVEVOU0lPTgorLSNlbmRpZgorLSNp ZiBkZWZpbmVkKF9faGFzX2V4dGVuc2lvbikKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9IQVNf RVhURU5TSU9OKGV4dGVuc2lvbikgX19oYXNfZXh0ZW5zaW9uKGV4dGVuc2lvbikKKy0jZWxzZQor LSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0hBU19FWFRFTlNJT04oZXh0ZW5zaW9uKSAoMCkKKy0j ZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9HTlVDX0hBU19FWFRFTlNJT04pCist ICAgICN1bmRlZiBKU09OX0hFRExFWV9HTlVDX0hBU19FWFRFTlNJT04KKy0jZW5kaWYKKy0jaWYg ZGVmaW5lZChfX2hhc19leHRlbnNpb24pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfR05VQ19I QVNfRVhURU5TSU9OKGV4dGVuc2lvbixtYWpvcixtaW5vcixwYXRjaCkgX19oYXNfZXh0ZW5zaW9u KGV4dGVuc2lvbikKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dOVUNfSEFTX0VY VEVOU0lPTihleHRlbnNpb24sbWFqb3IsbWlub3IscGF0Y2gpIEpTT05fSEVETEVZX0dOVUNfVkVS U0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChK U09OX0hFRExFWV9HQ0NfSEFTX0VYVEVOU0lPTikKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0dD Q19IQVNfRVhURU5TSU9OCistI2VuZGlmCistI2lmIGRlZmluZWQoX19oYXNfZXh0ZW5zaW9uKQor LSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dDQ19IQVNfRVhURU5TSU9OKGV4dGVuc2lvbixtYWpv cixtaW5vcixwYXRjaCkgX19oYXNfZXh0ZW5zaW9uKGV4dGVuc2lvbikKKy0jZWxzZQorLSAgICAj ZGVmaW5lIEpTT05fSEVETEVZX0dDQ19IQVNfRVhURU5TSU9OKGV4dGVuc2lvbixtYWpvcixtaW5v cixwYXRjaCkgSlNPTl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gp CistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfSEFTX0RFQ0xTUEVDX0FUVFJJ QlVURSkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0hBU19ERUNMU1BFQ19BVFRSSUJVVEUKKy0j ZW5kaWYKKy0jaWYgZGVmaW5lZChfX2hhc19kZWNsc3BlY19hdHRyaWJ1dGUpCistICAgICNkZWZp bmUgSlNPTl9IRURMRVlfSEFTX0RFQ0xTUEVDX0FUVFJJQlVURShhdHRyaWJ1dGUpIF9faGFzX2Rl Y2xzcGVjX2F0dHJpYnV0ZShhdHRyaWJ1dGUpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hF RExFWV9IQVNfREVDTFNQRUNfQVRUUklCVVRFKGF0dHJpYnV0ZSkgKDApCistI2VuZGlmCistCist I2lmIGRlZmluZWQoSlNPTl9IRURMRVlfR05VQ19IQVNfREVDTFNQRUNfQVRUUklCVVRFKQorLSAg ICAjdW5kZWYgSlNPTl9IRURMRVlfR05VQ19IQVNfREVDTFNQRUNfQVRUUklCVVRFCistI2VuZGlm CistI2lmIGRlZmluZWQoX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlKQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX0dOVUNfSEFTX0RFQ0xTUEVDX0FUVFJJQlVURShhdHRyaWJ1dGUsbWFqb3IsbWlu b3IscGF0Y2gpIF9faGFzX2RlY2xzcGVjX2F0dHJpYnV0ZShhdHRyaWJ1dGUpCistI2Vsc2UKKy0g ICAgI2RlZmluZSBKU09OX0hFRExFWV9HTlVDX0hBU19ERUNMU1BFQ19BVFRSSUJVVEUoYXR0cmli dXRlLG1ham9yLG1pbm9yLHBhdGNoKSBKU09OX0hFRExFWV9HTlVDX1ZFUlNJT05fQ0hFQ0sobWFq b3IsbWlub3IscGF0Y2gpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfR0ND X0hBU19ERUNMU1BFQ19BVFRSSUJVVEUpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9HQ0NfSEFT X0RFQ0xTUEVDX0FUVFJJQlVURQorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9faGFzX2RlY2xzcGVj X2F0dHJpYnV0ZSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9HQ0NfSEFTX0RFQ0xTUEVDX0FU VFJJQlVURShhdHRyaWJ1dGUsbWFqb3IsbWlub3IscGF0Y2gpIF9faGFzX2RlY2xzcGVjX2F0dHJp YnV0ZShhdHRyaWJ1dGUpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9HQ0NfSEFT X0RFQ0xTUEVDX0FUVFJJQlVURShhdHRyaWJ1dGUsbWFqb3IsbWlub3IscGF0Y2gpIEpTT05fSEVE TEVZX0dDQ19WRVJTSU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKQorLSNlbmRpZgorLQorLSNp ZiBkZWZpbmVkKEpTT05fSEVETEVZX0hBU19XQVJOSU5HKQorLSAgICAjdW5kZWYgSlNPTl9IRURM RVlfSEFTX1dBUk5JTkcKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX2hhc193YXJuaW5nKQorLSAg ICAjZGVmaW5lIEpTT05fSEVETEVZX0hBU19XQVJOSU5HKHdhcm5pbmcpIF9faGFzX3dhcm5pbmco d2FybmluZykKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0hBU19XQVJOSU5HKHdh cm5pbmcpICgwKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0dOVUNfSEFT X1dBUk5JTkcpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9HTlVDX0hBU19XQVJOSU5HCistI2Vu ZGlmCistI2lmIGRlZmluZWQoX19oYXNfd2FybmluZykKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9HTlVDX0hBU19XQVJOSU5HKHdhcm5pbmcsbWFqb3IsbWlub3IscGF0Y2gpIF9faGFzX3dhcm5p bmcod2FybmluZykKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0dOVUNfSEFTX1dB Uk5JTkcod2FybmluZyxtYWpvcixtaW5vcixwYXRjaCkgSlNPTl9IRURMRVlfR05VQ19WRVJTSU9O X0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05f SEVETEVZX0dDQ19IQVNfV0FSTklORykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0dDQ19IQVNf V0FSTklORworLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9faGFzX3dhcm5pbmcpCistICAgICNkZWZp bmUgSlNPTl9IRURMRVlfR0NDX0hBU19XQVJOSU5HKHdhcm5pbmcsbWFqb3IsbWlub3IscGF0Y2gp IF9faGFzX3dhcm5pbmcod2FybmluZykKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZ X0dDQ19IQVNfV0FSTklORyh3YXJuaW5nLG1ham9yLG1pbm9yLHBhdGNoKSBKU09OX0hFRExFWV9H Q0NfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkKKy0jZW5kaWYKKy0KKy0jaWYgXAor LSAgICAoZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAx OTk5MDFMKSkgfHwgXAorLSAgICBkZWZpbmVkKF9fY2xhbmdfXykgfHwgXAorLSAgICBKU09OX0hF RExFWV9HQ0NfVkVSU0lPTl9DSEVDSygzLDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JTlRF TF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JQVJfVkVSU0lP Tl9DSEVDSyg4LDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9QR0lfVkVSU0lPTl9DSEVDSygx OCw0LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0soNCwxLDApIHx8 IFwKKy0gICAgSlNPTl9IRURMRVlfVElfVkVSU0lPTl9DSEVDSygxNSwxMiwwKSB8fCBcCistICAg IEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNCw3LDApIHx8IFwKKy0gICAgSlNP Tl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSygyLDAsMSkgfHwgXAorLSAgICBKU09OX0hF RExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExF WV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNywwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElf Q0w3WF9WRVJTSU9OX0NIRUNLKDEsMiwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMUFJV X1ZFUlNJT05fQ0hFQ0soMiwxLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfQ1JBWV9WRVJTSU9O X0NIRUNLKDUsMCwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJTllDX1ZFUlNJT05fQ0hFQ0so MCw5LDE3KSB8fCBcCistICAgIEpTT05fSEVETEVZX1NVTlBST19WRVJTSU9OX0NIRUNLKDgsMCww KSB8fCBcCistICAgIChKU09OX0hFRExFWV9JQk1fVkVSU0lPTl9DSEVDSygxMCwxLDApICYmIGRl ZmluZWQoX19DOTlfUFJBR01BX09QRVJBVE9SKSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9Q UkFHTUEodmFsdWUpIF9QcmFnbWEoI3ZhbHVlKQorLSNlbGlmIEpTT05fSEVETEVZX01TVkNfVkVS U0lPTl9DSEVDSygxNSwwLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfUFJBR01BKHZhbHVl KSBfX3ByYWdtYSh2YWx1ZSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1BSQUdN QSh2YWx1ZSkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9ESUFHTk9TVElD X1BVU0gpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9ESUFHTk9TVElDX1BVU0gKKy0jZW5kaWYK Ky0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9ESUFHTk9TVElDX1BPUCkKKy0gICAgI3VuZGVmIEpT T05fSEVETEVZX0RJQUdOT1NUSUNfUE9QCistI2VuZGlmCistI2lmIGRlZmluZWQoX19jbGFuZ19f KQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUFVTSCBfUHJhZ21hKCJjbGFu ZyBkaWFnbm9zdGljIHB1c2giKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNf UE9QIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcG9wIikKKy0jZWxpZiBKU09OX0hFRExFWV9J TlRFTF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFH Tk9TVElDX1BVU0ggX1ByYWdtYSgid2FybmluZyhwdXNoKSIpCistICAgICNkZWZpbmUgSlNPTl9I RURMRVlfRElBR05PU1RJQ19QT1AgX1ByYWdtYSgid2FybmluZyhwb3ApIikKKy0jZWxpZiBKU09O X0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSyg0LDYsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9ESUFHTk9TVElDX1BVU0ggX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgcHVzaCIpCistICAgICNk ZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QT1AgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMg cG9wIikKKy0jZWxpZiBcCistICAgIEpTT05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSygxNSww LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfSU5URUxfQ0xfVkVSU0lPTl9DSEVDSygyMDIxLDEs MCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX1BVU0ggX19wcmFnbWEod2Fy bmluZyhwdXNoKSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX1BPUCBfX3By YWdtYSh3YXJuaW5nKHBvcCkpCistI2VsaWYgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0so NSw2LDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QVVNIIF9QcmFnbWEo InB1c2giKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUE9QIF9QcmFnbWEo InBvcCIpCistI2VsaWYgXAorLSAgICBKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKDE1LDEy LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQVJNQ0xfVkVSU0lPTl9DSEVDSyg1LDIsMCkg fHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDQzMF9WRVJTSU9OX0NIRUNLKDQsNCwwKSB8fCBc CistICAgIEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVDSyg4LDEsMCkgfHwgXAorLSAg ICBKU09OX0hFRExFWV9USV9DTDdYX1ZFUlNJT05fQ0hFQ0soMSwyLDApIHx8IFwKKy0gICAgSlNP Tl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTl9DSEVDSygyLDEsMCkKKy0gICAgI2RlZmluZSBKU09O X0hFRExFWV9ESUFHTk9TVElDX1BVU0ggX1ByYWdtYSgiZGlhZ19wdXNoIikKKy0gICAgI2RlZmlu ZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX1BPUCBfUHJhZ21hKCJkaWFnX3BvcCIpCistI2VsaWYg SlNPTl9IRURMRVlfUEVMTEVTX1ZFUlNJT05fQ0hFQ0soMiw5MCwwKQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX0RJQUdOT1NUSUNfUFVTSCBfUHJhZ21hKCJ3YXJuaW5nKHB1c2gpIikKKy0gICAg I2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX1BPUCBfUHJhZ21hKCJ3YXJuaW5nKHBvcCki KQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QVVNICistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QT1AKKy0jZW5kaWYKKy0KKy0vKiBKU09O X0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfQ1BQOThfQ09NUEFUX1dSQVBfIGlzIGZvcgorLSAg IEhFRExFWSBJTlRFUk5BTCBVU0UgT05MWS4gIEFQSSBzdWJqZWN0IHRvIGNoYW5nZSB3aXRob3V0 IG5vdGljZS4gKi8KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVf Q1BQOThfQ09NUEFUX1dSQVBfKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfRElBR05PU1RJQ19E SVNBQkxFX0NQUDk4X0NPTVBBVF9XUkFQXworLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9fY3BsdXNw bHVzKQorLSMgIGlmIEpTT05fSEVETEVZX0hBU19XQVJOSU5HKCItV2MrKzk4LWNvbXBhdCIpCist IyAgICBpZiBKU09OX0hFRExFWV9IQVNfV0FSTklORygiLVdjKysxNy1leHRlbnNpb25zIikKKy0j ICAgICAgaWYgSlNPTl9IRURMRVlfSEFTX1dBUk5JTkcoIi1XYysrMXotZXh0ZW5zaW9ucyIpCist IyAgICAgICAgZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9DUFA5OF9DT01Q QVRfV1JBUF8oeHByKSBcCistICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUFVTSCBcCistICAg IF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XYysrOTgtY29tcGF0XCIiKSBc CistICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XYysrMTctZXh0ZW5z aW9uc1wiIikgXAorLSAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2Mr KzF6LWV4dGVuc2lvbnNcIiIpIFwKKy0gICAgeHByIFwKKy0gICAgSlNPTl9IRURMRVlfRElBR05P U1RJQ19QT1AKKy0jICAgICAgZWxzZQorLSMgICAgICAgIGRlZmluZSBKU09OX0hFRExFWV9ESUFH Tk9TVElDX0RJU0FCTEVfQ1BQOThfQ09NUEFUX1dSQVBfKHhwcikgXAorLSAgICBKU09OX0hFRExF WV9ESUFHTk9TVElDX1BVU0ggXAorLSAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9y ZWQgXCItV2MrKzk4LWNvbXBhdFwiIikgXAorLSAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGlj IGlnbm9yZWQgXCItV2MrKzE3LWV4dGVuc2lvbnNcIiIpIFwKKy0gICAgeHByIFwKKy0gICAgSlNP Tl9IRURMRVlfRElBR05PU1RJQ19QT1AKKy0jICAgICAgZW5kaWYKKy0jICAgIGVsc2UKKy0jICAg ICAgZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9DUFA5OF9DT01QQVRfV1JB UF8oeHByKSBcCistICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUFVTSCBcCistICAgIF9QcmFn bWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XYysrOTgtY29tcGF0XCIiKSBcCistICAg IHhwciBcCistICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUE9QCistIyAgICBlbmRpZgorLSMg IGVuZGlmCistI2VuZGlmCistI2lmICFkZWZpbmVkKEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElT QUJMRV9DUFA5OF9DT01QQVRfV1JBUF8pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05P U1RJQ19ESVNBQkxFX0NQUDk4X0NPTVBBVF9XUkFQXyh4KSB4CistI2VuZGlmCistCistI2lmIGRl ZmluZWQoSlNPTl9IRURMRVlfQ09OU1RfQ0FTVCkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0NP TlNUX0NBU1QKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKy0jICBkZWZpbmUg SlNPTl9IRURMRVlfQ09OU1RfQ0FTVChULCBleHByKSAoY29uc3RfY2FzdDxUPihleHByKSkKKy0j ZWxpZiBcCistICBKU09OX0hFRExFWV9IQVNfV0FSTklORygiLVdjYXN0LXF1YWwiKSB8fCBcCist ICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSyg0LDYsMCkgfHwgXAorLSAgSlNPTl9IRURM RVlfSU5URUxfVkVSU0lPTl9DSEVDSygxMywwLDApCistIyAgZGVmaW5lIEpTT05fSEVETEVZX0NP TlNUX0NBU1QoVCwgZXhwcikgKF9fZXh0ZW5zaW9uX18gKHsgXAorLSAgICAgICAgSlNPTl9IRURM RVlfRElBR05PU1RJQ19QVVNIIFwKKy0gICAgICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElT QUJMRV9DQVNUX1FVQUwgXAorLSAgICAgICAgKChUKSAoZXhwcikpOyBcCistICAgICAgICBKU09O X0hFRExFWV9ESUFHTk9TVElDX1BPUCBcCistICAgIH0pKQorLSNlbHNlCistIyAgZGVmaW5lIEpT T05fSEVETEVZX0NPTlNUX0NBU1QoVCwgZXhwcikgKChUKSAoZXhwcikpCistI2VuZGlmCistCist I2lmIGRlZmluZWQoSlNPTl9IRURMRVlfUkVJTlRFUlBSRVRfQ0FTVCkKKy0gICAgI3VuZGVmIEpT T05fSEVETEVZX1JFSU5URVJQUkVUX0NBU1QKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX2NwbHVz cGx1cykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9SRUlOVEVSUFJFVF9DQVNUKFQsIGV4cHIp IChyZWludGVycHJldF9jYXN0PFQ+KGV4cHIpKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9I RURMRVlfUkVJTlRFUlBSRVRfQ0FTVChULCBleHByKSAoKFQpIChleHByKSkKKy0jZW5kaWYKKy0K Ky0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9TVEFUSUNfQ0FTVCkKKy0gICAgI3VuZGVmIEpTT05f SEVETEVZX1NUQVRJQ19DQVNUCistI2VuZGlmCistI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCist ICAgICNkZWZpbmUgSlNPTl9IRURMRVlfU1RBVElDX0NBU1QoVCwgZXhwcikgKHN0YXRpY19jYXN0 PFQ+KGV4cHIpKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfU1RBVElDX0NBU1Qo VCwgZXhwcikgKChUKSAoZXhwcikpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURM RVlfQ1BQX0NBU1QpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9DUFBfQ0FTVAorLSNlbmRpZgor LSNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorLSMgIGlmIEpTT05fSEVETEVZX0hBU19XQVJOSU5H KCItV29sZC1zdHlsZS1jYXN0IikKKy0jICAgIGRlZmluZSBKU09OX0hFRExFWV9DUFBfQ0FTVChU LCBleHByKSBcCistICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUFVTSCBcCistICAgIF9QcmFn bWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xb2xkLXN0eWxlLWNhc3RcIiIpIFwKKy0g ICAgKChUKSAoZXhwcikpIFwKKy0gICAgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QT1AKKy0jICBl bGlmIEpTT05fSEVETEVZX0lBUl9WRVJTSU9OX0NIRUNLKDgsMywwKQorLSMgICAgZGVmaW5lIEpT T05fSEVETEVZX0NQUF9DQVNUKFQsIGV4cHIpIFwKKy0gICAgSlNPTl9IRURMRVlfRElBR05PU1RJ Q19QVVNIIFwKKy0gICAgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcz1QZTEzNyIpIFwKKy0gICAgSlNP Tl9IRURMRVlfRElBR05PU1RJQ19QT1AKKy0jICBlbHNlCistIyAgICBkZWZpbmUgSlNPTl9IRURM RVlfQ1BQX0NBU1QoVCwgZXhwcikgKChUKSAoZXhwcikpCistIyAgZW5kaWYKKy0jZWxzZQorLSMg IGRlZmluZSBKU09OX0hFRExFWV9DUFBfQ0FTVChULCBleHByKSAoZXhwcikKKy0jZW5kaWYKKy0K Ky0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfREVQUkVDQVRFRCkK Ky0gICAgI3VuZGVmIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9ERVBSRUNBVEVECist I2VuZGlmCistI2lmIEpTT05fSEVETEVZX0hBU19XQVJOSU5HKCItV2RlcHJlY2F0ZWQtZGVjbGFy YXRpb25zIikKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfREVQ UkVDQVRFRCBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2RlcHJlY2F0ZWQt ZGVjbGFyYXRpb25zXCIiKQorLSNlbGlmIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0so MTMsMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9ERVBS RUNBVEVEIF9QcmFnbWEoIndhcm5pbmcoZGlzYWJsZToxNDc4IDE3ODYpIikKKy0jZWxpZiBKU09O X0hFRExFWV9JTlRFTF9DTF9WRVJTSU9OX0NIRUNLKDIwMjEsMSwwKQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9ERVBSRUNBVEVEIF9fcHJhZ21hKHdhcm5pbmco ZGlzYWJsZToxNDc4IDE3ODYpKQorLSNlbGlmIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OX0NIRUNL KDIwLDcsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfREVQ UkVDQVRFRCBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDEyMTUsMTIxNiwxNDQ0LDE0NDUiKQorLSNl bGlmIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OX0NIRUNLKDE3LDEwLDApCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX0RFUFJFQ0FURUQgX1ByYWdtYSgiZGlhZ19z dXBwcmVzcyAxMjE1LDE0NDQiKQorLSNlbGlmIEpTT05fSEVETEVZX0dDQ19WRVJTSU9OX0NIRUNL KDQsMywwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9ERVBS RUNBVEVEIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2RlcHJlY2F0ZWQtZGVj bGFyYXRpb25zXCIiKQorLSNlbGlmIEpTT05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSygxNSww LDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX0RFUFJFQ0FU RUQgX19wcmFnbWEod2FybmluZyhkaXNhYmxlOjQ5OTYpKQorLSNlbGlmIEpTT05fSEVETEVZX01D U1RfTENDX1ZFUlNJT05fQ0hFQ0soMSwyNSwxMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9E SUFHTk9TVElDX0RJU0FCTEVfREVQUkVDQVRFRCBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDEyMTUs MTQ0NCIpCistI2VsaWYgXAorLSAgICBKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKDE1LDEy LDApIHx8IFwKKy0gICAgKEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNCw4LDAp ICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gICAgSlNP Tl9IRURMRVlfVElfQVJNQ0xfVkVSU0lPTl9DSEVDSyg1LDIsMCkgfHwgXAorLSAgICAoSlNPTl9I RURMRVlfVElfQ0wyMDAwX1ZFUlNJT05fQ0hFQ0soNiwwLDApICYmIGRlZmluZWQoX19USV9HTlVf QVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZF UlNJT05fQ0hFQ0soNiw0LDApIHx8IFwKKy0gICAgKEpTT05fSEVETEVZX1RJX0NMNDMwX1ZFUlNJ T05fQ0hFQ0soNCwwLDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykp IHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSyg0LDMsMCkgfHwg XAorLSAgICAoSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsMiwwKSAmJiBkZWZp bmVkKF9fVElfR05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICAgIEpTT05fSEVETEVZ X1RJX0NMNlhfVkVSU0lPTl9DSEVDSyg3LDUsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9D TDdYX1ZFUlNJT05fQ0hFQ0soMSwyLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0xQUlVf VkVSU0lPTl9DSEVDSygyLDEsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElD X0RJU0FCTEVfREVQUkVDQVRFRCBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDEyOTEsMTcxOCIpCist I2VsaWYgSlNPTl9IRURMRVlfU1VOUFJPX1ZFUlNJT05fQ0hFQ0soNSwxMywwKSAmJiAhZGVmaW5l ZChfX2NwbHVzcGx1cykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FC TEVfREVQUkVDQVRFRCBfUHJhZ21hKCJlcnJvcl9tZXNzYWdlcyhvZmYsRV9ERVBSRUNBVEVEX0FU VCxFX0RFUFJFQ0FURURfQVRUX01FU1MpIikKKy0jZWxpZiBKU09OX0hFRExFWV9TVU5QUk9fVkVS U0lPTl9DSEVDSyg1LDEzLDApICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX0RFUFJFQ0FURUQgX1ByYWdtYSgiZXJyb3Jf bWVzc2FnZXMob2ZmLHN5bWRlcHJlY2F0ZWQsc3ltZGVwcmVjYXRlZDIpIikKKy0jZWxpZiBKU09O X0hFRExFWV9JQVJfVkVSU0lPTl9DSEVDSyg4LDAsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9ESUFHTk9TVElDX0RJU0FCTEVfREVQUkVDQVRFRCBfUHJhZ21hKCJkaWFnX3N1cHByZXNzPVBl MTQ0NCxQZTEyMTUiKQorLSNlbGlmIEpTT05fSEVETEVZX1BFTExFU19WRVJTSU9OX0NIRUNLKDIs OTAsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfREVQUkVD QVRFRCBfUHJhZ21hKCJ3YXJuKGRpc2FibGU6MjI0MSkiKQorLSNlbHNlCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX0RFUFJFQ0FURUQKKy0jZW5kaWYKKy0KKy0j aWYgZGVmaW5lZChKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfVU5LTk9XTl9QUkFHTUFT KQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05fUFJB R01BUworLSNlbmRpZgorLSNpZiBKU09OX0hFRExFWV9IQVNfV0FSTklORygiLVd1bmtub3duLXBy YWdtYXMiKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9VTktO T1dOX1BSQUdNQVMgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmtub3du LXByYWdtYXNcIiIpCistI2VsaWYgSlNPTl9IRURMRVlfSU5URUxfVkVSU0lPTl9DSEVDSygxMyww LDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05f UFJBR01BUyBfUHJhZ21hKCJ3YXJuaW5nKGRpc2FibGU6MTYxKSIpCistI2VsaWYgSlNPTl9IRURM RVlfSU5URUxfQ0xfVkVSU0lPTl9DSEVDSygyMDIxLDEsMCkKKy0gICAgI2RlZmluZSBKU09OX0hF RExFWV9ESUFHTk9TVElDX0RJU0FCTEVfVU5LTk9XTl9QUkFHTUFTIF9fcHJhZ21hKHdhcm5pbmco ZGlzYWJsZToxNjEpKQorLSNlbGlmIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OX0NIRUNLKDE3LDEw LDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05f UFJBR01BUyBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDE2NzUiKQorLSNlbGlmIEpTT05fSEVETEVZ X0dDQ19WRVJTSU9OX0NIRUNLKDQsMywwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdO T1NUSUNfRElTQUJMRV9VTktOT1dOX1BSQUdNQVMgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdu b3JlZCBcIi1XdW5rbm93bi1wcmFnbWFzXCIiKQorLSNlbGlmIEpTT05fSEVETEVZX01TVkNfVkVS U0lPTl9DSEVDSygxNSwwLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19E SVNBQkxFX1VOS05PV05fUFJBR01BUyBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDA2OCkpCist I2VsaWYgXAorLSAgICBKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKDE2LDksMCkgfHwgXAor LSAgICBKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soOCwwLDApIHx8IFwKKy0gICAg SlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9OX0NIRUNLKDEsMiwwKSB8fCBcCistICAgIEpTT05f SEVETEVZX1RJX0NMUFJVX1ZFUlNJT05fQ0hFQ0soMiwzLDApCistICAgICNkZWZpbmUgSlNPTl9I RURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05fUFJBR01BUyBfUHJhZ21hKCJkaWFnX3N1 cHByZXNzIDE2MyIpCistI2VsaWYgSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDgs MCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9VTktOT1dO X1BSQUdNQVMgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAxNjMiKQorLSNlbGlmIEpTT05fSEVETEVZ X0lBUl9WRVJTSU9OX0NIRUNLKDgsMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdO T1NUSUNfRElTQUJMRV9VTktOT1dOX1BSQUdNQVMgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcz1QZTE2 MSIpCistI2VsaWYgSlNPTl9IRURMRVlfTUNTVF9MQ0NfVkVSU0lPTl9DSEVDSygxLDI1LDEwKQor LSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9VTktOT1dOX1BSQUdN QVMgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAxNjEiKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNP Tl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05fUFJBR01BUworLSNlbmRpZgorLQor LSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9VTktOT1dOX0NQUF9B VFRSSUJVVEVTKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VO S05PV05fQ1BQX0FUVFJJQlVURVMKKy0jZW5kaWYKKy0jaWYgSlNPTl9IRURMRVlfSEFTX1dBUk5J TkcoIi1XdW5rbm93bi1hdHRyaWJ1dGVzIikKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFH Tk9TVElDX0RJU0FCTEVfVU5LTk9XTl9DUFBfQVRUUklCVVRFUyBfUHJhZ21hKCJjbGFuZyBkaWFn bm9zdGljIGlnbm9yZWQgXCItV3Vua25vd24tYXR0cmlidXRlc1wiIikKKy0jZWxpZiBKU09OX0hF RExFWV9HQ0NfVkVSU0lPTl9DSEVDSyg0LDYsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9E SUFHTk9TVElDX0RJU0FCTEVfVU5LTk9XTl9DUFBfQVRUUklCVVRFUyBfUHJhZ21hKCJHQ0MgZGlh Z25vc3RpYyBpZ25vcmVkIFwiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9uc1wiIikKKy0jZWxpZiBK U09OX0hFRExFWV9JTlRFTF9WRVJTSU9OX0NIRUNLKDE3LDAsMCkKKy0gICAgI2RlZmluZSBKU09O X0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfVU5LTk9XTl9DUFBfQVRUUklCVVRFUyBfUHJhZ21h KCJ3YXJuaW5nKGRpc2FibGU6MTI5MikiKQorLSNlbGlmIEpTT05fSEVETEVZX0lOVEVMX0NMX1ZF UlNJT05fQ0hFQ0soMjAyMSwxLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJ Q19ESVNBQkxFX1VOS05PV05fQ1BQX0FUVFJJQlVURVMgX19wcmFnbWEod2FybmluZyhkaXNhYmxl OjEyOTIpKQorLSNlbGlmIEpTT05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSygxOSwwLDApCist ICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05fQ1BQX0FU VFJJQlVURVMgX19wcmFnbWEod2FybmluZyhkaXNhYmxlOjUwMzApKQorLSNlbGlmIEpTT05fSEVE TEVZX1BHSV9WRVJTSU9OX0NIRUNLKDIwLDcsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9E SUFHTk9TVElDX0RJU0FCTEVfVU5LTk9XTl9DUFBfQVRUUklCVVRFUyBfUHJhZ21hKCJkaWFnX3N1 cHByZXNzIDEwOTcsMTA5OCIpCistI2VsaWYgSlNPTl9IRURMRVlfUEdJX1ZFUlNJT05fQ0hFQ0so MTcsMTAsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfVU5L Tk9XTl9DUFBfQVRUUklCVVRFUyBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDEwOTciKQorLSNlbGlm IEpTT05fSEVETEVZX1NVTlBST19WRVJTSU9OX0NIRUNLKDUsMTQsMCkgJiYgZGVmaW5lZChfX2Nw bHVzcGx1cykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfVU5L Tk9XTl9DUFBfQVRUUklCVVRFUyBfUHJhZ21hKCJlcnJvcl9tZXNzYWdlcyhvZmYsYXR0cnNraXB1 bnN1cCkiKQorLSNlbGlmIFwKKy0gICAgSlNPTl9IRURMRVlfVElfVkVSU0lPTl9DSEVDSygxOCwx LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDgsMywwKSB8 fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkKKy0gICAg I2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfVU5LTk9XTl9DUFBfQVRUUklC VVRFUyBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDExNzMiKQorLSNlbGlmIEpTT05fSEVETEVZX0lB Ul9WRVJTSU9OX0NIRUNLKDgsMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NU SUNfRElTQUJMRV9VTktOT1dOX0NQUF9BVFRSSUJVVEVTIF9QcmFnbWEoImRpYWdfc3VwcHJlc3M9 UGUxMDk3IikKKy0jZWxpZiBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNLKDEsMjUs MTApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05f Q1BQX0FUVFJJQlVURVMgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAxMDk3IikKKy0jZWxzZQorLSAg ICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9VTktOT1dOX0NQUF9BVFRS SUJVVEVTCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfRElBR05PU1RJQ19E SVNBQkxFX0NBU1RfUVVBTCkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElT QUJMRV9DQVNUX1FVQUwKKy0jZW5kaWYKKy0jaWYgSlNPTl9IRURMRVlfSEFTX1dBUk5JTkcoIi1X Y2FzdC1xdWFsIikKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVf Q0FTVF9RVUFMIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XY2FzdC1xdWFs XCIiKQorLSNlbGlmIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMsMCwwKQorLSAg ICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9DQVNUX1FVQUwgX1ByYWdt YSgid2FybmluZyhkaXNhYmxlOjIyMDMgMjMzMSkiKQorLSNlbGlmIEpTT05fSEVETEVZX0dDQ19W RVJTSU9OX0NIRUNLKDMsMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNf RElTQUJMRV9DQVNUX1FVQUwgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XY2Fz dC1xdWFsXCIiKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05PU1RJQ19E SVNBQkxFX0NBU1RfUVVBTAorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0RJ QUdOT1NUSUNfRElTQUJMRV9VTlVTRURfRlVOQ1RJT04pCistICAgICN1bmRlZiBKU09OX0hFRExF WV9ESUFHTk9TVElDX0RJU0FCTEVfVU5VU0VEX0ZVTkNUSU9OCistI2VuZGlmCistI2lmIEpTT05f SEVETEVZX0hBU19XQVJOSU5HKCItV3VudXNlZC1mdW5jdGlvbiIpCistICAgICNkZWZpbmUgSlNP Tl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOVVNFRF9GVU5DVElPTiBfUHJhZ21hKCJjbGFu ZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC1mdW5jdGlvblwiIikKKy0jZWxpZiBKU09O X0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSygzLDQsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9ESUFHTk9TVElDX0RJU0FCTEVfVU5VU0VEX0ZVTkNUSU9OIF9QcmFnbWEoIkdDQyBkaWFnbm9z dGljIGlnbm9yZWQgXCItV3VudXNlZC1mdW5jdGlvblwiIikKKy0jZWxpZiBKU09OX0hFRExFWV9N U1ZDX1ZFUlNJT05fQ0hFQ0soMSwwLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRElBR05P U1RJQ19ESVNBQkxFX1VOVVNFRF9GVU5DVElPTiBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDUw NSkpCistI2VsaWYgSlNPTl9IRURMRVlfTUNTVF9MQ0NfVkVSU0lPTl9DSEVDSygxLDI1LDEwKQor LSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9VTlVTRURfRlVOQ1RJ T04gX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAzMTQyIikKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9VTlVTRURfRlVOQ1RJT04KKy0jZW5kaWYKKy0K Ky0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9ERVBSRUNBVEVEKQorLSAgICAjdW5kZWYgSlNPTl9I RURMRVlfREVQUkVDQVRFRAorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0RFUFJF Q0FURURfRk9SKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfREVQUkVDQVRFRF9GT1IKKy0jZW5k aWYKKy0jaWYgXAorLSAgICBKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT05fQ0hFQ0soMTQsMCwwKSB8 fCBcCistICAgIEpTT05fSEVETEVZX0lOVEVMX0NMX1ZFUlNJT05fQ0hFQ0soMjAyMSwxLDApCist ICAgICNkZWZpbmUgSlNPTl9IRURMRVlfREVQUkVDQVRFRChzaW5jZSkgX19kZWNsc3BlYyhkZXBy ZWNhdGVkKCJTaW5jZSAiICMgc2luY2UpKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RFUFJF Q0FURURfRk9SKHNpbmNlLCByZXBsYWNlbWVudCkgX19kZWNsc3BlYyhkZXByZWNhdGVkKCJTaW5j ZSAiICNzaW5jZSAiOyB1c2UgIiAjcmVwbGFjZW1lbnQpKQorLSNlbGlmIFwKKy0gICAgKEpTT05f SEVETEVZX0hBU19FWFRFTlNJT04oYXR0cmlidXRlX2RlcHJlY2F0ZWRfd2l0aF9tZXNzYWdlKSAm JiAhZGVmaW5lZChKU09OX0hFRExFWV9JQVJfVkVSU0lPTikpIHx8IFwKKy0gICAgSlNPTl9IRURM RVlfR0NDX1ZFUlNJT05fQ0hFQ0soNCw1LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfSU5URUxf VkVSU0lPTl9DSEVDSygxMywwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05f Q0hFQ0soNSw2LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfU1VOUFJPX1ZFUlNJT05fQ0hFQ0so NSwxMywwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OX0NIRUNLKDE3LDEwLDAp IHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfVkVSU0lPTl9DSEVDSygxOCwxLDApIHx8IFwKKy0g ICAgSlNPTl9IRURMRVlfVElfQVJNQ0xfVkVSU0lPTl9DSEVDSygxOCwxLDApIHx8IFwKKy0gICAg SlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDgsMywwKSB8fCBcCistICAgIEpTT05f SEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkgfHwgXAorLSAgICBKU09OX0hFRExF WV9USV9DTFBSVV9WRVJTSU9OX0NIRUNLKDIsMywwKSB8fCBcCistICAgIEpTT05fSEVETEVZX01D U1RfTENDX1ZFUlNJT05fQ0hFQ0soMSwyNSwxMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9E RVBSRUNBVEVEKHNpbmNlKSBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygiU2luY2UgIiAj c2luY2UpKSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ERVBSRUNBVEVEX0ZPUihzaW5jZSwg cmVwbGFjZW1lbnQpIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJTaW5jZSAiICNzaW5j ZSAiOyB1c2UgIiAjcmVwbGFjZW1lbnQpKSkKKy0jZWxpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAm JiAoX19jcGx1c3BsdXMgPj0gMjAxNDAyTCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ERVBS RUNBVEVEKHNpbmNlKSBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfQ1BQOThfQ09NUEFU X1dSQVBfKFtbZGVwcmVjYXRlZCgiU2luY2UgIiAjc2luY2UpXV0pCistICAgICNkZWZpbmUgSlNP Tl9IRURMRVlfREVQUkVDQVRFRF9GT1Ioc2luY2UsIHJlcGxhY2VtZW50KSBKU09OX0hFRExFWV9E SUFHTk9TVElDX0RJU0FCTEVfQ1BQOThfQ09NUEFUX1dSQVBfKFtbZGVwcmVjYXRlZCgiU2luY2Ug IiAjc2luY2UgIjsgdXNlICIgI3JlcGxhY2VtZW50KV1dKQorLSNlbGlmIFwKKy0gICAgSlNPTl9I RURMRVlfSEFTX0FUVFJJQlVURShkZXByZWNhdGVkKSB8fCBcCistICAgIEpTT05fSEVETEVZX0dD Q19WRVJTSU9OX0NIRUNLKDMsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0FSTV9WRVJTSU9O X0NIRUNLKDQsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX1ZFUlNJT05fQ0hFQ0soMTUs MTIsMCkgfHwgXAorLSAgICAoSlNPTl9IRURMRVlfVElfQVJNQ0xfVkVSU0lPTl9DSEVDSyg0LDgs MCkgJiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBK U09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9OX0NIRUNLKDUsMiwwKSB8fCBcCistICAgIChKU09O X0hFRExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDAsMCkgJiYgZGVmaW5lZChfX1RJX0dO VV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDIwMDBf VkVSU0lPTl9DSEVDSyg2LDQsMCkgfHwgXAorLSAgICAoSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVS U0lPTl9DSEVDSyg0LDAsMCkgJiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9f KSkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDQzMF9WRVJTSU9OX0NIRUNLKDQsMywwKSB8 fCBcCistICAgIChKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNywyLDApICYmIGRl ZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gICAgSlNPTl9IRURM RVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsNSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJ X0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTFBS VV9WRVJTSU9OX0NIRUNLKDIsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX01DU1RfTENDX1ZF UlNJT05fQ0hFQ0soMSwyNSwxMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JQVJfVkVSU0lPTl9D SEVDSyg4LDEwLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfREVQUkVDQVRFRChzaW5jZSkg X19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18pKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZ X0RFUFJFQ0FURURfRk9SKHNpbmNlLCByZXBsYWNlbWVudCkgX19hdHRyaWJ1dGVfXygoX19kZXBy ZWNhdGVkX18pKQorLSNlbGlmIFwKKy0gICAgSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OX0NIRUNL KDEzLDEwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfUEVMTEVTX1ZFUlNJT05fQ0hFQ0soNiw1 MCwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0lOVEVMX0NMX1ZFUlNJT05fQ0hFQ0soMjAyMSwx LDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfREVQUkVDQVRFRChzaW5jZSkgX19kZWNsc3Bl YyhkZXByZWNhdGVkKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RFUFJFQ0FURURfRk9SKHNp bmNlLCByZXBsYWNlbWVudCkgX19kZWNsc3BlYyhkZXByZWNhdGVkKQorLSNlbGlmIEpTT05fSEVE TEVZX0lBUl9WRVJTSU9OX0NIRUNLKDgsMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RF UFJFQ0FURUQoc2luY2UpIF9QcmFnbWEoImRlcHJlY2F0ZWQiKQorLSAgICAjZGVmaW5lIEpTT05f SEVETEVZX0RFUFJFQ0FURURfRk9SKHNpbmNlLCByZXBsYWNlbWVudCkgX1ByYWdtYSgiZGVwcmVj YXRlZCIpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ERVBSRUNBVEVEKHNpbmNl KQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0RFUFJFQ0FURURfRk9SKHNpbmNlLCByZXBsYWNl bWVudCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9VTkFWQUlMQUJMRSkK Ky0gICAgI3VuZGVmIEpTT05fSEVETEVZX1VOQVZBSUxBQkxFCistI2VuZGlmCistI2lmIFwKKy0g ICAgSlNPTl9IRURMRVlfSEFTX0FUVFJJQlVURSh3YXJuaW5nKSB8fCBcCistICAgIEpTT05fSEVE TEVZX0dDQ19WRVJTSU9OX0NIRUNLKDQsMywwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0lOVEVM X1ZFUlNJT05fQ0hFQ0soMTMsMCwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX01DU1RfTENDX1ZF UlNJT05fQ0hFQ0soMSwyNSwxMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9VTkFWQUlMQUJM RShhdmFpbGFibGVfc2luY2UpIF9fYXR0cmlidXRlX18oKF9fd2FybmluZ19fKCJOb3QgYXZhaWxh YmxlIHVudGlsICIgI2F2YWlsYWJsZV9zaW5jZSkpKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNP Tl9IRURMRVlfVU5BVkFJTEFCTEUoYXZhaWxhYmxlX3NpbmNlKQorLSNlbmRpZgorLQorLSNpZiBk ZWZpbmVkKEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVCkKKy0gICAgI3VuZGVmIEpTT05f SEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVAorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVE TEVZX1dBUk5fVU5VU0VEX1JFU1VMVF9NU0cpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9XQVJO X1VOVVNFRF9SRVNVTFRfTVNHCistI2VuZGlmCistI2lmIFwKKy0gICAgSlNPTl9IRURMRVlfSEFT X0FUVFJJQlVURSh3YXJuX3VudXNlZF9yZXN1bHQpIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfR0ND X1ZFUlNJT05fQ0hFQ0soMyw0LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfSU5URUxfVkVSU0lP Tl9DSEVDSygxMywwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfVkVSU0lPTl9DSEVDSygx NSwxMiwwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9OX0NIRUNLKDQs OCwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICAg IEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNSwyLDApIHx8IFwKKy0gICAgKEpT T05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OX0NIRUNLKDYsMCwwKSAmJiBkZWZpbmVkKF9fVElf R05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMMjAw MF9WRVJTSU9OX0NIRUNLKDYsNCwwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9DTDQzMF9W RVJTSU9OX0NIRUNLKDQsMCwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FUVFJJQlVURV9TVVBQT1JU X18pKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMNDMwX1ZFUlNJT05fQ0hFQ0soNCwzLDAp IHx8IFwKKy0gICAgKEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVDSyg3LDIsMCkgJiYg ZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBKU09OX0hF RExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNyw1LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlf VElfQ0w3WF9WRVJTSU9OX0NIRUNLKDEsMiwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NM UFJVX1ZFUlNJT05fQ0hFQ0soMiwxLDApIHx8IFwKKy0gICAgKEpTT05fSEVETEVZX1NVTlBST19W RVJTSU9OX0NIRUNLKDUsMTUsMCkgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykpIHx8IFwKKy0gICAg SlNPTl9IRURMRVlfUEdJX1ZFUlNJT05fQ0hFQ0soMTcsMTAsMCkgfHwgXAorLSAgICBKU09OX0hF RExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNLKDEsMjUsMTApCistICAgICNkZWZpbmUgSlNPTl9I RURMRVlfV0FSTl9VTlVTRURfUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fd2Fybl91bnVzZWRfcmVz dWx0X18pKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVF9NU0co bXNnKSBfX2F0dHJpYnV0ZV9fKChfX3dhcm5fdW51c2VkX3Jlc3VsdF9fKSkKKy0jZWxpZiAoSlNP Tl9IRURMRVlfSEFTX0NQUF9BVFRSSUJVVEUobm9kaXNjYXJkKSA+PSAyMDE5MDdMKQorLSAgICAj ZGVmaW5lIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVCBKU09OX0hFRExFWV9ESUFHTk9T VElDX0RJU0FCTEVfQ1BQOThfQ09NUEFUX1dSQVBfKFtbbm9kaXNjYXJkXV0pCistICAgICNkZWZp bmUgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxUX01TRyhtc2cpIEpTT05fSEVETEVZX0RJ QUdOT1NUSUNfRElTQUJMRV9DUFA5OF9DT01QQVRfV1JBUF8oW1tub2Rpc2NhcmQobXNnKV1dKQor LSNlbGlmIEpTT05fSEVETEVZX0hBU19DUFBfQVRUUklCVVRFKG5vZGlzY2FyZCkKKy0gICAgI2Rl ZmluZSBKU09OX0hFRExFWV9XQVJOX1VOVVNFRF9SRVNVTFQgSlNPTl9IRURMRVlfRElBR05PU1RJ Q19ESVNBQkxFX0NQUDk4X0NPTVBBVF9XUkFQXyhbW25vZGlzY2FyZF1dKQorLSAgICAjZGVmaW5l IEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVF9NU0cobXNnKSBKU09OX0hFRExFWV9ESUFH Tk9TVElDX0RJU0FCTEVfQ1BQOThfQ09NUEFUX1dSQVBfKFtbbm9kaXNjYXJkXV0pCistI2VsaWYg ZGVmaW5lZChfQ2hlY2tfcmV0dXJuXykgLyogU0FMICovCistICAgICNkZWZpbmUgSlNPTl9IRURM RVlfV0FSTl9VTlVTRURfUkVTVUxUIF9DaGVja19yZXR1cm5fCistICAgICNkZWZpbmUgSlNPTl9I RURMRVlfV0FSTl9VTlVTRURfUkVTVUxUX01TRyhtc2cpIF9DaGVja19yZXR1cm5fCistI2Vsc2UK Ky0gICAgI2RlZmluZSBKU09OX0hFRExFWV9XQVJOX1VOVVNFRF9SRVNVTFQKKy0gICAgI2RlZmlu ZSBKU09OX0hFRExFWV9XQVJOX1VOVVNFRF9SRVNVTFRfTVNHKG1zZykKKy0jZW5kaWYKKy0KKy0j aWYgZGVmaW5lZChKU09OX0hFRExFWV9TRU5USU5FTCkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZ X1NFTlRJTkVMCistI2VuZGlmCistI2lmIFwKKy0gICAgSlNPTl9IRURMRVlfSEFTX0FUVFJJQlVU RShzZW50aW5lbCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSyg0LDAs MCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JTlRFTF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwg XAorLSAgICBKU09OX0hFRExFWV9BUk1fVkVSU0lPTl9DSEVDSyg1LDQsMCkgfHwgXAorLSAgICBK U09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNLKDEsMjUsMTApCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfU0VOVElORUwocG9zaXRpb24pIF9fYXR0cmlidXRlX18oKF9fc2VudGluZWxf Xyhwb3NpdGlvbikpKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfU0VOVElORUwo cG9zaXRpb24pCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfTk9fUkVUVVJO KQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfTk9fUkVUVVJOCistI2VuZGlmCistI2lmIEpTT05f SEVETEVZX0lBUl9WRVJTSU9OX0NIRUNLKDgsMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZ X05PX1JFVFVSTiBfX25vcmV0dXJuCistI2VsaWYgXAorLSAgICBKU09OX0hFRExFWV9JTlRFTF9W RVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJT SU9OX0NIRUNLKDEsMjUsMTApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTk9fUkVUVVJOIF9f YXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCistI2VsaWYgZGVmaW5lZChfX1NURENfVkVSU0lP Tl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwKKy0gICAgI2RlZmluZSBKU09OX0hF RExFWV9OT19SRVRVUk4gX05vcmV0dXJuCistI2VsaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYg KF9fY3BsdXNwbHVzID49IDIwMTEwM0wpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTk9fUkVU VVJOIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9DUFA5OF9DT01QQVRfV1JBUF8oW1tu b3JldHVybl1dKQorLSNlbGlmIFwKKy0gICAgSlNPTl9IRURMRVlfSEFTX0FUVFJJQlVURShub3Jl dHVybikgfHwgXAorLSAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSygzLDIsMCkgfHwg XAorLSAgICBKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyg1LDExLDApIHx8IFwKKy0g ICAgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0soNCwxLDApIHx8IFwKKy0gICAgSlNPTl9I RURMRVlfSUJNX1ZFUlNJT05fQ0hFQ0soMTAsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJ X1ZFUlNJT05fQ0hFQ0soMTUsMTIsMCkgfHwgXAorLSAgICAoSlNPTl9IRURMRVlfVElfQVJNQ0xf VkVSU0lPTl9DSEVDSyg0LDgsMCkgJiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9S VF9fKSkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9OX0NIRUNLKDUsMiww KSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDAsMCkg JiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBKU09O X0hFRExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDQsMCkgfHwgXAorLSAgICAoSlNPTl9I RURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSyg0LDAsMCkgJiYgZGVmaW5lZChfX1RJX0dOVV9B VFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDQzMF9WRVJT SU9OX0NIRUNLKDQsMywwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05f Q0hFQ0soNywyLDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8 IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsNSwwKSB8fCBcCist ICAgIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkgfHwgXAorLSAgICBK U09OX0hFRExFWV9USV9DTFBSVV9WRVJTSU9OX0NIRUNLKDIsMSwwKSB8fCBcCistICAgIEpTT05f SEVETEVZX0lBUl9WRVJTSU9OX0NIRUNLKDgsMTAsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9OT19SRVRVUk4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKy0jZWxpZiBKU09OX0hF RExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyg1LDEwLDApCistICAgICNkZWZpbmUgSlNPTl9IRURM RVlfTk9fUkVUVVJOIF9QcmFnbWEoImRvZXNfbm90X3JldHVybiIpCistI2VsaWYgXAorLSAgICBK U09OX0hFRExFWV9NU1ZDX1ZFUlNJT05fQ0hFQ0soMTMsMTAsMCkgfHwgXAorLSAgICBKU09OX0hF RExFWV9JTlRFTF9DTF9WRVJTSU9OX0NIRUNLKDIwMjEsMSwwKQorLSAgICAjZGVmaW5lIEpTT05f SEVETEVZX05PX1JFVFVSTiBfX2RlY2xzcGVjKG5vcmV0dXJuKQorLSNlbGlmIEpTT05fSEVETEVZ X1RJX0NMNlhfVkVSU0lPTl9DSEVDSyg2LDAsMCkgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKy0g ICAgI2RlZmluZSBKU09OX0hFRExFWV9OT19SRVRVUk4gX1ByYWdtYSgiRlVOQ19ORVZFUl9SRVRV Uk5TOyIpCistI2VsaWYgSlNPTl9IRURMRVlfQ09NUENFUlRfVkVSU0lPTl9DSEVDSygzLDIsMCkK Ky0gICAgI2RlZmluZSBKU09OX0hFRExFWV9OT19SRVRVUk4gX19hdHRyaWJ1dGUoKG5vcmV0dXJu KSkKKy0jZWxpZiBKU09OX0hFRExFWV9QRUxMRVNfVkVSU0lPTl9DSEVDSyg5LDAsMCkKKy0gICAg I2RlZmluZSBKU09OX0hFRExFWV9OT19SRVRVUk4gX19kZWNsc3BlYyhub3JldHVybikKKy0jZWxz ZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX05PX1JFVFVSTgorLSNlbmRpZgorLQorLSNpZiBk ZWZpbmVkKEpTT05fSEVETEVZX05PX0VTQ0FQRSkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX05P X0VTQ0FQRQorLSNlbmRpZgorLSNpZiBKU09OX0hFRExFWV9IQVNfQVRUUklCVVRFKG5vZXNjYXBl KQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX05PX0VTQ0FQRSBfX2F0dHJpYnV0ZV9fKChfX25v ZXNjYXBlX18pKQorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTk9fRVNDQVBFCist I2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVU5SRUFDSEFCTEUpCistICAgICN1 bmRlZiBKU09OX0hFRExFWV9VTlJFQUNIQUJMRQorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05f SEVETEVZX1VOUkVBQ0hBQkxFX1JFVFVSTikKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1VOUkVB Q0hBQkxFX1JFVFVSTgorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0FTU1VNRSkK Ky0gICAgI3VuZGVmIEpTT05fSEVETEVZX0FTU1VNRQorLSNlbmRpZgorLSNpZiBcCistICAgIEpT T05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSygxMywxMCwwKSB8fCBcCistICAgIEpTT05fSEVE TEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMsMCwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0lO VEVMX0NMX1ZFUlNJT05fQ0hFQ0soMjAyMSwxLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlf QVNTVU1FKGV4cHIpIF9fYXNzdW1lKGV4cHIpCistI2VsaWYgSlNPTl9IRURMRVlfSEFTX0JVSUxU SU4oX19idWlsdGluX2Fzc3VtZSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9BU1NVTUUoZXhw cikgX19idWlsdGluX2Fzc3VtZShleHByKQorLSNlbGlmIFwKKy0gICAgSlNPTl9IRURMRVlfVElf Q0wyMDAwX1ZFUlNJT05fQ0hFQ0soNiwyLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0w2 WF9WRVJTSU9OX0NIRUNLKDQsMCwwKQorLSAgICAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKy0g ICAgICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQVNTVU1FKGV4cHIpIHN0ZDo6X25hc3NlcnQoZXhw cikKKy0gICAgI2Vsc2UKKy0gICAgICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQVNTVU1FKGV4cHIp IF9uYXNzZXJ0KGV4cHIpCistICAgICNlbmRpZgorLSNlbmRpZgorLSNpZiBcCistICAgIChKU09O X0hFRExFWV9IQVNfQlVJTFRJTihfX2J1aWx0aW5fdW5yZWFjaGFibGUpICYmICghZGVmaW5lZChK U09OX0hFRExFWV9BUk1fVkVSU0lPTikpKSB8fCBcCistICAgIEpTT05fSEVETEVZX0dDQ19WRVJT SU9OX0NIRUNLKDQsNSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OX0NIRUNL KDE4LDEwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfSU5URUxfVkVSU0lPTl9DSEVDSygxMyww LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfSUJNX1ZFUlNJT05fQ0hFQ0soMTMsMSw1KSB8fCBc CistICAgIEpTT05fSEVETEVZX0NSQVlfVkVSU0lPTl9DSEVDSygxMCwwLDApIHx8IFwKKy0gICAg SlNPTl9IRURMRVlfTUNTVF9MQ0NfVkVSU0lPTl9DSEVDSygxLDI1LDEwKQorLSAgICAjZGVmaW5l IEpTT05fSEVETEVZX1VOUkVBQ0hBQkxFKCkgX19idWlsdGluX3VucmVhY2hhYmxlKCkKKy0jZWxp ZiBkZWZpbmVkKEpTT05fSEVETEVZX0FTU1VNRSkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9V TlJFQUNIQUJMRSgpIEpTT05fSEVETEVZX0FTU1VNRSgwKQorLSNlbmRpZgorLSNpZiAhZGVmaW5l ZChKU09OX0hFRExFWV9BU1NVTUUpCistICAgICNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1VOUkVB Q0hBQkxFKQorLSAgICAgICAgI2RlZmluZSBKU09OX0hFRExFWV9BU1NVTUUoZXhwcikgSlNPTl9I RURMRVlfU1RBVElDX0NBU1Qodm9pZCwgKChleHByKSA/IDEgOiAoSlNPTl9IRURMRVlfVU5SRUFD SEFCTEUoKSwgMSkpKQorLSAgICAjZWxzZQorLSAgICAgICAgI2RlZmluZSBKU09OX0hFRExFWV9B U1NVTUUoZXhwcikgSlNPTl9IRURMRVlfU1RBVElDX0NBU1Qodm9pZCwgZXhwcikKKy0gICAgI2Vu ZGlmCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfVU5SRUFDSEFCTEUpCistICAg ICNpZiAgXAorLSAgICAgICAgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJT05fQ0hFQ0soNiwy LDApIHx8IFwKKy0gICAgICAgIEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVDSyg0LDAs MCkKKy0gICAgICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVU5SRUFDSEFCTEVfUkVUVVJOKHZhbHVl KSByZXR1cm4gKEpTT05fSEVETEVZX1NUQVRJQ19DQVNUKHZvaWQsIEpTT05fSEVETEVZX0FTU1VN RSgwKSksICh2YWx1ZSkpCistICAgICNlbHNlCistICAgICAgICAjZGVmaW5lIEpTT05fSEVETEVZ X1VOUkVBQ0hBQkxFX1JFVFVSTih2YWx1ZSkgSlNPTl9IRURMRVlfVU5SRUFDSEFCTEUoKQorLSAg ICAjZW5kaWYKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1VOUkVBQ0hBQkxFX1JF VFVSTih2YWx1ZSkgcmV0dXJuICh2YWx1ZSkKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQoSlNPTl9I RURMRVlfVU5SRUFDSEFCTEUpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVU5SRUFDSEFCTEUo KSBKU09OX0hFRExFWV9BU1NVTUUoMCkKKy0jZW5kaWYKKy0KKy1KU09OX0hFRExFWV9ESUFHTk9T VElDX1BVU0gKKy0jaWYgSlNPTl9IRURMRVlfSEFTX1dBUk5JTkcoIi1XcGVkYW50aWMiKQorLSAg ICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwZWRhbnRpYyIKKy0jZW5kaWYK Ky0jaWYgSlNPTl9IRURMRVlfSEFTX1dBUk5JTkcoIi1XYysrOTgtY29tcGF0LXBlZGFudGljIikg JiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKy0gICAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln bm9yZWQgIi1XYysrOTgtY29tcGF0LXBlZGFudGljIgorLSNlbmRpZgorLSNpZiBKU09OX0hFRExF WV9HQ0NfSEFTX1dBUk5JTkcoIi1XdmFyaWFkaWMtbWFjcm9zIiw0LDAsMCkKKy0gICAgI2lmIGRl ZmluZWQoX19jbGFuZ19fKQorLSAgICAgICAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y ZWQgIi1XdmFyaWFkaWMtbWFjcm9zIgorLSAgICAjZWxpZiBkZWZpbmVkKEpTT05fSEVETEVZX0dD Q19WRVJTSU9OKQorLSAgICAgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Zh cmlhZGljLW1hY3JvcyIKKy0gICAgI2VuZGlmCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9I RURMRVlfTk9OX05VTEwpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9OT05fTlVMTAorLSNlbmRp ZgorLSNpZiBcCistICAgIEpTT05fSEVETEVZX0hBU19BVFRSSUJVVEUobm9ubnVsbCkgfHwgXAor LSAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSygzLDMsMCkgfHwgXAorLSAgICBKU09O X0hFRExFWV9JTlRFTF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExF WV9BUk1fVkVSU0lPTl9DSEVDSyg0LDEsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9OT05f TlVMTCguLi4pIF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKF9fVkFfQVJHU19fKSkpCistI2Vs c2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9OT05fTlVMTCguLi4pCistI2VuZGlmCistSlNP Tl9IRURMRVlfRElBR05PU1RJQ19QT1AKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9QUklO VEZfRk9STUFUKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfUFJJTlRGX0ZPUk1BVAorLSNlbmRp ZgorLSNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiBKU09OX0hFRExFWV9HQ0NfSEFTX0FUVFJJ QlVURShmb3JtYXQsNCw0LDApICYmICFkZWZpbmVkKF9fVVNFX01JTkdXX0FOU0lfU1RESU8pCist ICAgICNkZWZpbmUgSlNPTl9IRURMRVlfUFJJTlRGX0ZPUk1BVChzdHJpbmdfaWR4LGZpcnN0X3Rv X2NoZWNrKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKG1zX3ByaW50Ziwgc3RyaW5nX2lkeCwg Zmlyc3RfdG9fY2hlY2spKSkKKy0jZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiBKU09OX0hF RExFWV9HQ0NfSEFTX0FUVFJJQlVURShmb3JtYXQsNCw0LDApICYmIGRlZmluZWQoX19VU0VfTUlO R1dfQU5TSV9TVERJTykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9QUklOVEZfRk9STUFUKHN0 cmluZ19pZHgsZmlyc3RfdG9fY2hlY2spIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oZ251X3By aW50Ziwgc3RyaW5nX2lkeCwgZmlyc3RfdG9fY2hlY2spKSkKKy0jZWxpZiBcCistICAgIEpTT05f SEVETEVZX0hBU19BVFRSSUJVVEUoZm9ybWF0KSB8fCBcCistICAgIEpTT05fSEVETEVZX0dDQ19W RVJTSU9OX0NIRUNLKDMsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05f Q0hFQ0soMTMsMCwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0FSTV9WRVJTSU9OX0NIRUNLKDUs NiwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0lCTV9WRVJTSU9OX0NIRUNLKDEwLDEsMCkgfHwg XAorLSAgICBKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKDE1LDEyLDApIHx8IFwKKy0gICAg KEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNCw4LDApICYmIGRlZmluZWQoX19U SV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQVJN Q0xfVkVSU0lPTl9DSEVDSyg1LDIsMCkgfHwgXAorLSAgICAoSlNPTl9IRURMRVlfVElfQ0wyMDAw X1ZFUlNJT05fQ0hFQ0soNiwwLDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBP UlRfXykpIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJT05fQ0hFQ0soNiw0 LDApIHx8IFwKKy0gICAgKEpTT05fSEVETEVZX1RJX0NMNDMwX1ZFUlNJT05fQ0hFQ0soNCwwLDAp ICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gICAgSlNP Tl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSyg0LDMsMCkgfHwgXAorLSAgICAoSlNPTl9I RURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsMiwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FU VFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lP Tl9DSEVDSyg3LDUsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDdYX1ZFUlNJT05fQ0hF Q0soMSwyLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTl9DSEVDSygy LDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNLKDEsMjUs MTApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfUFJJTlRGX0ZPUk1BVChzdHJpbmdfaWR4LGZp cnN0X3RvX2NoZWNrKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKF9fcHJpbnRmX18sIHN0cmlu Z19pZHgsIGZpcnN0X3RvX2NoZWNrKSkpCistI2VsaWYgSlNPTl9IRURMRVlfUEVMTEVTX1ZFUlNJ T05fQ0hFQ0soNiwwLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfUFJJTlRGX0ZPUk1BVChz dHJpbmdfaWR4LGZpcnN0X3RvX2NoZWNrKSBfX2RlY2xzcGVjKHZhZm9ybWF0KHByaW50ZixzdHJp bmdfaWR4LGZpcnN0X3RvX2NoZWNrKSkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZ X1BSSU5URl9GT1JNQVQoc3RyaW5nX2lkeCxmaXJzdF90b19jaGVjaykKKy0jZW5kaWYKKy0KKy0j aWYgZGVmaW5lZChKU09OX0hFRExFWV9DT05TVEVYUFIpCistICAgICN1bmRlZiBKU09OX0hFRExF WV9DT05TVEVYUFIKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKy0gICAgI2lm IF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKy0gICAgICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQ09O U1RFWFBSIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9DUFA5OF9DT01QQVRfV1JBUF8o Y29uc3RleHByKQorLSAgICAjZW5kaWYKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQoSlNPTl9IRURM RVlfQ09OU1RFWFBSKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0NPTlNURVhQUgorLSNlbmRp ZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1BSRURJQ1QpCistICAgICN1bmRlZiBKU09O X0hFRExFWV9QUkVESUNUCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfTElLRUxZ KQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfTElLRUxZCistI2VuZGlmCistI2lmIGRlZmluZWQo SlNPTl9IRURMRVlfVU5MSUtFTFkpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9VTkxJS0VMWQor LSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX1VOUFJFRElDVEFCTEUpCistICAgICN1 bmRlZiBKU09OX0hFRExFWV9VTlBSRURJQ1RBQkxFCistI2VuZGlmCistI2lmIEpTT05fSEVETEVZ X0hBU19CVUlMVElOKF9fYnVpbHRpbl91bnByZWRpY3RhYmxlKQorLSAgICAjZGVmaW5lIEpTT05f SEVETEVZX1VOUFJFRElDVEFCTEUoZXhwcikgX19idWlsdGluX3VucHJlZGljdGFibGUoKGV4cHIp KQorLSNlbmRpZgorLSNpZiBcCistICAoSlNPTl9IRURMRVlfSEFTX0JVSUxUSU4oX19idWlsdGlu X2V4cGVjdF93aXRoX3Byb2JhYmlsaXR5KSAmJiAhZGVmaW5lZChKU09OX0hFRExFWV9QR0lfVkVS U0lPTikpIHx8IFwKKy0gIEpTT05fSEVETEVZX0dDQ19WRVJTSU9OX0NIRUNLKDksMCwwKSB8fCBc CistICBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNLKDEsMjUsMTApCistIyAgZGVm aW5lIEpTT05fSEVETEVZX1BSRURJQ1QoZXhwciwgdmFsdWUsIHByb2JhYmlsaXR5KSBfX2J1aWx0 aW5fZXhwZWN0X3dpdGhfcHJvYmFiaWxpdHkoICAoZXhwciksICh2YWx1ZSksIChwcm9iYWJpbGl0 eSkpCistIyAgZGVmaW5lIEpTT05fSEVETEVZX1BSRURJQ1RfVFJVRShleHByLCBwcm9iYWJpbGl0 eSkgICBfX2J1aWx0aW5fZXhwZWN0X3dpdGhfcHJvYmFiaWxpdHkoISEoZXhwciksICAgIDEgICAs IChwcm9iYWJpbGl0eSkpCistIyAgZGVmaW5lIEpTT05fSEVETEVZX1BSRURJQ1RfRkFMU0UoZXhw ciwgcHJvYmFiaWxpdHkpICBfX2J1aWx0aW5fZXhwZWN0X3dpdGhfcHJvYmFiaWxpdHkoISEoZXhw ciksICAgIDAgICAsIChwcm9iYWJpbGl0eSkpCistIyAgZGVmaW5lIEpTT05fSEVETEVZX0xJS0VM WShleHByKSAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fZXhwZWN0ICAgICAgICAgICAg ICAgICAoISEoZXhwciksICAgIDEgICAgICAgICAgICAgICAgICApCistIyAgZGVmaW5lIEpTT05f SEVETEVZX1VOTElLRUxZKGV4cHIpICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fZXhwZWN0 ICAgICAgICAgICAgICAgICAoISEoZXhwciksICAgIDAgICAgICAgICAgICAgICAgICApCistI2Vs aWYgXAorLSAgKEpTT05fSEVETEVZX0hBU19CVUlMVElOKF9fYnVpbHRpbl9leHBlY3QpICYmICFk ZWZpbmVkKEpTT05fSEVETEVZX0lOVEVMX0NMX1ZFUlNJT04pKSB8fCBcCistICBKU09OX0hFRExF WV9HQ0NfVkVSU0lPTl9DSEVDSygzLDAsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfSU5URUxfVkVS U0lPTl9DSEVDSygxMywwLDApIHx8IFwKKy0gIChKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9D SEVDSyg1LDE1LDApICYmIGRlZmluZWQoX19jcGx1c3BsdXMpKSB8fCBcCistICBKU09OX0hFRExF WV9BUk1fVkVSU0lPTl9DSEVDSyg0LDEsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfSUJNX1ZFUlNJ T05fQ0hFQ0soMTAsMSwwKSB8fCBcCistICBKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKDE1 LDEyLDApIHx8IFwKKy0gIEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNCw3LDAp IHx8IFwKKy0gIEpTT05fSEVETEVZX1RJX0NMNDMwX1ZFUlNJT05fQ0hFQ0soMywxLDApIHx8IFwK Ky0gIEpTT05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OX0NIRUNLKDYsMSwwKSB8fCBcCistICBK U09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNiwxLDApIHx8IFwKKy0gIEpTT05fSEVE TEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfVElf Q0xQUlVfVkVSU0lPTl9DSEVDSygyLDEsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfVElOWUNfVkVS U0lPTl9DSEVDSygwLDksMjcpIHx8IFwKKy0gIEpTT05fSEVETEVZX0NSQVlfVkVSU0lPTl9DSEVD Syg4LDEsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfTUNTVF9MQ0NfVkVSU0lPTl9DSEVDSygxLDI1 LDEwKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9QUkVESUNUKGV4cHIsIGV4cGVjdGVkLCBwcm9i YWJpbGl0eSkgXAorLSAgICAoKChwcm9iYWJpbGl0eSkgPj0gMC45KSA/IF9fYnVpbHRpbl9leHBl Y3QoKGV4cHIpLCAoZXhwZWN0ZWQpKSA6IChKU09OX0hFRExFWV9TVEFUSUNfQ0FTVCh2b2lkLCBl eHBlY3RlZCksIChleHByKSkpCistIyAgZGVmaW5lIEpTT05fSEVETEVZX1BSRURJQ1RfVFJVRShl eHByLCBwcm9iYWJpbGl0eSkgXAorLSAgICAoX19leHRlbnNpb25fXyAoeyBcCistICAgICAgICBk b3VibGUgaGVkbGV5X3Byb2JhYmlsaXR5XyA9IChwcm9iYWJpbGl0eSk7IFwKKy0gICAgICAgICgo aGVkbGV5X3Byb2JhYmlsaXR5XyA+PSAwLjkpID8gX19idWlsdGluX2V4cGVjdCghIShleHByKSwg MSkgOiAoKGhlZGxleV9wcm9iYWJpbGl0eV8gPD0gMC4xKSA/IF9fYnVpbHRpbl9leHBlY3QoISEo ZXhwciksIDApIDogISEoZXhwcikpKTsgXAorLSAgICB9KSkKKy0jICBkZWZpbmUgSlNPTl9IRURM RVlfUFJFRElDVF9GQUxTRShleHByLCBwcm9iYWJpbGl0eSkgXAorLSAgICAoX19leHRlbnNpb25f XyAoeyBcCistICAgICAgICBkb3VibGUgaGVkbGV5X3Byb2JhYmlsaXR5XyA9IChwcm9iYWJpbGl0 eSk7IFwKKy0gICAgICAgICgoaGVkbGV5X3Byb2JhYmlsaXR5XyA+PSAwLjkpID8gX19idWlsdGlu X2V4cGVjdCghIShleHByKSwgMCkgOiAoKGhlZGxleV9wcm9iYWJpbGl0eV8gPD0gMC4xKSA/IF9f YnVpbHRpbl9leHBlY3QoISEoZXhwciksIDEpIDogISEoZXhwcikpKTsgXAorLSAgICB9KSkKKy0j ICBkZWZpbmUgSlNPTl9IRURMRVlfTElLRUxZKGV4cHIpICAgX19idWlsdGluX2V4cGVjdCghIShl eHByKSwgMSkKKy0jICBkZWZpbmUgSlNPTl9IRURMRVlfVU5MSUtFTFkoZXhwcikgX19idWlsdGlu X2V4cGVjdCghIShleHByKSwgMCkKKy0jZWxzZQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9QUkVE SUNUKGV4cHIsIGV4cGVjdGVkLCBwcm9iYWJpbGl0eSkgKEpTT05fSEVETEVZX1NUQVRJQ19DQVNU KHZvaWQsIGV4cGVjdGVkKSwgKGV4cHIpKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9QUkVESUNU X1RSVUUoZXhwciwgcHJvYmFiaWxpdHkpICghIShleHByKSkKKy0jICBkZWZpbmUgSlNPTl9IRURM RVlfUFJFRElDVF9GQUxTRShleHByLCBwcm9iYWJpbGl0eSkgKCEhKGV4cHIpKQorLSMgIGRlZmlu ZSBKU09OX0hFRExFWV9MSUtFTFkoZXhwcikgKCEhKGV4cHIpKQorLSMgIGRlZmluZSBKU09OX0hF RExFWV9VTkxJS0VMWShleHByKSAoISEoZXhwcikpCistI2VuZGlmCistI2lmICFkZWZpbmVkKEpT T05fSEVETEVZX1VOUFJFRElDVEFCTEUpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfVU5QUkVE SUNUQUJMRShleHByKSBKU09OX0hFRExFWV9QUkVESUNUKGV4cHIsIDEsIDAuNSkKKy0jZW5kaWYK Ky0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9NQUxMT0MpCistICAgICN1bmRlZiBKU09OX0hF RExFWV9NQUxMT0MKKy0jZW5kaWYKKy0jaWYgXAorLSAgICBKU09OX0hFRExFWV9IQVNfQVRUUklC VVRFKG1hbGxvYykgfHwgXAorLSAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSygzLDEs MCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JTlRFTF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwg XAorLSAgICBKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyg1LDExLDApIHx8IFwKKy0g ICAgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0soNCwxLDApIHx8IFwKKy0gICAgSlNPTl9I RURMRVlfSUJNX1ZFUlNJT05fQ0hFQ0soMTIsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJ X1ZFUlNJT05fQ0hFQ0soMTUsMTIsMCkgfHwgXAorLSAgICAoSlNPTl9IRURMRVlfVElfQVJNQ0xf VkVSU0lPTl9DSEVDSyg0LDgsMCkgJiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9S VF9fKSkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9OX0NIRUNLKDUsMiww KSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDAsMCkg JiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBKU09O X0hFRExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDQsMCkgfHwgXAorLSAgICAoSlNPTl9I RURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSyg0LDAsMCkgJiYgZGVmaW5lZChfX1RJX0dOVV9B VFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDQzMF9WRVJT SU9OX0NIRUNLKDQsMywwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05f Q0hFQ0soNywyLDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8 IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsNSwwKSB8fCBcCist ICAgIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkgfHwgXAorLSAgICBK U09OX0hFRExFWV9USV9DTFBSVV9WRVJTSU9OX0NIRUNLKDIsMSwwKSB8fCBcCistICAgIEpTT05f SEVETEVZX01DU1RfTENDX1ZFUlNJT05fQ0hFQ0soMSwyNSwxMCkKKy0gICAgI2RlZmluZSBKU09O X0hFRExFWV9NQUxMT0MgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpCistI2VsaWYgSlNPTl9I RURMRVlfU1VOUFJPX1ZFUlNJT05fQ0hFQ0soNSwxMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVE TEVZX01BTExPQyBfUHJhZ21hKCJyZXR1cm5zX25ld19tZW1vcnkiKQorLSNlbGlmIFwKKy0gICAg SlNPTl9IRURMRVlfTVNWQ19WRVJTSU9OX0NIRUNLKDE0LDAsMCkgfHwgXAorLSAgICBKU09OX0hF RExFWV9JTlRFTF9DTF9WRVJTSU9OX0NIRUNLKDIwMjEsMSwwKQorLSAgICAjZGVmaW5lIEpTT05f SEVETEVZX01BTExPQyBfX2RlY2xzcGVjKHJlc3RyaWN0KQorLSNlbHNlCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfTUFMTE9DCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlf UFVSRSkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1BVUkUKKy0jZW5kaWYKKy0jaWYgXAorLSAg SlNPTl9IRURMRVlfSEFTX0FUVFJJQlVURShwdXJlKSB8fCBcCistICBKU09OX0hFRExFWV9HQ0Nf VkVSU0lPTl9DSEVDSygyLDk2LDApIHx8IFwKKy0gIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05f Q0hFQ0soMTMsMCwwKSB8fCBcCistICBKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyg1 LDExLDApIHx8IFwKKy0gIEpTT05fSEVETEVZX0FSTV9WRVJTSU9OX0NIRUNLKDQsMSwwKSB8fCBc CistICBKU09OX0hFRExFWV9JQk1fVkVSU0lPTl9DSEVDSygxMCwxLDApIHx8IFwKKy0gIEpTT05f SEVETEVZX1RJX1ZFUlNJT05fQ0hFQ0soMTUsMTIsMCkgfHwgXAorLSAgKEpTT05fSEVETEVZX1RJ X0FSTUNMX1ZFUlNJT05fQ0hFQ0soNCw4LDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRF X1NVUFBPUlRfXykpIHx8IFwKKy0gIEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0so NSwyLDApIHx8IFwKKy0gIChKU09OX0hFRExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDAs MCkgJiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgSlNP Tl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJT05fQ0hFQ0soNiw0LDApIHx8IFwKKy0gIChKU09OX0hF RExFWV9USV9DTDQzMF9WRVJTSU9OX0NIRUNLKDQsMCwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FU VFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICBKU09OX0hFRExFWV9USV9DTDQzMF9WRVJTSU9O X0NIRUNLKDQsMywwKSB8fCBcCistICAoSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNL KDcsMiwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCist ICBKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNyw1LDApIHx8IFwKKy0gIEpTT05f SEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlf VElfQ0xQUlVfVkVSU0lPTl9DSEVDSygyLDEsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfUEdJX1ZF UlNJT05fQ0hFQ0soMTcsMTAsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfTUNTVF9MQ0NfVkVSU0lP Tl9DSEVDSygxLDI1LDEwKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9QVVJFIF9fYXR0cmlidXRl X18oKF9fcHVyZV9fKSkKKy0jZWxpZiBKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyg1 LDEwLDApCistIyAgZGVmaW5lIEpTT05fSEVETEVZX1BVUkUgX1ByYWdtYSgiZG9lc19ub3Rfd3Jp dGVfZ2xvYmFsX2RhdGEiKQorLSNlbGlmIGRlZmluZWQoX19jcGx1c3BsdXMpICYmIFwKKy0gICAg KCBcCistICAgICAgSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSygyLDAsMSkgfHwg XAorLSAgICAgIEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVDSyg0LDAsMCkgfHwgXAor LSAgICAgIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygxLDIsMCkgXAorLSAgICAp CistIyAgZGVmaW5lIEpTT05fSEVETEVZX1BVUkUgX1ByYWdtYSgiRlVOQ19JU19QVVJFOyIpCist I2Vsc2UKKy0jICBkZWZpbmUgSlNPTl9IRURMRVlfUFVSRQorLSNlbmRpZgorLQorLSNpZiBkZWZp bmVkKEpTT05fSEVETEVZX0NPTlNUKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQ09OU1QKKy0j ZW5kaWYKKy0jaWYgXAorLSAgICBKU09OX0hFRExFWV9IQVNfQVRUUklCVVRFKGNvbnN0KSB8fCBc CistICAgIEpTT05fSEVETEVZX0dDQ19WRVJTSU9OX0NIRUNLKDIsNSwwKSB8fCBcCistICAgIEpT T05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMsMCwwKSB8fCBcCistICAgIEpTT05fSEVE TEVZX1NVTlBST19WRVJTSU9OX0NIRUNLKDUsMTEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9B Uk1fVkVSU0lPTl9DSEVDSyg0LDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JQk1fVkVSU0lP Tl9DSEVDSygxMCwxLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfVkVSU0lPTl9DSEVDSygx NSwxMiwwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9OX0NIRUNLKDQs OCwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICAg IEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNSwyLDApIHx8IFwKKy0gICAgKEpT T05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OX0NIRUNLKDYsMCwwKSAmJiBkZWZpbmVkKF9fVElf R05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMMjAw MF9WRVJTSU9OX0NIRUNLKDYsNCwwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9USV9DTDQzMF9W RVJTSU9OX0NIRUNLKDQsMCwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FUVFJJQlVURV9TVVBQT1JU X18pKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMNDMwX1ZFUlNJT05fQ0hFQ0soNCwzLDAp IHx8IFwKKy0gICAgKEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVDSyg3LDIsMCkgJiYg ZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgICBKU09OX0hF RExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNyw1LDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlf VElfQ0w3WF9WRVJTSU9OX0NIRUNLKDEsMiwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NM UFJVX1ZFUlNJT05fQ0hFQ0soMiwxLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfUEdJX1ZFUlNJ T05fQ0hFQ0soMTcsMTAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9O X0NIRUNLKDEsMjUsMTApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQ09OU1QgX19hdHRyaWJ1 dGVfXygoX19jb25zdF9fKSkKKy0jZWxpZiBcCistICAgIEpTT05fSEVETEVZX1NVTlBST19WRVJT SU9OX0NIRUNLKDUsMTAsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9DT05TVCBfUHJhZ21h KCJub19zaWRlX2VmZmVjdCIpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9DT05T VCBKU09OX0hFRExFWV9QVVJFCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlf UkVTVFJJQ1QpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9SRVNUUklDVAorLSNlbmRpZgorLSNp ZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkw MUwpICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1JF U1RSSUNUIHJlc3RyaWN0CistI2VsaWYgXAorLSAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9D SEVDSygzLDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT05fQ0hFQ0soMTQs MCwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMsMCwwKSB8 fCBcCistICAgIEpTT05fSEVETEVZX0lOVEVMX0NMX1ZFUlNJT05fQ0hFQ0soMjAyMSwxLDApIHx8 IFwKKy0gICAgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0soNCwxLDApIHx8IFwKKy0gICAg SlNPTl9IRURMRVlfSUJNX1ZFUlNJT05fQ0hFQ0soMTAsMSwwKSB8fCBcCistICAgIEpTT05fSEVE TEVZX1BHSV9WRVJTSU9OX0NIRUNLKDE3LDEwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElf Q0w0MzBfVkVSU0lPTl9DSEVDSyg0LDMsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDIw MDBfVkVSU0lPTl9DSEVDSyg2LDIsNCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDZYX1ZF UlNJT05fQ0hFQ0soOCwxLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9O X0NIRUNLKDEsMiwwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9DSEVD Syg1LDE0LDApICYmIGRlZmluZWQoX19jcGx1c3BsdXMpKSB8fCBcCistICAgIEpTT05fSEVETEVZ X0lBUl9WRVJTSU9OX0NIRUNLKDgsMCwwKSB8fCBcCistICAgIGRlZmluZWQoX19jbGFuZ19fKSB8 fCBcCistICAgIEpTT05fSEVETEVZX01DU1RfTENDX1ZFUlNJT05fQ0hFQ0soMSwyNSwxMCkKKy0g ICAgI2RlZmluZSBKU09OX0hFRExFWV9SRVNUUklDVCBfX3Jlc3RyaWN0CistI2VsaWYgSlNPTl9I RURMRVlfU1VOUFJPX1ZFUlNJT05fQ0hFQ0soNSwzLDApICYmICFkZWZpbmVkKF9fY3BsdXNwbHVz KQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1JFU1RSSUNUIF9SZXN0cmljdAorLSNlbHNlCist ICAgICNkZWZpbmUgSlNPTl9IRURMRVlfUkVTVFJJQ1QKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5l ZChKU09OX0hFRExFWV9JTkxJTkUpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9JTkxJTkUKKy0j ZW5kaWYKKy0jaWYgXAorLSAgICAoZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERD X1ZFUlNJT05fXyA+PSAxOTk5MDFMKSkgfHwgXAorLSAgICAoZGVmaW5lZChfX2NwbHVzcGx1cykg JiYgKF9fY3BsdXNwbHVzID49IDE5OTcxMUwpKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0lO TElORSBpbmxpbmUKKy0jZWxpZiBcCistICAgIGRlZmluZWQoSlNPTl9IRURMRVlfR0NDX1ZFUlNJ T04pIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0soNiwyLDApCistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfSU5MSU5FIF9faW5saW5lX18KKy0jZWxpZiBcCistICAgIEpT T05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSygxMiwwLDApIHx8IFwKKy0gICAgSlNPTl9IRURM RVlfSU5URUxfQ0xfVkVSU0lPTl9DSEVDSygyMDIxLDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExF WV9BUk1fVkVSU0lPTl9DSEVDSyg0LDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9BUk1D TF9WRVJTSU9OX0NIRUNLKDUsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMNDMwX1ZF UlNJT05fQ0hFQ0soMywxLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJ T05fQ0hFQ0soNiwyLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NI RUNLKDgsMCwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTl9DSEVDSygx LDIsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTFBSVV9WRVJTSU9OX0NIRUNLKDIsMSww KSB8fCBcCistICAgIEpTT05fSEVETEVZX01DU1RfTENDX1ZFUlNJT05fQ0hFQ0soMSwyNSwxMCkK Ky0gICAgI2RlZmluZSBKU09OX0hFRExFWV9JTkxJTkUgX19pbmxpbmUKKy0jZWxzZQorLSAgICAj ZGVmaW5lIEpTT05fSEVETEVZX0lOTElORQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05f SEVETEVZX0FMV0FZU19JTkxJTkUpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9BTFdBWVNfSU5M SU5FCistI2VuZGlmCistI2lmIFwKKy0gIEpTT05fSEVETEVZX0hBU19BVFRSSUJVVEUoYWx3YXlz X2lubGluZSkgfHwgXAorLSAgSlNPTl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0soNCwwLDApIHx8 IFwKKy0gIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMsMCwwKSB8fCBcCistICBK U09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTl9DSEVDSyg1LDExLDApIHx8IFwKKy0gIEpTT05fSEVE TEVZX0FSTV9WRVJTSU9OX0NIRUNLKDQsMSwwKSB8fCBcCistICBKU09OX0hFRExFWV9JQk1fVkVS U0lPTl9DSEVDSygxMCwxLDApIHx8IFwKKy0gIEpTT05fSEVETEVZX1RJX1ZFUlNJT05fQ0hFQ0so MTUsMTIsMCkgfHwgXAorLSAgKEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNCw4 LDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gIEpT T05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNSwyLDApIHx8IFwKKy0gIChKU09OX0hF RExFWV9USV9DTDIwMDBfVkVSU0lPTl9DSEVDSyg2LDAsMCkgJiYgZGVmaW5lZChfX1RJX0dOVV9B VFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAorLSAgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJ T05fQ0hFQ0soNiw0LDApIHx8IFwKKy0gIChKU09OX0hFRExFWV9USV9DTDQzMF9WRVJTSU9OX0NI RUNLKDQsMCwwKSAmJiBkZWZpbmVkKF9fVElfR05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBc CistICBKU09OX0hFRExFWV9USV9DTDQzMF9WRVJTSU9OX0NIRUNLKDQsMywwKSB8fCBcCistICAo SlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsMiwwKSAmJiBkZWZpbmVkKF9fVElf R05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICBKU09OX0hFRExFWV9USV9DTDZYX1ZF UlNJT05fQ0hFQ0soNyw1LDApIHx8IFwKKy0gIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTl9D SEVDSygxLDIsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTl9DSEVDSygy LDEsMCkgfHwgXAorLSAgSlNPTl9IRURMRVlfTUNTVF9MQ0NfVkVSU0lPTl9DSEVDSygxLDI1LDEw KSB8fCBcCistICBKU09OX0hFRExFWV9JQVJfVkVSU0lPTl9DSEVDSyg4LDEwLDApCistIyAgZGVm aW5lIEpTT05fSEVETEVZX0FMV0FZU19JTkxJTkUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKSBKU09OX0hFRExFWV9JTkxJTkUKKy0jZWxpZiBcCistICBKU09OX0hFRExFWV9NU1ZD X1ZFUlNJT05fQ0hFQ0soMTIsMCwwKSB8fCBcCistICBKU09OX0hFRExFWV9JTlRFTF9DTF9WRVJT SU9OX0NIRUNLKDIwMjEsMSwwKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9BTFdBWVNfSU5MSU5F IF9fZm9yY2VpbmxpbmUKKy0jZWxpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBcCistICAgICgg XAorLSAgICAgIEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNSwyLDApIHx8IFwK Ky0gICAgICBKU09OX0hFRExFWV9USV9DTDQzMF9WRVJTSU9OX0NIRUNLKDQsMywwKSB8fCBcCist ICAgICAgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJT05fQ0hFQ0soNiw0LDApIHx8IFwKKy0g ICAgICBKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNiwxLDApIHx8IFwKKy0gICAg ICBKU09OX0hFRExFWV9USV9DTDdYX1ZFUlNJT05fQ0hFQ0soMSwyLDApIHx8IFwKKy0gICAgICBK U09OX0hFRExFWV9USV9DTFBSVV9WRVJTSU9OX0NIRUNLKDIsMSwwKSBcCistICAgICkKKy0jICBk ZWZpbmUgSlNPTl9IRURMRVlfQUxXQVlTX0lOTElORSBfUHJhZ21hKCJGVU5DX0FMV0FZU19JTkxJ TkU7IikKKy0jZWxpZiBKU09OX0hFRExFWV9JQVJfVkVSU0lPTl9DSEVDSyg4LDAsMCkKKy0jICBk ZWZpbmUgSlNPTl9IRURMRVlfQUxXQVlTX0lOTElORSBfUHJhZ21hKCJpbmxpbmU9Zm9yY2VkIikK Ky0jZWxzZQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9BTFdBWVNfSU5MSU5FIEpTT05fSEVETEVZ X0lOTElORQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX05FVkVSX0lOTElO RSkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX05FVkVSX0lOTElORQorLSNlbmRpZgorLSNpZiBc CistICAgIEpTT05fSEVETEVZX0hBU19BVFRSSUJVVEUobm9pbmxpbmUpIHx8IFwKKy0gICAgSlNP Tl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0soNCwwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlf SU5URUxfVkVSU0lPTl9DSEVDSygxMywwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfU1VOUFJP X1ZFUlNJT05fQ0hFQ0soNSwxMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0FSTV9WRVJTSU9O X0NIRUNLKDQsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0lCTV9WRVJTSU9OX0NIRUNLKDEw LDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9WRVJTSU9OX0NIRUNLKDE1LDEyLDApIHx8 IFwKKy0gICAgKEpTT05fSEVETEVZX1RJX0FSTUNMX1ZFUlNJT05fQ0hFQ0soNCw4LDApICYmIGRl ZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gICAgSlNPTl9IRURM RVlfVElfQVJNQ0xfVkVSU0lPTl9DSEVDSyg1LDIsMCkgfHwgXAorLSAgICAoSlNPTl9IRURMRVlf VElfQ0wyMDAwX1ZFUlNJT05fQ0hFQ0soNiwwLDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklC VVRFX1NVUFBPUlRfXykpIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0wyMDAwX1ZFUlNJT05f Q0hFQ0soNiw0LDApIHx8IFwKKy0gICAgKEpTT05fSEVETEVZX1RJX0NMNDMwX1ZFUlNJT05fQ0hF Q0soNCwwLDApICYmIGRlZmluZWQoX19USV9HTlVfQVRUUklCVVRFX1NVUFBPUlRfXykpIHx8IFwK Ky0gICAgSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSyg0LDMsMCkgfHwgXAorLSAg ICAoSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsMiwwKSAmJiBkZWZpbmVkKF9f VElfR05VX0FUVFJJQlVURV9TVVBQT1JUX18pKSB8fCBcCistICAgIEpTT05fSEVETEVZX1RJX0NM NlhfVkVSU0lPTl9DSEVDSyg3LDUsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9USV9DTDdYX1ZF UlNJT05fQ0hFQ0soMSwyLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lP Tl9DSEVDSygyLDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NI RUNLKDEsMjUsMTApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfSUFSX1ZFUlNJT05fQ0hFQ0soOCwx MCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX05FVkVSX0lOTElORSBfX2F0dHJpYnV0ZV9f KChfX25vaW5saW5lX18pKQorLSNlbGlmIFwKKy0gICAgSlNPTl9IRURMRVlfTVNWQ19WRVJTSU9O X0NIRUNLKDEzLDEwLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlfSU5URUxfQ0xfVkVSU0lPTl9D SEVDSygyMDIxLDEsMCkKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9ORVZFUl9JTkxJTkUgX19k ZWNsc3BlYyhub2lubGluZSkKKy0jZWxpZiBKU09OX0hFRExFWV9QR0lfVkVSU0lPTl9DSEVDSygx MCwyLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTkVWRVJfSU5MSU5FIF9QcmFnbWEoIm5v aW5saW5lIikKKy0jZWxpZiBKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT05fQ0hFQ0soNiwwLDAp ICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTkVWRVJf SU5MSU5FIF9QcmFnbWEoIkZVTkNfQ0FOTk9UX0lOTElORTsiKQorLSNlbGlmIEpTT05fSEVETEVZ X0lBUl9WRVJTSU9OX0NIRUNLKDgsMCwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX05FVkVS X0lOTElORSBfUHJhZ21hKCJpbmxpbmU9bmV2ZXIiKQorLSNlbGlmIEpTT05fSEVETEVZX0NPTVBD RVJUX1ZFUlNJT05fQ0hFQ0soMywyLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTkVWRVJf SU5MSU5FIF9fYXR0cmlidXRlKChub2lubGluZSkpCistI2VsaWYgSlNPTl9IRURMRVlfUEVMTEVT X1ZFUlNJT05fQ0hFQ0soOSwwLDApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTkVWRVJfSU5M SU5FIF9fZGVjbHNwZWMobm9pbmxpbmUpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExF WV9ORVZFUl9JTkxJTkUKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9QUklW QVRFKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfUFJJVkFURQorLSNlbmRpZgorLSNpZiBkZWZp bmVkKEpTT05fSEVETEVZX1BVQkxJQykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1BVQkxJQwor LSNlbmRpZgorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0lNUE9SVCkKKy0gICAgI3VuZGVmIEpT T05fSEVETEVZX0lNUE9SVAorLSNlbmRpZgorLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5l ZChfX0NZR1dJTl9fKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9QUklWQVRFCistIyAgZGVmaW5l IEpTT05fSEVETEVZX1BVQkxJQyAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorLSMgIGRlZmluZSBK U09OX0hFRExFWV9JTVBPUlQgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKy0jZWxzZQorLSMgIGlm IFwKKy0gICAgSlNPTl9IRURMRVlfSEFTX0FUVFJJQlVURSh2aXNpYmlsaXR5KSB8fCBcCistICAg IEpTT05fSEVETEVZX0dDQ19WRVJTSU9OX0NIRUNLKDMsMywwKSB8fCBcCistICAgIEpTT05fSEVE TEVZX1NVTlBST19WRVJTSU9OX0NIRUNLKDUsMTEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9J TlRFTF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9BUk1fVkVS U0lPTl9DSEVDSyg0LDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JQk1fVkVSU0lPTl9DSEVD SygxMywxLDApIHx8IFwKKy0gICAgKCBcCistICAgICAgZGVmaW5lZChfX1RJX0VBQklfXykgJiYg XAorLSAgICAgICggXAorLSAgICAgICAgKEpTT05fSEVETEVZX1RJX0NMNlhfVkVSU0lPTl9DSEVD Syg3LDIsMCkgJiYgZGVmaW5lZChfX1RJX0dOVV9BVFRSSUJVVEVfU1VQUE9SVF9fKSkgfHwgXAor LSAgICAgICAgSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OX0NIRUNLKDcsNSwwKSBcCistICAg ICAgKSBcCistICAgICkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NI RUNLKDEsMjUsMTApCistIyAgICBkZWZpbmUgSlNPTl9IRURMRVlfUFJJVkFURSBfX2F0dHJpYnV0 ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKQorLSMgICAgZGVmaW5lIEpTT05fSEVETEVZ X1BVQkxJQyAgX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImRlZmF1bHQiKSkpCistIyAg ZWxzZQorLSMgICAgZGVmaW5lIEpTT05fSEVETEVZX1BSSVZBVEUKKy0jICAgIGRlZmluZSBKU09O X0hFRExFWV9QVUJMSUMKKy0jICBlbmRpZgorLSMgIGRlZmluZSBKU09OX0hFRExFWV9JTVBPUlQg ICAgZXh0ZXJuCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfTk9fVEhST1cp CistICAgICN1bmRlZiBKU09OX0hFRExFWV9OT19USFJPVworLSNlbmRpZgorLSNpZiBcCistICAg IEpTT05fSEVETEVZX0hBU19BVFRSSUJVVEUobm90aHJvdykgfHwgXAorLSAgICBKU09OX0hFRExF WV9HQ0NfVkVSU0lPTl9DSEVDSygzLDMsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JTlRFTF9W RVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJT SU9OX0NIRUNLKDEsMjUsMTApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTk9fVEhST1cgX19h dHRyaWJ1dGVfXygoX19ub3Rocm93X18pKQorLSNlbGlmIFwKKy0gICAgSlNPTl9IRURMRVlfTVNW Q19WRVJTSU9OX0NIRUNLKDEzLDEsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JTlRFTF9DTF9W RVJTSU9OX0NIRUNLKDIwMjEsMSwwKSB8fCBcCistICAgIEpTT05fSEVETEVZX0FSTV9WRVJTSU9O X0NIRUNLKDQsMSwwKQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX05PX1RIUk9XIF9fZGVjbHNw ZWMobm90aHJvdykKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX05PX1RIUk9XCist I2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfRkFMTF9USFJPVUdIKQorLSAgICAj dW5kZWYgSlNPTl9IRURMRVlfRkFMTF9USFJPVUdICistI2VuZGlmCistI2lmIFwKKy0gICAgSlNP Tl9IRURMRVlfSEFTX0FUVFJJQlVURShmYWxsdGhyb3VnaCkgfHwgXAorLSAgICBKU09OX0hFRExF WV9HQ0NfVkVSU0lPTl9DSEVDSyg3LDAsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9NQ1NUX0xD Q19WRVJTSU9OX0NIRUNLKDEsMjUsMTApCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRkFMTF9U SFJPVUdIIF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91Z2hfXykpCistI2VsaWYgSlNPTl9IRURM RVlfSEFTX0NQUF9BVFRSSUJVVEVfTlMoY2xhbmcsZmFsbHRocm91Z2gpCistICAgICNkZWZpbmUg SlNPTl9IRURMRVlfRkFMTF9USFJPVUdIIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9D UFA5OF9DT01QQVRfV1JBUF8oW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSkKKy0jZWxpZiBKU09OX0hF RExFWV9IQVNfQ1BQX0FUVFJJQlVURShmYWxsdGhyb3VnaCkKKy0gICAgI2RlZmluZSBKU09OX0hF RExFWV9GQUxMX1RIUk9VR0ggSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX0NQUDk4X0NP TVBBVF9XUkFQXyhbW2ZhbGx0aHJvdWdoXV0pCistI2VsaWYgZGVmaW5lZChfX2ZhbGx0aHJvdWdo KSAvKiBTQUwgKi8KKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9GQUxMX1RIUk9VR0ggX19mYWxs dGhyb3VnaAorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfRkFMTF9USFJPVUdICist I2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfUkVUVVJOU19OT05fTlVMTCkKKy0g ICAgI3VuZGVmIEpTT05fSEVETEVZX1JFVFVSTlNfTk9OX05VTEwKKy0jZW5kaWYKKy0jaWYgXAor LSAgICBKU09OX0hFRExFWV9IQVNfQVRUUklCVVRFKHJldHVybnNfbm9ubnVsbCkgfHwgXAorLSAg ICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSyg0LDksMCkgfHwgXAorLSAgICBKU09OX0hF RExFWV9NQ1NUX0xDQ19WRVJTSU9OX0NIRUNLKDEsMjUsMTApCistICAgICNkZWZpbmUgSlNPTl9I RURMRVlfUkVUVVJOU19OT05fTlVMTCBfX2F0dHJpYnV0ZV9fKChfX3JldHVybnNfbm9ubnVsbF9f KSkKKy0jZWxpZiBkZWZpbmVkKF9SZXRfbm90bnVsbF8pIC8qIFNBTCAqLworLSAgICAjZGVmaW5l IEpTT05fSEVETEVZX1JFVFVSTlNfTk9OX05VTEwgX1JldF9ub3RudWxsXworLSNlbHNlCistICAg ICNkZWZpbmUgSlNPTl9IRURMRVlfUkVUVVJOU19OT05fTlVMTAorLSNlbmRpZgorLQorLSNpZiBk ZWZpbmVkKEpTT05fSEVETEVZX0FSUkFZX1BBUkFNKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlf QVJSQVlfUEFSQU0KKy0jZW5kaWYKKy0jaWYgXAorLSAgICBkZWZpbmVkKF9fU1REQ19WRVJTSU9O X18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpICYmIFwKKy0gICAgIWRlZmluZWQo X19TVERDX05PX1ZMQV9fKSAmJiBcCistICAgICFkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBcCist ICAgICFkZWZpbmVkKEpTT05fSEVETEVZX1BHSV9WRVJTSU9OKSAmJiBcCistICAgICFkZWZpbmVk KEpTT05fSEVETEVZX1RJTllDX1ZFUlNJT04pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQVJS QVlfUEFSQU0obmFtZSkgKG5hbWUpCistI2Vsc2UKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9B UlJBWV9QQVJBTShuYW1lKQorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0lT X0NPTlNUQU5UKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfSVNfQ09OU1RBTlQKKy0jZW5kaWYK Ky0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9SRVFVSVJFX0NPTlNURVhQUikKKy0gICAgI3VuZGVm IEpTT05fSEVETEVZX1JFUVVJUkVfQ09OU1RFWFBSCistI2VuZGlmCistLyogSlNPTl9IRURMRVlf SVNfQ09OU1RFWFBSXyBpcyBmb3IKKy0gICBIRURMRVkgSU5URVJOQUwgVVNFIE9OTFkuICBBUEkg c3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuICovCistI2lmIGRlZmluZWQoSlNPTl9I RURMRVlfSVNfQ09OU1RFWFBSXykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0lTX0NPTlNURVhQ Ul8KKy0jZW5kaWYKKy0jaWYgXAorLSAgICBKU09OX0hFRExFWV9IQVNfQlVJTFRJTihfX2J1aWx0 aW5fY29uc3RhbnRfcCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSygz LDQsMCkgfHwgXAorLSAgICBKU09OX0hFRExFWV9JTlRFTF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkg fHwgXAorLSAgICBKU09OX0hFRExFWV9USU5ZQ19WRVJTSU9OX0NIRUNLKDAsOSwxOSkgfHwgXAor LSAgICBKU09OX0hFRExFWV9BUk1fVkVSU0lPTl9DSEVDSyg0LDEsMCkgfHwgXAorLSAgICBKU09O X0hFRExFWV9JQk1fVkVSU0lPTl9DSEVDSygxMywxLDApIHx8IFwKKy0gICAgSlNPTl9IRURMRVlf VElfQ0w2WF9WRVJTSU9OX0NIRUNLKDYsMSwwKSB8fCBcCistICAgIChKU09OX0hFRExFWV9TVU5Q Uk9fVkVSU0lPTl9DSEVDSyg1LDEwLDApICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSkgfHwgXAor LSAgICBKU09OX0hFRExFWV9DUkFZX1ZFUlNJT05fQ0hFQ0soOCwxLDApIHx8IFwKKy0gICAgSlNP Tl9IRURMRVlfTUNTVF9MQ0NfVkVSU0lPTl9DSEVDSygxLDI1LDEwKQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX0lTX0NPTlNUQU5UKGV4cHIpIF9fYnVpbHRpbl9jb25zdGFudF9wKGV4cHIpCist I2VuZGlmCistI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorLSMgIGlmIFwKKy0gICAgICAgSlNP Tl9IRURMRVlfSEFTX0JVSUxUSU4oX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCkgfHwgXAor LSAgICAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSygzLDQsMCkgfHwgXAorLSAgICAg ICBKU09OX0hFRExFWV9JTlRFTF9WRVJTSU9OX0NIRUNLKDEzLDAsMCkgfHwgXAorLSAgICAgICBK U09OX0hFRExFWV9JQk1fVkVSU0lPTl9DSEVDSygxMywxLDApIHx8IFwKKy0gICAgICAgSlNPTl9I RURMRVlfQ1JBWV9WRVJTSU9OX0NIRUNLKDgsMSwwKSB8fCBcCistICAgICAgIEpTT05fSEVETEVZ X0FSTV9WRVJTSU9OX0NIRUNLKDUsNCwwKSB8fCBcCistICAgICAgIEpTT05fSEVETEVZX1RJTllD X1ZFUlNJT05fQ0hFQ0soMCw5LDI0KQorLSNpZiBkZWZpbmVkKF9fSU5UUFRSX1RZUEVfXykKKy0g ICAgI2RlZmluZSBKU09OX0hFRExFWV9JU19DT05TVEVYUFJfKGV4cHIpIF9fYnVpbHRpbl90eXBl c19jb21wYXRpYmxlX3AoX190eXBlb2ZfXygoMSA/ICh2b2lkKikgKChfX0lOVFBUUl9UWVBFX18p ICgoZXhwcikgKiAwKSkgOiAoaW50KikgMCkpLCBpbnQqKQorLSNlbHNlCistICAgICNpbmNsdWRl IDxzdGRpbnQuaD4KKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9JU19DT05TVEVYUFJfKGV4cHIp IF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXygoMSA/ICh2b2lkKikgKChp bnRwdHJfdCkgKChleHByKSAqIDApKSA6IChpbnQqKSAwKSksIGludCopCistI2VuZGlmCistIyAg ZWxpZiBcCistICAgICAgICggXAorLSAgICAgICAgICBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18p ICYmIChfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwpICYmIFwKKy0gICAgICAgICAgIWRlZmlu ZWQoSlNPTl9IRURMRVlfU1VOUFJPX1ZFUlNJT04pICYmIFwKKy0gICAgICAgICAgIWRlZmluZWQo SlNPTl9IRURMRVlfUEdJX1ZFUlNJT04pICYmIFwKKy0gICAgICAgICAgIWRlZmluZWQoSlNPTl9I RURMRVlfSUFSX1ZFUlNJT04pKSB8fCBcCistICAgICAgIChKU09OX0hFRExFWV9IQVNfRVhURU5T SU9OKGNfZ2VuZXJpY19zZWxlY3Rpb25zKSAmJiAhZGVmaW5lZChKU09OX0hFRExFWV9JQVJfVkVS U0lPTikpIHx8IFwKKy0gICAgICAgSlNPTl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0soNCw5LDAp IHx8IFwKKy0gICAgICAgSlNPTl9IRURMRVlfSU5URUxfVkVSU0lPTl9DSEVDSygxNywwLDApIHx8 IFwKKy0gICAgICAgSlNPTl9IRURMRVlfSUJNX1ZFUlNJT05fQ0hFQ0soMTIsMSwwKSB8fCBcCist ICAgICAgIEpTT05fSEVETEVZX0FSTV9WRVJTSU9OX0NIRUNLKDUsMywwKQorLSNpZiBkZWZpbmVk KF9fSU5UUFRSX1RZUEVfXykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9JU19DT05TVEVYUFJf KGV4cHIpIF9HZW5lcmljKCgxID8gKHZvaWQqKSAoKF9fSU5UUFRSX1RZUEVfXykgKChleHByKSAq IDApKSA6IChpbnQqKSAwKSwgaW50KjogMSwgdm9pZCo6IDApCistI2Vsc2UKKy0gICAgI2luY2x1 ZGUgPHN0ZGludC5oPgorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0lTX0NPTlNURVhQUl8oZXhw cikgX0dlbmVyaWMoKDEgPyAodm9pZCopICgoaW50cHRyX3QpICogMCkgOiAoaW50KikgMCksIGlu dCo6IDEsIHZvaWQqOiAwKQorLSNlbmRpZgorLSMgIGVsaWYgXAorLSAgICAgICBkZWZpbmVkKEpT T05fSEVETEVZX0dDQ19WRVJTSU9OKSB8fCBcCistICAgICAgIGRlZmluZWQoSlNPTl9IRURMRVlf SU5URUxfVkVSU0lPTikgfHwgXAorLSAgICAgICBkZWZpbmVkKEpTT05fSEVETEVZX1RJTllDX1ZF UlNJT04pIHx8IFwKKy0gICAgICAgZGVmaW5lZChKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9O KSB8fCBcCistICAgICAgIEpTT05fSEVETEVZX1RJX0NMNDMwX1ZFUlNJT05fQ0hFQ0soMTgsMTIs MCkgfHwgXAorLSAgICAgICBkZWZpbmVkKEpTT05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OKSB8 fCBcCistICAgICAgIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0w2WF9WRVJTSU9OKSB8fCBcCist ICAgICAgIGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0w3WF9WRVJTSU9OKSB8fCBcCistICAgICAg IGRlZmluZWQoSlNPTl9IRURMRVlfVElfQ0xQUlVfVkVSU0lPTikgfHwgXAorLSAgICAgICBkZWZp bmVkKF9fY2xhbmdfXykKKy0jICAgIGRlZmluZSBKU09OX0hFRExFWV9JU19DT05TVEVYUFJfKGV4 cHIpICggXAorLSAgICAgICAgc2l6ZW9mKHZvaWQpICE9IFwKKy0gICAgICAgIHNpemVvZigqKCBc CistICAgICAgICAgICAgICAgICAgMSA/IFwKKy0gICAgICAgICAgICAgICAgICAoKHZvaWQqKSAo KGV4cHIpICogMEwpICkgOiBcCistKChzdHJ1Y3QgeyBjaGFyIHZbc2l6ZW9mKHZvaWQpICogMl07 IH0gKikgMSkgXAorLSAgICAgICAgICAgICAgICApIFwKKy0gICAgICAgICAgICAgICkgXAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorLSMgIGVuZGlmCist I2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfSVNfQ09OU1RFWFBSXykKKy0gICAgI2lm ICFkZWZpbmVkKEpTT05fSEVETEVZX0lTX0NPTlNUQU5UKQorLSAgICAgICAgI2RlZmluZSBKU09O X0hFRExFWV9JU19DT05TVEFOVChleHByKSBKU09OX0hFRExFWV9JU19DT05TVEVYUFJfKGV4cHIp CistICAgICNlbmRpZgorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX1JFUVVJUkVfQ09OU1RFWFBS KGV4cHIpIChKU09OX0hFRExFWV9JU19DT05TVEVYUFJfKGV4cHIpID8gKGV4cHIpIDogKC0xKSkK Ky0jZWxzZQorLSAgICAjaWYgIWRlZmluZWQoSlNPTl9IRURMRVlfSVNfQ09OU1RBTlQpCistICAg ICAgICAjZGVmaW5lIEpTT05fSEVETEVZX0lTX0NPTlNUQU5UKGV4cHIpICgwKQorLSAgICAjZW5k aWYKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9SRVFVSVJFX0NPTlNURVhQUihleHByKSAoZXhw cikKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9CRUdJTl9DX0RFQ0xTKQor LSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQkVHSU5fQ19ERUNMUworLSNlbmRpZgorLSNpZiBkZWZp bmVkKEpTT05fSEVETEVZX0VORF9DX0RFQ0xTKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfRU5E X0NfREVDTFMKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9DX0RFQ0wpCistICAg ICN1bmRlZiBKU09OX0hFRExFWV9DX0RFQ0wKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChfX2NwbHVz cGx1cykKKy0gICAgI2RlZmluZSBKU09OX0hFRExFWV9CRUdJTl9DX0RFQ0xTIGV4dGVybiAiQyIg eworLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0VORF9DX0RFQ0xTIH0KKy0gICAgI2RlZmluZSBK U09OX0hFRExFWV9DX0RFQ0wgZXh0ZXJuICJDIgorLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9I RURMRVlfQkVHSU5fQ19ERUNMUworLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0VORF9DX0RFQ0xT CistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfQ19ERUNMCistI2VuZGlmCistCistI2lmIGRlZmlu ZWQoSlNPTl9IRURMRVlfU1RBVElDX0FTU0VSVCkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1NU QVRJQ19BU1NFUlQKKy0jZW5kaWYKKy0jaWYgXAorLSAgIWRlZmluZWQoX19jcGx1c3BsdXMpICYm ICggXAorLSAgICAgIChkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lP Tl9fID49IDIwMTExMkwpKSB8fCBcCistICAgICAgKEpTT05fSEVETEVZX0hBU19GRUFUVVJFKGNf c3RhdGljX2Fzc2VydCkgJiYgIWRlZmluZWQoSlNPTl9IRURMRVlfSU5URUxfQ0xfVkVSU0lPTikp IHx8IFwKKy0gICAgICBKU09OX0hFRExFWV9HQ0NfVkVSU0lPTl9DSEVDSyg2LDAsMCkgfHwgXAor LSAgICAgIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMsMCwwKSB8fCBcCistICAg ICAgZGVmaW5lZChfU3RhdGljX2Fzc2VydCkgXAorLSAgICApCistIyAgZGVmaW5lIEpTT05fSEVE TEVZX1NUQVRJQ19BU1NFUlQoZXhwciwgbWVzc2FnZSkgX1N0YXRpY19hc3NlcnQoZXhwciwgbWVz c2FnZSkKKy0jZWxpZiBcCistICAoZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgKF9fY3BsdXNwbHVz ID49IDIwMTEwM0wpKSB8fCBcCistICBKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT05fQ0hFQ0soMTYs MCwwKSB8fCBcCistICBKU09OX0hFRExFWV9JTlRFTF9DTF9WRVJTSU9OX0NIRUNLKDIwMjEsMSww KQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9TVEFUSUNfQVNTRVJUKGV4cHIsIG1lc3NhZ2UpIEpT T05fSEVETEVZX0RJQUdOT1NUSUNfRElTQUJMRV9DUFA5OF9DT01QQVRfV1JBUF8oc3RhdGljX2Fz c2VydChleHByLCBtZXNzYWdlKSkKKy0jZWxzZQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9TVEFU SUNfQVNTRVJUKGV4cHIsIG1lc3NhZ2UpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9I RURMRVlfTlVMTCkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX05VTEwKKy0jZW5kaWYKKy0jaWYg ZGVmaW5lZChfX2NwbHVzcGx1cykKKy0gICAgI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKy0g ICAgICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTlVMTCBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJ U0FCTEVfQ1BQOThfQ09NUEFUX1dSQVBfKG51bGxwdHIpCistICAgICNlbGlmIGRlZmluZWQoTlVM TCkKKy0gICAgICAgICNkZWZpbmUgSlNPTl9IRURMRVlfTlVMTCBOVUxMCistICAgICNlbHNlCist ICAgICAgICAjZGVmaW5lIEpTT05fSEVETEVZX05VTEwgSlNPTl9IRURMRVlfU1RBVElDX0NBU1Qo dm9pZCosIDApCistICAgICNlbmRpZgorLSNlbGlmIGRlZmluZWQoTlVMTCkKKy0gICAgI2RlZmlu ZSBKU09OX0hFRExFWV9OVUxMIE5VTEwKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZ X05VTEwgKCh2b2lkKikgMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9N RVNTQUdFKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfTUVTU0FHRQorLSNlbmRpZgorLSNpZiBK U09OX0hFRExFWV9IQVNfV0FSTklORygiLVd1bmtub3duLXByYWdtYXMiKQorLSMgIGRlZmluZSBK U09OX0hFRExFWV9NRVNTQUdFKG1zZykgXAorLSAgICBKU09OX0hFRExFWV9ESUFHTk9TVElDX1BV U0ggXAorLSAgICBKU09OX0hFRExFWV9ESUFHTk9TVElDX0RJU0FCTEVfVU5LTk9XTl9QUkFHTUFT IFwKKy0gICAgSlNPTl9IRURMRVlfUFJBR01BKG1lc3NhZ2UgbXNnKSBcCistICAgIEpTT05fSEVE TEVZX0RJQUdOT1NUSUNfUE9QCistI2VsaWYgXAorLSAgSlNPTl9IRURMRVlfR0NDX1ZFUlNJT05f Q0hFQ0soNCw0LDApIHx8IFwKKy0gIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMs MCwwKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9NRVNTQUdFKG1zZykgSlNPTl9IRURMRVlfUFJB R01BKG1lc3NhZ2UgbXNnKQorLSNlbGlmIEpTT05fSEVETEVZX0NSQVlfVkVSU0lPTl9DSEVDSyg1 LDAsMCkKKy0jICBkZWZpbmUgSlNPTl9IRURMRVlfTUVTU0FHRShtc2cpIEpTT05fSEVETEVZX1BS QUdNQShfQ1JJIG1lc3NhZ2UgbXNnKQorLSNlbGlmIEpTT05fSEVETEVZX0lBUl9WRVJTSU9OX0NI RUNLKDgsMCwwKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9NRVNTQUdFKG1zZykgSlNPTl9IRURM RVlfUFJBR01BKG1lc3NhZ2UobXNnKSkKKy0jZWxpZiBKU09OX0hFRExFWV9QRUxMRVNfVkVSU0lP Tl9DSEVDSygyLDAsMCkKKy0jICBkZWZpbmUgSlNPTl9IRURMRVlfTUVTU0FHRShtc2cpIEpTT05f SEVETEVZX1BSQUdNQShtZXNzYWdlKG1zZykpCistI2Vsc2UKKy0jICBkZWZpbmUgSlNPTl9IRURM RVlfTUVTU0FHRShtc2cpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfV0FS TklORykKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1dBUk5JTkcKKy0jZW5kaWYKKy0jaWYgSlNP Tl9IRURMRVlfSEFTX1dBUk5JTkcoIi1XdW5rbm93bi1wcmFnbWFzIikKKy0jICBkZWZpbmUgSlNP Tl9IRURMRVlfV0FSTklORyhtc2cpIFwKKy0gICAgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QVVNI IFwKKy0gICAgSlNPTl9IRURMRVlfRElBR05PU1RJQ19ESVNBQkxFX1VOS05PV05fUFJBR01BUyBc CistICAgIEpTT05fSEVETEVZX1BSQUdNQShjbGFuZyB3YXJuaW5nIG1zZykgXAorLSAgICBKU09O X0hFRExFWV9ESUFHTk9TVElDX1BPUAorLSNlbGlmIFwKKy0gIEpTT05fSEVETEVZX0dDQ19WRVJT SU9OX0NIRUNLKDQsOCwwKSB8fCBcCistICBKU09OX0hFRExFWV9QR0lfVkVSU0lPTl9DSEVDSygx OCw0LDApIHx8IFwKKy0gIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTMsMCwwKQor LSMgIGRlZmluZSBKU09OX0hFRExFWV9XQVJOSU5HKG1zZykgSlNPTl9IRURMRVlfUFJBR01BKEdD QyB3YXJuaW5nIG1zZykKKy0jZWxpZiBcCistICBKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT05fQ0hF Q0soMTUsMCwwKSB8fCBcCistICBKU09OX0hFRExFWV9JTlRFTF9DTF9WRVJTSU9OX0NIRUNLKDIw MjEsMSwwKQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9XQVJOSU5HKG1zZykgSlNPTl9IRURMRVlf UFJBR01BKG1lc3NhZ2UobXNnKSkKKy0jZWxzZQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9XQVJO SU5HKG1zZykgSlNPTl9IRURMRVlfTUVTU0FHRShtc2cpCistI2VuZGlmCistCistI2lmIGRlZmlu ZWQoSlNPTl9IRURMRVlfUkVRVUlSRSkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX1JFUVVJUkUK Ky0jZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9SRVFVSVJFX01TRykKKy0gICAgI3Vu ZGVmIEpTT05fSEVETEVZX1JFUVVJUkVfTVNHCistI2VuZGlmCistI2lmIEpTT05fSEVETEVZX0hB U19BVFRSSUJVVEUoZGlhZ25vc2VfaWYpCistIyAgaWYgSlNPTl9IRURMRVlfSEFTX1dBUk5JTkco Ii1XZ2NjLWNvbXBhdCIpCistIyAgICBkZWZpbmUgSlNPTl9IRURMRVlfUkVRVUlSRShleHByKSBc CistICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUFVTSCBcCistICAgIF9QcmFnbWEoImNsYW5n IGRpYWdub3N0aWMgaWdub3JlZCBcIi1XZ2NjLWNvbXBhdFwiIikgXAorLSAgICBfX2F0dHJpYnV0 ZV9fKChkaWFnbm9zZV9pZighKGV4cHIpLCAjZXhwciwgImVycm9yIikpKSBcCistICAgIEpTT05f SEVETEVZX0RJQUdOT1NUSUNfUE9QCistIyAgICBkZWZpbmUgSlNPTl9IRURMRVlfUkVRVUlSRV9N U0coZXhwcixtc2cpIFwKKy0gICAgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QVVNIIFwKKy0gICAg X1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdnY2MtY29tcGF0XCIiKSBcCist ICAgIF9fYXR0cmlidXRlX18oKGRpYWdub3NlX2lmKCEoZXhwciksIG1zZywgImVycm9yIikpKSBc CistICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUE9QCistIyAgZWxzZQorLSMgICAgZGVmaW5l IEpTT05fSEVETEVZX1JFUVVJUkUoZXhwcikgX19hdHRyaWJ1dGVfXygoZGlhZ25vc2VfaWYoIShl eHByKSwgI2V4cHIsICJlcnJvciIpKSkKKy0jICAgIGRlZmluZSBKU09OX0hFRExFWV9SRVFVSVJF X01TRyhleHByLG1zZykgX19hdHRyaWJ1dGVfXygoZGlhZ25vc2VfaWYoIShleHByKSwgbXNnLCAi ZXJyb3IiKSkpCistIyAgZW5kaWYKKy0jZWxzZQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9SRVFV SVJFKGV4cHIpCistIyAgZGVmaW5lIEpTT05fSEVETEVZX1JFUVVJUkVfTVNHKGV4cHIsbXNnKQor LSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0ZMQUdTKQorLSAgICAjdW5kZWYg SlNPTl9IRURMRVlfRkxBR1MKKy0jZW5kaWYKKy0jaWYgSlNPTl9IRURMRVlfSEFTX0FUVFJJQlVU RShmbGFnX2VudW0pICYmICghZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgSlNPTl9IRURMRVlfSEFT X1dBUk5JTkcoIi1XYml0ZmllbGQtZW51bS1jb252ZXJzaW9uIikpCistICAgICNkZWZpbmUgSlNP Tl9IRURMRVlfRkxBR1MgX19hdHRyaWJ1dGVfXygoX19mbGFnX2VudW1fXykpCistI2Vsc2UKKy0g ICAgI2RlZmluZSBKU09OX0hFRExFWV9GTEFHUworLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkKEpT T05fSEVETEVZX0ZMQUdTX0NBU1QpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9GTEFHU19DQVNU CistI2VuZGlmCistI2lmIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT05fQ0hFQ0soMTksMCwwKQor LSMgIGRlZmluZSBKU09OX0hFRExFWV9GTEFHU19DQVNUKFQsIGV4cHIpIChfX2V4dGVuc2lvbl9f ICh7IFwKKy0gICAgICAgIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfUFVTSCBcCistICAgICAgICBf UHJhZ21hKCJ3YXJuaW5nKGRpc2FibGU6MTg4KSIpIFwKKy0gICAgICAgICgoVCkgKGV4cHIpKTsg XAorLSAgICAgICAgSlNPTl9IRURMRVlfRElBR05PU1RJQ19QT1AgXAorLSAgICB9KSkKKy0jZWxz ZQorLSMgIGRlZmluZSBKU09OX0hFRExFWV9GTEFHU19DQVNUKFQsIGV4cHIpIEpTT05fSEVETEVZ X1NUQVRJQ19DQVNUKFQsIGV4cHIpCistI2VuZGlmCistCistI2lmIGRlZmluZWQoSlNPTl9IRURM RVlfRU1QVFlfQkFTRVMpCistICAgICN1bmRlZiBKU09OX0hFRExFWV9FTVBUWV9CQVNFUworLSNl bmRpZgorLSNpZiBcCistICAgIChKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT05fQ0hFQ0soMTksMCwy MzkxOCkgJiYgIUpTT05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSygyMCwwLDApKSB8fCBcCist ICAgIEpTT05fSEVETEVZX0lOVEVMX0NMX1ZFUlNJT05fQ0hFQ0soMjAyMSwxLDApCistICAgICNk ZWZpbmUgSlNPTl9IRURMRVlfRU1QVFlfQkFTRVMgX19kZWNsc3BlYyhlbXB0eV9iYXNlcykKKy0j ZWxzZQorLSAgICAjZGVmaW5lIEpTT05fSEVETEVZX0VNUFRZX0JBU0VTCistI2VuZGlmCistCist LyogUmVtYWluaW5nIG1hY3JvcyBhcmUgZGVwcmVjYXRlZC4gKi8KKy0KKy0jaWYgZGVmaW5lZChK U09OX0hFRExFWV9HQ0NfTk9UX0NMQU5HX1ZFUlNJT05fQ0hFQ0spCistICAgICN1bmRlZiBKU09O X0hFRExFWV9HQ0NfTk9UX0NMQU5HX1ZFUlNJT05fQ0hFQ0sKKy0jZW5kaWYKKy0jaWYgZGVmaW5l ZChfX2NsYW5nX18pCistICAgICNkZWZpbmUgSlNPTl9IRURMRVlfR0NDX05PVF9DTEFOR19WRVJT SU9OX0NIRUNLKG1ham9yLG1pbm9yLHBhdGNoKSAoMCkKKy0jZWxzZQorLSAgICAjZGVmaW5lIEpT T05fSEVETEVZX0dDQ19OT1RfQ0xBTkdfVkVSU0lPTl9DSEVDSyhtYWpvcixtaW5vcixwYXRjaCkg SlNPTl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IscGF0Y2gpCistI2VuZGlm CistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlfQ0xBTkdfSEFTX0FUVFJJQlVURSkKKy0gICAg I3VuZGVmIEpTT05fSEVETEVZX0NMQU5HX0hBU19BVFRSSUJVVEUKKy0jZW5kaWYKKy0jZGVmaW5l IEpTT05fSEVETEVZX0NMQU5HX0hBU19BVFRSSUJVVEUoYXR0cmlidXRlKSBKU09OX0hFRExFWV9I QVNfQVRUUklCVVRFKGF0dHJpYnV0ZSkKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9DTEFO R19IQVNfQ1BQX0FUVFJJQlVURSkKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0NMQU5HX0hBU19D UFBfQVRUUklCVVRFCistI2VuZGlmCistI2RlZmluZSBKU09OX0hFRExFWV9DTEFOR19IQVNfQ1BQ X0FUVFJJQlVURShhdHRyaWJ1dGUpIEpTT05fSEVETEVZX0hBU19DUFBfQVRUUklCVVRFKGF0dHJp YnV0ZSkKKy0KKy0jaWYgZGVmaW5lZChKU09OX0hFRExFWV9DTEFOR19IQVNfQlVJTFRJTikKKy0g ICAgI3VuZGVmIEpTT05fSEVETEVZX0NMQU5HX0hBU19CVUlMVElOCistI2VuZGlmCistI2RlZmlu ZSBKU09OX0hFRExFWV9DTEFOR19IQVNfQlVJTFRJTihidWlsdGluKSBKU09OX0hFRExFWV9IQVNf QlVJTFRJTihidWlsdGluKQorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NMQU5HX0hBU19G RUFUVVJFKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQ0xBTkdfSEFTX0ZFQVRVUkUKKy0jZW5k aWYKKy0jZGVmaW5lIEpTT05fSEVETEVZX0NMQU5HX0hBU19GRUFUVVJFKGZlYXR1cmUpIEpTT05f SEVETEVZX0hBU19GRUFUVVJFKGZlYXR1cmUpCistCistI2lmIGRlZmluZWQoSlNPTl9IRURMRVlf Q0xBTkdfSEFTX0VYVEVOU0lPTikKKy0gICAgI3VuZGVmIEpTT05fSEVETEVZX0NMQU5HX0hBU19F WFRFTlNJT04KKy0jZW5kaWYKKy0jZGVmaW5lIEpTT05fSEVETEVZX0NMQU5HX0hBU19FWFRFTlNJ T04oZXh0ZW5zaW9uKSBKU09OX0hFRExFWV9IQVNfRVhURU5TSU9OKGV4dGVuc2lvbikKKy0KKy0j aWYgZGVmaW5lZChKU09OX0hFRExFWV9DTEFOR19IQVNfREVDTFNQRUNfREVDTFNQRUNfQVRUUklC VVRFKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQ0xBTkdfSEFTX0RFQ0xTUEVDX0RFQ0xTUEVD X0FUVFJJQlVURQorLSNlbmRpZgorLSNkZWZpbmUgSlNPTl9IRURMRVlfQ0xBTkdfSEFTX0RFQ0xT UEVDX0FUVFJJQlVURShhdHRyaWJ1dGUpIEpTT05fSEVETEVZX0hBU19ERUNMU1BFQ19BVFRSSUJV VEUoYXR0cmlidXRlKQorLQorLSNpZiBkZWZpbmVkKEpTT05fSEVETEVZX0NMQU5HX0hBU19XQVJO SU5HKQorLSAgICAjdW5kZWYgSlNPTl9IRURMRVlfQ0xBTkdfSEFTX1dBUk5JTkcKKy0jZW5kaWYK Ky0jZGVmaW5lIEpTT05fSEVETEVZX0NMQU5HX0hBU19XQVJOSU5HKHdhcm5pbmcpIEpTT05fSEVE TEVZX0hBU19XQVJOSU5HKHdhcm5pbmcpCistCistI2VuZGlmIC8qICFkZWZpbmVkKEpTT05fSEVE TEVZX1ZFUlNJT04pIHx8IChKU09OX0hFRExFWV9WRVJTSU9OIDwgWCkgKi8KKy0KKy0vLyAjaW5j bHVkZSA8bmxvaG1hbm4vZGV0YWlsL21ldGEvZGV0ZWN0ZWQuaHBwPgorLQorLQorLSNpbmNsdWRl IDx0eXBlX3RyYWl0cz4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21ldGEvdm9p ZF90LmhwcD4KKy0KKy0KKy1uYW1lc3BhY2UgbmxvaG1hbm4KKy17CistbmFtZXNwYWNlIGRldGFp bAorLXsKKy10ZW1wbGF0ZTx0eXBlbmFtZSAuLi5Ucz4gc3RydWN0IG1ha2Vfdm9pZAorLXsKKy0g ICAgdXNpbmcgdHlwZSA9IHZvaWQ7CistfTsKKy10ZW1wbGF0ZTx0eXBlbmFtZSAuLi5Ucz4gdXNp bmcgdm9pZF90ID0gdHlwZW5hbWUgbWFrZV92b2lkPFRzLi4uPjo6dHlwZTsKKy19IC8vIG5hbWVz cGFjZSBkZXRhaWwKKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0KKy0vLyBodHRwczov L2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvZXhwZXJpbWVudGFsL2lzX2RldGVjdGVkCistbmFt ZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRhaWwKKy17Cistc3RydWN0IG5vbmVz dWNoCisteworLSAgICBub25lc3VjaCgpID0gZGVsZXRlOworLSAgICB+bm9uZXN1Y2goKSA9IGRl bGV0ZTsKKy0gICAgbm9uZXN1Y2gobm9uZXN1Y2ggY29uc3QmKSA9IGRlbGV0ZTsKKy0gICAgbm9u ZXN1Y2gobm9uZXN1Y2ggY29uc3QmJikgPSBkZWxldGU7CistICAgIHZvaWQgb3BlcmF0b3I9KG5v bmVzdWNoIGNvbnN0JikgPSBkZWxldGU7CistICAgIHZvaWQgb3BlcmF0b3I9KG5vbmVzdWNoJiYp ID0gZGVsZXRlOworLX07CistCistdGVtcGxhdGU8Y2xhc3MgRGVmYXVsdCwKKy0gICAgICAgICBj bGFzcyBBbHdheXNWb2lkLAorLSAgICAgICAgIHRlbXBsYXRlPGNsYXNzLi4uPiBjbGFzcyBPcCwK Ky0gICAgICAgICBjbGFzcy4uLiBBcmdzPgorLXN0cnVjdCBkZXRlY3RvcgorLXsKKy0gICAgdXNp bmcgdmFsdWVfdCA9IHN0ZDo6ZmFsc2VfdHlwZTsKKy0gICAgdXNpbmcgdHlwZSA9IERlZmF1bHQ7 CistfTsKKy0KKy10ZW1wbGF0ZTxjbGFzcyBEZWZhdWx0LCB0ZW1wbGF0ZTxjbGFzcy4uLj4gY2xh c3MgT3AsIGNsYXNzLi4uIEFyZ3M+Cistc3RydWN0IGRldGVjdG9yPERlZmF1bHQsIHZvaWRfdDxP cDxBcmdzLi4uPj4sIE9wLCBBcmdzLi4uPgorLXsKKy0gICAgdXNpbmcgdmFsdWVfdCA9IHN0ZDo6 dHJ1ZV90eXBlOworLSAgICB1c2luZyB0eXBlID0gT3A8QXJncy4uLj47CistfTsKKy0KKy10ZW1w bGF0ZTx0ZW1wbGF0ZTxjbGFzcy4uLj4gY2xhc3MgT3AsIGNsYXNzLi4uIEFyZ3M+CistdXNpbmcg aXNfZGV0ZWN0ZWQgPSB0eXBlbmFtZSBkZXRlY3Rvcjxub25lc3VjaCwgdm9pZCwgT3AsIEFyZ3Mu Li4+Ojp2YWx1ZV90OworLQorLXRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLi4uPiBjbGFzcyBPcCwg Y2xhc3MuLi4gQXJncz4KKy1zdHJ1Y3QgaXNfZGV0ZWN0ZWRfbGF6eSA6IGlzX2RldGVjdGVkPE9w LCBBcmdzLi4uPiB7IH07CistCistdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MuLi4+IGNsYXNzIE9w LCBjbGFzcy4uLiBBcmdzPgorLXVzaW5nIGRldGVjdGVkX3QgPSB0eXBlbmFtZSBkZXRlY3Rvcjxu b25lc3VjaCwgdm9pZCwgT3AsIEFyZ3MuLi4+Ojp0eXBlOworLQorLXRlbXBsYXRlPGNsYXNzIERl ZmF1bHQsIHRlbXBsYXRlPGNsYXNzLi4uPiBjbGFzcyBPcCwgY2xhc3MuLi4gQXJncz4KKy11c2lu ZyBkZXRlY3RlZF9vciA9IGRldGVjdG9yPERlZmF1bHQsIHZvaWQsIE9wLCBBcmdzLi4uPjsKKy0K Ky10ZW1wbGF0ZTxjbGFzcyBEZWZhdWx0LCB0ZW1wbGF0ZTxjbGFzcy4uLj4gY2xhc3MgT3AsIGNs YXNzLi4uIEFyZ3M+CistdXNpbmcgZGV0ZWN0ZWRfb3JfdCA9IHR5cGVuYW1lIGRldGVjdGVkX29y PERlZmF1bHQsIE9wLCBBcmdzLi4uPjo6dHlwZTsKKy0KKy10ZW1wbGF0ZTxjbGFzcyBFeHBlY3Rl ZCwgdGVtcGxhdGU8Y2xhc3MuLi4+IGNsYXNzIE9wLCBjbGFzcy4uLiBBcmdzPgorLXVzaW5nIGlz X2RldGVjdGVkX2V4YWN0ID0gc3RkOjppc19zYW1lPEV4cGVjdGVkLCBkZXRlY3RlZF90PE9wLCBB cmdzLi4uPj47CistCistdGVtcGxhdGU8Y2xhc3MgVG8sIHRlbXBsYXRlPGNsYXNzLi4uPiBjbGFz cyBPcCwgY2xhc3MuLi4gQXJncz4KKy11c2luZyBpc19kZXRlY3RlZF9jb252ZXJ0aWJsZSA9Cist ICAgIHN0ZDo6aXNfY29udmVydGlibGU8ZGV0ZWN0ZWRfdDxPcCwgQXJncy4uLj4sIFRvPjsKKy19 ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCistCistCist Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBpbnRlcm5hbCBtYWNybyBkZWZpbml0aW9ucworLS8v IFlvdSBNVVNUIGluY2x1ZGUgbWFjcm9fdW5zY29wZS5ocHAgYXQgdGhlIGVuZCBvZiBqc29uLmhw cCB0byB1bmRlZiBhbGwgb2YgdGhlbQorLQorLS8vIGV4Y2x1ZGUgdW5zdXBwb3J0ZWQgY29tcGls ZXJzCistI2lmICFkZWZpbmVkKEpTT05fU0tJUF9VTlNVUFBPUlRFRF9DT01QSUxFUl9DSEVDSykK Ky0gICAgI2lmIGRlZmluZWQoX19jbGFuZ19fKQorLSAgICAgICAgI2lmIChfX2NsYW5nX21ham9y X18gKiAxMDAwMCArIF9fY2xhbmdfbWlub3JfXyAqIDEwMCArIF9fY2xhbmdfcGF0Y2hsZXZlbF9f KSA8IDMwNDAwCistICAgICAgICAgICAgI2Vycm9yICJ1bnN1cHBvcnRlZCBDbGFuZyB2ZXJzaW9u IC0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uI3N1cHBvcnRlZC1jb21waWxl cnMiCistICAgICAgICAjZW5kaWYKKy0gICAgI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIShk ZWZpbmVkKF9fSUNDKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpKQorLSAgICAgICAgI2lm IChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hM RVZFTF9fKSA8IDQwODAwCistICAgICAgICAgICAgI2Vycm9yICJ1bnN1cHBvcnRlZCBHQ0MgdmVy c2lvbiAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbiNzdXBwb3J0ZWQtY29t cGlsZXJzIgorLSAgICAgICAgI2VuZGlmCistICAgICNlbmRpZgorLSNlbmRpZgorLQorLS8vIEMr KyBsYW5ndWFnZSBzdGFuZGFyZCBkZXRlY3Rpb24KKy0vLyBpZiB0aGUgdXNlciBtYW51YWxseSBz cGVjaWZpZWQgdGhlIHVzZWQgYysrIHZlcnNpb24gdGhpcyBpcyBza2lwcGVkCistI2lmICFkZWZp bmVkKEpTT05fSEFTX0NQUF8yMCkgJiYgIWRlZmluZWQoSlNPTl9IQVNfQ1BQXzE3KSAmJiAhZGVm aW5lZChKU09OX0hBU19DUFBfMTQpICYmICFkZWZpbmVkKEpTT05fSEFTX0NQUF8xMSkKKy0gICAg I2lmIChkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMKSB8fCAo ZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID49IDIwMjAwMkwpCistICAgICAgICAj ZGVmaW5lIEpTT05fSEFTX0NQUF8yMAorLSAgICAgICAgI2RlZmluZSBKU09OX0hBU19DUFBfMTcK Ky0gICAgICAgICNkZWZpbmUgSlNPTl9IQVNfQ1BQXzE0CistICAgICNlbGlmIChkZWZpbmVkKF9f Y3BsdXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMKSB8fCAoZGVmaW5lZChfSEFTX0NY WDE3KSAmJiBfSEFTX0NYWDE3ID09IDEpIC8vIGZpeCBmb3IgaXNzdWUgIzQ2NAorLSAgICAgICAg I2RlZmluZSBKU09OX0hBU19DUFBfMTcKKy0gICAgICAgICNkZWZpbmUgSlNPTl9IQVNfQ1BQXzE0 CistICAgICNlbGlmIChkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDE0 MDJMKSB8fCAoZGVmaW5lZChfSEFTX0NYWDE0KSAmJiBfSEFTX0NYWDE0ID09IDEpCistICAgICAg ICAjZGVmaW5lIEpTT05fSEFTX0NQUF8xNAorLSAgICAjZW5kaWYKKy0gICAgLy8gdGhlIGNwcCAx MSBmbGFnIGlzIGFsd2F5cyBzcGVjaWZpZWQgYmVjYXVzZSBpdCBpcyB0aGUgbWluaW1hbCByZXF1 aXJlZCB2ZXJzaW9uCistICAgICNkZWZpbmUgSlNPTl9IQVNfQ1BQXzExCistI2VuZGlmCistCist I2lmICFkZWZpbmVkKEpTT05fSEFTX0ZJTEVTWVNURU0pICYmICFkZWZpbmVkKEpTT05fSEFTX0VY UEVSSU1FTlRBTF9GSUxFU1lTVEVNKQorLSAgICAjaWZkZWYgSlNPTl9IQVNfQ1BQXzE3CistICAg ICAgICAjaWYgZGVmaW5lZChfX2NwcF9saWJfZmlsZXN5c3RlbSkKKy0gICAgICAgICAgICAjZGVm aW5lIEpTT05fSEFTX0ZJTEVTWVNURU0gMQorLSAgICAgICAgI2VsaWYgZGVmaW5lZChfX2NwcF9s aWJfZXhwZXJpbWVudGFsX2ZpbGVzeXN0ZW0pCistICAgICAgICAgICAgI2RlZmluZSBKU09OX0hB U19FWFBFUklNRU5UQUxfRklMRVNZU1RFTSAxCistICAgICAgICAjZWxpZiAhZGVmaW5lZChfX2hh c19pbmNsdWRlKQorLSAgICAgICAgICAgICNkZWZpbmUgSlNPTl9IQVNfRVhQRVJJTUVOVEFMX0ZJ TEVTWVNURU0gMQorLSAgICAgICAgI2VsaWYgX19oYXNfaW5jbHVkZSg8ZmlsZXN5c3RlbT4pCist ICAgICAgICAgICAgI2RlZmluZSBKU09OX0hBU19GSUxFU1lTVEVNIDEKKy0gICAgICAgICNlbGlm IF9faGFzX2luY2x1ZGUoPGV4cGVyaW1lbnRhbC9maWxlc3lzdGVtPikKKy0gICAgICAgICAgICAj ZGVmaW5lIEpTT05fSEFTX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNIDEKKy0gICAgICAgICNlbmRp ZgorLQorLSAgICAgICAgLy8gc3RkOjpmaWxlc3lzdGVtIGRvZXMgbm90IHdvcmsgb24gTWluR1cg R0NDIDg6IGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvbWluZ3ctdzY0L2J1Z3MvNzM3LworLSAg ICAgICAgI2lmIGRlZmluZWQoX19NSU5HVzMyX18pICYmIGRlZmluZWQoX19HTlVDX18pICYmIF9f R05VQ19fID09IDgKKy0gICAgICAgICAgICAjdW5kZWYgSlNPTl9IQVNfRklMRVNZU1RFTQorLSAg ICAgICAgICAgICN1bmRlZiBKU09OX0hBU19FWFBFUklNRU5UQUxfRklMRVNZU1RFTQorLSAgICAg ICAgI2VuZGlmCistCistICAgICAgICAvLyBubyBmaWxlc3lzdGVtIHN1cHBvcnQgYmVmb3JlIEdD QyA4OiBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29tcGlsZXJfc3VwcG9ydAor LSAgICAgICAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykgJiYg X19HTlVDX18gPCA4CistICAgICAgICAgICAgI3VuZGVmIEpTT05fSEFTX0ZJTEVTWVNURU0KKy0g ICAgICAgICAgICAjdW5kZWYgSlNPTl9IQVNfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0KKy0gICAg ICAgICNlbmRpZgorLQorLSAgICAgICAgLy8gbm8gZmlsZXN5c3RlbSBzdXBwb3J0IGJlZm9yZSBD bGFuZyA3OiBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29tcGlsZXJfc3VwcG9y dAorLSAgICAgICAgI2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmJiBfX2NsYW5nX21ham9y X18gPCA3CistICAgICAgICAgICAgI3VuZGVmIEpTT05fSEFTX0ZJTEVTWVNURU0KKy0gICAgICAg ICAgICAjdW5kZWYgSlNPTl9IQVNfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0KKy0gICAgICAgICNl bmRpZgorLQorLSAgICAgICAgLy8gbm8gZmlsZXN5c3RlbSBzdXBwb3J0IGJlZm9yZSBNU1ZDIDE5 LjE0OiBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29tcGlsZXJfc3VwcG9ydAor LSAgICAgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTk0MAorLSAgICAg ICAgICAgICN1bmRlZiBKU09OX0hBU19GSUxFU1lTVEVNCistICAgICAgICAgICAgI3VuZGVmIEpT T05fSEFTX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNCistICAgICAgICAjZW5kaWYKKy0KKy0gICAg ICAgIC8vIG5vIGZpbGVzeXN0ZW0gc3VwcG9ydCBiZWZvcmUgaU9TIDEzCistICAgICAgICAjaWYg ZGVmaW5lZChfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCkgJiYgX19JUEhPTkVfT1Nf VkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMzAwMDAKKy0gICAgICAgICAgICAjdW5kZWYgSlNPTl9I QVNfRklMRVNZU1RFTQorLSAgICAgICAgICAgICN1bmRlZiBKU09OX0hBU19FWFBFUklNRU5UQUxf RklMRVNZU1RFTQorLSAgICAgICAgI2VuZGlmCistCistICAgICAgICAvLyBubyBmaWxlc3lzdGVt IHN1cHBvcnQgYmVmb3JlIG1hY09TIENhdGFsaW5hCistICAgICAgICAjaWYgZGVmaW5lZChfX01B Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF UVVJUkVEIDwgMTAxNTAwCistICAgICAgICAgICAgI3VuZGVmIEpTT05fSEFTX0ZJTEVTWVNURU0K Ky0gICAgICAgICAgICAjdW5kZWYgSlNPTl9IQVNfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0KKy0g ICAgICAgICNlbmRpZgorLSAgICAjZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWZuZGVmIEpTT05fSEFT X0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNCistICAgICNkZWZpbmUgSlNPTl9IQVNfRVhQRVJJTUVO VEFMX0ZJTEVTWVNURU0gMAorLSNlbmRpZgorLQorLSNpZm5kZWYgSlNPTl9IQVNfRklMRVNZU1RF TQorLSAgICAjZGVmaW5lIEpTT05fSEFTX0ZJTEVTWVNURU0gMAorLSNlbmRpZgorLQorLS8vIGRp c2FibGUgZG9jdW1lbnRhdGlvbiB3YXJuaW5ncyBvbiBjbGFuZworLSNpZiBkZWZpbmVkKF9fY2xh bmdfXykKKy0gICAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKy0gICAgI3ByYWdtYSBj bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZG9jdW1lbnRhdGlvbiIKKy0gICAgI3ByYWdtYSBj bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZG9jdW1lbnRhdGlvbi11bmtub3duLWNvbW1hbmQi CistI2VuZGlmCistCistLy8gYWxsb3cgZGlzYWJsaW5nIGV4Y2VwdGlvbnMKKy0jaWYgKGRlZmlu ZWQoX19jcHBfZXhjZXB0aW9ucykgfHwgZGVmaW5lZChfX0VYQ0VQVElPTlMpIHx8IGRlZmluZWQo X0NQUFVOV0lORCkpICYmICFkZWZpbmVkKEpTT05fTk9FWENFUFRJT04pCistICAgICNkZWZpbmUg SlNPTl9USFJPVyhleGNlcHRpb24pIHRocm93IGV4Y2VwdGlvbgorLSAgICAjZGVmaW5lIEpTT05f VFJZIHRyeQorLSAgICAjZGVmaW5lIEpTT05fQ0FUQ0goZXhjZXB0aW9uKSBjYXRjaChleGNlcHRp b24pCistICAgICNkZWZpbmUgSlNPTl9JTlRFUk5BTF9DQVRDSChleGNlcHRpb24pIGNhdGNoKGV4 Y2VwdGlvbikKKy0jZWxzZQorLSAgICAjaW5jbHVkZSA8Y3N0ZGxpYj4KKy0gICAgI2RlZmluZSBK U09OX1RIUk9XKGV4Y2VwdGlvbikgc3RkOjphYm9ydCgpCistICAgICNkZWZpbmUgSlNPTl9UUlkg aWYodHJ1ZSkKKy0gICAgI2RlZmluZSBKU09OX0NBVENIKGV4Y2VwdGlvbikgaWYoZmFsc2UpCist ICAgICNkZWZpbmUgSlNPTl9JTlRFUk5BTF9DQVRDSChleGNlcHRpb24pIGlmKGZhbHNlKQorLSNl bmRpZgorLQorLS8vIG92ZXJyaWRlIGV4Y2VwdGlvbiBtYWNyb3MKKy0jaWYgZGVmaW5lZChKU09O X1RIUk9XX1VTRVIpCistICAgICN1bmRlZiBKU09OX1RIUk9XCistICAgICNkZWZpbmUgSlNPTl9U SFJPVyBKU09OX1RIUk9XX1VTRVIKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX1RSWV9VU0VS KQorLSAgICAjdW5kZWYgSlNPTl9UUlkKKy0gICAgI2RlZmluZSBKU09OX1RSWSBKU09OX1RSWV9V U0VSCistI2VuZGlmCistI2lmIGRlZmluZWQoSlNPTl9DQVRDSF9VU0VSKQorLSAgICAjdW5kZWYg SlNPTl9DQVRDSAorLSAgICAjZGVmaW5lIEpTT05fQ0FUQ0ggSlNPTl9DQVRDSF9VU0VSCistICAg ICN1bmRlZiBKU09OX0lOVEVSTkFMX0NBVENICistICAgICNkZWZpbmUgSlNPTl9JTlRFUk5BTF9D QVRDSCBKU09OX0NBVENIX1VTRVIKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChKU09OX0lOVEVSTkFM X0NBVENIX1VTRVIpCistICAgICN1bmRlZiBKU09OX0lOVEVSTkFMX0NBVENICistICAgICNkZWZp bmUgSlNPTl9JTlRFUk5BTF9DQVRDSCBKU09OX0lOVEVSTkFMX0NBVENIX1VTRVIKKy0jZW5kaWYK Ky0KKy0vLyBhbGxvdyBvdmVycmlkaW5nIGFzc2VydAorLSNpZiAhZGVmaW5lZChKU09OX0FTU0VS VCkKKy0gICAgI2luY2x1ZGUgPGNhc3NlcnQ+IC8vIGFzc2VydAorLSAgICAjZGVmaW5lIEpTT05f QVNTRVJUKHgpIGFzc2VydCh4KQorLSNlbmRpZgorLQorLS8vIGFsbG93IHRvIGFjY2VzcyBzb21l IHByaXZhdGUgZnVuY3Rpb25zIChuZWVkZWQgYnkgdGhlIHRlc3Qgc3VpdGUpCistI2lmIGRlZmlu ZWQoSlNPTl9URVNUU19QUklWQVRFKQorLSAgICAjZGVmaW5lIEpTT05fUFJJVkFURV9VTkxFU1Nf VEVTVEVEIHB1YmxpYworLSNlbHNlCistICAgICNkZWZpbmUgSlNPTl9QUklWQVRFX1VOTEVTU19U RVNURUQgcHJpdmF0ZQorLSNlbmRpZgorLQorLS8qIQorLUBicmllZiBtYWNybyB0byBicmllZmx5 IGRlZmluZSBhIG1hcHBpbmcgYmV0d2VlbiBhbiBlbnVtIGFuZCBKU09OCistQGRlZiBOTE9ITUFO Tl9KU09OX1NFUklBTElaRV9FTlVNCistQHNpbmNlIHZlcnNpb24gMy40LjAKKy0qLworLSNkZWZp bmUgTkxPSE1BTk5fSlNPTl9TRVJJQUxJWkVfRU5VTShFTlVNX1RZUEUsIC4uLikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgdGVtcGxhdGU8dHlwZW5h bWUgQmFzaWNKc29uVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCistICAgIGlubGluZSB2b2lkIHRvX2pzb24oQmFzaWNKc29u VHlwZSYgaiwgY29uc3QgRU5VTV9UWVBFJiBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAg ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19lbnVtPEVOVU1fVFlQRT46OnZhbHVlLCAjRU5VTV9U WVBFICIgbXVzdCBiZSBhbiBlbnVtISIpOyAgICAgICAgICBcCistICAgICAgICBzdGF0aWMgY29u c3Qgc3RkOjpwYWlyPEVOVU1fVFlQRSwgQmFzaWNKc29uVHlwZT4gbVtdID0gX19WQV9BUkdTX187 ICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZihz dGQ6OmJlZ2luKG0pLCBzdGQ6OmVuZChtKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VdKGNvbnN0IHN0ZDo6 cGFpcjxFTlVNX1RZUEUsIEJhc2ljSnNvblR5cGU+JiBlal9wYWlyKSAtPiBib29sICBcCistICAg ICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIHJldHVy biBlal9wYWlyLmZpcnN0ID09IGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCistICAgICAgICBqID0gKChpdCAhPSBzdGQ6OmVuZChtKSkgPyBpdCA6IHN0ZDo6 YmVnaW4obSkpLT5zZWNvbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgdGVtcGxhdGU8dHlw ZW5hbWUgQmFzaWNKc29uVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIGlubGluZSB2b2lkIGZyb21fanNvbihjb25z dCBCYXNpY0pzb25UeXBlJiBqLCBFTlVNX1RZUEUmIGUpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0g ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19lbnVtPEVOVU1fVFlQRT46OnZhbHVlLCAjRU5V TV9UWVBFICIgbXVzdCBiZSBhbiBlbnVtISIpOyAgICAgICAgICBcCistICAgICAgICBzdGF0aWMg Y29uc3Qgc3RkOjpwYWlyPEVOVU1fVFlQRSwgQmFzaWNKc29uVHlwZT4gbVtdID0gX19WQV9BUkdT X187ICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9p ZihzdGQ6OmJlZ2luKG0pLCBzdGQ6OmVuZChtKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZqXShjb25zdCBz dGQ6OnBhaXI8RU5VTV9UWVBFLCBCYXNpY0pzb25UeXBlPiYgZWpfcGFpcikgLT4gYm9vbCBcCist ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIHJl dHVybiBlal9wYWlyLnNlY29uZCA9PSBqOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIH0pOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCistICAgICAgICBlID0gKChpdCAhPSBzdGQ6OmVuZChtKSkgPyBpdCA6IHN0 ZDo6YmVnaW4obSkpLT5maXJzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor LSAgICB9CistCistLy8gVWdseSBtYWNyb3MgdG8gYXZvaWQgdWdsaWVyIGNvcHktcGFzdGUgd2hl biBzcGVjaWFsaXppbmcgYmFzaWNfanNvbi4gVGhleQorLS8vIG1heSBiZSByZW1vdmVkIGluIHRo ZSBmdXR1cmUgb25jZSB0aGUgY2xhc3MgaXMgc3BsaXQuCistCistI2RlZmluZSBOTE9ITUFOTl9C QVNJQ19KU09OX1RQTF9ERUNMQVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lLi4u PiBjbGFzcyBPYmplY3RUeXBlLCAgIFwKKy0gICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUs IHR5cGVuYW1lLi4uPiBjbGFzcyBBcnJheVR5cGUsICAgICAgICAgICAgICBcCistICAgICAgICAg ICAgIGNsYXNzIFN0cmluZ1R5cGUsIGNsYXNzIEJvb2xlYW5UeXBlLCBjbGFzcyBOdW1iZXJJbnRl Z2VyVHlwZSwgXAorLSAgICAgICAgICAgICBjbGFzcyBOdW1iZXJVbnNpZ25lZFR5cGUsIGNsYXNz IE51bWJlckZsb2F0VHlwZSwgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgdGVtcGxhdGU8 dHlwZW5hbWU+IGNsYXNzIEFsbG9jYXRvclR5cGUsICAgICAgICAgICAgICAgICAgICAgICBcCist ICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGNsYXNzIEpT T05TZXJpYWxpemVyLCAgICAgXAorLSAgICAgICAgICAgICBjbGFzcyBCaW5hcnlUeXBlPgorLQor LSNkZWZpbmUgTkxPSE1BTk5fQkFTSUNfSlNPTl9UUEwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKy0gICAgYmFzaWNfanNvbjxPYmplY3RUeXBlLCBBcnJheVR5 cGUsIFN0cmluZ1R5cGUsIEJvb2xlYW5UeXBlLCAgICAgICAgICAgICBcCistICAgIE51bWJlcklu dGVnZXJUeXBlLCBOdW1iZXJVbnNpZ25lZFR5cGUsIE51bWJlckZsb2F0VHlwZSwgICAgICAgICAg ICAgICAgXAorLSAgICBBbGxvY2F0b3JUeXBlLCBKU09OU2VyaWFsaXplciwgQmluYXJ5VHlwZT4K Ky0KKy0vLyBNYWNyb3MgdG8gc2ltcGxpZnkgY29udmVyc2lvbiBmcm9tL3RvIHR5cGVzCistCist I2RlZmluZSBOTE9ITUFOTl9KU09OX0VYUEFORCggeCApIHgKKy0jZGVmaW5lIE5MT0hNQU5OX0pT T05fR0VUX01BQ1JPKF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzksIF8xMCwgXzEx LCBfMTIsIF8xMywgXzE0LCBfMTUsIF8xNiwgXzE3LCBfMTgsIF8xOSwgXzIwLCBfMjEsIF8yMiwg XzIzLCBfMjQsIF8yNSwgXzI2LCBfMjcsIF8yOCwgXzI5LCBfMzAsIF8zMSwgXzMyLCBfMzMsIF8z NCwgXzM1LCBfMzYsIF8zNywgXzM4LCBfMzksIF80MCwgXzQxLCBfNDIsIF80MywgXzQ0LCBfNDUs IF80NiwgXzQ3LCBfNDgsIF80OSwgXzUwLCBfNTEsIF81MiwgXzUzLCBfNTQsIF81NSwgXzU2LCBf NTcsIF81OCwgXzU5LCBfNjAsIF82MSwgXzYyLCBfNjMsIF82NCwgTkFNRSwuLi4pIE5BTUUKKy0j ZGVmaW5lIE5MT0hNQU5OX0pTT05fUEFTVEUoLi4uKSBOTE9ITUFOTl9KU09OX0VYUEFORChOTE9I TUFOTl9KU09OX0dFVF9NQUNSTyhfX1ZBX0FSR1NfXywgXAorLSAgICAgICAgTkxPSE1BTk5fSlNP Tl9QQVNURTY0LCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFNjMsIFwKKy0gICAgICAg IE5MT0hNQU5OX0pTT05fUEFTVEU2MiwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTYx LCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFNjAsIFwKKy0gICAgICAgIE5MT0hNQU5O X0pTT05fUEFTVEU1OSwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTU4LCBcCistICAg ICAgICBOTE9ITUFOTl9KU09OX1BBU1RFNTcsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFT VEU1NiwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTU1LCBcCistICAgICAgICBOTE9I TUFOTl9KU09OX1BBU1RFNTQsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEU1MywgXAor LSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTUyLCBcCistICAgICAgICBOTE9ITUFOTl9KU09O X1BBU1RFNTEsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEU1MCwgXAorLSAgICAgICAg TkxPSE1BTk5fSlNPTl9QQVNURTQ5LCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFNDgs IFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEU0NywgXAorLSAgICAgICAgTkxPSE1BTk5f SlNPTl9QQVNURTQ2LCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFNDUsIFwKKy0gICAg ICAgIE5MT0hNQU5OX0pTT05fUEFTVEU0NCwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNU RTQzLCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFNDIsIFwKKy0gICAgICAgIE5MT0hN QU5OX0pTT05fUEFTVEU0MSwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTQwLCBcCist ICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFMzksIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05f UEFTVEUzOCwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTM3LCBcCistICAgICAgICBO TE9ITUFOTl9KU09OX1BBU1RFMzYsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUzNSwg XAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTM0LCBcCistICAgICAgICBOTE9ITUFOTl9K U09OX1BBU1RFMzMsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUzMiwgXAorLSAgICAg ICAgTkxPSE1BTk5fSlNPTl9QQVNURTMxLCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RF MzAsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUyOSwgXAorLSAgICAgICAgTkxPSE1B Tk5fSlNPTl9QQVNURTI4LCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFMjcsIFwKKy0g ICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUyNiwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9Q QVNURTI1LCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFMjQsIFwKKy0gICAgICAgIE5M T0hNQU5OX0pTT05fUEFTVEUyMywgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTIyLCBc CistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFMjEsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pT T05fUEFTVEUyMCwgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTE5LCBcCistICAgICAg ICBOTE9ITUFOTl9KU09OX1BBU1RFMTgsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUx NywgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTE2LCBcCistICAgICAgICBOTE9ITUFO Tl9KU09OX1BBU1RFMTUsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUxNCwgXAorLSAg ICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTEzLCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BB U1RFMTIsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUxMSwgXAorLSAgICAgICAgTkxP SE1BTk5fSlNPTl9QQVNURTEwLCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFOSwgXAor LSAgICAgICAgTkxPSE1BTk5fSlNPTl9QQVNURTgsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05f UEFTVEU3LCBcCistICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFNiwgXAorLSAgICAgICAgTkxP SE1BTk5fSlNPTl9QQVNURTUsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEU0LCBcCist ICAgICAgICBOTE9ITUFOTl9KU09OX1BBU1RFMywgXAorLSAgICAgICAgTkxPSE1BTk5fSlNPTl9Q QVNURTIsIFwKKy0gICAgICAgIE5MT0hNQU5OX0pTT05fUEFTVEUxKShfX1ZBX0FSR1NfXykpCist I2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgZnVuYyh2MSkKKy0jZGVmaW5l IE5MT0hNQU5OX0pTT05fUEFTVEUzKGZ1bmMsIHYxLCB2MikgTkxPSE1BTk5fSlNPTl9QQVNURTIo ZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUyKGZ1bmMsIHYyKQorLSNkZWZpbmUgTkxPSE1B Tk5fSlNPTl9QQVNURTQoZnVuYywgdjEsIHYyLCB2MykgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVu YywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUzKGZ1bmMsIHYyLCB2MykKKy0jZGVmaW5lIE5MT0hN QU5OX0pTT05fUEFTVEU1KGZ1bmMsIHYxLCB2MiwgdjMsIHY0KSBOTE9ITUFOTl9KU09OX1BBU1RF MihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTQoZnVuYywgdjIsIHYzLCB2NCkKKy0jZGVm aW5lIE5MT0hNQU5OX0pTT05fUEFTVEU2KGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSkgTkxPSE1B Tk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEU1KGZ1bmMsIHYyLCB2 MywgdjQsIHY1KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTcoZnVuYywgdjEsIHYyLCB2 MywgdjQsIHY1LCB2NikgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pT T05fUEFTVEU2KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NikKKy0jZGVmaW5lIE5MT0hNQU5OX0pT T05fUEFTVEU4KGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3KSBOTE9ITUFOTl9KU09O X1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTcoZnVuYywgdjIsIHYzLCB2NCwg djUsIHY2LCB2NykKKy0jZGVmaW5lIE5MT0hNQU5OX0pTT05fUEFTVEU5KGZ1bmMsIHYxLCB2Miwg djMsIHY0LCB2NSwgdjYsIHY3LCB2OCkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5M T0hNQU5OX0pTT05fUEFTVEU4KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4KQorLSNk ZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTEwKGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYs IHY3LCB2OCwgdjkpIE5MT0hNQU5OX0pTT05fUEFTVEUyKGZ1bmMsIHYxKSBOTE9ITUFOTl9KU09O X1BBU1RFOShmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjkpCistI2RlZmluZSBO TE9ITUFOTl9KU09OX1BBU1RFMTEoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4 LCB2OSwgdjEwKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9Q QVNURTEwKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwKQorLSNkZWZp bmUgTkxPSE1BTk5fSlNPTl9QQVNURTEyKGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3 LCB2OCwgdjksIHYxMCwgdjExKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1B Tk5fSlNPTl9QQVNURTExKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEw LCB2MTEpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMTMoZnVuYywgdjEsIHYyLCB2Mywg djQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMikgTkxPSE1BTk5fSlNPTl9QQVNU RTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUxMihmdW5jLCB2MiwgdjMsIHY0LCB2NSwg djYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BB U1RFMTQoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs IHYxMiwgdjEzKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9Q QVNURTEzKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYx MiwgdjEzKQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTE1KGZ1bmMsIHYxLCB2MiwgdjMs IHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0KSBOTE9ITUFO Tl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTE0KGZ1bmMsIHYyLCB2 MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQpCistI2Rl ZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMTYoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwg djcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSkgTkxPSE1BTk5fSlNPTl9Q QVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUxNShmdW5jLCB2MiwgdjMsIHY0LCB2 NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUpCistI2RlZmlu ZSBOTE9ITUFOTl9KU09OX1BBU1RFMTcoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwgdjcs IHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2KSBOTE9ITUFOTl9KU09O X1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTE2KGZ1bmMsIHYyLCB2MywgdjQs IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2KQor LSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTE4KGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwg djYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3KSBO TE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTE3KGZ1bmMs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMTkoZnVuYywgdjEs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcsIHYxOCkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hN QU5OX0pTT05fUEFTVEUxOChmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYx MCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgpCistI2RlZmluZSBOTE9I TUFOTl9KU09OX1BBU1RFMjAoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2 OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5KSBOTE9I TUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTE5KGZ1bmMsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTIxKGZ1 bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYx MywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwKSBOTE9ITUFOTl9KU09OX1BBU1RF MihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTIwKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2 NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYx OCwgdjE5LCB2MjApCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMjIoZnVuYywgdjEsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVu YywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUyMShmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3 LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYx OSwgdjIwLCB2MjEpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMjMoZnVuYywgdjEsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyKSBOTE9ITUFOTl9KU09OX1BBU1RF MihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTIyKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2 NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYx OCwgdjE5LCB2MjAsIHYyMSwgdjIyKQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTI0KGZ1 bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYx MywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzKSBOTE9I TUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTIzKGZ1bmMsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMpCistI2RlZmluZSBOTE9I TUFOTl9KU09OX1BBU1RFMjUoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2 OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAs IHYyMSwgdjIyLCB2MjMsIHYyNCkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hN QU5OX0pTT05fUEFTVEUyNChmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYx MCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEs IHYyMiwgdjIzLCB2MjQpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMjYoZnVuYywgdjEs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1KSBO TE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTI1KGZ1bmMs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1KQor LSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTI3KGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwg djYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2 MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2KSBOTE9ITUFOTl9KU09O X1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTI2KGZ1bmMsIHYyLCB2MywgdjQs IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2 MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYpCistI2RlZmlu ZSBOTE9ITUFOTl9KU09OX1BBU1RFMjgoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwgdjcs IHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5 LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNykgTkxPSE1BTk5fSlNPTl9Q QVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUyNyhmdW5jLCB2MiwgdjMsIHY0LCB2 NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3 LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcpCistI2Rl ZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMjkoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwg djcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwg djE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4KSBOTE9ITUFO Tl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTI4KGZ1bmMsIHYyLCB2 MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwg djE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYy NywgdjI4KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTMwKGZ1bmMsIHYxLCB2MiwgdjMs IHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYx NiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2Mjcs IHYyOCwgdjI5KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9Q QVNURTI5KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYx MiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMs IHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjkpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BB U1RFMzEoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs IHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2 MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCkgTkxPSE1BTk5fSlNPTl9QQVNU RTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUzMChmdW5jLCB2MiwgdjMsIHY0LCB2NSwg djYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2 MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5 LCB2MzApCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMzIoZnVuYywgdjEsIHYyLCB2Mywg djQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2 LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywg djI4LCB2MjksIHYzMCwgdjMxKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1B Tk5fSlNPTl9QQVNURTMxKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEw LCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwg djIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxKQorLSNkZWZp bmUgTkxPSE1BTk5fSlNPTl9QQVNURTMzKGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3 LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYx OSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAs IHYzMSwgdjMyKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9Q QVNURTMyKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYx MiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMs IHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIpCistI2RlZmluZSBO TE9ITUFOTl9KU09OX1BBU1RFMzQoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4 LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2 MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMx LCB2MzIsIHYzMykgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05f UEFTVEUzMyhmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2 MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIz LCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMpCistI2Rl ZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMzUoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwg djcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwg djE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYz MCwgdjMxLCB2MzIsIHYzMywgdjM0KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxP SE1BTk5fSlNPTl9QQVNURTM0KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwg djEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYy MSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIs IHYzMywgdjM0KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTM2KGZ1bmMsIHYxLCB2Miwg djMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUs IHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2 MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1KSBOTE9ITUFOTl9KU09O X1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTM1KGZ1bmMsIHYyLCB2MywgdjQs IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2 MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4 LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUpCistI2RlZmluZSBOTE9ITUFOTl9K U09OX1BBU1RFMzcoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEw LCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwg djIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYz MywgdjM0LCB2MzUsIHYzNikgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5O X0pTT05fUEFTVEUzNihmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwg djExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYy MiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMs IHYzNCwgdjM1LCB2MzYpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFMzgoZnVuYywgdjEs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2 MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3 KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTM3KGZ1 bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2 MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1 LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwg djM3KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTM5KGZ1bmMsIHYxLCB2MiwgdjMsIHY0 LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwg djE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYy OCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4KSBOTE9I TUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTM4KGZ1bmMsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYs IHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2 MzgpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFNDAoZnVuYywgdjEsIHYyLCB2MywgdjQs IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2 MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4 LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSkg TkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEUzOShmdW5j LCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0 LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwg djI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYz NywgdjM4LCB2MzkpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFNDEoZnVuYywgdjEsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYs IHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2 MzgsIHYzOSwgdjQwKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNP Tl9QQVNURTQwKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs IHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2 MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0 LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwKQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9Q QVNURTQyKGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjEx LCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwg djIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYz NCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxKSBOTE9ITUFOTl9KU09OX1BBU1RF MihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTQxKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2 NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYx OCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2Mjks IHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2 NDEpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFNDMoZnVuYywgdjEsIHYyLCB2MywgdjQs IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2 MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4 LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwg djQwLCB2NDEsIHY0MikgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pT T05fUEFTVEU0MihmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjEx LCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwg djIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYz NCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIpCistI2RlZmluZSBOTE9I TUFOTl9KU09OX1BBU1RFNDQoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2 OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAs IHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2 MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQz KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTQzKGZ1 bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2 MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1 LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwg djM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzKQorLSNkZWZpbmUgTkxPSE1BTk5fSlNP Tl9QQVNURTQ1KGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwg djExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYy MiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMs IHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0KSBO TE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTQ0KGZ1bmMs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2 MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3 LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQpCistI2RlZmluZSBOTE9ITUFOTl9K U09OX1BBU1RFNDYoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEw LCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwg djIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYz MywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQs IHY0NSkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEU0 NShmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYx MywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQs IHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2 MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUpCistI2RlZmlu ZSBOTE9ITUFOTl9KU09OX1BBU1RFNDcoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwgdjcs IHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5 LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwg djMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0 MiwgdjQzLCB2NDQsIHY0NSwgdjQ2KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxP SE1BTk5fSlNPTl9QQVNURTQ2KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwg djEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYy MSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIs IHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2 NDQsIHY0NSwgdjQ2KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTQ4KGZ1bmMsIHYxLCB2 MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2 MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2 LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYzNywg djM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUsIHY0NiwgdjQ3KSBOTE9ITUFO Tl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTQ3KGZ1bmMsIHYyLCB2 MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwg djE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYy NywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2Mzgs IHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcpCistI2RlZmluZSBO TE9ITUFOTl9KU09OX1BBU1RFNDkoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4 LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2 MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMx LCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0Miwg djQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywg djEpIE5MT0hNQU5OX0pTT05fUEFTVEU0OChmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2 OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwg djIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYz MSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIs IHY0MywgdjQ0LCB2NDUsIHY0NiwgdjQ3LCB2NDgpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BB U1RFNTAoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs IHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2 MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0 LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwg djQ2LCB2NDcsIHY0OCwgdjQ5KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1B Tk5fSlNPTl9QQVNURTQ5KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEw LCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwg djIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYz MywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQs IHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTUx KGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIs IHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2 MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1 LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUsIHY0Niwg djQ3LCB2NDgsIHY0OSwgdjUwKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1B Tk5fSlNPTl9QQVNURTUwKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEw LCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwg djIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYz MywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQs IHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTApCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BB U1RFNTIoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs IHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2 MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0 LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwg djQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywg djEpIE5MT0hNQU5OX0pTT05fUEFTVEU1MShmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2 OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwg djIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYz MSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIs IHY0MywgdjQ0LCB2NDUsIHY0NiwgdjQ3LCB2NDgsIHY0OSwgdjUwLCB2NTEpCistI2RlZmluZSBO TE9ITUFOTl9KU09OX1BBU1RFNTMoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4 LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2 MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMx LCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0Miwg djQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSwgdjUyKSBOTE9ITUFO Tl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTUyKGZ1bmMsIHYyLCB2 MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwg djE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYy NywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2Mzgs IHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2 NTAsIHY1MSwgdjUyKQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTU0KGZ1bmMsIHYxLCB2 MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2 MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2 LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYzNywg djM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUsIHY0NiwgdjQ3LCB2NDgsIHY0 OSwgdjUwLCB2NTEsIHY1MiwgdjUzKSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxP SE1BTk5fSlNPTl9QQVNURTUzKGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwg djEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYy MSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIs IHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2 NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMpCistI2RlZmlu ZSBOTE9ITUFOTl9KU09OX1BBU1RFNTUoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwgdjcs IHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5 LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwg djMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0 MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMs IHY1NCkgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEU1 NChmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYx MywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQs IHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2 MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUsIHY0NiwgdjQ3 LCB2NDgsIHY0OSwgdjUwLCB2NTEsIHY1MiwgdjUzLCB2NTQpCistI2RlZmluZSBOTE9ITUFOTl9K U09OX1BBU1RFNTYoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEw LCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwg djIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYz MywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQs IHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1KSBO TE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTU1KGZ1bmMs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2 MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3 LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwg djQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNP Tl9QQVNURTU3KGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwg djExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYy MiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMs IHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2 NDUsIHY0NiwgdjQ3LCB2NDgsIHY0OSwgdjUwLCB2NTEsIHY1MiwgdjUzLCB2NTQsIHY1NSwgdjU2 KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTU2KGZ1 bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2 MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1 LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwg djM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0 OCwgdjQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYpCistI2RlZmluZSBOTE9I TUFOTl9KU09OX1BBU1RFNTgoZnVuYywgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2 OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAs IHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2 MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQz LCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwg djU1LCB2NTYsIHY1NykgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pT T05fUEFTVEU1NyhmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjEx LCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwg djIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYz NCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUs IHY0NiwgdjQ3LCB2NDgsIHY0OSwgdjUwLCB2NTEsIHY1MiwgdjUzLCB2NTQsIHY1NSwgdjU2LCB2 NTcpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFNTkoZnVuYywgdjEsIHYyLCB2MywgdjQs IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2 MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4 LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwg djQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1 MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1NywgdjU4KSBOTE9ITUFOTl9KU09OX1BBU1RF MihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTU4KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2 NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYx OCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2Mjks IHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2 NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSwgdjUy LCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1NywgdjU4KQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9Q QVNURTYwKGZ1bmMsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjEx LCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwg djIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYz NCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUs IHY0NiwgdjQ3LCB2NDgsIHY0OSwgdjUwLCB2NTEsIHY1MiwgdjUzLCB2NTQsIHY1NSwgdjU2LCB2 NTcsIHY1OCwgdjU5KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNP Tl9QQVNURTU5KGZ1bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs IHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2 MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0 LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwg djQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1 NywgdjU4LCB2NTkpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFNjEoZnVuYywgdjEsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYs IHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2 MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5 LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1NywgdjU4LCB2NTksIHY2MCkg TkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5OX0pTT05fUEFTVEU2MChmdW5j LCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0 LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwg djI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYz NywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUsIHY0NiwgdjQ3LCB2NDgs IHY0OSwgdjUwLCB2NTEsIHY1MiwgdjUzLCB2NTQsIHY1NSwgdjU2LCB2NTcsIHY1OCwgdjU5LCB2 NjApCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFNjIoZnVuYywgdjEsIHYyLCB2MywgdjQs IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2 MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4 LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwg djQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5LCB2NTAsIHY1 MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1NywgdjU4LCB2NTksIHY2MCwgdjYxKSBOTE9I TUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTYxKGZ1bmMsIHYy LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYx NSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYs IHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2 MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwgdjQ5 LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1NywgdjU4LCB2NTksIHY2MCwg djYxKQorLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9QQVNURTYzKGZ1bmMsIHYxLCB2MiwgdjMsIHY0 LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwg djE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYy OCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2Mzks IHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2NDUsIHY0NiwgdjQ3LCB2NDgsIHY0OSwgdjUwLCB2 NTEsIHY1MiwgdjUzLCB2NTQsIHY1NSwgdjU2LCB2NTcsIHY1OCwgdjU5LCB2NjAsIHY2MSwgdjYy KSBOTE9ITUFOTl9KU09OX1BBU1RFMihmdW5jLCB2MSkgTkxPSE1BTk5fSlNPTl9QQVNURTYyKGZ1 bmMsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2 MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1 LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwg djM3LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0 OCwgdjQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1NywgdjU4LCB2NTks IHY2MCwgdjYxLCB2NjIpCistI2RlZmluZSBOTE9ITUFOTl9KU09OX1BBU1RFNjQoZnVuYywgdjEs IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQs IHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2 MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3 LCB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSwgdjQ2LCB2NDcsIHY0OCwg djQ5LCB2NTAsIHY1MSwgdjUyLCB2NTMsIHY1NCwgdjU1LCB2NTYsIHY1NywgdjU4LCB2NTksIHY2 MCwgdjYxLCB2NjIsIHY2MykgTkxPSE1BTk5fSlNPTl9QQVNURTIoZnVuYywgdjEpIE5MT0hNQU5O X0pTT05fUEFTVEU2MyhmdW5jLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwg djExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYy MiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMs IHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0MywgdjQ0LCB2 NDUsIHY0NiwgdjQ3LCB2NDgsIHY0OSwgdjUwLCB2NTEsIHY1MiwgdjUzLCB2NTQsIHY1NSwgdjU2 LCB2NTcsIHY1OCwgdjU5LCB2NjAsIHY2MSwgdjYyLCB2NjMpCistCistI2RlZmluZSBOTE9ITUFO Tl9KU09OX1RPKHYxKSBubG9obWFubl9qc29uX2pbI3YxXSA9IG5sb2htYW5uX2pzb25fdC52MTsK Ky0jZGVmaW5lIE5MT0hNQU5OX0pTT05fRlJPTSh2MSkgbmxvaG1hbm5fanNvbl9qLmF0KCN2MSku Z2V0X3RvKG5sb2htYW5uX2pzb25fdC52MSk7CistCistLyohCistQGJyaWVmIG1hY3JvCistQGRl ZiBOTE9ITUFOTl9ERUZJTkVfVFlQRV9JTlRSVVNJVkUKKy1Ac2luY2UgdmVyc2lvbiAzLjkuMAor LSovCistI2RlZmluZSBOTE9ITUFOTl9ERUZJTkVfVFlQRV9JTlRSVVNJVkUoVHlwZSwgLi4uKSAg XAorLSAgICBmcmllbmQgdm9pZCB0b19qc29uKG5sb2htYW5uOjpqc29uJiBubG9obWFubl9qc29u X2osIGNvbnN0IFR5cGUmIG5sb2htYW5uX2pzb25fdCkgeyBOTE9ITUFOTl9KU09OX0VYUEFORChO TE9ITUFOTl9KU09OX1BBU1RFKE5MT0hNQU5OX0pTT05fVE8sIF9fVkFfQVJHU19fKSkgfSBcCist ICAgIGZyaWVuZCB2b2lkIGZyb21fanNvbihjb25zdCBubG9obWFubjo6anNvbiYgbmxvaG1hbm5f anNvbl9qLCBUeXBlJiBubG9obWFubl9qc29uX3QpIHsgTkxPSE1BTk5fSlNPTl9FWFBBTkQoTkxP SE1BTk5fSlNPTl9QQVNURShOTE9ITUFOTl9KU09OX0ZST00sIF9fVkFfQVJHU19fKSkgfQorLQor LS8qIQorLUBicmllZiBtYWNybworLUBkZWYgTkxPSE1BTk5fREVGSU5FX1RZUEVfTk9OX0lOVFJV U0lWRQorLUBzaW5jZSB2ZXJzaW9uIDMuOS4wCistKi8KKy0jZGVmaW5lIE5MT0hNQU5OX0RFRklO RV9UWVBFX05PTl9JTlRSVVNJVkUoVHlwZSwgLi4uKSAgXAorLSAgICBpbmxpbmUgdm9pZCB0b19q c29uKG5sb2htYW5uOjpqc29uJiBubG9obWFubl9qc29uX2osIGNvbnN0IFR5cGUmIG5sb2htYW5u X2pzb25fdCkgeyBOTE9ITUFOTl9KU09OX0VYUEFORChOTE9ITUFOTl9KU09OX1BBU1RFKE5MT0hN QU5OX0pTT05fVE8sIF9fVkFfQVJHU19fKSkgfSBcCistICAgIGlubGluZSB2b2lkIGZyb21fanNv bihjb25zdCBubG9obWFubjo6anNvbiYgbmxvaG1hbm5fanNvbl9qLCBUeXBlJiBubG9obWFubl9q c29uX3QpIHsgTkxPSE1BTk5fSlNPTl9FWFBBTkQoTkxPSE1BTk5fSlNPTl9QQVNURShOTE9ITUFO Tl9KU09OX0ZST00sIF9fVkFfQVJHU19fKSkgfQorLQorLQorLS8vIGluc3BpcmVkIGZyb20gaHR0 cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NzQ1NTkxCistLy8gYWxsb3dzIHRvIGNhbGwgYW55 IHN0ZCBmdW5jdGlvbiBhcyBpZiAoZS5nLiB3aXRoIGJlZ2luKToKKy0vLyB1c2luZyBzdGQ6OmJl Z2luOyBiZWdpbih4KTsKKy0vLworLS8vIGl0IGFsbG93cyB1c2luZyB0aGUgZGV0ZWN0ZWQgaWRp b20gdG8gcmV0cmlldmUgdGhlIHJldHVybiB0eXBlCistLy8gb2Ygc3VjaCBhbiBleHByZXNzaW9u CistI2RlZmluZSBOTE9ITUFOTl9DQU5fQ0FMTF9TVERfRlVOQ19JTVBMKHN0ZF9uYW1lKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgbmFtZXNwYWNlIGRldGFpbCB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorLSAgICB1c2luZyBzdGQ6OnN0ZF9uYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIFwKKy0gICAgdGVtcGxhdGU8dHlw ZW5hbWUuLi4gVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorLSAgICB1c2luZyByZXN1bHRfb2ZfIyNzdGRfbmFtZSA9IGRlY2x0eXBlKHN0 ZF9uYW1lKHN0ZDo6ZGVjbHZhbDxUPigpLi4uKSk7ICAgICAgICBcCistICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKy0gICAgXAorLSAgICBuYW1lc3BhY2UgZGV0YWlsMiB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHN0 cnVjdCBzdGRfbmFtZSMjX3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCistICAgIFwKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g VD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorLSAgICBzdGRfbmFtZSMjX3RhZyBzdGRfbmFtZShUJiYuLi4pOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIFwKKy0gICAgdGVtcGxhdGU8dHlw ZW5hbWUuLi4gVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorLSAgICB1c2luZyByZXN1bHRfb2ZfIyNzdGRfbmFtZSA9IGRlY2x0eXBlKHN0 ZF9uYW1lKHN0ZDo6ZGVjbHZhbDxUPigpLi4uKSk7ICAgICAgICBcCistICAgIFwKKy0gICAgdGVt cGxhdGU8dHlwZW5hbWUuLi4gVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorLSAgICBzdHJ1Y3Qgd291bGRfY2FsbF9zdGRfIyNzdGRfbmFt ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb25z dCB2YWx1ZSA9IDo6bmxvaG1hbm46OmRldGFpbDo6ICAgICAgICAgICAgICAgICAgXAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGV0ZWN0ZWRfZXhhY3Q8 c3RkX25hbWUjI190YWcsIHJlc3VsdF9vZl8jI3N0ZF9uYW1lLCBULi4uPjo6dmFsdWU7IFwKKy0g ICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9IC8qIG5hbWVzcGFjZSBkZXRhaWwyICov IFwKKy0gICAgXAorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHN0cnVjdCB3b3Vs ZF9jYWxsX3N0ZF8jI3N0ZF9uYW1lIDogZGV0YWlsMjo6d291bGRfY2FsbF9zdGRfIyNzdGRfbmFt ZTxULi4uPiAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9CistCistI2lm bmRlZiBKU09OX1VTRV9JTVBMSUNJVF9DT05WRVJTSU9OUworLSAgICAjZGVmaW5lIEpTT05fVVNF X0lNUExJQ0lUX0NPTlZFUlNJT05TIDEKKy0jZW5kaWYKKy0KKy0jaWYgSlNPTl9VU0VfSU1QTElD SVRfQ09OVkVSU0lPTlMKKy0gICAgI2RlZmluZSBKU09OX0VYUExJQ0lUCistI2Vsc2UKKy0gICAg I2RlZmluZSBKU09OX0VYUExJQ0lUIGV4cGxpY2l0CistI2VuZGlmCistCistI2lmbmRlZiBKU09O X0RJQUdOT1NUSUNTCistICAgICNkZWZpbmUgSlNPTl9ESUFHTk9TVElDUyAwCistI2VuZGlmCist CistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRhaWwKKy17CistCist LyohCistQGJyaWVmIHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mIGEgc3Vic3RyaW5nIGJ5IGFu b3RoZXIgc3RyaW5nCistCistQHBhcmFtW2luLG91dF0gcyAgdGhlIHN0cmluZyB0byBtYW5pcHVs YXRlOyBjaGFuZ2VkIHNvIHRoYXQgYWxsCistICAgICAgICAgICAgICAgb2NjdXJyZW5jZXMgb2Yg QGEgZiBhcmUgcmVwbGFjZWQgd2l0aCBAYSB0CistQHBhcmFtW2luXSAgICAgZiAgdGhlIHN1YnN0 cmluZyB0byByZXBsYWNlIHdpdGggQGEgdAorLUBwYXJhbVtpbl0gICAgIHQgIHRoZSBzdHJpbmcg dG8gcmVwbGFjZSBAYSBmCistCistQHByZSBUaGUgc2VhcmNoIHN0cmluZyBAYSBmIG11c3Qgbm90 IGJlIGVtcHR5LiAqKlRoaXMgcHJlY29uZGl0aW9uIGlzCistZW5mb3JjZWQgd2l0aCBhbiBhc3Nl cnRpb24uKioKKy0KKy1Ac2luY2UgdmVyc2lvbiAyLjAuMAorLSovCistaW5saW5lIHZvaWQgcmVw bGFjZV9zdWJzdHJpbmcoc3RkOjpzdHJpbmcmIHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0KQorLXsKKy0g ICAgSlNPTl9BU1NFUlQoIWYuZW1wdHkoKSk7CistICAgIGZvciAoYXV0byBwb3MgPSBzLmZpbmQo Zik7ICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgb2NjdXJyZW5jZSBvZiBmCistICAgICAg ICAgICAgcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zOyAgICAgICAgIC8vIG1ha2Ugc3VyZSBmIHdh cyBmb3VuZAorLSAgICAgICAgICAgIHMucmVwbGFjZShwb3MsIGYuc2l6ZSgpLCB0KSwgICAgICAv LyByZXBsYWNlIHdpdGggdCwgYW5kCistICAgICAgICAgICAgcG9zID0gcy5maW5kKGYsIHBvcyAr IHQuc2l6ZSgpKSkgIC8vIGZpbmQgbmV4dCBvY2N1cnJlbmNlIG9mIGYKKy0gICAge30KKy19Cist CistLyohCistICogQGJyaWVmIHN0cmluZyBlc2NhcGluZyBhcyBkZXNjcmliZWQgaW4gUkZDIDY5 MDEgKFNlY3QuIDQpCistICogQHBhcmFtW2luXSBzIHN0cmluZyB0byBlc2NhcGUKKy0gKiBAcmV0 dXJuICAgIGVzY2FwZWQgc3RyaW5nCistICoKKy0gKiBOb3RlIHRoZSBvcmRlciBvZiBlc2NhcGlu ZyAifiIgdG8gIn4wIiBhbmQgIi8iIHRvICJ+MSIgaXMgaW1wb3J0YW50LgorLSAqLworLWlubGlu ZSBzdGQ6OnN0cmluZyBlc2NhcGUoc3RkOjpzdHJpbmcgcykKKy17CistICAgIHJlcGxhY2Vfc3Vi c3RyaW5nKHMsICJ+IiwgIn4wIik7CistICAgIHJlcGxhY2Vfc3Vic3RyaW5nKHMsICIvIiwgIn4x Iik7CistICAgIHJldHVybiBzOworLX0KKy0KKy0vKiEKKy0gKiBAYnJpZWYgc3RyaW5nIHVuZXNj YXBpbmcgYXMgZGVzY3JpYmVkIGluIFJGQyA2OTAxIChTZWN0LiA0KQorLSAqIEBwYXJhbVtpbl0g cyBzdHJpbmcgdG8gdW5lc2NhcGUKKy0gKiBAcmV0dXJuICAgIHVuZXNjYXBlZCBzdHJpbmcKKy0g KgorLSAqIE5vdGUgdGhlIG9yZGVyIG9mIGVzY2FwaW5nICJ+MSIgdG8gIi8iIGFuZCAifjAiIHRv ICJ+IiBpcyBpbXBvcnRhbnQuCistICovCistc3RhdGljIHZvaWQgdW5lc2NhcGUoc3RkOjpzdHJp bmcmIHMpCisteworLSAgICByZXBsYWNlX3N1YnN0cmluZyhzLCAifjEiLCAiLyIpOworLSAgICBy ZXBsYWNlX3N1YnN0cmluZyhzLCAifjAiLCAifiIpOworLX0KKy0KKy19IC8vIG5hbWVzcGFjZSBk ZXRhaWwKKy19IC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vICNpbmNsdWRlIDxubG9obWFu bi9kZXRhaWwvaW5wdXQvcG9zaXRpb25fdC5ocHA+CistCistCistI2luY2x1ZGUgPGNzdGRkZWY+ IC8vIHNpemVfdAorLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWls CisteworLS8vLyBzdHJ1Y3QgdG8gY2FwdHVyZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGN1 cnJlbnQgdG9rZW4KKy1zdHJ1Y3QgcG9zaXRpb25fdAorLXsKKy0gICAgLy8vIHRoZSB0b3RhbCBu dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkCistICAgIHN0ZDo6c2l6ZV90IGNoYXJzX3JlYWRfdG90 YWwgPSAwOworLSAgICAvLy8gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW4gdGhlIGN1 cnJlbnQgbGluZQorLSAgICBzdGQ6OnNpemVfdCBjaGFyc19yZWFkX2N1cnJlbnRfbGluZSA9IDA7 CistICAgIC8vLyB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQKKy0gICAgc3RkOjpzaXplX3QgbGlu ZXNfcmVhZCA9IDA7CistCistICAgIC8vLyBjb252ZXJzaW9uIHRvIHNpemVfdCB0byBwcmVzZXJ2 ZSBTQVggaW50ZXJmYWNlCistICAgIGNvbnN0ZXhwciBvcGVyYXRvciBzaXplX3QoKSBjb25zdAor LSAgICB7CistICAgICAgICByZXR1cm4gY2hhcnNfcmVhZF90b3RhbDsKKy0gICAgfQorLX07Cist CistfSAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0v LyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0KKy0KKy1uYW1l c3BhY2UgbmxvaG1hbm4KKy17CistbmFtZXNwYWNlIGRldGFpbAorLXsKKy0vLy8vLy8vLy8vLy8v Ly8vCistLy8gZXhjZXB0aW9ucyAvLworLS8vLy8vLy8vLy8vLy8vLy8KKy0KKy0vLy8gQGJyaWVm IGdlbmVyYWwgZXhjZXB0aW9uIG9mIHRoZSBAcmVmIGJhc2ljX2pzb24gY2xhc3MKKy0vLy8gQHNh IGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9leGNlcHRpb24vCistY2xh c3MgZXhjZXB0aW9uIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uCisteworLSAgcHVibGljOgorLSAg ICAvLy8gcmV0dXJucyB0aGUgZXhwbGFuYXRvcnkgc3RyaW5nCistICAgIGNvbnN0IGNoYXIqIHdo YXQoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZQorLSAgICB7CistICAgICAgICByZXR1cm4gbS53 aGF0KCk7CistICAgIH0KKy0KKy0gICAgLy8vIHRoZSBpZCBvZiB0aGUgZXhjZXB0aW9uCistICAg IGNvbnN0IGludCBpZDsgLy8gTk9MSU5UKGNwcGNvcmVndWlkZWxpbmVzLW5vbi1wcml2YXRlLW1l bWJlci12YXJpYWJsZXMtaW4tY2xhc3NlcykKKy0KKy0gIHByb3RlY3RlZDoKKy0gICAgSlNPTl9I RURMRVlfTk9OX05VTEwoMykKKy0gICAgZXhjZXB0aW9uKGludCBpZF8sIGNvbnN0IGNoYXIqIHdo YXRfYXJnKSA6IGlkKGlkXyksIG0od2hhdF9hcmcpIHt9IC8vIE5PTElOVChidWdwcm9uZS10aHJv dy1rZXl3b3JkLW1pc3NpbmcpCistCistICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBuYW1lKGNvbnN0 IHN0ZDo6c3RyaW5nJiBlbmFtZSwgaW50IGlkXykKKy0gICAgeworLSAgICAgICAgcmV0dXJuICJb anNvbi5leGNlcHRpb24uIiArIGVuYW1lICsgIi4iICsgc3RkOjp0b19zdHJpbmcoaWRfKSArICJd ICI7CistICAgIH0KKy0KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy0g ICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRpYWdub3N0aWNzKGNvbnN0IEJhc2ljSnNvblR5cGUmIGxl YWZfZWxlbWVudCkKKy0gICAgeworLSNpZiBKU09OX0RJQUdOT1NUSUNTCistICAgICAgICBzdGQ6 OnZlY3RvcjxzdGQ6OnN0cmluZz4gdG9rZW5zOworLSAgICAgICAgZm9yIChjb25zdCBhdXRvKiBj dXJyZW50ID0gJmxlYWZfZWxlbWVudDsgY3VycmVudC0+bV9wYXJlbnQgIT0gbnVsbHB0cjsgY3Vy cmVudCA9IGN1cnJlbnQtPm1fcGFyZW50KQorLSAgICAgICAgeworLSAgICAgICAgICAgIHN3aXRj aCAoY3VycmVudC0+bV9wYXJlbnQtPnR5cGUoKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBjdXJyZW50LT5tX3BhcmVu dC0+bV92YWx1ZS5hcnJheS0+c2l6ZSgpOyArK2kpCistICAgICAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCZjdXJyZW50LT5tX3BhcmVudC0+bV92YWx1ZS5h cnJheS0+b3BlcmF0b3JbXShpKSA9PSBjdXJyZW50KQorLSAgICAgICAgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLmVtcGxhY2VfYmFjayhzdGQ6 OnRvX3N0cmluZyhpKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAg ICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAg ICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiAqY3VycmVudC0+bV9wYXJlbnQt Pm1fdmFsdWUub2JqZWN0KQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgmZWxlbWVudC5zZWNvbmQgPT0gY3VycmVudCkKKy0gICAgICAgICAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5lbXBsYWNl X2JhY2soZWxlbWVudC5maXJzdC5jX3N0cigpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOiAvLyBMQ09WX0VYQ0xfTElORQor LSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzogLy8gTENPVl9FWENMX0xJTkUK Ky0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOiAvLyBMQ09WX0VYQ0xfTElO RQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOiAvLyBMQ09W X0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25l ZDogLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1i ZXJfZmxvYXQ6IC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6YmluYXJ5OiAvLyBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVl X3Q6OmRpc2NhcmRlZDogLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICAgICAgZGVmYXVs dDogICAvLyBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIExD T1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLQorLSAgICAgICAgaWYg KHRva2Vucy5lbXB0eSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiAiIjsKKy0g ICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiAiKCIgKyBzdGQ6OmFjY3VtdWxhdGUodG9rZW5z LnJiZWdpbigpLCB0b2tlbnMucmVuZCgpLCBzdGQ6OnN0cmluZ3t9LAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyAmIGEsIGNvbnN0IHN0 ZDo6c3RyaW5nICYgYikKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gYSArICIvIiAr IGRldGFpbDo6ZXNjYXBlKGIpOworLSAgICAgICAgfSkgKyAiKSAiOworLSNlbHNlCistICAgICAg ICBzdGF0aWNfY2FzdDx2b2lkPihsZWFmX2VsZW1lbnQpOworLSAgICAgICAgcmV0dXJuICIiOwor LSNlbmRpZgorLSAgICB9CistCistICBwcml2YXRlOgorLSAgICAvLy8gYW4gZXhjZXB0aW9uIG9i amVjdCBhcyBzdG9yYWdlIGZvciBlcnJvciBtZXNzYWdlcworLSAgICBzdGQ6OnJ1bnRpbWVfZXJy b3IgbTsKKy19OworLQorLS8vLyBAYnJpZWYgZXhjZXB0aW9uIGluZGljYXRpbmcgYSBwYXJzZSBl cnJvcgorLS8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3Bh cnNlX2Vycm9yLworLWNsYXNzIHBhcnNlX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbgorLXsKKy0g IHB1YmxpYzoKKy0gICAgLyohCistICAgIEBicmllZiBjcmVhdGUgYSBwYXJzZSBlcnJvciBleGNl cHRpb24KKy0gICAgQHBhcmFtW2luXSBpZF8gICAgICAgdGhlIGlkIG9mIHRoZSBleGNlcHRpb24K Ky0gICAgQHBhcmFtW2luXSBwb3MgICAgICAgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBlcnJvciBv Y2N1cnJlZCAob3Igd2l0aAorLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc19yZWFkX3Rv dGFsPTAgaWYgdGhlIHBvc2l0aW9uIGNhbm5vdCBiZQorLSAgICAgICAgICAgICAgICAgICAgICAg ICBkZXRlcm1pbmVkKQorLSAgICBAcGFyYW1baW5dIHdoYXRfYXJnICB0aGUgZXhwbGFuYXRvcnkg c3RyaW5nCistICAgIEByZXR1cm4gcGFyc2VfZXJyb3Igb2JqZWN0CistICAgICovCistICAgIHRl bXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyBwYXJzZV9lcnJvciBj cmVhdGUoaW50IGlkXywgY29uc3QgcG9zaXRpb25fdCYgcG9zLCBjb25zdCBzdGQ6OnN0cmluZyYg d2hhdF9hcmcsIGNvbnN0IEJhc2ljSnNvblR5cGUmIGNvbnRleHQpCistICAgIHsKKy0gICAgICAg IHN0ZDo6c3RyaW5nIHcgPSBleGNlcHRpb246Om5hbWUoInBhcnNlX2Vycm9yIiwgaWRfKSArICJw YXJzZSBlcnJvciIgKworLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uX3N0cmluZyhw b3MpICsgIjogIiArIGV4Y2VwdGlvbjo6ZGlhZ25vc3RpY3MoY29udGV4dCkgKyB3aGF0X2FyZzsK Ky0gICAgICAgIHJldHVybiB7aWRfLCBwb3MuY2hhcnNfcmVhZF90b3RhbCwgdy5jX3N0cigpfTsK Ky0gICAgfQorLQorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLSAgICBz dGF0aWMgcGFyc2VfZXJyb3IgY3JlYXRlKGludCBpZF8sIHN0ZDo6c2l6ZV90IGJ5dGVfLCBjb25z dCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcsIGNvbnN0IEJhc2ljSnNvblR5cGUmIGNvbnRleHQpCist ICAgIHsKKy0gICAgICAgIHN0ZDo6c3RyaW5nIHcgPSBleGNlcHRpb246Om5hbWUoInBhcnNlX2Vy cm9yIiwgaWRfKSArICJwYXJzZSBlcnJvciIgKworLSAgICAgICAgICAgICAgICAgICAgICAgIChi eXRlXyAhPSAwID8gKCIgYXQgYnl0ZSAiICsgc3RkOjp0b19zdHJpbmcoYnl0ZV8pKSA6ICIiKSAr CistICAgICAgICAgICAgICAgICAgICAgICAgIjogIiArIGV4Y2VwdGlvbjo6ZGlhZ25vc3RpY3Mo Y29udGV4dCkgKyB3aGF0X2FyZzsKKy0gICAgICAgIHJldHVybiB7aWRfLCBieXRlXywgdy5jX3N0 cigpfTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGJ5dGUgaW5kZXggb2YgdGhl IHBhcnNlIGVycm9yCistCistICAgIFRoZSBieXRlIGluZGV4IG9mIHRoZSBsYXN0IHJlYWQgY2hh cmFjdGVyIGluIHRoZSBpbnB1dCBmaWxlLgorLQorLSAgICBAbm90ZSBGb3IgYW4gaW5wdXQgd2l0 aCBuIGJ5dGVzLCAxIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZAorLSAg ICAgICAgICBuKzEgaXMgdGhlIGluZGV4IG9mIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgb3Ig dGhlIGVuZCBvZiBmaWxlLgorLSAgICAgICAgICBUaGlzIGFsc28gaG9sZHMgdHJ1ZSB3aGVuIHJl YWRpbmcgYSBieXRlIHZlY3RvciAoQ0JPUiBvciBNZXNzYWdlUGFjaykuCistICAgICovCistICAg IGNvbnN0IHN0ZDo6c2l6ZV90IGJ5dGU7CistCistICBwcml2YXRlOgorLSAgICBwYXJzZV9lcnJv cihpbnQgaWRfLCBzdGQ6OnNpemVfdCBieXRlXywgY29uc3QgY2hhciogd2hhdF9hcmcpCistICAg ICAgICA6IGV4Y2VwdGlvbihpZF8sIHdoYXRfYXJnKSwgYnl0ZShieXRlXykge30KKy0KKy0gICAg c3RhdGljIHN0ZDo6c3RyaW5nIHBvc2l0aW9uX3N0cmluZyhjb25zdCBwb3NpdGlvbl90JiBwb3Mp CistICAgIHsKKy0gICAgICAgIHJldHVybiAiIGF0IGxpbmUgIiArIHN0ZDo6dG9fc3RyaW5nKHBv cy5saW5lc19yZWFkICsgMSkgKworLSAgICAgICAgICAgICAgICIsIGNvbHVtbiAiICsgc3RkOjp0 b19zdHJpbmcocG9zLmNoYXJzX3JlYWRfY3VycmVudF9saW5lKTsKKy0gICAgfQorLX07CistCist Ly8vIEBicmllZiBleGNlcHRpb24gaW5kaWNhdGluZyBlcnJvcnMgd2l0aCBpdGVyYXRvcnMKKy0v Ly8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pbnZhbGlkX2l0 ZXJhdG9yLworLWNsYXNzIGludmFsaWRfaXRlcmF0b3IgOiBwdWJsaWMgZXhjZXB0aW9uCistewor LSAgcHVibGljOgorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLSAgICBz dGF0aWMgaW52YWxpZF9pdGVyYXRvciBjcmVhdGUoaW50IGlkXywgY29uc3Qgc3RkOjpzdHJpbmcm IHdoYXRfYXJnLCBjb25zdCBCYXNpY0pzb25UeXBlJiBjb250ZXh0KQorLSAgICB7CistICAgICAg ICBzdGQ6OnN0cmluZyB3ID0gZXhjZXB0aW9uOjpuYW1lKCJpbnZhbGlkX2l0ZXJhdG9yIiwgaWRf KSArIGV4Y2VwdGlvbjo6ZGlhZ25vc3RpY3MoY29udGV4dCkgKyB3aGF0X2FyZzsKKy0gICAgICAg IHJldHVybiB7aWRfLCB3LmNfc3RyKCl9OworLSAgICB9CistCistICBwcml2YXRlOgorLSAgICBK U09OX0hFRExFWV9OT05fTlVMTCgzKQorLSAgICBpbnZhbGlkX2l0ZXJhdG9yKGludCBpZF8sIGNv bnN0IGNoYXIqIHdoYXRfYXJnKQorLSAgICAgICAgOiBleGNlcHRpb24oaWRfLCB3aGF0X2FyZykg e30KKy19OworLQorLS8vLyBAYnJpZWYgZXhjZXB0aW9uIGluZGljYXRpbmcgZXhlY3V0aW5nIGEg bWVtYmVyIGZ1bmN0aW9uIHdpdGggYSB3cm9uZyB0eXBlCistLy8vIEBzYSBodHRwczovL2pzb24u bmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vdHlwZV9lcnJvci8KKy1jbGFzcyB0eXBlX2Vycm9y IDogcHVibGljIGV4Y2VwdGlvbgorLXsKKy0gIHB1YmxpYzoKKy0gICAgdGVtcGxhdGU8dHlwZW5h bWUgQmFzaWNKc29uVHlwZT4KKy0gICAgc3RhdGljIHR5cGVfZXJyb3IgY3JlYXRlKGludCBpZF8s IGNvbnN0IHN0ZDo6c3RyaW5nJiB3aGF0X2FyZywgY29uc3QgQmFzaWNKc29uVHlwZSYgY29udGV4 dCkKKy0gICAgeworLSAgICAgICAgc3RkOjpzdHJpbmcgdyA9IGV4Y2VwdGlvbjo6bmFtZSgidHlw ZV9lcnJvciIsIGlkXykgKyBleGNlcHRpb246OmRpYWdub3N0aWNzKGNvbnRleHQpICsgd2hhdF9h cmc7CistICAgICAgICByZXR1cm4ge2lkXywgdy5jX3N0cigpfTsKKy0gICAgfQorLQorLSAgcHJp dmF0ZToKKy0gICAgSlNPTl9IRURMRVlfTk9OX05VTEwoMykKKy0gICAgdHlwZV9lcnJvcihpbnQg aWRfLCBjb25zdCBjaGFyKiB3aGF0X2FyZykgOiBleGNlcHRpb24oaWRfLCB3aGF0X2FyZykge30K Ky19OworLQorLS8vLyBAYnJpZWYgZXhjZXB0aW9uIGluZGljYXRpbmcgYWNjZXNzIG91dCBvZiB0 aGUgZGVmaW5lZCByYW5nZQorLS8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9i YXNpY19qc29uL291dF9vZl9yYW5nZS8KKy1jbGFzcyBvdXRfb2ZfcmFuZ2UgOiBwdWJsaWMgZXhj ZXB0aW9uCisteworLSAgcHVibGljOgorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25U eXBlPgorLSAgICBzdGF0aWMgb3V0X29mX3JhbmdlIGNyZWF0ZShpbnQgaWRfLCBjb25zdCBzdGQ6 OnN0cmluZyYgd2hhdF9hcmcsIGNvbnN0IEJhc2ljSnNvblR5cGUmIGNvbnRleHQpCistICAgIHsK Ky0gICAgICAgIHN0ZDo6c3RyaW5nIHcgPSBleGNlcHRpb246Om5hbWUoIm91dF9vZl9yYW5nZSIs IGlkXykgKyBleGNlcHRpb246OmRpYWdub3N0aWNzKGNvbnRleHQpICsgd2hhdF9hcmc7CistICAg ICAgICByZXR1cm4ge2lkXywgdy5jX3N0cigpfTsKKy0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0g ICAgSlNPTl9IRURMRVlfTk9OX05VTEwoMykKKy0gICAgb3V0X29mX3JhbmdlKGludCBpZF8sIGNv bnN0IGNoYXIqIHdoYXRfYXJnKSA6IGV4Y2VwdGlvbihpZF8sIHdoYXRfYXJnKSB7fQorLX07Cist CistLy8vIEBicmllZiBleGNlcHRpb24gaW5kaWNhdGluZyBvdGhlciBsaWJyYXJ5IGVycm9ycwor LS8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL290aGVyX2Vy cm9yLworLWNsYXNzIG90aGVyX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbgorLXsKKy0gIHB1Ymxp YzoKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy0gICAgc3RhdGljIG90 aGVyX2Vycm9yIGNyZWF0ZShpbnQgaWRfLCBjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcsIGNv bnN0IEJhc2ljSnNvblR5cGUmIGNvbnRleHQpCistICAgIHsKKy0gICAgICAgIHN0ZDo6c3RyaW5n IHcgPSBleGNlcHRpb246Om5hbWUoIm90aGVyX2Vycm9yIiwgaWRfKSArIGV4Y2VwdGlvbjo6ZGlh Z25vc3RpY3MoY29udGV4dCkgKyB3aGF0X2FyZzsKKy0gICAgICAgIHJldHVybiB7aWRfLCB3LmNf c3RyKCl9OworLSAgICB9CistCistICBwcml2YXRlOgorLSAgICBKU09OX0hFRExFWV9OT05fTlVM TCgzKQorLSAgICBvdGhlcl9lcnJvcihpbnQgaWRfLCBjb25zdCBjaGFyKiB3aGF0X2FyZykgOiBl eGNlcHRpb24oaWRfLCB3aGF0X2FyZykge30KKy19OworLQorLX0gIC8vIG5hbWVzcGFjZSBkZXRh aWwKKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4v ZGV0YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWls L21ldGEvY3BwX2Z1dHVyZS5ocHA+CistCistCistI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVf dAorLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4gLy8gY29uZGl0aW9uYWwsIGVuYWJsZV9pZiwgZmFs c2VfdHlwZSwgaW50ZWdyYWxfY29uc3RhbnQsIGlzX2NvbnN0cnVjdGlibGUsIGlzX2ludGVncmFs LCBpc19zYW1lLCByZW1vdmVfY3YsIHJlbW92ZV9yZWZlcmVuY2UsIHRydWVfdHlwZQorLSNpbmNs dWRlIDx1dGlsaXR5PiAvLyBpbmRleF9zZXF1ZW5jZSwgbWFrZV9pbmRleF9zZXF1ZW5jZSwgaW5k ZXhfc2VxdWVuY2VfZm9yCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tYWNyb19z Y29wZS5ocHA+CistCistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRh aWwKKy17CistCistdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy11c2luZyB1bmN2cmVmX3QgPSB0eXBl bmFtZSBzdGQ6OnJlbW92ZV9jdjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5 cGU+Ojp0eXBlOworLQorLSNpZmRlZiBKU09OX0hBU19DUFBfMTQKKy0KKy0vLyB0aGUgZm9sbG93 aW5nIHV0aWxpdGllcyBhcmUgbmF0aXZlbHkgYXZhaWxhYmxlIGluIEMrKzE0CistdXNpbmcgc3Rk OjplbmFibGVfaWZfdDsKKy11c2luZyBzdGQ6OmluZGV4X3NlcXVlbmNlOworLXVzaW5nIHN0ZDo6 bWFrZV9pbmRleF9zZXF1ZW5jZTsKKy11c2luZyBzdGQ6OmluZGV4X3NlcXVlbmNlX2ZvcjsKKy0K Ky0jZWxzZQorLQorLS8vIGFsaWFzIHRlbXBsYXRlcyB0byByZWR1Y2UgYm9pbGVycGxhdGUKKy10 ZW1wbGF0ZTxib29sIEIsIHR5cGVuYW1lIFQgPSB2b2lkPgorLXVzaW5nIGVuYWJsZV9pZl90ID0g dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CistCistLy8gVGhlIGZvbGxvd2lu ZyBjb2RlIGlzIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Fic2VpbC9hYnNlaWwtY3Bw L2Jsb2IvMTBjYjM1ZTQ1OWY1ZWNjYTViMmZmMTA3NjM1ZGEwYmZhNDEwMTFiNC9hYnNsL3V0aWxp dHkvdXRpbGl0eS5oCistLy8gd2hpY2ggaXMgcGFydCBvZiBHb29nbGUgQWJzZWlsIChodHRwczov L2dpdGh1Yi5jb20vYWJzZWlsL2Fic2VpbC1jcHApLCBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl IExpY2Vuc2UgMi4wLgorLQorLS8vLy8gU1RBUlQgT0YgQ09ERSBGUk9NIEdPT0dMRSBBQlNFSUwK Ky0KKy0vLyBpbnRlZ2VyX3NlcXVlbmNlCistLy8KKy0vLyBDbGFzcyB0ZW1wbGF0ZSByZXByZXNl bnRpbmcgYSBjb21waWxlLXRpbWUgaW50ZWdlciBzZXF1ZW5jZS4gQW4gaW5zdGFudGlhdGlvbgor LS8vIG9mIGBpbnRlZ2VyX3NlcXVlbmNlPFQsIEludHMuLi4+YCBoYXMgYSBzZXF1ZW5jZSBvZiBp bnRlZ2VycyBlbmNvZGVkIGluIGl0cworLS8vIHR5cGUgdGhyb3VnaCBpdHMgdGVtcGxhdGUgYXJn dW1lbnRzICh3aGljaCBpcyBhIGNvbW1vbiBuZWVkIHdoZW4KKy0vLyB3b3JraW5nIHdpdGggQysr MTEgdmFyaWFkaWMgdGVtcGxhdGVzKS4gYGFic2w6OmludGVnZXJfc2VxdWVuY2VgIGlzIGRlc2ln bmVkCistLy8gdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBDKysxNCdzIGBzdGQ6Omlu dGVnZXJfc2VxdWVuY2VgLgorLS8vCistLy8gRXhhbXBsZToKKy0vLworLS8vICAgdGVtcGxhdGU8 IGNsYXNzIFQsIFQuLi4gSW50cyA+CistLy8gICB2b2lkIHVzZXJfZnVuY3Rpb24oaW50ZWdlcl9z ZXF1ZW5jZTxULCBJbnRzLi4uPik7CistLy8KKy0vLyAgIGludCBtYWluKCkKKy0vLyAgIHsKKy0v LyAgICAgLy8gdXNlcl9mdW5jdGlvbidzIGBUYCB3aWxsIGJlIGRlZHVjZWQgdG8gYGludGAgYW5k IGBJbnRzLi4uYAorLS8vICAgICAvLyB3aWxsIGJlIGRlZHVjZWQgdG8gYDAsIDEsIDIsIDMsIDRg LgorLS8vICAgICB1c2VyX2Z1bmN0aW9uKG1ha2VfaW50ZWdlcl9zZXF1ZW5jZTxpbnQsIDU+KCkp OworLS8vICAgfQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBULi4uIEludHM+Cistc3RydWN0IGlu dGVnZXJfc2VxdWVuY2UKKy17CistICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBUOworLSAgICBzdGF0 aWMgY29uc3RleHByIHN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdAorLSAgICB7CistICAgICAg ICByZXR1cm4gc2l6ZW9mLi4uKEludHMpOworLSAgICB9CistfTsKKy0KKy0vLyBpbmRleF9zZXF1 ZW5jZQorLS8vCistLy8gQSBoZWxwZXIgdGVtcGxhdGUgZm9yIGFuIGBpbnRlZ2VyX3NlcXVlbmNl YCBvZiBgc2l6ZV90YCwKKy0vLyBgYWJzbDo6aW5kZXhfc2VxdWVuY2VgIGlzIGRlc2lnbmVkIHRv IGJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgQysrMTQncworLS8vIGBzdGQ6OmluZGV4X3Nl cXVlbmNlYC4KKy10ZW1wbGF0ZSA8c2l6ZV90Li4uIEludHM+CistdXNpbmcgaW5kZXhfc2VxdWVu Y2UgPSBpbnRlZ2VyX3NlcXVlbmNlPHNpemVfdCwgSW50cy4uLj47CistCistbmFtZXNwYWNlIHV0 aWxpdHlfaW50ZXJuYWwKKy17CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFNlcSwgc2l6ZV90IFNl cVNpemUsIHNpemVfdCBSZW0+Cistc3RydWN0IEV4dGVuZDsKKy0KKy0vLyBOb3RlIHRoYXQgU2Vx U2l6ZSA9PSBzaXplb2YuLi4oSW50cykuIEl0J3MgcGFzc2VkIGV4cGxpY2l0bHkgZm9yIGVmZmlj aWVuY3kuCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFQuLi4gSW50cywgc2l6ZV90IFNlcVNpemU+ Cistc3RydWN0IEV4dGVuZDxpbnRlZ2VyX3NlcXVlbmNlPFQsIEludHMuLi4+LCBTZXFTaXplLCAw PgorLXsKKy0gICAgdXNpbmcgdHlwZSA9IGludGVnZXJfc2VxdWVuY2UgPCBULCBJbnRzLi4uLCAo SW50cyArIFNlcVNpemUpLi4uID47CistfTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVC4u LiBJbnRzLCBzaXplX3QgU2VxU2l6ZT4KKy1zdHJ1Y3QgRXh0ZW5kPGludGVnZXJfc2VxdWVuY2U8 VCwgSW50cy4uLj4sIFNlcVNpemUsIDE+CisteworLSAgICB1c2luZyB0eXBlID0gaW50ZWdlcl9z ZXF1ZW5jZSA8IFQsIEludHMuLi4sIChJbnRzICsgU2VxU2l6ZSkuLi4sIDIgKiBTZXFTaXplID47 CistfTsKKy0KKy0vLyBSZWN1cnNpb24gaGVscGVyIGZvciAnbWFrZV9pbnRlZ2VyX3NlcXVlbmNl PFQsIE4+Jy4KKy0vLyAnR2VuPFQsIE4+Ojp0eXBlJyBpcyBhbiBhbGlhcyBmb3IgJ2ludGVnZXJf c2VxdWVuY2U8VCwgMCwgMSwgLi4uIE4tMT4nLgorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXpl X3QgTj4KKy1zdHJ1Y3QgR2VuCisteworLSAgICB1c2luZyB0eXBlID0KKy0gICAgICAgIHR5cGVu YW1lIEV4dGVuZCA8IHR5cGVuYW1lIEdlbiA8IFQsIE4gLyAyID46OnR5cGUsIE4gLyAyLCBOICUg MiA+Ojp0eXBlOworLX07CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RydWN0IEdlbjxU LCAwPgorLXsKKy0gICAgdXNpbmcgdHlwZSA9IGludGVnZXJfc2VxdWVuY2U8VD47CistfTsKKy0K Ky19ICAvLyBuYW1lc3BhY2UgdXRpbGl0eV9pbnRlcm5hbAorLQorLS8vIENvbXBpbGUtdGltZSBz ZXF1ZW5jZXMgb2YgaW50ZWdlcnMKKy0KKy0vLyBtYWtlX2ludGVnZXJfc2VxdWVuY2UKKy0vLwor LS8vIFRoaXMgdGVtcGxhdGUgYWxpYXMgaXMgZXF1aXZhbGVudCB0bworLS8vIGBpbnRlZ2VyX3Nl cXVlbmNlPGludCwgMCwgMSwgLi4uLCBOLTE+YCwgYW5kIGlzIGRlc2lnbmVkIHRvIGJlIGEgZHJv cC1pbgorLS8vIHJlcGxhY2VtZW50IGZvciBDKysxNCdzIGBzdGQ6Om1ha2VfaW50ZWdlcl9zZXF1 ZW5jZWAuCistdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFQgTj4KKy11c2luZyBtYWtlX2ludGVnZXJf c2VxdWVuY2UgPSB0eXBlbmFtZSB1dGlsaXR5X2ludGVybmFsOjpHZW48VCwgTj46OnR5cGU7Cist CistLy8gbWFrZV9pbmRleF9zZXF1ZW5jZQorLS8vCistLy8gVGhpcyB0ZW1wbGF0ZSBhbGlhcyBp cyBlcXVpdmFsZW50IHRvIGBpbmRleF9zZXF1ZW5jZTwwLCAxLCAuLi4sIE4tMT5gLAorLS8vIGFu ZCBpcyBkZXNpZ25lZCB0byBiZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIEMrKzE0J3MKKy0v LyBgc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlYC4KKy10ZW1wbGF0ZSA8c2l6ZV90IE4+CistdXNp bmcgbWFrZV9pbmRleF9zZXF1ZW5jZSA9IG1ha2VfaW50ZWdlcl9zZXF1ZW5jZTxzaXplX3QsIE4+ OworLQorLS8vIGluZGV4X3NlcXVlbmNlX2ZvcgorLS8vCistLy8gQ29udmVydHMgYSB0eXBlbmFt ZSBwYWNrIGludG8gYW4gaW5kZXggc2VxdWVuY2Ugb2YgdGhlIHNhbWUgbGVuZ3RoLCBhbmQKKy0v LyBpcyBkZXNpZ25lZCB0byBiZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIEMrKzE0J3MKKy0v LyBgc3RkOjppbmRleF9zZXF1ZW5jZV9mb3IoKWAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ CistdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gbWFrZV9pbmRleF9zZXF1ZW5jZTxzaXplb2Yu Li4oVHMpPjsKKy0KKy0vLy8vIEVORCBPRiBDT0RFIEZST00gR09PR0xFIEFCU0VJTAorLQorLSNl bmRpZgorLQorLS8vIGRpc3BhdGNoIHV0aWxpdHkgKHRha2VuIGZyb20gcmFuZ2VzLXYzKQorLXRl bXBsYXRlPHVuc2lnbmVkIE4+IHN0cnVjdCBwcmlvcml0eV90YWcgOiBwcmlvcml0eV90YWcgPCBO IC0gMSA+IHt9OworLXRlbXBsYXRlPD4gc3RydWN0IHByaW9yaXR5X3RhZzwwPiB7fTsKKy0KKy0v LyB0YWtlbiBmcm9tIHJhbmdlcy12MworLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cistc3RydWN0IHN0 YXRpY19jb25zdAorLXsKKy0gICAgc3RhdGljIGNvbnN0ZXhwciBUIHZhbHVle307CistfTsKKy0K Ky10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLWNvbnN0ZXhwciBUIHN0YXRpY19jb25zdDxUPjo6dmFs dWU7IC8vIE5PTElOVChyZWFkYWJpbGl0eS1yZWR1bmRhbnQtZGVjbGFyYXRpb24pCistCistfSAg Ly8gbmFtZXNwYWNlIGRldGFpbAorLX0gIC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vICNp bmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWV0YS9pZGVudGl0eV90YWcuaHBwPgorLQorLQorLW5h bWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCisteworLS8vIGRpc3BhdGNo aW5nIGhlbHBlciBzdHJ1Y3QKKy10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlkZW50aXR5X3Rh ZyB7fTsKKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5u CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tZXRhL3R5cGVfdHJhaXRzLmhwcD4K Ky0KKy0KKy0jaW5jbHVkZSA8bGltaXRzPiAvLyBudW1lcmljX2xpbWl0cworLSNpbmNsdWRlIDx0 eXBlX3RyYWl0cz4gLy8gZmFsc2VfdHlwZSwgaXNfY29uc3RydWN0aWJsZSwgaXNfaW50ZWdyYWws IGlzX3NhbWUsIHRydWVfdHlwZQorLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBkZWNsdmFsCistI2lu Y2x1ZGUgPHR1cGxlPiAvLyB0dXBsZQorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwv bWFjcm9fc2NvcGUuaHBwPgorLQorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvaXRl cmF0b3JzL2l0ZXJhdG9yX3RyYWl0cy5ocHA+CistCistCistI2luY2x1ZGUgPGl0ZXJhdG9yPiAv LyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZworLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9k ZXRhaWwvbWV0YS92b2lkX3QuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwv bWV0YS9jcHBfZnV0dXJlLmhwcD4KKy0KKy0KKy1uYW1lc3BhY2UgbmxvaG1hbm4KKy17CistbmFt ZXNwYWNlIGRldGFpbAorLXsKKy10ZW1wbGF0ZTx0eXBlbmFtZSBJdCwgdHlwZW5hbWUgPSB2b2lk PgorLXN0cnVjdCBpdGVyYXRvcl90eXBlcyB7fTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBJdD4K Ky1zdHJ1Y3QgaXRlcmF0b3JfdHlwZXMgPAorLSAgICBJdCwKKy0gICAgdm9pZF90PHR5cGVuYW1l IEl0OjpkaWZmZXJlbmNlX3R5cGUsIHR5cGVuYW1lIEl0Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBJ dDo6cG9pbnRlciwKKy0gICAgdHlwZW5hbWUgSXQ6OnJlZmVyZW5jZSwgdHlwZW5hbWUgSXQ6Oml0 ZXJhdG9yX2NhdGVnb3J5ID4+CisteworLSAgICB1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSB0eXBl bmFtZSBJdDo6ZGlmZmVyZW5jZV90eXBlOworLSAgICB1c2luZyB2YWx1ZV90eXBlID0gdHlwZW5h bWUgSXQ6OnZhbHVlX3R5cGU7CistICAgIHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFtZSBJdDo6cG9p bnRlcjsKKy0gICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgSXQ6OnJlZmVyZW5jZTsKKy0g ICAgdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSB0eXBlbmFtZSBJdDo6aXRlcmF0b3JfY2F0ZWdv cnk7CistfTsKKy0KKy0vLyBUaGlzIGlzIHJlcXVpcmVkIGFzIHNvbWUgY29tcGlsZXJzIGltcGxl bWVudCBzdGQ6Oml0ZXJhdG9yX3RyYWl0cyBpbiBhIHdheSB0aGF0CistLy8gZG9lc24ndCB3b3Jr IHdpdGggU0ZJTkFFLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVz LzEzNDEuCistdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorLXN0cnVjdCBp dGVyYXRvcl90cmFpdHMKKy17CistfTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLXN0cnVj dCBpdGVyYXRvcl90cmFpdHMgPCBULCBlbmFibGVfaWZfdCA8ICFzdGQ6OmlzX3BvaW50ZXI8VD46 OnZhbHVlID4+CistICAgICAgICAgICAgOiBpdGVyYXRvcl90eXBlczxUPgorLXsKKy19OworLQor LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cistc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxUKiwgZW5hYmxl X2lmX3Q8c3RkOjppc19vYmplY3Q8VD46OnZhbHVlPj4KKy17CistICAgIHVzaW5nIGl0ZXJhdG9y X2NhdGVnb3J5ID0gc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZzsKKy0gICAgdXNpbmcg dmFsdWVfdHlwZSA9IFQ7CistICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHB0cmRpZmZfdDsK Ky0gICAgdXNpbmcgcG9pbnRlciA9IFQqOworLSAgICB1c2luZyByZWZlcmVuY2UgPSBUJjsKKy19 OworLX0gLy8gbmFtZXNwYWNlIGRldGFpbAorLX0gLy8gbmFtZXNwYWNlIG5sb2htYW5uCistCist Ly8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tZXRhL2NhbGxfc3RkL2JlZ2luLmhwcD4KKy0K Ky0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0KKy0K Ky1uYW1lc3BhY2UgbmxvaG1hbm4KKy17CistTkxPSE1BTk5fQ0FOX0NBTExfU1REX0ZVTkNfSU1Q TChiZWdpbik7CistfSAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAjaW5jbHVkZSA8bmxv aG1hbm4vZGV0YWlsL21ldGEvY2FsbF9zdGQvZW5kLmhwcD4KKy0KKy0KKy0vLyAjaW5jbHVkZSA8 bmxvaG1hbm4vZGV0YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0KKy0KKy1uYW1lc3BhY2UgbmxvaG1h bm4KKy17CistTkxPSE1BTk5fQ0FOX0NBTExfU1REX0ZVTkNfSU1QTChlbmQpOworLX0gIC8vIG5h bWVzcGFjZSBubG9obWFubgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWV0YS9j cHBfZnV0dXJlLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21ldGEvZGV0 ZWN0ZWQuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3ZC5ocHA+CistI2lm bmRlZiBJTkNMVURFX05MT0hNQU5OX0pTT05fRldEX0hQUF8KKy0jZGVmaW5lIElOQ0xVREVfTkxP SE1BTk5fSlNPTl9GV0RfSFBQXworLQorLSNpbmNsdWRlIDxjc3RkaW50PiAvLyBpbnQ2NF90LCB1 aW50NjRfdAorLSNpbmNsdWRlIDxtYXA+IC8vIG1hcAorLSNpbmNsdWRlIDxtZW1vcnk+IC8vIGFs bG9jYXRvcgorLSNpbmNsdWRlIDxzdHJpbmc+IC8vIHN0cmluZworLSNpbmNsdWRlIDx2ZWN0b3I+ IC8vIHZlY3RvcgorLQorLS8qIQorLUBicmllZiBuYW1lc3BhY2UgZm9yIE5pZWxzIExvaG1hbm4K Ky1Ac2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubgorLUBzaW5jZSB2ZXJzaW9uIDEuMC4w CistKi8KKy1uYW1lc3BhY2UgbmxvaG1hbm4KKy17CistLyohCistQGJyaWVmIGRlZmF1bHQgSlNP TlNlcmlhbGl6ZXIgdGVtcGxhdGUgYXJndW1lbnQKKy0KKy1UaGlzIHNlcmlhbGl6ZXIgaWdub3Jl cyB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIGFuZCB1c2VzIEFETAorLShbYXJndW1lbnQtZGVwZW5k ZW50IGxvb2t1cF0oaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL2Fk bCkpCistZm9yIHNlcmlhbGl6YXRpb24uCistKi8KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9p ZCwgdHlwZW5hbWUgU0ZJTkFFID0gdm9pZD4KKy1zdHJ1Y3QgYWRsX3NlcmlhbGl6ZXI7CistCist Ly8vIGEgY2xhc3MgdG8gc3RvcmUgSlNPTiB2YWx1ZXMKKy0vLy8gQHNhIGh0dHBzOi8vanNvbi5u bG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi8KKy10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZSBV LCB0eXBlbmFtZSBWLCB0eXBlbmFtZS4uLiBBcmdzPiBjbGFzcyBPYmplY3RUeXBlID0KKy0gICAg ICAgICBzdGQ6Om1hcCwKKy0gICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZS4u LiBBcmdzPiBjbGFzcyBBcnJheVR5cGUgPSBzdGQ6OnZlY3RvciwKKy0gICAgICAgICBjbGFzcyBT dHJpbmdUeXBlID0gc3RkOjpzdHJpbmcsIGNsYXNzIEJvb2xlYW5UeXBlID0gYm9vbCwKKy0gICAg ICAgICBjbGFzcyBOdW1iZXJJbnRlZ2VyVHlwZSA9IHN0ZDo6aW50NjRfdCwKKy0gICAgICAgICBj bGFzcyBOdW1iZXJVbnNpZ25lZFR5cGUgPSBzdGQ6OnVpbnQ2NF90LAorLSAgICAgICAgIGNsYXNz IE51bWJlckZsb2F0VHlwZSA9IGRvdWJsZSwKKy0gICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV PiBjbGFzcyBBbGxvY2F0b3JUeXBlID0gc3RkOjphbGxvY2F0b3IsCistICAgICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU0ZJTkFFID0gdm9pZD4gY2xhc3MgSlNPTlNlcmlhbGl6 ZXIgPQorLSAgICAgICAgIGFkbF9zZXJpYWxpemVyLAorLSAgICAgICAgIGNsYXNzIEJpbmFyeVR5 cGUgPSBzdGQ6OnZlY3RvcjxzdGQ6OnVpbnQ4X3Q+PgorLWNsYXNzIGJhc2ljX2pzb247CistCist Ly8vIEBicmllZiBKU09OIFBvaW50ZXIgZGVmaW5lcyBhIHN0cmluZyBzeW50YXggZm9yIGlkZW50 aWZ5aW5nIGEgc3BlY2lmaWMgdmFsdWUgd2l0aGluIGEgSlNPTiBkb2N1bWVudAorLS8vLyBAc2Eg aHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9qc29uX3BvaW50ZXIvCistdGVtcGxhdGU8dHlw ZW5hbWUgQmFzaWNKc29uVHlwZT4KKy1jbGFzcyBqc29uX3BvaW50ZXI7CistCistLyohCistQGJy aWVmIGRlZmF1bHQgc3BlY2lhbGl6YXRpb24KKy1Ac2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1l L2FwaS9qc29uLworLSovCistdXNpbmcganNvbiA9IGJhc2ljX2pzb248PjsKKy0KKy0vLy8gQGJy aWVmIGEgbWluaW1hbCBtYXAtbGlrZSBjb250YWluZXIgdGhhdCBwcmVzZXJ2ZXMgaW5zZXJ0aW9u IG9yZGVyCistLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL29yZGVyZWRfbWFw LworLXRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVCwgY2xhc3MgSWdub3JlZExlc3MsIGNsYXNz IEFsbG9jYXRvcj4KKy1zdHJ1Y3Qgb3JkZXJlZF9tYXA7CistCistLy8vIEBicmllZiBzcGVjaWFs aXphdGlvbiB0aGF0IG1haW50YWlucyB0aGUgaW5zZXJ0aW9uIG9yZGVyIG9mIG9iamVjdCBrZXlz CistLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL29yZGVyZWRfanNvbi8KKy11 c2luZyBvcmRlcmVkX2pzb24gPSBiYXNpY19qc29uPG5sb2htYW5uOjpvcmRlcmVkX21hcD47Cist CistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCistCistI2VuZGlmICAvLyBJTkNMVURFX05MT0hN QU5OX0pTT05fRldEX0hQUF8KKy0KKy0KKy1uYW1lc3BhY2UgbmxvaG1hbm4KKy17CistLyohCist QGJyaWVmIGRldGFpbCBuYW1lc3BhY2Ugd2l0aCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zCist CistVGhpcyBuYW1lc3BhY2UgY29sbGVjdHMgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIG5vdCBiZSBl eHBvc2VkLAorLWltcGxlbWVudGF0aW9ucyBvZiBzb21lIEByZWYgYmFzaWNfanNvbiBtZXRob2Rz LCBhbmQgbWV0YS1wcm9ncmFtbWluZyBoZWxwZXJzLgorLQorLUBzaW5jZSB2ZXJzaW9uIDIuMS4w CistKi8KKy1uYW1lc3BhY2UgZGV0YWlsCisteworLS8vLy8vLy8vLy8vLy8KKy0vLyBoZWxwZXJz IC8vCistLy8vLy8vLy8vLy8vLworLQorLS8vIE5vdGUgdG8gbWFpbnRhaW5lcnM6CistLy8KKy0v LyBFdmVyeSB0cmFpdCBpbiB0aGlzIGZpbGUgZXhwZWN0cyBhIG5vbiBDVi1xdWFsaWZpZWQgdHlw ZS4KKy0vLyBUaGUgb25seSBleGNlcHRpb25zIGFyZSBpbiB0aGUgJ2FsaWFzZXMgZm9yIGRldGVj dGVkJyBzZWN0aW9uCistLy8gKGkuZS4gdGhvc2Ugb2YgdGhlIGZvcm06IGRlY2x0eXBlKFQ6Om1l bWJlcl9mdW5jdGlvbihzdGQ6OmRlY2x2YWw8VD4oKSkpKQorLS8vCistLy8gSW4gdGhpcyBjYXNl LCBUIGhhcyB0byBiZSBwcm9wZXJseSBDVi1xdWFsaWZpZWQgdG8gY29uc3RyYWludCB0aGUgZnVu Y3Rpb24gYXJndW1lbnRzCistLy8gKGUuZy4gdG9fanNvbihCYXNpY0pzb25UeXBlJiwgY29uc3Qg VCYpKQorLQorLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgaXNfYmFzaWNfanNvbiA6IHN0ZDo6 ZmFsc2VfdHlwZSB7fTsKKy0KKy1OTE9ITUFOTl9CQVNJQ19KU09OX1RQTF9ERUNMQVJBVElPTgor LXN0cnVjdCBpc19iYXNpY19qc29uPE5MT0hNQU5OX0JBU0lDX0pTT05fVFBMPiA6IHN0ZDo6dHJ1 ZV90eXBlIHt9OworLQorLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0vLyBqc29uX3JlZiBoZWxw ZXJzIC8vCistLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLXRlbXBsYXRlPHR5cGVuYW1lPgor LWNsYXNzIGpzb25fcmVmOworLQorLXRlbXBsYXRlPHR5cGVuYW1lPgorLXN0cnVjdCBpc19qc29u X3JlZiA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLXN0 cnVjdCBpc19qc29uX3JlZjxqc29uX3JlZjxUPj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy0v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLS8vIGFsaWFzZXMgZm9yIGRldGVjdGVkIC8vCist Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLXVz aW5nIG1hcHBlZF90eXBlX3QgPSB0eXBlbmFtZSBUOjptYXBwZWRfdHlwZTsKKy0KKy10ZW1wbGF0 ZTx0eXBlbmFtZSBUPgorLXVzaW5nIGtleV90eXBlX3QgPSB0eXBlbmFtZSBUOjprZXlfdHlwZTsK Ky0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLXVzaW5nIHZhbHVlX3R5cGVfdCA9IHR5cGVuYW1l IFQ6OnZhbHVlX3R5cGU7CistCistdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy11c2luZyBkaWZmZXJl bmNlX3R5cGVfdCA9IHR5cGVuYW1lIFQ6OmRpZmZlcmVuY2VfdHlwZTsKKy0KKy10ZW1wbGF0ZTx0 eXBlbmFtZSBUPgorLXVzaW5nIHBvaW50ZXJfdCA9IHR5cGVuYW1lIFQ6OnBvaW50ZXI7CistCist dGVtcGxhdGU8dHlwZW5hbWUgVD4KKy11c2luZyByZWZlcmVuY2VfdCA9IHR5cGVuYW1lIFQ6OnJl ZmVyZW5jZTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLXVzaW5nIGl0ZXJhdG9yX2NhdGVn b3J5X3QgPSB0eXBlbmFtZSBUOjppdGVyYXRvcl9jYXRlZ29yeTsKKy0KKy10ZW1wbGF0ZTx0eXBl bmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorLXVzaW5nIHRvX2pzb25fZnVuY3Rpb24gPSBkZWNs dHlwZShUOjp0b19qc29uKHN0ZDo6ZGVjbHZhbDxBcmdzPigpLi4uKSk7CistCistdGVtcGxhdGU8 dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KKy11c2luZyBmcm9tX2pzb25fZnVuY3Rpb24g PSBkZWNsdHlwZShUOjpmcm9tX2pzb24oc3RkOjpkZWNsdmFsPEFyZ3M+KCkuLi4pKTsKKy0KKy10 ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorLXVzaW5nIGdldF90ZW1wbGF0ZV9mdW5j dGlvbiA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxUPigpLnRlbXBsYXRlIGdldDxVPigpKTsKKy0K Ky0vLyB0cmFpdCBjaGVja2luZyBpZiBKU09OU2VyaWFsaXplcjxUPjo6ZnJvbV9qc29uKGpzb24g Y29uc3QmLCB1ZHQmKSBleGlzdHMKKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0 eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+Cistc3RydWN0IGhhc19mcm9tX2pzb24gOiBzdGQ6 OmZhbHNlX3R5cGUge307CistCistLy8gdHJhaXQgY2hlY2tpbmcgaWYgai5nZXQ8VD4gaXMgdmFs aWQKKy0vLyB1c2UgdGhpcyB0cmFpdCBpbnN0ZWFkIG9mIHN0ZDo6aXNfY29uc3RydWN0aWJsZSBv ciBzdGQ6OmlzX2NvbnZlcnRpYmxlLAorLS8vIGJvdGggcmVseSBvbiwgb3IgbWFrZSB1c2Ugb2Yg aW1wbGljaXQgY29udmVyc2lvbnMsIGFuZCB0aHVzIGZhaWwgd2hlbiBUCistLy8gaGFzIHNldmVy YWwgY29uc3RydWN0b3JzL29wZXJhdG9yPSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFu bi9qc29uL2lzc3Vlcy85NTgpCistdGVtcGxhdGUgPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5 cGVuYW1lIFQ+Cistc3RydWN0IGlzX2dldGFibGUKKy17CistICAgIHN0YXRpYyBjb25zdGV4cHIg Ym9vbCB2YWx1ZSA9IGlzX2RldGVjdGVkPGdldF90ZW1wbGF0ZV9mdW5jdGlvbiwgY29uc3QgQmFz aWNKc29uVHlwZSYsIFQ+Ojp2YWx1ZTsKKy19OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2lj SnNvblR5cGUsIHR5cGVuYW1lIFQ+Cistc3RydWN0IGhhc19mcm9tX2pzb24gPCBCYXNpY0pzb25U eXBlLCBULCBlbmFibGVfaWZfdCA8ICFpc19iYXNpY19qc29uPFQ+Ojp2YWx1ZSA+PgorLXsKKy0g ICAgdXNpbmcgc2VyaWFsaXplciA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnRlbXBsYXRlIGpz b25fc2VyaWFsaXplcjxULCB2b2lkPjsKKy0KKy0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZh bHVlID0KKy0gICAgICAgIGlzX2RldGVjdGVkX2V4YWN0PHZvaWQsIGZyb21fanNvbl9mdW5jdGlv biwgc2VyaWFsaXplciwKKy0gICAgICAgIGNvbnN0IEJhc2ljSnNvblR5cGUmLCBUJj46OnZhbHVl OworLX07CistCistLy8gVGhpcyB0cmFpdCBjaGVja3MgaWYgSlNPTlNlcmlhbGl6ZXI8VD46OmZy b21fanNvbihqc29uIGNvbnN0JikgZXhpc3RzCistLy8gdGhpcyBvdmVybG9hZCBpcyB1c2VkIGZv ciBub24tZGVmYXVsdC1jb25zdHJ1Y3RpYmxlIHVzZXItZGVmaW5lZC10eXBlcworLXRlbXBsYXRl PHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZD4KKy1z dHJ1Y3QgaGFzX25vbl9kZWZhdWx0X2Zyb21fanNvbiA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKKy0K Ky10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBUPgorLXN0cnVjdCBo YXNfbm9uX2RlZmF1bHRfZnJvbV9qc29uIDwgQmFzaWNKc29uVHlwZSwgVCwgZW5hYmxlX2lmX3Qg PCAhaXNfYmFzaWNfanNvbjxUPjo6dmFsdWUgPj4KKy17CistICAgIHVzaW5nIHNlcmlhbGl6ZXIg PSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjp0ZW1wbGF0ZSBqc29uX3NlcmlhbGl6ZXI8VCwgdm9p ZD47CistCistICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9CistICAgICAgICBpc19k ZXRlY3RlZF9leGFjdDxULCBmcm9tX2pzb25fZnVuY3Rpb24sIHNlcmlhbGl6ZXIsCistICAgICAg ICBjb25zdCBCYXNpY0pzb25UeXBlJj46OnZhbHVlOworLX07CistCistLy8gVGhpcyB0cmFpdCBj aGVja3MgaWYgQmFzaWNKc29uVHlwZTo6anNvbl9zZXJpYWxpemVyPFQ+Ojp0b19qc29uIGV4aXN0 cworLS8vIERvIG5vdCBldmFsdWF0ZSB0aGUgdHJhaXQgd2hlbiBUIGlzIGEgYmFzaWNfanNvbiB0 eXBlLCB0byBhdm9pZCB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGluZmluaXRlIHJlY3Vyc2lvbi4K Ky10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSA9 IHZvaWQ+Cistc3RydWN0IGhhc190b19qc29uIDogc3RkOjpmYWxzZV90eXBlIHt9OworLQorLXRl bXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFQ+Cistc3RydWN0IGhhc190 b19qc29uIDwgQmFzaWNKc29uVHlwZSwgVCwgZW5hYmxlX2lmX3QgPCAhaXNfYmFzaWNfanNvbjxU Pjo6dmFsdWUgPj4KKy17CistICAgIHVzaW5nIHNlcmlhbGl6ZXIgPSB0eXBlbmFtZSBCYXNpY0pz b25UeXBlOjp0ZW1wbGF0ZSBqc29uX3NlcmlhbGl6ZXI8VCwgdm9pZD47CistCistICAgIHN0YXRp YyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9CistICAgICAgICBpc19kZXRlY3RlZF9leGFjdDx2b2lk LCB0b19qc29uX2Z1bmN0aW9uLCBzZXJpYWxpemVyLCBCYXNpY0pzb25UeXBlJiwKKy0gICAgICAg IFQ+Ojp2YWx1ZTsKKy19OworLQorLQorLS8vLy8vLy8vLy8vLy8vLy8vLy8KKy0vLyBpc18gZnVu Y3Rpb25zIC8vCistLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLS8vIGh0dHBzOi8vZW4uY3BwcmVm ZXJlbmNlLmNvbS93L2NwcC90eXBlcy9jb25qdW5jdGlvbgorLXRlbXBsYXRlPGNsYXNzLi4uPiBz dHJ1Y3QgY29uanVuY3Rpb24gOiBzdGQ6OnRydWVfdHlwZSB7IH07CistdGVtcGxhdGU8Y2xhc3Mg QjE+IHN0cnVjdCBjb25qdW5jdGlvbjxCMT4gOiBCMSB7IH07CistdGVtcGxhdGU8Y2xhc3MgQjEs IGNsYXNzLi4uIEJuPgorLXN0cnVjdCBjb25qdW5jdGlvbjxCMSwgQm4uLi4+CistOiBzdGQ6OmNv bmRpdGlvbmFsPGJvb2woQjE6OnZhbHVlKSwgY29uanVuY3Rpb248Qm4uLi4+LCBCMT46OnR5cGUg e307CistCistLy8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL3R5cGVzL25lZ2F0 aW9uCistdGVtcGxhdGU8Y2xhc3MgQj4gc3RydWN0IG5lZ2F0aW9uIDogc3RkOjppbnRlZ3JhbF9j b25zdGFudCA8IGJvb2wsICFCOjp2YWx1ZSA+IHsgfTsKKy0KKy0vLyBSZWltcGxlbWVudGF0aW9u IG9mIGlzX2NvbnN0cnVjdGlibGUgYW5kIGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZSwgZHVlIHRv IHRoZW0gYmVpbmcgYnJva2VuIGZvcgorLS8vIHN0ZDo6cGFpciBhbmQgc3RkOjp0dXBsZSB1bnRp bCBMV0cgMjM2NyBmaXggKHNlZSBodHRwczovL2NwbHVzcGx1cy5naXRodWIuaW8vTFdHL2x3Zy1k ZWZlY3RzLmh0bWwjMjM2NykuCistLy8gVGhpcyBjYXVzZXMgY29tcGlsZSBlcnJvcnMgaW4gZS5n LiBjbGFuZyAzLjUgb3IgZ2NjIDQuOS4KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1zdHJ1Y3Qg aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlIDogc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8 VD4ge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKy1zdHJ1Y3Qg aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPHN0ZDo6cGFpcjxUMSwgVDI+PgorLSAgICAgICAgICAg IDogY29uanVuY3Rpb248aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFQxPiwgaXNfZGVmYXVsdF9j b25zdHJ1Y3RpYmxlPFQyPj4ge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFt ZSBUMj4KKy1zdHJ1Y3QgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPGNvbnN0IHN0ZDo6cGFpcjxU MSwgVDI+PgorLSAgICAgICAgICAgIDogY29uanVuY3Rpb248aXNfZGVmYXVsdF9jb25zdHJ1Y3Rp YmxlPFQxPiwgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFQyPj4ge307CistCistdGVtcGxhdGUg PHR5cGVuYW1lLi4uIFRzPgorLXN0cnVjdCBpc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8c3RkOjp0 dXBsZTxUcy4uLj4+CistICAgICAgICAgICAgOiBjb25qdW5jdGlvbjxpc19kZWZhdWx0X2NvbnN0 cnVjdGlibGU8VHM+Li4uPiB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+Cistc3Ry dWN0IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxjb25zdCBzdGQ6OnR1cGxlPFRzLi4uPj4KKy0g ICAgICAgICAgICA6IGNvbmp1bmN0aW9uPGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxUcz4uLi4+ IHt9OworLQorLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgorLXN0 cnVjdCBpc19jb25zdHJ1Y3RpYmxlIDogc3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+ IHt9OworLQorLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Cistc3RydWN0IGlz X2NvbnN0cnVjdGlibGU8c3RkOjpwYWlyPFQxLCBUMj4+IDogaXNfZGVmYXVsdF9jb25zdHJ1Y3Rp YmxlPHN0ZDo6cGFpcjxUMSwgVDI+PiB7fTsKKy0KKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5 cGVuYW1lIFQyPgorLXN0cnVjdCBpc19jb25zdHJ1Y3RpYmxlPGNvbnN0IHN0ZDo6cGFpcjxUMSwg VDI+PiA6IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxjb25zdCBzdGQ6OnBhaXI8VDEsIFQyPj4g e307CistCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorLXN0cnVjdCBpc19jb25zdHJ1Y3Rp YmxlPHN0ZDo6dHVwbGU8VHMuLi4+PiA6IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxzdGQ6OnR1 cGxlPFRzLi4uPj4ge307CistCistdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorLXN0cnVjdCBp c19jb25zdHJ1Y3RpYmxlPGNvbnN0IHN0ZDo6dHVwbGU8VHMuLi4+PiA6IGlzX2RlZmF1bHRfY29u c3RydWN0aWJsZTxjb25zdCBzdGQ6OnR1cGxlPFRzLi4uPj4ge307CistCistCistdGVtcGxhdGU8 dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgorLXN0cnVjdCBpc19pdGVyYXRvcl90cmFpdHMg OiBzdGQ6OmZhbHNlX3R5cGUge307CistCistdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy1zdHJ1Y3Qg aXNfaXRlcmF0b3JfdHJhaXRzPGl0ZXJhdG9yX3RyYWl0czxUPj4KKy17CistICBwcml2YXRlOgor LSAgICB1c2luZyB0cmFpdHMgPSBpdGVyYXRvcl90cmFpdHM8VD47CistCistICBwdWJsaWM6Cist ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9CistICAgICAgICBpc19kZXRlY3RlZDx2 YWx1ZV90eXBlX3QsIHRyYWl0cz46OnZhbHVlICYmCistICAgICAgICBpc19kZXRlY3RlZDxkaWZm ZXJlbmNlX3R5cGVfdCwgdHJhaXRzPjo6dmFsdWUgJiYKKy0gICAgICAgIGlzX2RldGVjdGVkPHBv aW50ZXJfdCwgdHJhaXRzPjo6dmFsdWUgJiYKKy0gICAgICAgIGlzX2RldGVjdGVkPGl0ZXJhdG9y X2NhdGVnb3J5X3QsIHRyYWl0cz46OnZhbHVlICYmCistICAgICAgICBpc19kZXRlY3RlZDxyZWZl cmVuY2VfdCwgdHJhaXRzPjo6dmFsdWU7CistfTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgor LXN0cnVjdCBpc19yYW5nZQorLXsKKy0gIHByaXZhdGU6CistICAgIHVzaW5nIHRfcmVmID0gdHlw ZW5hbWUgc3RkOjphZGRfbHZhbHVlX3JlZmVyZW5jZTxUPjo6dHlwZTsKKy0KKy0gICAgdXNpbmcg aXRlcmF0b3IgPSBkZXRlY3RlZF90PHJlc3VsdF9vZl9iZWdpbiwgdF9yZWY+OworLSAgICB1c2lu ZyBzZW50aW5lbCA9IGRldGVjdGVkX3Q8cmVzdWx0X29mX2VuZCwgdF9yZWY+OworLQorLSAgICAv LyB0byBiZSAxMDAlIGNvcnJlY3QsIGl0IHNob3VsZCB1c2UgaHR0cHM6Ly9lbi5jcHByZWZlcmVu Y2UuY29tL3cvY3BwL2l0ZXJhdG9yL2lucHV0X29yX291dHB1dF9pdGVyYXRvcgorLSAgICAvLyBh bmQgaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2l0ZXJhdG9yL3NlbnRpbmVsX2Zv cgorLSAgICAvLyBidXQgcmVpbXBsZW1lbnRpbmcgdGhlc2Ugd291bGQgYmUgdG9vIG11Y2ggd29y aywgYXMgYSBsb3Qgb2Ygb3RoZXIgY29uY2VwdHMgYXJlIHVzZWQgdW5kZXJuZWF0aAorLSAgICBz dGF0aWMgY29uc3RleHByIGF1dG8gaXNfaXRlcmF0b3JfYmVnaW4gPQorLSAgICAgICAgaXNfaXRl cmF0b3JfdHJhaXRzPGl0ZXJhdG9yX3RyYWl0czxpdGVyYXRvcj4+Ojp2YWx1ZTsKKy0KKy0gIHB1 YmxpYzoKKy0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0gIXN0ZDo6aXNfc2FtZTxp dGVyYXRvciwgbm9uZXN1Y2g+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPHNlbnRpbmVsLCBub25l c3VjaD46OnZhbHVlICYmIGlzX2l0ZXJhdG9yX2JlZ2luOworLX07CistCistdGVtcGxhdGU8dHlw ZW5hbWUgUj4KKy11c2luZyBpdGVyYXRvcl90ID0gZW5hYmxlX2lmX3Q8aXNfcmFuZ2U8Uj46OnZh bHVlLCByZXN1bHRfb2ZfYmVnaW48ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFImPigpKT4+OworLQor LXRlbXBsYXRlPHR5cGVuYW1lIFQ+CistdXNpbmcgcmFuZ2VfdmFsdWVfdCA9IHZhbHVlX3R5cGVf dDxpdGVyYXRvcl90cmFpdHM8aXRlcmF0b3JfdDxUPj4+OworLQorLS8vIFRoZSBmb2xsb3dpbmcg aW1wbGVtZW50YXRpb24gb2YgaXNfY29tcGxldGVfdHlwZSBpcyB0YWtlbiBmcm9tCistLy8gaHR0 cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vdmNibG9nLzIwMTUvMTIvMDIvcGFydGlhbC1z dXBwb3J0LWZvci1leHByZXNzaW9uLXNmaW5hZS1pbi12cy0yMDE1LXVwZGF0ZS0xLworLS8vIGFu ZCBpcyB3cml0dGVuIGJ5IFhpYW5nIEZhbiB3aG8gYWdyZWVkIHRvIHVzaW5nIGl0IGluIHRoaXMg bGlicmFyeS4KKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+Cistc3Ry dWN0IGlzX2NvbXBsZXRlX3R5cGUgOiBzdGQ6OmZhbHNlX3R5cGUge307CistCistdGVtcGxhdGU8 dHlwZW5hbWUgVD4KKy1zdHJ1Y3QgaXNfY29tcGxldGVfdHlwZTxULCBkZWNsdHlwZSh2b2lkKHNp emVvZihUKSkpPiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJh c2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbXBhdGlibGVPYmplY3RUeXBlLAorLSAgICAgICAgIHR5 cGVuYW1lID0gdm9pZD4KKy1zdHJ1Y3QgaXNfY29tcGF0aWJsZV9vYmplY3RfdHlwZV9pbXBsIDog c3RkOjpmYWxzZV90eXBlIHt9OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUs IHR5cGVuYW1lIENvbXBhdGlibGVPYmplY3RUeXBlPgorLXN0cnVjdCBpc19jb21wYXRpYmxlX29i amVjdF90eXBlX2ltcGwgPAorLSAgICBCYXNpY0pzb25UeXBlLCBDb21wYXRpYmxlT2JqZWN0VHlw ZSwKKy0gICAgZW5hYmxlX2lmX3QgPCBpc19kZXRlY3RlZDxtYXBwZWRfdHlwZV90LCBDb21wYXRp YmxlT2JqZWN0VHlwZT46OnZhbHVlJiYKKy0gICAgaXNfZGV0ZWN0ZWQ8a2V5X3R5cGVfdCwgQ29t cGF0aWJsZU9iamVjdFR5cGU+Ojp2YWx1ZSA+PgorLXsKKy0gICAgdXNpbmcgb2JqZWN0X3QgPSB0 eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpvYmplY3RfdDsKKy0KKy0gICAgLy8gbWFjT1MncyBpc19j b25zdHJ1Y3RpYmxlIGRvZXMgbm90IHBsYXkgd2VsbCB3aXRoIG5vbmVzdWNoLi4uCistICAgIHN0 YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9CistICAgICAgICBpc19jb25zdHJ1Y3RpYmxlPHR5 cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSwKKy0gICAgICAgIHR5cGVuYW1lIENvbXBhdGlibGVP YmplY3RUeXBlOjprZXlfdHlwZT46OnZhbHVlICYmCistICAgICAgICBpc19jb25zdHJ1Y3RpYmxl PHR5cGVuYW1lIG9iamVjdF90OjptYXBwZWRfdHlwZSwKKy0gICAgICAgIHR5cGVuYW1lIENvbXBh dGlibGVPYmplY3RUeXBlOjptYXBwZWRfdHlwZT46OnZhbHVlOworLX07CistCistdGVtcGxhdGU8 dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU9iamVjdFR5cGU+Cist c3RydWN0IGlzX2NvbXBhdGlibGVfb2JqZWN0X3R5cGUKKy0gICAgOiBpc19jb21wYXRpYmxlX29i amVjdF90eXBlX2ltcGw8QmFzaWNKc29uVHlwZSwgQ29tcGF0aWJsZU9iamVjdFR5cGU+IHt9Owor LQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbnN0cnVjdGli bGVPYmplY3RUeXBlLAorLSAgICAgICAgIHR5cGVuYW1lID0gdm9pZD4KKy1zdHJ1Y3QgaXNfY29u c3RydWN0aWJsZV9vYmplY3RfdHlwZV9pbXBsIDogc3RkOjpmYWxzZV90eXBlIHt9OworLQorLXRl bXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbnN0cnVjdGlibGVPYmpl Y3RUeXBlPgorLXN0cnVjdCBpc19jb25zdHJ1Y3RpYmxlX29iamVjdF90eXBlX2ltcGwgPAorLSAg ICBCYXNpY0pzb25UeXBlLCBDb25zdHJ1Y3RpYmxlT2JqZWN0VHlwZSwKKy0gICAgZW5hYmxlX2lm X3QgPCBpc19kZXRlY3RlZDxtYXBwZWRfdHlwZV90LCBDb25zdHJ1Y3RpYmxlT2JqZWN0VHlwZT46 OnZhbHVlJiYKKy0gICAgaXNfZGV0ZWN0ZWQ8a2V5X3R5cGVfdCwgQ29uc3RydWN0aWJsZU9iamVj dFR5cGU+Ojp2YWx1ZSA+PgorLXsKKy0gICAgdXNpbmcgb2JqZWN0X3QgPSB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpvYmplY3RfdDsKKy0KKy0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl ID0KKy0gICAgICAgIChpc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8Q29uc3RydWN0aWJsZU9iamVj dFR5cGU+Ojp2YWx1ZSAmJgorLSAgICAgICAgIChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxDb25z dHJ1Y3RpYmxlT2JqZWN0VHlwZT46OnZhbHVlIHx8CistICAgICAgICAgIHN0ZDo6aXNfY29weV9h c3NpZ25hYmxlPENvbnN0cnVjdGlibGVPYmplY3RUeXBlPjo6dmFsdWUpICYmCistICAgICAgICAg KGlzX2NvbnN0cnVjdGlibGU8dHlwZW5hbWUgQ29uc3RydWN0aWJsZU9iamVjdFR5cGU6OmtleV90 eXBlLAorLSAgICAgICAgICB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGU+Ojp2YWx1ZSAmJgor LSAgICAgICAgICBzdGQ6OmlzX3NhbWUgPAorLSAgICAgICAgICB0eXBlbmFtZSBvYmplY3RfdDo6 bWFwcGVkX3R5cGUsCistICAgICAgICAgIHR5cGVuYW1lIENvbnN0cnVjdGlibGVPYmplY3RUeXBl OjptYXBwZWRfdHlwZSA+Ojp2YWx1ZSkpIHx8CistICAgICAgICAoaGFzX2Zyb21fanNvbjxCYXNp Y0pzb25UeXBlLAorLSAgICAgICAgIHR5cGVuYW1lIENvbnN0cnVjdGlibGVPYmplY3RUeXBlOjpt YXBwZWRfdHlwZT46OnZhbHVlIHx8CistICAgICAgICAgaGFzX25vbl9kZWZhdWx0X2Zyb21fanNv biA8CistICAgICAgICAgQmFzaWNKc29uVHlwZSwKKy0gICAgICAgICB0eXBlbmFtZSBDb25zdHJ1 Y3RpYmxlT2JqZWN0VHlwZTo6bWFwcGVkX3R5cGUgPjo6dmFsdWUpOworLX07CistCistdGVtcGxh dGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29uc3RydWN0aWJsZU9iamVjdFR5 cGU+Cistc3RydWN0IGlzX2NvbnN0cnVjdGlibGVfb2JqZWN0X3R5cGUKKy0gICAgOiBpc19jb25z dHJ1Y3RpYmxlX29iamVjdF90eXBlX2ltcGw8QmFzaWNKc29uVHlwZSwKKy0gICAgICBDb25zdHJ1 Y3RpYmxlT2JqZWN0VHlwZT4ge307CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlw ZSwgdHlwZW5hbWUgQ29tcGF0aWJsZVN0cmluZ1R5cGU+Cistc3RydWN0IGlzX2NvbXBhdGlibGVf c3RyaW5nX3R5cGUKKy17CistICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9CistICAg ICAgICBpc19jb25zdHJ1Y3RpYmxlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190LCBD b21wYXRpYmxlU3RyaW5nVHlwZT46OnZhbHVlOworLX07CistCistdGVtcGxhdGU8dHlwZW5hbWUg QmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29uc3RydWN0aWJsZVN0cmluZ1R5cGU+Cistc3RydWN0 IGlzX2NvbnN0cnVjdGlibGVfc3RyaW5nX3R5cGUKKy17CistICAgIHN0YXRpYyBjb25zdGV4cHIg YXV0byB2YWx1ZSA9CistICAgICAgICBpc19jb25zdHJ1Y3RpYmxlPENvbnN0cnVjdGlibGVTdHJp bmdUeXBlLAorLSAgICAgICAgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3Q+Ojp2YWx1 ZTsKKy19OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENv bXBhdGlibGVBcnJheVR5cGUsIHR5cGVuYW1lID0gdm9pZD4KKy1zdHJ1Y3QgaXNfY29tcGF0aWJs ZV9hcnJheV90eXBlX2ltcGwgOiBzdGQ6OmZhbHNlX3R5cGUge307CistCistdGVtcGxhdGU8dHlw ZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZUFycmF5VHlwZT4KKy1zdHJ1 Y3QgaXNfY29tcGF0aWJsZV9hcnJheV90eXBlX2ltcGwgPAorLSAgICBCYXNpY0pzb25UeXBlLCBD b21wYXRpYmxlQXJyYXlUeXBlLAorLSAgICBlbmFibGVfaWZfdCA8CistICAgIGlzX2RldGVjdGVk PGl0ZXJhdG9yX3QsIENvbXBhdGlibGVBcnJheVR5cGU+Ojp2YWx1ZSYmCistICAgIGlzX2l0ZXJh dG9yX3RyYWl0czxpdGVyYXRvcl90cmFpdHM8ZGV0ZWN0ZWRfdDxpdGVyYXRvcl90LCBDb21wYXRp YmxlQXJyYXlUeXBlPj4+Ojp2YWx1ZSYmCistLy8gc3BlY2lhbCBjYXNlIGZvciB0eXBlcyBsaWtl IHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCB3aG9zZSBpdGVyYXRvcidzIHZhbHVlX3R5cGUgYXJlIHRo ZW1zZWx2ZXMKKy0vLyBjLmYuIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL3B1bGwv MzA3MworLSAgICAhc3RkOjppc19zYW1lPENvbXBhdGlibGVBcnJheVR5cGUsIGRldGVjdGVkX3Q8 cmFuZ2VfdmFsdWVfdCwgQ29tcGF0aWJsZUFycmF5VHlwZT4+Ojp2YWx1ZSA+PgorLXsKKy0gICAg c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KKy0gICAgICAgIGlzX2NvbnN0cnVjdGlibGU8 QmFzaWNKc29uVHlwZSwKKy0gICAgICAgIHJhbmdlX3ZhbHVlX3Q8Q29tcGF0aWJsZUFycmF5VHlw ZT4+Ojp2YWx1ZTsKKy19OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5 cGVuYW1lIENvbXBhdGlibGVBcnJheVR5cGU+Cistc3RydWN0IGlzX2NvbXBhdGlibGVfYXJyYXlf dHlwZQorLSAgICA6IGlzX2NvbXBhdGlibGVfYXJyYXlfdHlwZV9pbXBsPEJhc2ljSnNvblR5cGUs IENvbXBhdGlibGVBcnJheVR5cGU+IHt9OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNv blR5cGUsIHR5cGVuYW1lIENvbnN0cnVjdGlibGVBcnJheVR5cGUsIHR5cGVuYW1lID0gdm9pZD4K Ky1zdHJ1Y3QgaXNfY29uc3RydWN0aWJsZV9hcnJheV90eXBlX2ltcGwgOiBzdGQ6OmZhbHNlX3R5 cGUge307CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29u c3RydWN0aWJsZUFycmF5VHlwZT4KKy1zdHJ1Y3QgaXNfY29uc3RydWN0aWJsZV9hcnJheV90eXBl X2ltcGwgPAorLSAgICBCYXNpY0pzb25UeXBlLCBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlLAorLSAg ICBlbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8Q29uc3RydWN0aWJsZUFycmF5VHlwZSwKKy0gICAg dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6dmFsdWVfdHlwZT46OnZhbHVlID4+CistICAgICAgICAg ICAgOiBzdGQ6OnRydWVfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25U eXBlLCB0eXBlbmFtZSBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlPgorLXN0cnVjdCBpc19jb25zdHJ1 Y3RpYmxlX2FycmF5X3R5cGVfaW1wbCA8CistICAgIEJhc2ljSnNvblR5cGUsIENvbnN0cnVjdGli bGVBcnJheVR5cGUsCistICAgIGVuYWJsZV9pZl90IDwgIXN0ZDo6aXNfc2FtZTxDb25zdHJ1Y3Rp YmxlQXJyYXlUeXBlLAorLSAgICB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjp2YWx1ZV90eXBlPjo6 dmFsdWUmJgorLSAgICAhaXNfY29tcGF0aWJsZV9zdHJpbmdfdHlwZTxCYXNpY0pzb25UeXBlLCBD b25zdHJ1Y3RpYmxlQXJyYXlUeXBlPjo6dmFsdWUmJgorLSAgICBpc19kZWZhdWx0X2NvbnN0cnVj dGlibGU8Q29uc3RydWN0aWJsZUFycmF5VHlwZT46OnZhbHVlJiYKKy0oc3RkOjppc19tb3ZlX2Fz c2lnbmFibGU8Q29uc3RydWN0aWJsZUFycmF5VHlwZT46OnZhbHVlIHx8CistIHN0ZDo6aXNfY29w eV9hc3NpZ25hYmxlPENvbnN0cnVjdGlibGVBcnJheVR5cGU+Ojp2YWx1ZSkmJgorLWlzX2RldGVj dGVkPGl0ZXJhdG9yX3QsIENvbnN0cnVjdGlibGVBcnJheVR5cGU+Ojp2YWx1ZSYmCistaXNfaXRl cmF0b3JfdHJhaXRzPGl0ZXJhdG9yX3RyYWl0czxkZXRlY3RlZF90PGl0ZXJhdG9yX3QsIENvbnN0 cnVjdGlibGVBcnJheVR5cGU+Pj46OnZhbHVlJiYKKy1pc19kZXRlY3RlZDxyYW5nZV92YWx1ZV90 LCBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlPjo6dmFsdWUmJgorLS8vIHNwZWNpYWwgY2FzZSBmb3Ig dHlwZXMgbGlrZSBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggd2hvc2UgaXRlcmF0b3IncyB2YWx1ZV90 eXBlIGFyZSB0aGVtc2VsdmVzCistLy8gYy5mLiBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4v anNvbi9wdWxsLzMwNzMKKy0hc3RkOjppc19zYW1lPENvbnN0cnVjdGlibGVBcnJheVR5cGUsIGRl dGVjdGVkX3Q8cmFuZ2VfdmFsdWVfdCwgQ29uc3RydWN0aWJsZUFycmF5VHlwZT4+Ojp2YWx1ZSYm CistICAgICAgICBpc19jb21wbGV0ZV90eXBlIDwKKy0gICAgICAgIGRldGVjdGVkX3Q8cmFuZ2Vf dmFsdWVfdCwgQ29uc3RydWN0aWJsZUFycmF5VHlwZSA+Pjo6dmFsdWUgPj4KKy17CistICAgIHVz aW5nIHZhbHVlX3R5cGUgPSByYW5nZV92YWx1ZV90PENvbnN0cnVjdGlibGVBcnJheVR5cGU+Owor LQorLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQorLSAgICAgICAgc3RkOjppc19z YW1lPHZhbHVlX3R5cGUsCistICAgICAgICB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjphcnJheV90 Ojp2YWx1ZV90eXBlPjo6dmFsdWUgfHwKKy0gICAgICAgIGhhc19mcm9tX2pzb248QmFzaWNKc29u VHlwZSwKKy0gICAgICAgIHZhbHVlX3R5cGU+Ojp2YWx1ZSB8fAorLSAgICAgICAgaGFzX25vbl9k ZWZhdWx0X2Zyb21fanNvbiA8CistICAgICAgICBCYXNpY0pzb25UeXBlLAorLSAgICAgICAgdmFs dWVfdHlwZSA+Ojp2YWx1ZTsKKy19OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5 cGUsIHR5cGVuYW1lIENvbnN0cnVjdGlibGVBcnJheVR5cGU+Cistc3RydWN0IGlzX2NvbnN0cnVj dGlibGVfYXJyYXlfdHlwZQorLSAgICA6IGlzX2NvbnN0cnVjdGlibGVfYXJyYXlfdHlwZV9pbXBs PEJhc2ljSnNvblR5cGUsIENvbnN0cnVjdGlibGVBcnJheVR5cGU+IHt9OworLQorLXRlbXBsYXRl PHR5cGVuYW1lIFJlYWxJbnRlZ2VyVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU51bWJlckludGVn ZXJUeXBlLAorLSAgICAgICAgIHR5cGVuYW1lID0gdm9pZD4KKy1zdHJ1Y3QgaXNfY29tcGF0aWJs ZV9pbnRlZ2VyX3R5cGVfaW1wbCA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKKy0KKy10ZW1wbGF0ZTx0 eXBlbmFtZSBSZWFsSW50ZWdlclR5cGUsIHR5cGVuYW1lIENvbXBhdGlibGVOdW1iZXJJbnRlZ2Vy VHlwZT4KKy1zdHJ1Y3QgaXNfY29tcGF0aWJsZV9pbnRlZ2VyX3R5cGVfaW1wbCA8CistICAgIFJl YWxJbnRlZ2VyVHlwZSwgQ29tcGF0aWJsZU51bWJlckludGVnZXJUeXBlLAorLSAgICBlbmFibGVf aWZfdCA8IHN0ZDo6aXNfaW50ZWdyYWw8UmVhbEludGVnZXJUeXBlPjo6dmFsdWUmJgorLSAgICBz dGQ6OmlzX2ludGVncmFsPENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OnZhbHVlJiYKKy0g ICAgIXN0ZDo6aXNfc2FtZTxib29sLCBDb21wYXRpYmxlTnVtYmVySW50ZWdlclR5cGU+Ojp2YWx1 ZSA+PgorLXsKKy0gICAgLy8gaXMgdGhlcmUgYW4gYXNzZXJ0IHNvbWV3aGVyZSBvbiBvdmVyZmxv d3M/CistICAgIHVzaW5nIFJlYWxMaW1pdHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFJlYWxJbnRl Z2VyVHlwZT47CistICAgIHVzaW5nIENvbXBhdGlibGVMaW1pdHMgPSBzdGQ6Om51bWVyaWNfbGlt aXRzPENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT47CistCistICAgIHN0YXRpYyBjb25zdGV4 cHIgYXV0byB2YWx1ZSA9CistICAgICAgICBpc19jb25zdHJ1Y3RpYmxlPFJlYWxJbnRlZ2VyVHlw ZSwKKy0gICAgICAgIENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OnZhbHVlICYmCistICAg ICAgICBDb21wYXRpYmxlTGltaXRzOjppc19pbnRlZ2VyICYmCistICAgICAgICBSZWFsTGltaXRz Ojppc19zaWduZWQgPT0gQ29tcGF0aWJsZUxpbWl0czo6aXNfc2lnbmVkOworLX07CistCistdGVt cGxhdGU8dHlwZW5hbWUgUmVhbEludGVnZXJUeXBlLCB0eXBlbmFtZSBDb21wYXRpYmxlTnVtYmVy SW50ZWdlclR5cGU+Cistc3RydWN0IGlzX2NvbXBhdGlibGVfaW50ZWdlcl90eXBlCistICAgIDog aXNfY29tcGF0aWJsZV9pbnRlZ2VyX3R5cGVfaW1wbDxSZWFsSW50ZWdlclR5cGUsCistICAgICAg Q29tcGF0aWJsZU51bWJlckludGVnZXJUeXBlPiB7fTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBC YXNpY0pzb25UeXBlLCB0eXBlbmFtZSBDb21wYXRpYmxlVHlwZSwgdHlwZW5hbWUgPSB2b2lkPgor LXN0cnVjdCBpc19jb21wYXRpYmxlX3R5cGVfaW1wbDogc3RkOjpmYWxzZV90eXBlIHt9OworLQor LXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbXBhdGlibGVUeXBl PgorLXN0cnVjdCBpc19jb21wYXRpYmxlX3R5cGVfaW1wbCA8CistICAgIEJhc2ljSnNvblR5cGUs IENvbXBhdGlibGVUeXBlLAorLSAgICBlbmFibGVfaWZfdDxpc19jb21wbGV0ZV90eXBlPENvbXBh dGlibGVUeXBlPjo6dmFsdWUgPj4KKy17CistICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1 ZSA9CistICAgICAgICBoYXNfdG9fanNvbjxCYXNpY0pzb25UeXBlLCBDb21wYXRpYmxlVHlwZT46 OnZhbHVlOworLX07CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5h bWUgQ29tcGF0aWJsZVR5cGU+Cistc3RydWN0IGlzX2NvbXBhdGlibGVfdHlwZQorLSAgICA6IGlz X2NvbXBhdGlibGVfdHlwZV9pbXBsPEJhc2ljSnNvblR5cGUsIENvbXBhdGlibGVUeXBlPiB7fTsK Ky0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Cistc3RydWN0IGlzX2NvbnN0 cnVjdGlibGVfdHVwbGUgOiBzdGQ6OmZhbHNlX3R5cGUge307CistCistdGVtcGxhdGU8dHlwZW5h bWUgVDEsIHR5cGVuYW1lLi4uIEFyZ3M+Cistc3RydWN0IGlzX2NvbnN0cnVjdGlibGVfdHVwbGU8 VDEsIHN0ZDo6dHVwbGU8QXJncy4uLj4+IDogY29uanVuY3Rpb248aXNfY29uc3RydWN0aWJsZTxU MSwgQXJncz4uLi4+IHt9OworLQorLS8vIGEgbmFpdmUgaGVscGVyIHRvIGNoZWNrIGlmIGEgdHlw ZSBpcyBhbiBvcmRlcmVkX21hcCAoZXhwbG9pdHMgdGhlIGZhY3QgdGhhdAorLS8vIG9yZGVyZWRf bWFwIGluaGVyaXRzIGNhcGFjaXR5KCkgZnJvbSBzdGQ6OnZlY3RvcikKKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy1zdHJ1Y3QgaXNfb3JkZXJlZF9tYXAKKy17CistICAgIHVzaW5nIG9uZSA9IGNo YXI7CistCistICAgIHN0cnVjdCB0d28KKy0gICAgeworLSAgICAgICAgY2hhciB4WzJdOyAvLyBO T0xJTlQoY3BwY29yZWd1aWRlbGluZXMtYXZvaWQtYy1hcnJheXMsaGljcHAtYXZvaWQtYy1hcnJh eXMsbW9kZXJuaXplLWF2b2lkLWMtYXJyYXlzKQorLSAgICB9OworLQorLSAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgQz4gc3RhdGljIG9uZSB0ZXN0KCBkZWNsdHlwZSgmQzo6Y2FwYWNpdHkpICkgOwor LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4gc3RhdGljIHR3byB0ZXN0KC4uLik7CistCistICAg IGVudW0geyB2YWx1ZSA9IHNpemVvZih0ZXN0PFQ+KG51bGxwdHIpKSA9PSBzaXplb2YoY2hhcikg fTsgLy8gTk9MSU5UKGNwcGNvcmVndWlkZWxpbmVzLXByby10eXBlLXZhcmFyZyxoaWNwcC12YXJh cmcpCistfTsKKy0KKy0vLyB0byBhdm9pZCB1c2VsZXNzIGNhc3RzIChzZWUgaHR0cHM6Ly9naXRo dWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzI4OTMjaXNzdWVjb21tZW50LTg4OTE1MjMyNCkK Ky10ZW1wbGF0ZSA8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIGVuYWJsZV9pZl90IDwgIXN0ZDo6 aXNfc2FtZTxULCBVPjo6dmFsdWUsIGludCA+ID0gMCA+CistVCBjb25kaXRpb25hbF9zdGF0aWNf Y2FzdChVIHZhbHVlKQorLXsKKy0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsKKy19 CistCistdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgZW5hYmxlX2lmX3Q8c3RkOjpp c19zYW1lPFQsIFU+Ojp2YWx1ZSwgaW50PiA9IDA+CistVCBjb25kaXRpb25hbF9zdGF0aWNfY2Fz dChVIHZhbHVlKQorLXsKKy0gICAgcmV0dXJuIHZhbHVlOworLX0KKy0KKy19ICAvLyBuYW1lc3Bh Y2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCistCistLy8gI2luY2x1ZGUgPG5s b2htYW5uL2RldGFpbC92YWx1ZV90LmhwcD4KKy0KKy0KKy0jaWYgSlNPTl9IQVNfRVhQRVJJTUVO VEFMX0ZJTEVTWVNURU0KKy0jaW5jbHVkZSA8ZXhwZXJpbWVudGFsL2ZpbGVzeXN0ZW0+CistbmFt ZXNwYWNlIG5sb2htYW5uOjpkZXRhaWwKKy17CistbmFtZXNwYWNlIHN0ZF9mcyA9IHN0ZDo6ZXhw ZXJpbWVudGFsOjpmaWxlc3lzdGVtOworLX0gLy8gbmFtZXNwYWNlIG5sb2htYW5uOjpkZXRhaWwK Ky0jZWxpZiBKU09OX0hBU19GSUxFU1lTVEVNCistI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CistbmFt ZXNwYWNlIG5sb2htYW5uOjpkZXRhaWwKKy17CistbmFtZXNwYWNlIHN0ZF9mcyA9IHN0ZDo6Zmls ZXN5c3RlbTsKKy19IC8vIG5hbWVzcGFjZSBubG9obWFubjo6ZGV0YWlsCistI2VuZGlmCistCist bmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRhaWwKKy17CistdGVtcGxhdGU8 dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy12b2lkIGZyb21fanNvbihjb25zdCBCYXNpY0pzb25U eXBlJiBqLCB0eXBlbmFtZSBzdGQ6Om51bGxwdHJfdCYgbikKKy17CistICAgIGlmIChKU09OX0hF RExFWV9VTkxJS0VMWSghai5pc19udWxsKCkpKQorLSAgICB7CistICAgICAgICBKU09OX1RIUk9X KHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDIsICJ0eXBlIG11c3QgYmUgbnVsbCwgYnV0IGlzICIgKyBz dGQ6OnN0cmluZyhqLnR5cGVfbmFtZSgpKSwgaikpOworLSAgICB9CistICAgIG4gPSBudWxscHRy OworLX0KKy0KKy0vLyBvdmVybG9hZHMgZm9yIGJhc2ljX2pzb24gdGVtcGxhdGUgcGFyYW1ldGVy cworLXRlbXBsYXRlIDwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQXJpdGhtZXRp Y1R5cGUsCistICAgICAgICAgICBlbmFibGVfaWZfdCA8IHN0ZDo6aXNfYXJpdGhtZXRpYzxBcml0 aG1ldGljVHlwZT46OnZhbHVlJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNf c2FtZTxBcml0aG1ldGljVHlwZSwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6Ym9vbGVhbl90Pjo6 dmFsdWUsCistICAgICAgICAgICAgICAgICAgICAgICAgIGludCA+ID0gMCA+Cistdm9pZCBnZXRf YXJpdGhtZXRpY192YWx1ZShjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBBcml0aG1ldGljVHlwZSYg dmFsKQorLXsKKy0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDx2YWx1ZV90PihqKSkKKy0gICAgewor LSAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICB7CistICAg ICAgICAgICAgdmFsID0gc3RhdGljX2Nhc3Q8QXJpdGhtZXRpY1R5cGU+KCpqLnRlbXBsYXRlIGdl dF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVkX3QqPigp KTsKKy0gICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0KKy0gICAgICAgIGNhc2UgdmFsdWVf dDo6bnVtYmVyX2ludGVnZXI6CistICAgICAgICB7CistICAgICAgICAgICAgdmFsID0gc3RhdGlj X2Nhc3Q8QXJpdGhtZXRpY1R5cGU+KCpqLnRlbXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUg QmFzaWNKc29uVHlwZTo6bnVtYmVyX2ludGVnZXJfdCo+KCkpOworLSAgICAgICAgICAgIGJyZWFr OworLSAgICAgICAgfQorLSAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAg ICAgICB7CistICAgICAgICAgICAgdmFsID0gc3RhdGljX2Nhc3Q8QXJpdGhtZXRpY1R5cGU+KCpq LnRlbXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2Zs b2F0X3QqPigpKTsKKy0gICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0KKy0KKy0gICAgICAg IGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAg ICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5n OgorLSAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgY2FzZSB2YWx1ZV90 OjpiaW5hcnk6CistICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgIGRl ZmF1bHQ6CistICAgICAgICAgICAgSlNPTl9USFJPVyh0eXBlX2Vycm9yOjpjcmVhdGUoMzAyLCAi dHlwZSBtdXN0IGJlIG51bWJlciwgYnV0IGlzICIgKyBzdGQ6OnN0cmluZyhqLnR5cGVfbmFtZSgp KSwgaikpOworLSAgICB9CistfQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+ Cistdm9pZCBmcm9tX2pzb24oY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNK c29uVHlwZTo6Ym9vbGVhbl90JiBiKQorLXsKKy0gICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZ KCFqLmlzX2Jvb2xlYW4oKSkpCistICAgIHsKKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJv cjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVzdCBiZSBib29sZWFuLCBidXQgaXMgIiArIHN0ZDo6c3Ry aW5nKGoudHlwZV9uYW1lKCkpLCBqKSk7CistICAgIH0KKy0gICAgYiA9ICpqLnRlbXBsYXRlIGdl dF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6Ym9vbGVhbl90Kj4oKTsKKy19Cist CistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy12b2lkIGZyb21fanNvbihjb25z dCBCYXNpY0pzb25UeXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdfdCYgcykK Ky17CistICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghai5pc19zdHJpbmcoKSkpCistICAg IHsKKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVz dCBiZSBzdHJpbmcsIGJ1dCBpcyAiICsgc3RkOjpzdHJpbmcoai50eXBlX25hbWUoKSksIGopKTsK Ky0gICAgfQorLSAgICBzID0gKmoudGVtcGxhdGUgZ2V0X3B0cjxjb25zdCB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpzdHJpbmdfdCo+KCk7CistfQorLQorLXRlbXBsYXRlIDwKKy0gICAgdHlwZW5h bWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29uc3RydWN0aWJsZVN0cmluZ1R5cGUsCistICAg IGVuYWJsZV9pZl90IDwKKy0gICAgICAgIGlzX2NvbnN0cnVjdGlibGVfc3RyaW5nX3R5cGU8QmFz aWNKc29uVHlwZSwgQ29uc3RydWN0aWJsZVN0cmluZ1R5cGU+Ojp2YWx1ZSYmCistICAgICAgICAh c3RkOjppc19zYW1lPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190LAorLSAgICAgICAg ICAgICAgICAgICAgICBDb25zdHJ1Y3RpYmxlU3RyaW5nVHlwZT46OnZhbHVlLAorLSAgICAgICAg aW50ID4gPSAwID4KKy12b2lkIGZyb21fanNvbihjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBDb25z dHJ1Y3RpYmxlU3RyaW5nVHlwZSYgcykKKy17CistICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VM WSghai5pc19zdHJpbmcoKSkpCistICAgIHsKKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJv cjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVzdCBiZSBzdHJpbmcsIGJ1dCBpcyAiICsgc3RkOjpzdHJp bmcoai50eXBlX25hbWUoKSksIGopKTsKKy0gICAgfQorLQorLSAgICBzID0gKmoudGVtcGxhdGUg Z2V0X3B0cjxjb25zdCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdfdCo+KCk7CistfQor LQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+Cistdm9pZCBmcm9tX2pzb24oY29u c3QgQmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2Zsb2F0 X3QmIHZhbCkKKy17CistICAgIGdldF9hcml0aG1ldGljX3ZhbHVlKGosIHZhbCk7CistfQorLQor LXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+Cistdm9pZCBmcm9tX2pzb24oY29uc3Qg QmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVk X3QmIHZhbCkKKy17CistICAgIGdldF9hcml0aG1ldGljX3ZhbHVlKGosIHZhbCk7CistfQorLQor LXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+Cistdm9pZCBmcm9tX2pzb24oY29uc3Qg QmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2ludGVnZXJf dCYgdmFsKQorLXsKKy0gICAgZ2V0X2FyaXRobWV0aWNfdmFsdWUoaiwgdmFsKTsKKy19CistCist dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgRW51bVR5cGUsCistICAg ICAgICAgZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEVudW1UeXBlPjo6dmFsdWUsIGludD4gPSAw PgorLXZvaWQgZnJvbV9qc29uKGNvbnN0IEJhc2ljSnNvblR5cGUmIGosIEVudW1UeXBlJiBlKQor LXsKKy0gICAgdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGU+Ojp0eXBlIHZh bDsKKy0gICAgZ2V0X2FyaXRobWV0aWNfdmFsdWUoaiwgdmFsKTsKKy0gICAgZSA9IHN0YXRpY19j YXN0PEVudW1UeXBlPih2YWwpOworLX0KKy0KKy0vLyBmb3J3YXJkX2xpc3QgZG9lc24ndCBoYXZl IGFuIGluc2VydCBtZXRob2QKKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBl bmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsCistICAgICAgICAgZW5hYmxlX2lmX3Q8aXNfZ2V0 YWJsZTxCYXNpY0pzb25UeXBlLCBUPjo6dmFsdWUsIGludD4gPSAwPgorLXZvaWQgZnJvbV9qc29u KGNvbnN0IEJhc2ljSnNvblR5cGUmIGosIHN0ZDo6Zm9yd2FyZF9saXN0PFQsIEFsbG9jYXRvcj4m IGwpCisteworLSAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIWouaXNfYXJyYXkoKSkpCist ICAgIHsKKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwMiwgInR5cGUg bXVzdCBiZSBhcnJheSwgYnV0IGlzICIgKyBzdGQ6OnN0cmluZyhqLnR5cGVfbmFtZSgpKSwgaikp OworLSAgICB9CistICAgIGwuY2xlYXIoKTsKKy0gICAgc3RkOjp0cmFuc2Zvcm0oai5yYmVnaW4o KSwgai5yZW5kKCksCistICAgICAgICAgICAgICAgICAgIHN0ZDo6ZnJvbnRfaW5zZXJ0ZXIobCks IFtdKGNvbnN0IEJhc2ljSnNvblR5cGUgJiBpKQorLSAgICB7CistICAgICAgICByZXR1cm4gaS50 ZW1wbGF0ZSBnZXQ8VD4oKTsKKy0gICAgfSk7CistfQorLQorLS8vIHZhbGFycmF5IGRvZXNuJ3Qg aGF2ZSBhbiBpbnNlcnQgbWV0aG9kCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwg dHlwZW5hbWUgVCwKKy0gICAgICAgICBlbmFibGVfaWZfdDxpc19nZXRhYmxlPEJhc2ljSnNvblR5 cGUsIFQ+Ojp2YWx1ZSwgaW50PiA9IDA+Cistdm9pZCBmcm9tX2pzb24oY29uc3QgQmFzaWNKc29u VHlwZSYgaiwgc3RkOjp2YWxhcnJheTxUPiYgbCkKKy17CistICAgIGlmIChKU09OX0hFRExFWV9V TkxJS0VMWSghai5pc19hcnJheSgpKSkKKy0gICAgeworLSAgICAgICAgSlNPTl9USFJPVyh0eXBl X2Vycm9yOjpjcmVhdGUoMzAyLCAidHlwZSBtdXN0IGJlIGFycmF5LCBidXQgaXMgIiArIHN0ZDo6 c3RyaW5nKGoudHlwZV9uYW1lKCkpLCBqKSk7CistICAgIH0KKy0gICAgbC5yZXNpemUoai5zaXpl KCkpOworLSAgICBzdGQ6OnRyYW5zZm9ybShqLmJlZ2luKCksIGouZW5kKCksIHN0ZDo6YmVnaW4o bCksCistICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0IEJhc2ljSnNvblR5cGUgJiBlbGVtKQor LSAgICB7CistICAgICAgICByZXR1cm4gZWxlbS50ZW1wbGF0ZSBnZXQ8VD4oKTsKKy0gICAgfSk7 CistfQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFQsIHN0 ZDo6c2l6ZV90IE4+CistYXV0byBmcm9tX2pzb24oY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgVCAo JmFycilbTl0pICAvLyBOT0xJTlQoY3BwY29yZWd1aWRlbGluZXMtYXZvaWQtYy1hcnJheXMsaGlj cHAtYXZvaWQtYy1hcnJheXMsbW9kZXJuaXplLWF2b2lkLWMtYXJyYXlzKQorLS0+IGRlY2x0eXBl KGoudGVtcGxhdGUgZ2V0PFQ+KCksIHZvaWQoKSkKKy17CistICAgIGZvciAoc3RkOjpzaXplX3Qg aSA9IDA7IGkgPCBOOyArK2kpCistICAgIHsKKy0gICAgICAgIGFycltpXSA9IGouYXQoaSkudGVt cGxhdGUgZ2V0PFQ+KCk7CistICAgIH0KKy19CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNK c29uVHlwZT4KKy12b2lkIGZyb21fanNvbl9hcnJheV9pbXBsKGNvbnN0IEJhc2ljSnNvblR5cGUm IGosIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmFycmF5X3QmIGFyciwgcHJpb3JpdHlfdGFnPDM+ IC8qdW51c2VkKi8pCisteworLSAgICBhcnIgPSAqai50ZW1wbGF0ZSBnZXRfcHRyPGNvbnN0IHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU6OmFycmF5X3QqPigpOworLX0KKy0KKy10ZW1wbGF0ZTx0eXBl bmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorLWF1dG8gZnJv bV9qc29uX2FycmF5X2ltcGwoY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgc3RkOjphcnJheTxULCBO PiYgYXJyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHlfdGFnPDI+IC8qdW51 c2VkKi8pCistLT4gZGVjbHR5cGUoai50ZW1wbGF0ZSBnZXQ8VD4oKSwgdm9pZCgpKQorLXsKKy0g ICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IE47ICsraSkKKy0gICAgeworLSAgICAgICAg YXJyW2ldID0gai5hdChpKS50ZW1wbGF0ZSBnZXQ8VD4oKTsKKy0gICAgfQorLX0KKy0KKy10ZW1w bGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBDb25zdHJ1Y3RpYmxlQXJyYXlU eXBlLAorLSAgICAgICAgIGVuYWJsZV9pZl90PAorLSAgICAgICAgICAgICBzdGQ6OmlzX2Fzc2ln bmFibGU8Q29uc3RydWN0aWJsZUFycmF5VHlwZSYsIENvbnN0cnVjdGlibGVBcnJheVR5cGU+Ojp2 YWx1ZSwKKy0gICAgICAgICAgICAgaW50PiA9IDA+CistYXV0byBmcm9tX2pzb25fYXJyYXlfaW1w bChjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlJiBhcnIsIHBy aW9yaXR5X3RhZzwxPiAvKnVudXNlZCovKQorLS0+IGRlY2x0eXBlKAorLSAgICBhcnIucmVzZXJ2 ZShzdGQ6OmRlY2x2YWw8dHlwZW5hbWUgQ29uc3RydWN0aWJsZUFycmF5VHlwZTo6c2l6ZV90eXBl PigpKSwKKy0gICAgai50ZW1wbGF0ZSBnZXQ8dHlwZW5hbWUgQ29uc3RydWN0aWJsZUFycmF5VHlw ZTo6dmFsdWVfdHlwZT4oKSwKKy0gICAgdm9pZCgpKQorLXsKKy0gICAgdXNpbmcgc3RkOjplbmQ7 CistCistICAgIENvbnN0cnVjdGlibGVBcnJheVR5cGUgcmV0OworLSAgICByZXQucmVzZXJ2ZShq LnNpemUoKSk7CistICAgIHN0ZDo6dHJhbnNmb3JtKGouYmVnaW4oKSwgai5lbmQoKSwKKy0gICAg ICAgICAgICAgICAgICAgc3RkOjppbnNlcnRlcihyZXQsIGVuZChyZXQpKSwgW10oY29uc3QgQmFz aWNKc29uVHlwZSAmIGkpCistICAgIHsKKy0gICAgICAgIC8vIGdldDxCYXNpY0pzb25UeXBlPigp IHJldHVybnMgKnRoaXMsIHRoaXMgd29uJ3QgY2FsbCBhIGZyb21fanNvbgorLSAgICAgICAgLy8g bWV0aG9kIHdoZW4gdmFsdWVfdHlwZSBpcyBCYXNpY0pzb25UeXBlCistICAgICAgICByZXR1cm4g aS50ZW1wbGF0ZSBnZXQ8dHlwZW5hbWUgQ29uc3RydWN0aWJsZUFycmF5VHlwZTo6dmFsdWVfdHlw ZT4oKTsKKy0gICAgfSk7CistICAgIGFyciA9IHN0ZDo6bW92ZShyZXQpOworLX0KKy0KKy10ZW1w bGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBDb25zdHJ1Y3RpYmxlQXJyYXlU eXBlLAorLSAgICAgICAgIGVuYWJsZV9pZl90PAorLSAgICAgICAgICAgICBzdGQ6OmlzX2Fzc2ln bmFibGU8Q29uc3RydWN0aWJsZUFycmF5VHlwZSYsIENvbnN0cnVjdGlibGVBcnJheVR5cGU+Ojp2 YWx1ZSwKKy0gICAgICAgICAgICAgaW50PiA9IDA+Cistdm9pZCBmcm9tX2pzb25fYXJyYXlfaW1w bChjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlJiBhcnIsCist ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eV90YWc8MD4gLyp1bnVzZWQqLykKKy17 CistICAgIHVzaW5nIHN0ZDo6ZW5kOworLQorLSAgICBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlIHJl dDsKKy0gICAgc3RkOjp0cmFuc2Zvcm0oCistICAgICAgICBqLmJlZ2luKCksIGouZW5kKCksIHN0 ZDo6aW5zZXJ0ZXIocmV0LCBlbmQocmV0KSksCistICAgICAgICBbXShjb25zdCBCYXNpY0pzb25U eXBlICYgaSkKKy0gICAgeworLSAgICAgICAgLy8gZ2V0PEJhc2ljSnNvblR5cGU+KCkgcmV0dXJu cyAqdGhpcywgdGhpcyB3b24ndCBjYWxsIGEgZnJvbV9qc29uCistICAgICAgICAvLyBtZXRob2Qg d2hlbiB2YWx1ZV90eXBlIGlzIEJhc2ljSnNvblR5cGUKKy0gICAgICAgIHJldHVybiBpLnRlbXBs YXRlIGdldDx0eXBlbmFtZSBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlOjp2YWx1ZV90eXBlPigpOwor LSAgICB9KTsKKy0gICAgYXJyID0gc3RkOjptb3ZlKHJldCk7CistfQorLQorLXRlbXBsYXRlIDwg dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29uc3RydWN0aWJsZUFycmF5VHlwZSwK Ky0gICAgICAgICAgIGVuYWJsZV9pZl90IDwKKy0gICAgICAgICAgICAgICBpc19jb25zdHJ1Y3Rp YmxlX2FycmF5X3R5cGU8QmFzaWNKc29uVHlwZSwgQ29uc3RydWN0aWJsZUFycmF5VHlwZT46OnZh bHVlJiYKKy0gICAgICAgICAgICAgICAhaXNfY29uc3RydWN0aWJsZV9vYmplY3RfdHlwZTxCYXNp Y0pzb25UeXBlLCBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlPjo6dmFsdWUmJgorLSAgICAgICAgICAg ICAgICFpc19jb25zdHJ1Y3RpYmxlX3N0cmluZ190eXBlPEJhc2ljSnNvblR5cGUsIENvbnN0cnVj dGlibGVBcnJheVR5cGU+Ojp2YWx1ZSYmCistICAgICAgICAgICAgICAgIXN0ZDo6aXNfc2FtZTxD b25zdHJ1Y3RpYmxlQXJyYXlUeXBlLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpiaW5hcnlfdD46 OnZhbHVlJiYKKy0gICAgICAgICAgICAgICAhaXNfYmFzaWNfanNvbjxDb25zdHJ1Y3RpYmxlQXJy YXlUeXBlPjo6dmFsdWUsCistICAgICAgICAgICAgICAgaW50ID4gPSAwID4KKy1hdXRvIGZyb21f anNvbihjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBDb25zdHJ1Y3RpYmxlQXJyYXlUeXBlJiBhcnIp CistLT4gZGVjbHR5cGUoZnJvbV9qc29uX2FycmF5X2ltcGwoaiwgYXJyLCBwcmlvcml0eV90YWc8 Mz4ge30pLAorLWoudGVtcGxhdGUgZ2V0PHR5cGVuYW1lIENvbnN0cnVjdGlibGVBcnJheVR5cGU6 OnZhbHVlX3R5cGU+KCksCistdm9pZCgpKQorLXsKKy0gICAgaWYgKEpTT05fSEVETEVZX1VOTElL RUxZKCFqLmlzX2FycmF5KCkpKQorLSAgICB7CistICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJy b3I6OmNyZWF0ZSgzMDIsICJ0eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgc3RkOjpzdHJp bmcoai50eXBlX25hbWUoKSksIGopKTsKKy0gICAgfQorLQorLSAgICBmcm9tX2pzb25fYXJyYXlf aW1wbChqLCBhcnIsIHByaW9yaXR5X3RhZzwzPiB7fSk7CistfQorLQorLXRlbXBsYXRlIDwgdHlw ZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QuLi4gSWR4ID4KKy1z dGQ6OmFycmF5PFQsIHNpemVvZi4uLihJZHgpPiBmcm9tX2pzb25faW5wbGFjZV9hcnJheV9pbXBs KEJhc2ljSnNvblR5cGUmJiBqLAorLSAgICAgICAgaWRlbnRpdHlfdGFnPHN0ZDo6YXJyYXk8VCwg c2l6ZW9mLi4uKElkeCk+PiAvKnVudXNlZCovLCBpbmRleF9zZXF1ZW5jZTxJZHguLi4+IC8qdW51 c2VkKi8pCisteworLSAgICByZXR1cm4geyB7IHN0ZDo6Zm9yd2FyZDxCYXNpY0pzb25UeXBlPihq KS5hdChJZHgpLnRlbXBsYXRlIGdldDxUPigpLi4uIH0gfTsKKy19CistCistdGVtcGxhdGUgPCB0 eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4KKy1hdXRv IGZyb21fanNvbihCYXNpY0pzb25UeXBlJiYgaiwgaWRlbnRpdHlfdGFnPHN0ZDo6YXJyYXk8VCwg Tj4+IHRhZykKKy0tPiBkZWNsdHlwZShmcm9tX2pzb25faW5wbGFjZV9hcnJheV9pbXBsKHN0ZDo6 Zm9yd2FyZDxCYXNpY0pzb25UeXBlPihqKSwgdGFnLCBtYWtlX2luZGV4X3NlcXVlbmNlPE4+IHt9 KSkKKy17CistICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghai5pc19hcnJheSgpKSkKKy0g ICAgeworLSAgICAgICAgSlNPTl9USFJPVyh0eXBlX2Vycm9yOjpjcmVhdGUoMzAyLCAidHlwZSBt dXN0IGJlIGFycmF5LCBidXQgaXMgIiArIHN0ZDo6c3RyaW5nKGoudHlwZV9uYW1lKCkpLCBqKSk7 CistICAgIH0KKy0KKy0gICAgcmV0dXJuIGZyb21fanNvbl9pbnBsYWNlX2FycmF5X2ltcGwoc3Rk Ojpmb3J3YXJkPEJhc2ljSnNvblR5cGU+KGopLCB0YWcsIG1ha2VfaW5kZXhfc2VxdWVuY2U8Tj4g e30pOworLX0KKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLXZvaWQgZnJv bV9qc29uKGNvbnN0IEJhc2ljSnNvblR5cGUmIGosIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmJp bmFyeV90JiBiaW4pCisteworLSAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIWouaXNfYmlu YXJ5KCkpKQorLSAgICB7CistICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgz MDIsICJ0eXBlIG11c3QgYmUgYmluYXJ5LCBidXQgaXMgIiArIHN0ZDo6c3RyaW5nKGoudHlwZV9u YW1lKCkpLCBqKSk7CistICAgIH0KKy0KKy0gICAgYmluID0gKmoudGVtcGxhdGUgZ2V0X3B0cjxj b25zdCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpiaW5hcnlfdCo+KCk7CistfQorLQorLXRlbXBs YXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbnN0cnVjdGlibGVPYmplY3RU eXBlLAorLSAgICAgICAgIGVuYWJsZV9pZl90PGlzX2NvbnN0cnVjdGlibGVfb2JqZWN0X3R5cGU8 QmFzaWNKc29uVHlwZSwgQ29uc3RydWN0aWJsZU9iamVjdFR5cGU+Ojp2YWx1ZSwgaW50PiA9IDA+ Cistdm9pZCBmcm9tX2pzb24oY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgQ29uc3RydWN0aWJsZU9i amVjdFR5cGUmIG9iaikKKy17CistICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghai5pc19v YmplY3QoKSkpCistICAgIHsKKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRl KDMwMiwgInR5cGUgbXVzdCBiZSBvYmplY3QsIGJ1dCBpcyAiICsgc3RkOjpzdHJpbmcoai50eXBl X25hbWUoKSksIGopKTsKKy0gICAgfQorLQorLSAgICBDb25zdHJ1Y3RpYmxlT2JqZWN0VHlwZSBy ZXQ7CistICAgIGNvbnN0IGF1dG8qIGlubmVyX29iamVjdCA9IGoudGVtcGxhdGUgZ2V0X3B0cjxj b25zdCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpvYmplY3RfdCo+KCk7CistICAgIHVzaW5nIHZh bHVlX3R5cGUgPSB0eXBlbmFtZSBDb25zdHJ1Y3RpYmxlT2JqZWN0VHlwZTo6dmFsdWVfdHlwZTsK Ky0gICAgc3RkOjp0cmFuc2Zvcm0oCistICAgICAgICBpbm5lcl9vYmplY3QtPmJlZ2luKCksIGlu bmVyX29iamVjdC0+ZW5kKCksCistICAgICAgICBzdGQ6Omluc2VydGVyKHJldCwgcmV0LmJlZ2lu KCkpLAorLSAgICAgICAgW10odHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0X3Q6OnZhbHVl X3R5cGUgY29uc3QgJiBwKQorLSAgICB7CistICAgICAgICByZXR1cm4gdmFsdWVfdHlwZShwLmZp cnN0LCBwLnNlY29uZC50ZW1wbGF0ZSBnZXQ8dHlwZW5hbWUgQ29uc3RydWN0aWJsZU9iamVjdFR5 cGU6Om1hcHBlZF90eXBlPigpKTsKKy0gICAgfSk7CistICAgIG9iaiA9IHN0ZDo6bW92ZShyZXQp OworLX0KKy0KKy0vLyBvdmVybG9hZCBmb3IgYXJpdGhtZXRpYyB0eXBlcywgbm90IGNob3NlbiBm b3IgYmFzaWNfanNvbiB0ZW1wbGF0ZSBhcmd1bWVudHMKKy0vLyAoQm9vbGVhblR5cGUsIGV0Yy4u KTsgbm90ZTogSXMgaXQgcmVhbGx5IG5lY2Vzc2FyeSB0byBwcm92aWRlIGV4cGxpY2l0CistLy8g b3ZlcmxvYWRzIGZvciBib29sZWFuX3QgZXRjLiBpbiBjYXNlIG9mIGEgY3VzdG9tIEJvb2xlYW5U eXBlIHdoaWNoIGlzIG5vdAorLS8vIGFuIGFyaXRobWV0aWMgdHlwZT8KKy10ZW1wbGF0ZSA8IHR5 cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIEFyaXRobWV0aWNUeXBlLAorLSAgICAgICAg ICAgZW5hYmxlX2lmX3QgPAorLSAgICAgICAgICAgICAgIHN0ZDo6aXNfYXJpdGhtZXRpYzxBcml0 aG1ldGljVHlwZT46OnZhbHVlJiYKKy0gICAgICAgICAgICAgICAhc3RkOjppc19zYW1lPEFyaXRo bWV0aWNUeXBlLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfdW5zaWduZWRfdD46OnZh bHVlJiYKKy0gICAgICAgICAgICAgICAhc3RkOjppc19zYW1lPEFyaXRobWV0aWNUeXBlLCB0eXBl bmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfaW50ZWdlcl90Pjo6dmFsdWUmJgorLSAgICAgICAg ICAgICAgICFzdGQ6OmlzX3NhbWU8QXJpdGhtZXRpY1R5cGUsIHR5cGVuYW1lIEJhc2ljSnNvblR5 cGU6Om51bWJlcl9mbG9hdF90Pjo6dmFsdWUmJgorLSAgICAgICAgICAgICAgICFzdGQ6OmlzX3Nh bWU8QXJpdGhtZXRpY1R5cGUsIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmJvb2xlYW5fdD46OnZh bHVlLAorLSAgICAgICAgICAgICAgIGludCA+ID0gMCA+Cistdm9pZCBmcm9tX2pzb24oY29uc3Qg QmFzaWNKc29uVHlwZSYgaiwgQXJpdGhtZXRpY1R5cGUmIHZhbCkKKy17CistICAgIHN3aXRjaCAo c3RhdGljX2Nhc3Q8dmFsdWVfdD4oaikpCistICAgIHsKKy0gICAgICAgIGNhc2UgdmFsdWVfdDo6 bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAgeworLSAgICAgICAgICAgIHZhbCA9IHN0YXRpY19j YXN0PEFyaXRobWV0aWNUeXBlPigqai50ZW1wbGF0ZSBnZXRfcHRyPGNvbnN0IHR5cGVuYW1lIEJh c2ljSnNvblR5cGU6Om51bWJlcl91bnNpZ25lZF90Kj4oKSk7CistICAgICAgICAgICAgYnJlYWs7 CistICAgICAgICB9CistICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAg ICAgICAgeworLSAgICAgICAgICAgIHZhbCA9IHN0YXRpY19jYXN0PEFyaXRobWV0aWNUeXBlPigq ai50ZW1wbGF0ZSBnZXRfcHRyPGNvbnN0IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9p bnRlZ2VyX3QqPigpKTsKKy0gICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0KKy0gICAgICAg IGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorLSAgICAgICAgeworLSAgICAgICAgICAgIHZh bCA9IHN0YXRpY19jYXN0PEFyaXRobWV0aWNUeXBlPigqai50ZW1wbGF0ZSBnZXRfcHRyPGNvbnN0 IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9mbG9hdF90Kj4oKSk7CistICAgICAgICAg ICAgYnJlYWs7CistICAgICAgICB9CistICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46Cist ICAgICAgICB7CistICAgICAgICAgICAgdmFsID0gc3RhdGljX2Nhc3Q8QXJpdGhtZXRpY1R5cGU+ KCpqLnRlbXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6Ym9vbGVh bl90Kj4oKSk7CistICAgICAgICAgICAgYnJlYWs7CistICAgICAgICB9CistCistICAgICAgICBj YXNlIHZhbHVlX3Q6Om51bGw6CistICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAg ICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoK Ky0gICAgICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgY2FzZSB2YWx1ZV90Ojpk aXNjYXJkZWQ6CistICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgIEpTT05fVEhST1codHlw ZV9lcnJvcjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVzdCBiZSBudW1iZXIsIGJ1dCBpcyAiICsgc3Rk OjpzdHJpbmcoai50eXBlX25hbWUoKSksIGopKTsKKy0gICAgfQorLX0KKy0KKy10ZW1wbGF0ZTx0 eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzLCBzdGQ6OnNpemVfdC4uLiBJ ZHg+Cistc3RkOjp0dXBsZTxBcmdzLi4uPiBmcm9tX2pzb25fdHVwbGVfaW1wbF9iYXNlKEJhc2lj SnNvblR5cGUmJiBqLCBpbmRleF9zZXF1ZW5jZTxJZHguLi4+IC8qdW51c2VkKi8pCisteworLSAg ICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKHN0ZDo6Zm9yd2FyZDxCYXNpY0pzb25UeXBlPihqKS5h dChJZHgpLnRlbXBsYXRlIGdldDxBcmdzPigpLi4uKTsKKy19CistCistdGVtcGxhdGUgPCB0eXBl bmFtZSBCYXNpY0pzb25UeXBlLCBjbGFzcyBBMSwgY2xhc3MgQTIgPgorLXN0ZDo6cGFpcjxBMSwg QTI+IGZyb21fanNvbl90dXBsZV9pbXBsKEJhc2ljSnNvblR5cGUmJiBqLCBpZGVudGl0eV90YWc8 c3RkOjpwYWlyPEExLCBBMj4+IC8qdW51c2VkKi8sIHByaW9yaXR5X3RhZzwwPiAvKnVudXNlZCov KQorLXsKKy0gICAgcmV0dXJuIHtzdGQ6OmZvcndhcmQ8QmFzaWNKc29uVHlwZT4oaikuYXQoMCku dGVtcGxhdGUgZ2V0PEExPigpLAorLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxCYXNpY0pzb25U eXBlPihqKS5hdCgxKS50ZW1wbGF0ZSBnZXQ8QTI+KCl9OworLX0KKy0KKy10ZW1wbGF0ZTx0eXBl bmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBBMSwgdHlwZW5hbWUgQTI+Cistdm9pZCBmcm9t X2pzb25fdHVwbGVfaW1wbChCYXNpY0pzb25UeXBlJiYgaiwgc3RkOjpwYWlyPEExLCBBMj4mIHAs IHByaW9yaXR5X3RhZzwxPiAvKnVudXNlZCovKQorLXsKKy0gICAgcCA9IGZyb21fanNvbl90dXBs ZV9pbXBsKHN0ZDo6Zm9yd2FyZDxCYXNpY0pzb25UeXBlPihqKSwgaWRlbnRpdHlfdGFnPHN0ZDo6 cGFpcjxBMSwgQTI+PiB7fSwgcHJpb3JpdHlfdGFnPDA+IHt9KTsKKy19CistCistdGVtcGxhdGU8 dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKy1zdGQ6OnR1cGxlPEFy Z3MuLi4+IGZyb21fanNvbl90dXBsZV9pbXBsKEJhc2ljSnNvblR5cGUmJiBqLCBpZGVudGl0eV90 YWc8c3RkOjp0dXBsZTxBcmdzLi4uPj4gLyp1bnVzZWQqLywgcHJpb3JpdHlfdGFnPDI+IC8qdW51 c2VkKi8pCisteworLSAgICByZXR1cm4gZnJvbV9qc29uX3R1cGxlX2ltcGxfYmFzZTxCYXNpY0pz b25UeXBlLCBBcmdzLi4uPihzdGQ6OmZvcndhcmQ8QmFzaWNKc29uVHlwZT4oaiksIGluZGV4X3Nl cXVlbmNlX2ZvcjxBcmdzLi4uPiB7fSk7CistfQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2lj SnNvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Cistdm9pZCBmcm9tX2pzb25fdHVwbGVfaW1wbChC YXNpY0pzb25UeXBlJiYgaiwgc3RkOjp0dXBsZTxBcmdzLi4uPiYgdCwgcHJpb3JpdHlfdGFnPDM+ IC8qdW51c2VkKi8pCisteworLSAgICB0ID0gZnJvbV9qc29uX3R1cGxlX2ltcGxfYmFzZTxCYXNp Y0pzb25UeXBlLCBBcmdzLi4uPihzdGQ6OmZvcndhcmQ8QmFzaWNKc29uVHlwZT4oaiksIGluZGV4 X3NlcXVlbmNlX2ZvcjxBcmdzLi4uPiB7fSk7CistfQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJh c2ljSnNvblR5cGUsIHR5cGVuYW1lIFR1cGxlUmVsYXRlZD4KKy1hdXRvIGZyb21fanNvbihCYXNp Y0pzb25UeXBlJiYgaiwgVHVwbGVSZWxhdGVkJiYgdCkKKy0tPiBkZWNsdHlwZShmcm9tX2pzb25f dHVwbGVfaW1wbChzdGQ6OmZvcndhcmQ8QmFzaWNKc29uVHlwZT4oaiksIHN0ZDo6Zm9yd2FyZDxU dXBsZVJlbGF0ZWQ+KHQpLCBwcmlvcml0eV90YWc8Mz4ge30pKQorLXsKKy0gICAgaWYgKEpTT05f SEVETEVZX1VOTElLRUxZKCFqLmlzX2FycmF5KCkpKQorLSAgICB7CistICAgICAgICBKU09OX1RI Uk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDIsICJ0eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAi ICsgc3RkOjpzdHJpbmcoai50eXBlX25hbWUoKSksIGopKTsKKy0gICAgfQorLQorLSAgICByZXR1 cm4gZnJvbV9qc29uX3R1cGxlX2ltcGwoc3RkOjpmb3J3YXJkPEJhc2ljSnNvblR5cGU+KGopLCBz dGQ6OmZvcndhcmQ8VHVwbGVSZWxhdGVkPih0KSwgcHJpb3JpdHlfdGFnPDM+IHt9KTsKKy19Cist CistdGVtcGxhdGUgPCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVu YW1lIFZhbHVlLCB0eXBlbmFtZSBDb21wYXJlLCB0eXBlbmFtZSBBbGxvY2F0b3IsCistICAgICAg ICAgICB0eXBlbmFtZSA9IGVuYWJsZV9pZl90IDwgIXN0ZDo6aXNfY29uc3RydWN0aWJsZSA8Cist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEJhc2ljSnNv blR5cGU6OnN0cmluZ190LCBLZXkgPjo6dmFsdWUgPj4KKy12b2lkIGZyb21fanNvbihjb25zdCBC YXNpY0pzb25UeXBlJiBqLCBzdGQ6Om1hcDxLZXksIFZhbHVlLCBDb21wYXJlLCBBbGxvY2F0b3I+ JiBtKQorLXsKKy0gICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFqLmlzX2FycmF5KCkpKQor LSAgICB7CistICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDIsICJ0eXBl IG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgc3RkOjpzdHJpbmcoai50eXBlX25hbWUoKSksIGop KTsKKy0gICAgfQorLSAgICBtLmNsZWFyKCk7CistICAgIGZvciAoY29uc3QgYXV0byYgcCA6IGop CistICAgIHsKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghcC5pc19hcnJheSgp KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0 ZSgzMDIsICJ0eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgc3RkOjpzdHJpbmcocC50eXBl X25hbWUoKSksIGopKTsKKy0gICAgICAgIH0KKy0gICAgICAgIG0uZW1wbGFjZShwLmF0KDApLnRl bXBsYXRlIGdldDxLZXk+KCksIHAuYXQoMSkudGVtcGxhdGUgZ2V0PFZhbHVlPigpKTsKKy0gICAg fQorLX0KKy0KKy10ZW1wbGF0ZSA8IHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIEtl eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2gsIHR5cGVuYW1lIEtleUVxdWFsLCB0eXBl bmFtZSBBbGxvY2F0b3IsCistICAgICAgICAgICB0eXBlbmFtZSA9IGVuYWJsZV9pZl90IDwgIXN0 ZDo6aXNfY29uc3RydWN0aWJsZSA8CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190LCBLZXkgPjo6dmFsdWUgPj4K Ky12b2lkIGZyb21fanNvbihjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBzdGQ6OnVub3JkZXJlZF9t YXA8S2V5LCBWYWx1ZSwgSGFzaCwgS2V5RXF1YWwsIEFsbG9jYXRvcj4mIG0pCisteworLSAgICBp ZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIWouaXNfYXJyYXkoKSkpCistICAgIHsKKy0gICAgICAg IEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVzdCBiZSBhcnJheSwg YnV0IGlzICIgKyBzdGQ6OnN0cmluZyhqLnR5cGVfbmFtZSgpKSwgaikpOworLSAgICB9CistICAg IG0uY2xlYXIoKTsKKy0gICAgZm9yIChjb25zdCBhdXRvJiBwIDogaikKKy0gICAgeworLSAgICAg ICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFwLmlzX2FycmF5KCkpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVz dCBiZSBhcnJheSwgYnV0IGlzICIgKyBzdGQ6OnN0cmluZyhwLnR5cGVfbmFtZSgpKSwgaikpOwor LSAgICAgICAgfQorLSAgICAgICAgbS5lbXBsYWNlKHAuYXQoMCkudGVtcGxhdGUgZ2V0PEtleT4o KSwgcC5hdCgxKS50ZW1wbGF0ZSBnZXQ8VmFsdWU+KCkpOworLSAgICB9CistfQorLQorLSNpZiBK U09OX0hBU19GSUxFU1lTVEVNIHx8IEpTT05fSEFTX0VYUEVSSU1FTlRBTF9GSUxFU1lTVEVNCist dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy12b2lkIGZyb21fanNvbihjb25zdCBC YXNpY0pzb25UeXBlJiBqLCBzdGRfZnM6OnBhdGgmIHApCisteworLSAgICBpZiAoSlNPTl9IRURM RVlfVU5MSUtFTFkoIWouaXNfc3RyaW5nKCkpKQorLSAgICB7CistICAgICAgICBKU09OX1RIUk9X KHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDIsICJ0eXBlIG11c3QgYmUgc3RyaW5nLCBidXQgaXMgIiAr IHN0ZDo6c3RyaW5nKGoudHlwZV9uYW1lKCkpLCBqKSk7CistICAgIH0KKy0gICAgcCA9ICpqLnRl bXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3QqPigp OworLX0KKy0jZW5kaWYKKy0KKy1zdHJ1Y3QgZnJvbV9qc29uX2ZuCisteworLSAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBUPgorLSAgICBhdXRvIG9wZXJhdG9y KCkoY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgVCYmIHZhbCkgY29uc3QKKy0gICAgbm9leGNlcHQo bm9leGNlcHQoZnJvbV9qc29uKGosIHN0ZDo6Zm9yd2FyZDxUPih2YWwpKSkpCistICAgIC0+IGRl Y2x0eXBlKGZyb21fanNvbihqLCBzdGQ6OmZvcndhcmQ8VD4odmFsKSkpCistICAgIHsKKy0gICAg ICAgIHJldHVybiBmcm9tX2pzb24oaiwgc3RkOjpmb3J3YXJkPFQ+KHZhbCkpOworLSAgICB9Cist fTsKKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistCistLy8vIG5hbWVzcGFjZSB0byBob2xkIGRl ZmF1bHQgYGZyb21fanNvbmAgZnVuY3Rpb24KKy0vLy8gdG8gc2VlIHdoeSB0aGlzIGlzIHJlcXVp cmVkOgorLS8vLyBodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3Bh cGVycy8yMDE1L240MzgxLmh0bWwKKy1uYW1lc3BhY2UgLy8gTk9MSU5UKGNlcnQtZGNsNTktY3Bw LGZ1Y2hzaWEtaGVhZGVyLWFub24tbmFtZXNwYWNlcyxnb29nbGUtYnVpbGQtbmFtZXNwYWNlcykK Ky17CistY29uc3RleHByIGNvbnN0IGF1dG8mIGZyb21fanNvbiA9IGRldGFpbDo6c3RhdGljX2Nv bnN0PGRldGFpbDo6ZnJvbV9qc29uX2ZuPjo6dmFsdWU7IC8vIE5PTElOVChtaXNjLWRlZmluaXRp b25zLWluLWhlYWRlcnMpCistfSAvLyBuYW1lc3BhY2UKKy19IC8vIG5hbWVzcGFjZSBubG9obWFu bgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvY29udmVyc2lvbnMvdG9fanNvbi5o cHA+CistCistCistI2luY2x1ZGUgPGFsZ29yaXRobT4gLy8gY29weQorLSNpbmNsdWRlIDxpdGVy YXRvcj4gLy8gYmVnaW4sIGVuZAorLSNpbmNsdWRlIDxzdHJpbmc+IC8vIHN0cmluZworLSNpbmNs dWRlIDx0dXBsZT4gLy8gdHVwbGUsIGdldAorLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4gLy8gaXNf c2FtZSwgaXNfY29uc3RydWN0aWJsZSwgaXNfZmxvYXRpbmdfcG9pbnQsIGlzX2VudW0sIHVuZGVy bHlpbmdfdHlwZQorLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBtb3ZlLCBmb3J3YXJkLCBkZWNsdmFs LCBwYWlyCistI2luY2x1ZGUgPHZhbGFycmF5PiAvLyB2YWxhcnJheQorLSNpbmNsdWRlIDx2ZWN0 b3I+IC8vIHZlY3RvcgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWFjcm9fc2Nv cGUuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvaXRlcmF0b3JzL2l0ZXJh dGlvbl9wcm94eS5ocHA+CistCistCistI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVfdAorLSNp bmNsdWRlIDxpdGVyYXRvcj4gLy8gaW5wdXRfaXRlcmF0b3JfdGFnCistI2luY2x1ZGUgPHN0cmlu Zz4gLy8gc3RyaW5nLCB0b19zdHJpbmcKKy0jaW5jbHVkZSA8dHVwbGU+IC8vIHR1cGxlX3NpemUs IGdldCwgdHVwbGVfZWxlbWVudAorLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBtb3ZlCistCistLy8g I2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tZXRhL3R5cGVfdHJhaXRzLmhwcD4KKy0KKy0vLyAj aW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL3ZhbHVlX3QuaHBwPgorLQorLQorLW5hbWVzcGFjZSBu bG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCisteworLXRlbXBsYXRlPHR5cGVuYW1lIHN0 cmluZ190eXBlPgorLXZvaWQgaW50X3RvX3N0cmluZyggc3RyaW5nX3R5cGUmIHRhcmdldCwgc3Rk OjpzaXplX3QgdmFsdWUgKQorLXsKKy0gICAgLy8gRm9yIEFETAorLSAgICB1c2luZyBzdGQ6OnRv X3N0cmluZzsKKy0gICAgdGFyZ2V0ID0gdG9fc3RyaW5nKHZhbHVlKTsKKy19CistdGVtcGxhdGU8 dHlwZW5hbWUgSXRlcmF0b3JUeXBlPiBjbGFzcyBpdGVyYXRpb25fcHJveHlfdmFsdWUKKy17Cist ICBwdWJsaWM6CistICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90Owor LSAgICB1c2luZyB2YWx1ZV90eXBlID0gaXRlcmF0aW9uX3Byb3h5X3ZhbHVlOworLSAgICB1c2lu ZyBwb2ludGVyID0gdmFsdWVfdHlwZSAqIDsKKy0gICAgdXNpbmcgcmVmZXJlbmNlID0gdmFsdWVf dHlwZSAmIDsKKy0gICAgdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmlucHV0X2l0ZXJh dG9yX3RhZzsKKy0gICAgdXNpbmcgc3RyaW5nX3R5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9j djwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPGRlY2x0eXBlKCBzdGQ6OmRlY2x2YWw8 SXRlcmF0b3JUeXBlPigpLmtleSgpICkgPjo6dHlwZSA+Ojp0eXBlOworLQorLSAgcHJpdmF0ZToK Ky0gICAgLy8vIHRoZSBpdGVyYXRvcgorLSAgICBJdGVyYXRvclR5cGUgYW5jaG9yOworLSAgICAv Ly8gYW4gaW5kZXggZm9yIGFycmF5cyAodXNlZCB0byBjcmVhdGUga2V5IG5hbWVzKQorLSAgICBz dGQ6OnNpemVfdCBhcnJheV9pbmRleCA9IDA7CistICAgIC8vLyBsYXN0IHN0cmluZ2lmaWVkIGFy cmF5IGluZGV4CistICAgIG11dGFibGUgc3RkOjpzaXplX3QgYXJyYXlfaW5kZXhfbGFzdCA9IDA7 CistICAgIC8vLyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXJyYXkgaW5kZXgKKy0g ICAgbXV0YWJsZSBzdHJpbmdfdHlwZSBhcnJheV9pbmRleF9zdHIgPSAiMCI7CistICAgIC8vLyBh biBlbXB0eSBzdHJpbmcgKHRvIHJldHVybiBhIHJlZmVyZW5jZSBmb3IgcHJpbWl0aXZlIHZhbHVl cykKKy0gICAgY29uc3Qgc3RyaW5nX3R5cGUgZW1wdHlfc3Rye307CistCistICBwdWJsaWM6Cist ICAgIGV4cGxpY2l0IGl0ZXJhdGlvbl9wcm94eV92YWx1ZShJdGVyYXRvclR5cGUgaXQpIG5vZXhj ZXB0CistICAgICAgICA6IGFuY2hvcihzdGQ6Om1vdmUoaXQpKQorLSAgICB7fQorLQorLSAgICAv Ly8gZGVyZWZlcmVuY2Ugb3BlcmF0b3IgKG5lZWRlZCBmb3IgcmFuZ2UtYmFzZWQgZm9yKQorLSAg ICBpdGVyYXRpb25fcHJveHlfdmFsdWUmIG9wZXJhdG9yKigpCistICAgIHsKKy0gICAgICAgIHJl dHVybiAqdGhpczsKKy0gICAgfQorLQorLSAgICAvLy8gaW5jcmVtZW50IG9wZXJhdG9yIChuZWVk ZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikKKy0gICAgaXRlcmF0aW9uX3Byb3h5X3ZhbHVlJiBvcGVy YXRvcisrKCkKKy0gICAgeworLSAgICAgICAgKythbmNob3I7CistICAgICAgICArK2FycmF5X2lu ZGV4OworLQorLSAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICB9CistCistICAgIC8vLyBlcXVh bGl0eSBvcGVyYXRvciAobmVlZGVkIGZvciBJbnB1dEl0ZXJhdG9yKQorLSAgICBib29sIG9wZXJh dG9yPT0oY29uc3QgaXRlcmF0aW9uX3Byb3h5X3ZhbHVlJiBvKSBjb25zdAorLSAgICB7CistICAg ICAgICByZXR1cm4gYW5jaG9yID09IG8uYW5jaG9yOworLSAgICB9CistCistICAgIC8vLyBpbmVx dWFsaXR5IG9wZXJhdG9yIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikKKy0gICAgYm9vbCBv cGVyYXRvciE9KGNvbnN0IGl0ZXJhdGlvbl9wcm94eV92YWx1ZSYgbykgY29uc3QKKy0gICAgewor LSAgICAgICAgcmV0dXJuIGFuY2hvciAhPSBvLmFuY2hvcjsKKy0gICAgfQorLQorLSAgICAvLy8g cmV0dXJuIGtleSBvZiB0aGUgaXRlcmF0b3IKKy0gICAgY29uc3Qgc3RyaW5nX3R5cGUmIGtleSgp IGNvbnN0CistICAgIHsKKy0gICAgICAgIEpTT05fQVNTRVJUKGFuY2hvci5tX29iamVjdCAhPSBu dWxscHRyKTsKKy0KKy0gICAgICAgIHN3aXRjaCAoYW5jaG9yLm1fb2JqZWN0LT50eXBlKCkpCist ICAgICAgICB7CistICAgICAgICAgICAgLy8gdXNlIGludGVnZXIgYXJyYXkgaW5kZXggYXMga2V5 CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAgICAgICAgICB7CistICAg ICAgICAgICAgICAgIGlmIChhcnJheV9pbmRleCAhPSBhcnJheV9pbmRleF9sYXN0KQorLSAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBpbnRfdG9fc3RyaW5nKCBhcnJheV9p bmRleF9zdHIsIGFycmF5X2luZGV4ICk7CistICAgICAgICAgICAgICAgICAgICBhcnJheV9pbmRl eF9sYXN0ID0gYXJyYXlfaW5kZXg7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgcmV0dXJuIGFycmF5X2luZGV4X3N0cjsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAg ICAgLy8gdXNlIGtleSBmcm9tIHRoZSBvYmplY3QKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 Om9iamVjdDoKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGFuY2hvci5rZXkoKTsKKy0KKy0gICAg ICAgICAgICAvLyB1c2UgYW4gZW1wdHkga2V5IGZvciBhbGwgcHJpbWl0aXZlIHR5cGVzCistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6 c3RyaW5nOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAg ICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zs b2F0OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAgIGNh c2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAg ICAgICAgIHJldHVybiBlbXB0eV9zdHI7CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8v IHJldHVybiB2YWx1ZSBvZiB0aGUgaXRlcmF0b3IKKy0gICAgdHlwZW5hbWUgSXRlcmF0b3JUeXBl OjpyZWZlcmVuY2UgdmFsdWUoKSBjb25zdAorLSAgICB7CistICAgICAgICByZXR1cm4gYW5jaG9y LnZhbHVlKCk7CistICAgIH0KKy19OworLQorLS8vLyBwcm94eSBjbGFzcyBmb3IgdGhlIGl0ZW1z KCkgZnVuY3Rpb24KKy10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+IGNsYXNzIGl0ZXJh dGlvbl9wcm94eQorLXsKKy0gIHByaXZhdGU6CistICAgIC8vLyB0aGUgY29udGFpbmVyIHRvIGl0 ZXJhdGUKKy0gICAgdHlwZW5hbWUgSXRlcmF0b3JUeXBlOjpyZWZlcmVuY2UgY29udGFpbmVyOwor LQorLSAgcHVibGljOgorLSAgICAvLy8gY29uc3RydWN0IGl0ZXJhdGlvbiBwcm94eSBmcm9tIGEg Y29udGFpbmVyCistICAgIGV4cGxpY2l0IGl0ZXJhdGlvbl9wcm94eSh0eXBlbmFtZSBJdGVyYXRv clR5cGU6OnJlZmVyZW5jZSBjb250KSBub2V4Y2VwdAorLSAgICAgICAgOiBjb250YWluZXIoY29u dCkge30KKy0KKy0gICAgLy8vIHJldHVybiBpdGVyYXRvciBiZWdpbiAobmVlZGVkIGZvciByYW5n ZS1iYXNlZCBmb3IpCistICAgIGl0ZXJhdGlvbl9wcm94eV92YWx1ZTxJdGVyYXRvclR5cGU+IGJl Z2luKCkgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGl0ZXJhdGlvbl9wcm94eV92 YWx1ZTxJdGVyYXRvclR5cGU+KGNvbnRhaW5lci5iZWdpbigpKTsKKy0gICAgfQorLQorLSAgICAv Ly8gcmV0dXJuIGl0ZXJhdG9yIGVuZCAobmVlZGVkIGZvciByYW5nZS1iYXNlZCBmb3IpCistICAg IGl0ZXJhdGlvbl9wcm94eV92YWx1ZTxJdGVyYXRvclR5cGU+IGVuZCgpIG5vZXhjZXB0CistICAg IHsKKy0gICAgICAgIHJldHVybiBpdGVyYXRpb25fcHJveHlfdmFsdWU8SXRlcmF0b3JUeXBlPihj b250YWluZXIuZW5kKCkpOworLSAgICB9CistfTsKKy0vLyBTdHJ1Y3R1cmVkIEJpbmRpbmdzIFN1 cHBvcnQKKy0vLyBGb3IgZnVydGhlciByZWZlcmVuY2Ugc2VlIGh0dHBzOi8vYmxvZy50YXJ0YW5s bGFtYS54eXovc3RydWN0dXJlZC1iaW5kaW5ncy8KKy0vLyBBbmQgc2VlIGh0dHBzOi8vZ2l0aHVi LmNvbS9ubG9obWFubi9qc29uL3B1bGwvMTM5MQorLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4sIHR5 cGVuYW1lIEl0ZXJhdG9yVHlwZSwgZW5hYmxlX2lmX3Q8TiA9PSAwLCBpbnQ+ID0gMD4KKy1hdXRv IGdldChjb25zdCBubG9obWFubjo6ZGV0YWlsOjppdGVyYXRpb25fcHJveHlfdmFsdWU8SXRlcmF0 b3JUeXBlPiYgaSkgLT4gZGVjbHR5cGUoaS5rZXkoKSkKKy17CistICAgIHJldHVybiBpLmtleSgp OworLX0KKy0vLyBTdHJ1Y3R1cmVkIEJpbmRpbmdzIFN1cHBvcnQKKy0vLyBGb3IgZnVydGhlciBy ZWZlcmVuY2Ugc2VlIGh0dHBzOi8vYmxvZy50YXJ0YW5sbGFtYS54eXovc3RydWN0dXJlZC1iaW5k aW5ncy8KKy0vLyBBbmQgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL3B1bGwv MTM5MQorLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4sIHR5cGVuYW1lIEl0ZXJhdG9yVHlwZSwgZW5h YmxlX2lmX3Q8TiA9PSAxLCBpbnQ+ID0gMD4KKy1hdXRvIGdldChjb25zdCBubG9obWFubjo6ZGV0 YWlsOjppdGVyYXRpb25fcHJveHlfdmFsdWU8SXRlcmF0b3JUeXBlPiYgaSkgLT4gZGVjbHR5cGUo aS52YWx1ZSgpKQorLXsKKy0gICAgcmV0dXJuIGkudmFsdWUoKTsKKy19CistfSAgLy8gbmFtZXNw YWNlIGRldGFpbAorLX0gIC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vIFRoZSBBZGRpdGlv biB0byB0aGUgU1REIE5hbWVzcGFjZSBpcyByZXF1aXJlZCB0byBhZGQKKy0vLyBTdHJ1Y3R1cmVk IEJpbmRpbmdzIFN1cHBvcnQgdG8gdGhlIGl0ZXJhdGlvbl9wcm94eV92YWx1ZSBjbGFzcworLS8v IEZvciBmdXJ0aGVyIHJlZmVyZW5jZSBzZWUgaHR0cHM6Ly9ibG9nLnRhcnRhbmxsYW1hLnh5ei9z dHJ1Y3R1cmVkLWJpbmRpbmdzLworLS8vIEFuZCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2ht YW5uL2pzb24vcHVsbC8xMzkxCistbmFtZXNwYWNlIHN0ZAorLXsKKy0jaWYgZGVmaW5lZChfX2Ns YW5nX18pCistICAgIC8vIEZpeDogaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNz dWVzLzE0MDEKKy0gICAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKy0gICAgI3ByYWdt YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzbWF0Y2hlZC10YWdzIgorLSNlbmRpZgor LXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKy1jbGFzcyB0dXBsZV9zaXplPDo6bmxv aG1hbm46OmRldGFpbDo6aXRlcmF0aW9uX3Byb3h5X3ZhbHVlPEl0ZXJhdG9yVHlwZT4+CistICAg ICAgICAgICAgOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgMj4g e307CistCistdGVtcGxhdGU8c3RkOjpzaXplX3QgTiwgdHlwZW5hbWUgSXRlcmF0b3JUeXBlPgor LWNsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgOjpubG9obWFubjo6ZGV0YWlsOjppdGVyYXRpb25fcHJv eHlfdmFsdWU8SXRlcmF0b3JUeXBlID4+CisteworLSAgcHVibGljOgorLSAgICB1c2luZyB0eXBl ID0gZGVjbHR5cGUoCistICAgICAgICAgICAgICAgICAgICAgZ2V0PE4+KHN0ZDo6ZGVjbHZhbCA8 CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6bmxvaG1hbm46OmRldGFpbDo6aXRlcmF0 aW9uX3Byb3h5X3ZhbHVlPEl0ZXJhdG9yVHlwZSA+PiAoKSkpOworLX07CistI2lmIGRlZmluZWQo X19jbGFuZ19fKQorLSAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCistI2VuZGlmCist fSAvLyBuYW1lc3BhY2Ugc3RkCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tZXRh L2NwcF9mdXR1cmUuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWV0YS90 eXBlX3RyYWl0cy5ocHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC92YWx1ZV90 LmhwcD4KKy0KKy0KKy0jaWYgSlNPTl9IQVNfRVhQRVJJTUVOVEFMX0ZJTEVTWVNURU0KKy0jaW5j bHVkZSA8ZXhwZXJpbWVudGFsL2ZpbGVzeXN0ZW0+CistbmFtZXNwYWNlIG5sb2htYW5uOjpkZXRh aWwKKy17CistbmFtZXNwYWNlIHN0ZF9mcyA9IHN0ZDo6ZXhwZXJpbWVudGFsOjpmaWxlc3lzdGVt OworLX0gLy8gbmFtZXNwYWNlIG5sb2htYW5uOjpkZXRhaWwKKy0jZWxpZiBKU09OX0hBU19GSUxF U1lTVEVNCistI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CistbmFtZXNwYWNlIG5sb2htYW5uOjpkZXRh aWwKKy17CistbmFtZXNwYWNlIHN0ZF9mcyA9IHN0ZDo6ZmlsZXN5c3RlbTsKKy19IC8vIG5hbWVz cGFjZSBubG9obWFubjo6ZGV0YWlsCistI2VuZGlmCistCistbmFtZXNwYWNlIG5sb2htYW5uCist eworLW5hbWVzcGFjZSBkZXRhaWwKKy17CistLy8vLy8vLy8vLy8vLy8vLy8vCistLy8gY29uc3Ry dWN0b3JzIC8vCistLy8vLy8vLy8vLy8vLy8vLy8vCistCistLyoKKy0gKiBOb3RlIGFsbCBleHRl cm5hbF9jb25zdHJ1Y3Rvcjw+Ojpjb25zdHJ1Y3QgZnVuY3Rpb25zIG5lZWQgdG8gY2FsbAorLSAq IGoubV92YWx1ZS5kZXN0cm95KGoubV90eXBlKSB0byBhdm9pZCBhIG1lbW9yeSBsZWFrIGluIGNh c2UgaiBjb250YWlucyBhbgorLSAqIGFsbG9jYXRlZCB2YWx1ZSAoZS5nLiwgYSBzdHJpbmcpLiBT ZWUgYnVnIGlzc3VlCistICogaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVz LzI4NjUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCistICovCistCistdGVtcGxhdGU8dmFsdWVfdD4g c3RydWN0IGV4dGVybmFsX2NvbnN0cnVjdG9yOworLQorLXRlbXBsYXRlPD4KKy1zdHJ1Y3QgZXh0 ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVfdDo6Ym9vbGVhbj4KKy17CistICAgIHRlbXBsYXRlPHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pz b25UeXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpib29sZWFuX3QgYikgbm9leGNlcHQK Ky0gICAgeworLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUpOworLSAgICAgICAg ai5tX3R5cGUgPSB2YWx1ZV90Ojpib29sZWFuOworLSAgICAgICAgai5tX3ZhbHVlID0gYjsKKy0g ICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistfTsKKy0KKy10ZW1wbGF0ZTw+ Cistc3RydWN0IGV4dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6OnN0cmluZz4KKy17CistICAg IHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyB2b2lkIGNvbnN0 cnVjdChCYXNpY0pzb25UeXBlJiBqLCBjb25zdCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJp bmdfdCYgcykKKy0gICAgeworLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUpOwor LSAgICAgICAgai5tX3R5cGUgPSB2YWx1ZV90OjpzdHJpbmc7CistICAgICAgICBqLm1fdmFsdWUg PSBzOworLSAgICAgICAgai5hc3NlcnRfaW52YXJpYW50KCk7CistICAgIH0KKy0KKy0gICAgdGVt cGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0 KEJhc2ljSnNvblR5cGUmIGosIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190JiYgcykK Ky0gICAgeworLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUpOworLSAgICAgICAg ai5tX3R5cGUgPSB2YWx1ZV90OjpzdHJpbmc7CistICAgICAgICBqLm1fdmFsdWUgPSBzdGQ6Om1v dmUocyk7CistICAgICAgICBqLmFzc2VydF9pbnZhcmlhbnQoKTsKKy0gICAgfQorLQorLSAgICB0 ZW1wbGF0ZSA8IHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbXBhdGlibGVTdHJp bmdUeXBlLAorLSAgICAgICAgICAgICAgIGVuYWJsZV9pZl90IDwgIXN0ZDo6aXNfc2FtZTxDb21w YXRpYmxlU3RyaW5nVHlwZSwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3Q+Ojp2YWx1 ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCA+ID0gMCA+CistICAgIHN0YXRp YyB2b2lkIGNvbnN0cnVjdChCYXNpY0pzb25UeXBlJiBqLCBjb25zdCBDb21wYXRpYmxlU3RyaW5n VHlwZSYgc3RyKQorLSAgICB7CistICAgICAgICBqLm1fdmFsdWUuZGVzdHJveShqLm1fdHlwZSk7 CistICAgICAgICBqLm1fdHlwZSA9IHZhbHVlX3Q6OnN0cmluZzsKKy0gICAgICAgIGoubV92YWx1 ZS5zdHJpbmcgPSBqLnRlbXBsYXRlIGNyZWF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJp bmdfdD4oc3RyKTsKKy0gICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistfTsK Ky0KKy10ZW1wbGF0ZTw+Cistc3RydWN0IGV4dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6OmJp bmFyeT4KKy17CistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0 YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pzb25UeXBlJiBqLCBjb25zdCB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpiaW5hcnlfdCYgYikKKy0gICAgeworLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ry b3koai5tX3R5cGUpOworLSAgICAgICAgai5tX3R5cGUgPSB2YWx1ZV90OjpiaW5hcnk7CistICAg ICAgICBqLm1fdmFsdWUgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpiaW5hcnlfdChiKTsKKy0g ICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistCistICAgIHRlbXBsYXRlPHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pz b25UeXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpiaW5hcnlfdCYmIGIpCistICAgIHsK Ky0gICAgICAgIGoubV92YWx1ZS5kZXN0cm95KGoubV90eXBlKTsKKy0gICAgICAgIGoubV90eXBl ID0gdmFsdWVfdDo6YmluYXJ5OworLSAgICAgICAgai5tX3ZhbHVlID0gdHlwZW5hbWUgQmFzaWNK c29uVHlwZTo6YmluYXJ5X3Qoc3RkOjptb3ZlKGIpKTsKKy0gICAgICAgIGouYXNzZXJ0X2ludmFy aWFudCgpOworLSAgICB9CistfTsKKy0KKy10ZW1wbGF0ZTw+Cistc3RydWN0IGV4dGVybmFsX2Nv bnN0cnVjdG9yPHZhbHVlX3Q6Om51bWJlcl9mbG9hdD4KKy17CistICAgIHRlbXBsYXRlPHR5cGVu YW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pzb25U eXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfZmxvYXRfdCB2YWwpIG5vZXhj ZXB0CistICAgIHsKKy0gICAgICAgIGoubV92YWx1ZS5kZXN0cm95KGoubV90eXBlKTsKKy0gICAg ICAgIGoubV90eXBlID0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OworLSAgICAgICAgai5tX3ZhbHVl ID0gdmFsOworLSAgICAgICAgai5hc3NlcnRfaW52YXJpYW50KCk7CistICAgIH0KKy19OworLQor LXRlbXBsYXRlPD4KKy1zdHJ1Y3QgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVfdDo6bnVtYmVy X3Vuc2lnbmVkPgorLXsKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy0g ICAgc3RhdGljIHZvaWQgY29uc3RydWN0KEJhc2ljSnNvblR5cGUmIGosIHR5cGVuYW1lIEJhc2lj SnNvblR5cGU6Om51bWJlcl91bnNpZ25lZF90IHZhbCkgbm9leGNlcHQKKy0gICAgeworLSAgICAg ICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUpOworLSAgICAgICAgai5tX3R5cGUgPSB2YWx1 ZV90OjpudW1iZXJfdW5zaWduZWQ7CistICAgICAgICBqLm1fdmFsdWUgPSB2YWw7CistICAgICAg ICBqLmFzc2VydF9pbnZhcmlhbnQoKTsKKy0gICAgfQorLX07CistCistdGVtcGxhdGU8PgorLXN0 cnVjdCBleHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1ZV90OjpudW1iZXJfaW50ZWdlcj4KKy17Cist ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyB2b2lkIGNv bnN0cnVjdChCYXNpY0pzb25UeXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJf aW50ZWdlcl90IHZhbCkgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ry b3koai5tX3R5cGUpOworLSAgICAgICAgai5tX3R5cGUgPSB2YWx1ZV90OjpudW1iZXJfaW50ZWdl cjsKKy0gICAgICAgIGoubV92YWx1ZSA9IHZhbDsKKy0gICAgICAgIGouYXNzZXJ0X2ludmFyaWFu dCgpOworLSAgICB9CistfTsKKy0KKy10ZW1wbGF0ZTw+Cistc3RydWN0IGV4dGVybmFsX2NvbnN0 cnVjdG9yPHZhbHVlX3Q6OmFycmF5PgorLXsKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNK c29uVHlwZT4KKy0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0KEJhc2ljSnNvblR5cGUmIGosIGNv bnN0IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmFycmF5X3QmIGFycikKKy0gICAgeworLSAgICAg ICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUpOworLSAgICAgICAgai5tX3R5cGUgPSB2YWx1 ZV90OjphcnJheTsKKy0gICAgICAgIGoubV92YWx1ZSA9IGFycjsKKy0gICAgICAgIGouc2V0X3Bh cmVudHMoKTsKKy0gICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistCistICAg IHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyB2b2lkIGNvbnN0 cnVjdChCYXNpY0pzb25UeXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjphcnJheV90JiYg YXJyKQorLSAgICB7CistICAgICAgICBqLm1fdmFsdWUuZGVzdHJveShqLm1fdHlwZSk7CistICAg ICAgICBqLm1fdHlwZSA9IHZhbHVlX3Q6OmFycmF5OworLSAgICAgICAgai5tX3ZhbHVlID0gc3Rk Ojptb3ZlKGFycik7CistICAgICAgICBqLnNldF9wYXJlbnRzKCk7CistICAgICAgICBqLmFzc2Vy dF9pbnZhcmlhbnQoKTsKKy0gICAgfQorLQorLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIEJhc2lj SnNvblR5cGUsIHR5cGVuYW1lIENvbXBhdGlibGVBcnJheVR5cGUsCistICAgICAgICAgICAgICAg ZW5hYmxlX2lmX3QgPCAhc3RkOjppc19zYW1lPENvbXBhdGlibGVBcnJheVR5cGUsIHR5cGVuYW1l IEJhc2ljSnNvblR5cGU6OmFycmF5X3Q+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCA+ID0gMCA+CistICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pzb25U eXBlJiBqLCBjb25zdCBDb21wYXRpYmxlQXJyYXlUeXBlJiBhcnIpCistICAgIHsKKy0gICAgICAg IHVzaW5nIHN0ZDo6YmVnaW47CistICAgICAgICB1c2luZyBzdGQ6OmVuZDsKKy0KKy0gICAgICAg IGoubV92YWx1ZS5kZXN0cm95KGoubV90eXBlKTsKKy0gICAgICAgIGoubV90eXBlID0gdmFsdWVf dDo6YXJyYXk7CistICAgICAgICBqLm1fdmFsdWUuYXJyYXkgPSBqLnRlbXBsYXRlIGNyZWF0ZTx0 eXBlbmFtZSBCYXNpY0pzb25UeXBlOjphcnJheV90PihiZWdpbihhcnIpLCBlbmQoYXJyKSk7Cist ICAgICAgICBqLnNldF9wYXJlbnRzKCk7CistICAgICAgICBqLmFzc2VydF9pbnZhcmlhbnQoKTsK Ky0gICAgfQorLQorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLSAgICBz dGF0aWMgdm9pZCBjb25zdHJ1Y3QoQmFzaWNKc29uVHlwZSYgaiwgY29uc3Qgc3RkOjp2ZWN0b3I8 Ym9vbD4mIGFycikKKy0gICAgeworLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUp OworLSAgICAgICAgai5tX3R5cGUgPSB2YWx1ZV90OjphcnJheTsKKy0gICAgICAgIGoubV92YWx1 ZSA9IHZhbHVlX3Q6OmFycmF5OworLSAgICAgICAgai5tX3ZhbHVlLmFycmF5LT5yZXNlcnZlKGFy ci5zaXplKCkpOworLSAgICAgICAgZm9yIChjb25zdCBib29sIHggOiBhcnIpCistICAgICAgICB7 CistICAgICAgICAgICAgai5tX3ZhbHVlLmFycmF5LT5wdXNoX2JhY2soeCk7CistICAgICAgICAg ICAgai5zZXRfcGFyZW50KGoubV92YWx1ZS5hcnJheS0+YmFjaygpKTsKKy0gICAgICAgIH0KKy0g ICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistCistICAgIHRlbXBsYXRlPHR5 cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFQsCistICAgICAgICAgICAgIGVuYWJsZV9p Zl90PHN0ZDo6aXNfY29udmVydGlibGU8VCwgQmFzaWNKc29uVHlwZT46OnZhbHVlLCBpbnQ+ID0g MD4KKy0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0KEJhc2ljSnNvblR5cGUmIGosIGNvbnN0IHN0 ZDo6dmFsYXJyYXk8VD4mIGFycikKKy0gICAgeworLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ryb3ko ai5tX3R5cGUpOworLSAgICAgICAgai5tX3R5cGUgPSB2YWx1ZV90OjphcnJheTsKKy0gICAgICAg IGoubV92YWx1ZSA9IHZhbHVlX3Q6OmFycmF5OworLSAgICAgICAgai5tX3ZhbHVlLmFycmF5LT5y ZXNpemUoYXJyLnNpemUoKSk7CistICAgICAgICBpZiAoYXJyLnNpemUoKSA+IDApCistICAgICAg ICB7CistICAgICAgICAgICAgc3RkOjpjb3B5KHN0ZDo6YmVnaW4oYXJyKSwgc3RkOjplbmQoYXJy KSwgai5tX3ZhbHVlLmFycmF5LT5iZWdpbigpKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGouc2V0 X3BhcmVudHMoKTsKKy0gICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistfTsK Ky0KKy10ZW1wbGF0ZTw+Cistc3RydWN0IGV4dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6Om9i amVjdD4KKy17CistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0 YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pzb25UeXBlJiBqLCBjb25zdCB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpvYmplY3RfdCYgb2JqKQorLSAgICB7CistICAgICAgICBqLm1fdmFsdWUuZGVz dHJveShqLm1fdHlwZSk7CistICAgICAgICBqLm1fdHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKKy0g ICAgICAgIGoubV92YWx1ZSA9IG9iajsKKy0gICAgICAgIGouc2V0X3BhcmVudHMoKTsKKy0gICAg ICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistCistICAgIHRlbXBsYXRlPHR5cGVu YW1lIEJhc2ljSnNvblR5cGU+CistICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pzb25U eXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpvYmplY3RfdCYmIG9iaikKKy0gICAgewor LSAgICAgICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUpOworLSAgICAgICAgai5tX3R5cGUg PSB2YWx1ZV90OjpvYmplY3Q7CistICAgICAgICBqLm1fdmFsdWUgPSBzdGQ6Om1vdmUob2JqKTsK Ky0gICAgICAgIGouc2V0X3BhcmVudHMoKTsKKy0gICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgp OworLSAgICB9CistCistICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlw ZW5hbWUgQ29tcGF0aWJsZU9iamVjdFR5cGUsCistICAgICAgICAgICAgICAgZW5hYmxlX2lmX3Qg PCAhc3RkOjppc19zYW1lPENvbXBhdGlibGVPYmplY3RUeXBlLCB0eXBlbmFtZSBCYXNpY0pzb25U eXBlOjpvYmplY3RfdD46OnZhbHVlLCBpbnQgPiA9IDAgPgorLSAgICBzdGF0aWMgdm9pZCBjb25z dHJ1Y3QoQmFzaWNKc29uVHlwZSYgaiwgY29uc3QgQ29tcGF0aWJsZU9iamVjdFR5cGUmIG9iaikK Ky0gICAgeworLSAgICAgICAgdXNpbmcgc3RkOjpiZWdpbjsKKy0gICAgICAgIHVzaW5nIHN0ZDo6 ZW5kOworLQorLSAgICAgICAgai5tX3ZhbHVlLmRlc3Ryb3koai5tX3R5cGUpOworLSAgICAgICAg ai5tX3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7CistICAgICAgICBqLm1fdmFsdWUub2JqZWN0ID0g ai50ZW1wbGF0ZSBjcmVhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0X3Q+KGJlZ2lu KG9iaiksIGVuZChvYmopKTsKKy0gICAgICAgIGouc2V0X3BhcmVudHMoKTsKKy0gICAgICAgIGou YXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistfTsKKy0KKy0vLy8vLy8vLy8vLy8vCistLy8g dG9fanNvbiAvLworLS8vLy8vLy8vLy8vLy8KKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pz b25UeXBlLCB0eXBlbmFtZSBULAorLSAgICAgICAgIGVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxU LCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpib29sZWFuX3Q+Ojp2YWx1ZSwgaW50PiA9IDA+Cist dm9pZCB0b19qc29uKEJhc2ljSnNvblR5cGUmIGosIFQgYikgbm9leGNlcHQKKy17CistICAgIGV4 dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6OmJvb2xlYW4+Ojpjb25zdHJ1Y3QoaiwgYik7Cist fQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbXBhdGli bGVTdHJpbmcsCistICAgICAgICAgZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190LCBDb21wYXRpYmxlU3RyaW5nPjo6dmFsdWUs IGludD4gPSAwPgorLXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCBjb25zdCBDb21wYXRp YmxlU3RyaW5nJiBzKQorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVfdDo6c3Ry aW5nPjo6Y29uc3RydWN0KGosIHMpOworLX0KKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pz b25UeXBlPgorLXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pz b25UeXBlOjpzdHJpbmdfdCYmIHMpCisteworLSAgICBleHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1 ZV90OjpzdHJpbmc+Ojpjb25zdHJ1Y3Qoaiwgc3RkOjptb3ZlKHMpKTsKKy19CistCistdGVtcGxh dGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlLAorLSAgICAgICAg IGVuYWJsZV9pZl90PHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8RmxvYXRUeXBlPjo6dmFsdWUsIGlu dD4gPSAwPgorLXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCBGbG9hdFR5cGUgdmFsKSBu b2V4Y2VwdAorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVfdDo6bnVtYmVyX2Zs b2F0Pjo6Y29uc3RydWN0KGosIHN0YXRpY19jYXN0PHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51 bWJlcl9mbG9hdF90Pih2YWwpKTsKKy19CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29u VHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU51bWJlclVuc2lnbmVkVHlwZSwKKy0gICAgICAgICBl bmFibGVfaWZfdDxpc19jb21wYXRpYmxlX2ludGVnZXJfdHlwZTx0eXBlbmFtZSBCYXNpY0pzb25U eXBlOjpudW1iZXJfdW5zaWduZWRfdCwgQ29tcGF0aWJsZU51bWJlclVuc2lnbmVkVHlwZT46OnZh bHVlLCBpbnQ+ID0gMD4KKy12b2lkIHRvX2pzb24oQmFzaWNKc29uVHlwZSYgaiwgQ29tcGF0aWJs ZU51bWJlclVuc2lnbmVkVHlwZSB2YWwpIG5vZXhjZXB0CisteworLSAgICBleHRlcm5hbF9jb25z dHJ1Y3Rvcjx2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ+Ojpjb25zdHJ1Y3Qoaiwgc3RhdGljX2Nh c3Q8dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVkX3Q+KHZhbCkpOworLX0K Ky0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBDb21wYXRpYmxl TnVtYmVySW50ZWdlclR5cGUsCistICAgICAgICAgZW5hYmxlX2lmX3Q8aXNfY29tcGF0aWJsZV9p bnRlZ2VyX3R5cGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2ludGVnZXJfdCwgQ29t cGF0aWJsZU51bWJlckludGVnZXJUeXBlPjo6dmFsdWUsIGludD4gPSAwPgorLXZvaWQgdG9fanNv bihCYXNpY0pzb25UeXBlJiBqLCBDb21wYXRpYmxlTnVtYmVySW50ZWdlclR5cGUgdmFsKSBub2V4 Y2VwdAorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVfdDo6bnVtYmVyX2ludGVn ZXI+Ojpjb25zdHJ1Y3Qoaiwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVt YmVyX2ludGVnZXJfdD4odmFsKSk7CistfQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNv blR5cGUsIHR5cGVuYW1lIEVudW1UeXBlLAorLSAgICAgICAgIGVuYWJsZV9pZl90PHN0ZDo6aXNf ZW51bTxFbnVtVHlwZT46OnZhbHVlLCBpbnQ+ID0gMD4KKy12b2lkIHRvX2pzb24oQmFzaWNKc29u VHlwZSYgaiwgRW51bVR5cGUgZSkgbm9leGNlcHQKKy17CistICAgIHVzaW5nIHVuZGVybHlpbmdf dHlwZSA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlPjo6dHlwZTsKKy0g ICAgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVfdDo6bnVtYmVyX2ludGVnZXI+Ojpjb25zdHJ1 Y3Qoaiwgc3RhdGljX2Nhc3Q8dW5kZXJseWluZ190eXBlPihlKSk7CistfQorLQorLXRlbXBsYXRl PHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+Cistdm9pZCB0b19qc29uKEJhc2ljSnNvblR5cGUmIGos IGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+JiBlKQorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3RydWN0 b3I8dmFsdWVfdDo6YXJyYXk+Ojpjb25zdHJ1Y3QoaiwgZSk7CistfQorLQorLXRlbXBsYXRlIDwg dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZUFycmF5VHlwZSwKKy0g ICAgICAgICAgIGVuYWJsZV9pZl90IDwgaXNfY29tcGF0aWJsZV9hcnJheV90eXBlPEJhc2ljSnNv blR5cGUsCistICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhdGlibGVBcnJheVR5cGU+Ojp2 YWx1ZSYmCistICAgICAgICAgICAgICAgICAgICAgICAgICFpc19jb21wYXRpYmxlX29iamVjdF90 eXBlPEJhc2ljSnNvblR5cGUsIENvbXBhdGlibGVBcnJheVR5cGU+Ojp2YWx1ZSYmCistICAgICAg ICAgICAgICAgICAgICAgICAgICFpc19jb21wYXRpYmxlX3N0cmluZ190eXBlPEJhc2ljSnNvblR5 cGUsIENvbXBhdGlibGVBcnJheVR5cGU+Ojp2YWx1ZSYmCistICAgICAgICAgICAgICAgICAgICAg ICAgICFzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6YmluYXJ5X3QsIENvbXBh dGlibGVBcnJheVR5cGU+Ojp2YWx1ZSYmCistICAgICAgICAgICAgICAgICAgICAgICAgICFpc19i YXNpY19qc29uPENvbXBhdGlibGVBcnJheVR5cGU+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgaW50ID4gPSAwID4KKy12b2lkIHRvX2pzb24oQmFzaWNKc29uVHlwZSYgaiwgY29u c3QgQ29tcGF0aWJsZUFycmF5VHlwZSYgYXJyKQorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3RydWN0 b3I8dmFsdWVfdDo6YXJyYXk+Ojpjb25zdHJ1Y3QoaiwgYXJyKTsKKy19CistCistdGVtcGxhdGU8 dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy12b2lkIHRvX2pzb24oQmFzaWNKc29uVHlwZSYgaiwg Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6YmluYXJ5X3QmIGJpbikKKy17CistICAgIGV4 dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6OmJpbmFyeT46OmNvbnN0cnVjdChqLCBiaW4pOwor LX0KKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBULAorLSAg ICAgICAgIGVuYWJsZV9pZl90PHN0ZDo6aXNfY29udmVydGlibGU8VCwgQmFzaWNKc29uVHlwZT46 OnZhbHVlLCBpbnQ+ID0gMD4KKy12b2lkIHRvX2pzb24oQmFzaWNKc29uVHlwZSYgaiwgY29uc3Qg c3RkOjp2YWxhcnJheTxUPiYgYXJyKQorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFs dWVfdDo6YXJyYXk+Ojpjb25zdHJ1Y3Qoaiwgc3RkOjptb3ZlKGFycikpOworLX0KKy0KKy10ZW1w bGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBl JiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjphcnJheV90JiYgYXJyKQorLXsKKy0gICAgZXh0 ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVfdDo6YXJyYXk+Ojpjb25zdHJ1Y3Qoaiwgc3RkOjptb3Zl KGFycikpOworLX0KKy0KKy10ZW1wbGF0ZSA8IHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVu YW1lIENvbXBhdGlibGVPYmplY3RUeXBlLAorLSAgICAgICAgICAgZW5hYmxlX2lmX3QgPCBpc19j b21wYXRpYmxlX29iamVjdF90eXBlPEJhc2ljSnNvblR5cGUsIENvbXBhdGlibGVPYmplY3RUeXBl Pjo6dmFsdWUmJiAhaXNfYmFzaWNfanNvbjxDb21wYXRpYmxlT2JqZWN0VHlwZT46OnZhbHVlLCBp bnQgPiA9IDAgPgorLXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCBjb25zdCBDb21wYXRp YmxlT2JqZWN0VHlwZSYgb2JqKQorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFsdWVf dDo6b2JqZWN0Pjo6Y29uc3RydWN0KGosIG9iaik7CistfQorLQorLXRlbXBsYXRlPHR5cGVuYW1l IEJhc2ljSnNvblR5cGU+Cistdm9pZCB0b19qc29uKEJhc2ljSnNvblR5cGUmIGosIHR5cGVuYW1l IEJhc2ljSnNvblR5cGU6Om9iamVjdF90JiYgb2JqKQorLXsKKy0gICAgZXh0ZXJuYWxfY29uc3Ry dWN0b3I8dmFsdWVfdDo6b2JqZWN0Pjo6Y29uc3RydWN0KGosIHN0ZDo6bW92ZShvYmopKTsKKy19 CistCistdGVtcGxhdGUgPAorLSAgICB0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBU LCBzdGQ6OnNpemVfdCBOLAorLSAgICBlbmFibGVfaWZfdCA8ICFzdGQ6OmlzX2NvbnN0cnVjdGli bGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3QsCistICAgICAgICAgICAgICAgICAg Y29uc3QgVCgmKVtOXT46OnZhbHVlLCAvLyBOT0xJTlQoY3BwY29yZWd1aWRlbGluZXMtYXZvaWQt Yy1hcnJheXMsaGljcHAtYXZvaWQtYy1hcnJheXMsbW9kZXJuaXplLWF2b2lkLWMtYXJyYXlzKQor LSAgICAgICAgICAgICAgICAgIGludCA+ID0gMCA+Cistdm9pZCB0b19qc29uKEJhc2ljSnNvblR5 cGUmIGosIGNvbnN0IFQoJmFycilbTl0pIC8vIE5PTElOVChjcHBjb3JlZ3VpZGVsaW5lcy1hdm9p ZC1jLWFycmF5cyxoaWNwcC1hdm9pZC1jLWFycmF5cyxtb2Rlcm5pemUtYXZvaWQtYy1hcnJheXMp CisteworLSAgICBleHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1ZV90OjphcnJheT46OmNvbnN0cnVj dChqLCBhcnIpOworLX0KKy0KKy10ZW1wbGF0ZSA8IHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5 cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgZW5hYmxlX2lmX3QgPCBzdGQ6OmlzX2NvbnN0cnVjdGli bGU8QmFzaWNKc29uVHlwZSwgVDE+Ojp2YWx1ZSYmIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxCYXNp Y0pzb25UeXBlLCBUMj46OnZhbHVlLCBpbnQgPiA9IDAgPgorLXZvaWQgdG9fanNvbihCYXNpY0pz b25UeXBlJiBqLCBjb25zdCBzdGQ6OnBhaXI8VDEsIFQyPiYgcCkKKy17CistICAgIGogPSB7IHAu Zmlyc3QsIHAuc2Vjb25kIH07CistfQorLQorLS8vIGZvciBodHRwczovL2dpdGh1Yi5jb20vbmxv aG1hbm4vanNvbi9wdWxsLzExMzQKKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0 eXBlbmFtZSBULAorLSAgICAgICAgIGVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBpdGVyYXRp b25fcHJveHlfdmFsdWU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6aXRlcmF0b3I+Pjo6dmFsdWUs IGludD4gPSAwPgorLXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCBjb25zdCBUJiBiKQor LXsKKy0gICAgaiA9IHsge2Iua2V5KCksIGIudmFsdWUoKX0gfTsKKy19CistCistdGVtcGxhdGU8 dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVHVwbGUsIHN0ZDo6c2l6ZV90Li4uIElk eD4KKy12b2lkIHRvX2pzb25fdHVwbGVfaW1wbChCYXNpY0pzb25UeXBlJiBqLCBjb25zdCBUdXBs ZSYgdCwgaW5kZXhfc2VxdWVuY2U8SWR4Li4uPiAvKnVudXNlZCovKQorLXsKKy0gICAgaiA9IHsg c3RkOjpnZXQ8SWR4Pih0KS4uLiB9OworLX0KKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pz b25UeXBlLCB0eXBlbmFtZSBULCBlbmFibGVfaWZfdDxpc19jb25zdHJ1Y3RpYmxlX3R1cGxlPEJh c2ljSnNvblR5cGUsIFQ+Ojp2YWx1ZSwgaW50ID4gPSAwPgorLXZvaWQgdG9fanNvbihCYXNpY0pz b25UeXBlJiBqLCBjb25zdCBUJiB0KQorLXsKKy0gICAgdG9fanNvbl90dXBsZV9pbXBsKGosIHQs IG1ha2VfaW5kZXhfc2VxdWVuY2U8c3RkOjp0dXBsZV9zaXplPFQ+Ojp2YWx1ZT4ge30pOworLX0K Ky0KKy0jaWYgSlNPTl9IQVNfRklMRVNZU1RFTSB8fCBKU09OX0hBU19FWFBFUklNRU5UQUxfRklM RVNZU1RFTQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+Cistdm9pZCB0b19qc29u KEJhc2ljSnNvblR5cGUmIGosIGNvbnN0IHN0ZF9mczo6cGF0aCYgcCkKKy17CistICAgIGogPSBw LnN0cmluZygpOworLX0KKy0jZW5kaWYKKy0KKy1zdHJ1Y3QgdG9fanNvbl9mbgorLXsKKy0gICAg dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVD4KKy0gICAgYXV0byBv cGVyYXRvcigpKEJhc2ljSnNvblR5cGUmIGosIFQmJiB2YWwpIGNvbnN0IG5vZXhjZXB0KG5vZXhj ZXB0KHRvX2pzb24oaiwgc3RkOjpmb3J3YXJkPFQ+KHZhbCkpKSkKKy0gICAgLT4gZGVjbHR5cGUo dG9fanNvbihqLCBzdGQ6OmZvcndhcmQ8VD4odmFsKSksIHZvaWQoKSkKKy0gICAgeworLSAgICAg ICAgcmV0dXJuIHRvX2pzb24oaiwgc3RkOjpmb3J3YXJkPFQ+KHZhbCkpOworLSAgICB9CistfTsK Ky19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistCistLy8vIG5hbWVzcGFjZSB0byBob2xkIGRlZmF1 bHQgYHRvX2pzb25gIGZ1bmN0aW9uCistLy8vIHRvIHNlZSB3aHkgdGhpcyBpcyByZXF1aXJlZDoK Ky0vLy8gaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMv MjAxNS9uNDM4MS5odG1sCistbmFtZXNwYWNlIC8vIE5PTElOVChjZXJ0LWRjbDU5LWNwcCxmdWNo c2lhLWhlYWRlci1hbm9uLW5hbWVzcGFjZXMsZ29vZ2xlLWJ1aWxkLW5hbWVzcGFjZXMpCistewor LWNvbnN0ZXhwciBjb25zdCBhdXRvJiB0b19qc29uID0gZGV0YWlsOjpzdGF0aWNfY29uc3Q8ZGV0 YWlsOjp0b19qc29uX2ZuPjo6dmFsdWU7IC8vIE5PTElOVChtaXNjLWRlZmluaXRpb25zLWluLWhl YWRlcnMpCistfSAvLyBuYW1lc3BhY2UKKy19IC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8v ICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWV0YS9pZGVudGl0eV90YWcuaHBwPgorLQorLS8v ICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWV0YS90eXBlX3RyYWl0cy5ocHA+CistCistCist bmFtZXNwYWNlIG5sb2htYW5uCisteworLQorLS8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5u Lm1lL2FwaS9hZGxfc2VyaWFsaXplci8KKy10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5 cGVuYW1lPgorLXN0cnVjdCBhZGxfc2VyaWFsaXplcgorLXsKKy0gICAgLy8vIEBicmllZiBjb252 ZXJ0IGEgSlNPTiB2YWx1ZSB0byBhbnkgdmFsdWUgdHlwZQorLSAgICAvLy8gQHNhIGh0dHBzOi8v anNvbi5ubG9obWFubi5tZS9hcGkvYWRsX3NlcmlhbGl6ZXIvZnJvbV9qc29uLworLSAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBUYXJnZXRUeXBlID0gVmFsdWVU eXBlPgorLSAgICBzdGF0aWMgYXV0byBmcm9tX2pzb24oQmFzaWNKc29uVHlwZSAmJiBqLCBUYXJn ZXRUeXBlJiB2YWwpIG5vZXhjZXB0KAorLSAgICAgICAgbm9leGNlcHQoOjpubG9obWFubjo6ZnJv bV9qc29uKHN0ZDo6Zm9yd2FyZDxCYXNpY0pzb25UeXBlPihqKSwgdmFsKSkpCistICAgIC0+IGRl Y2x0eXBlKDo6bmxvaG1hbm46OmZyb21fanNvbihzdGQ6OmZvcndhcmQ8QmFzaWNKc29uVHlwZT4o aiksIHZhbCksIHZvaWQoKSkKKy0gICAgeworLSAgICAgICAgOjpubG9obWFubjo6ZnJvbV9qc29u KHN0ZDo6Zm9yd2FyZDxCYXNpY0pzb25UeXBlPihqKSwgdmFsKTsKKy0gICAgfQorLQorLSAgICAv Ly8gQGJyaWVmIGNvbnZlcnQgYSBKU09OIHZhbHVlIHRvIGFueSB2YWx1ZSB0eXBlCistICAgIC8v LyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9hZGxfc2VyaWFsaXplci9mcm9tX2pz b24vCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFRhcmdl dFR5cGUgPSBWYWx1ZVR5cGU+CistICAgIHN0YXRpYyBhdXRvIGZyb21fanNvbihCYXNpY0pzb25U eXBlICYmIGopIG5vZXhjZXB0KAorLSAgICBub2V4Y2VwdCg6Om5sb2htYW5uOjpmcm9tX2pzb24o c3RkOjpmb3J3YXJkPEJhc2ljSnNvblR5cGU+KGopLCBkZXRhaWw6OmlkZW50aXR5X3RhZzxUYXJn ZXRUeXBlPiB7fSkpKQorLSAgICAtPiBkZWNsdHlwZSg6Om5sb2htYW5uOjpmcm9tX2pzb24oc3Rk Ojpmb3J3YXJkPEJhc2ljSnNvblR5cGU+KGopLCBkZXRhaWw6OmlkZW50aXR5X3RhZzxUYXJnZXRU eXBlPiB7fSkpCistICAgIHsKKy0gICAgICAgIHJldHVybiA6Om5sb2htYW5uOjpmcm9tX2pzb24o c3RkOjpmb3J3YXJkPEJhc2ljSnNvblR5cGU+KGopLCBkZXRhaWw6OmlkZW50aXR5X3RhZzxUYXJn ZXRUeXBlPiB7fSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBjb252ZXJ0IGFueSB2YWx1 ZSB0eXBlIHRvIGEgSlNPTiB2YWx1ZQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFu bi5tZS9hcGkvYWRsX3NlcmlhbGl6ZXIvdG9fanNvbi8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUg QmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVGFyZ2V0VHlwZSA9IFZhbHVlVHlwZT4KKy0gICAgc3Rh dGljIGF1dG8gdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCBUYXJnZXRUeXBlICYmIHZhbCkgbm9l eGNlcHQoCistICAgICAgICBub2V4Y2VwdCg6Om5sb2htYW5uOjp0b19qc29uKGosIHN0ZDo6Zm9y d2FyZDxUYXJnZXRUeXBlPih2YWwpKSkpCistICAgIC0+IGRlY2x0eXBlKDo6bmxvaG1hbm46OnRv X2pzb24oaiwgc3RkOjpmb3J3YXJkPFRhcmdldFR5cGU+KHZhbCkpLCB2b2lkKCkpCistICAgIHsK Ky0gICAgICAgIDo6bmxvaG1hbm46OnRvX2pzb24oaiwgc3RkOjpmb3J3YXJkPFRhcmdldFR5cGU+ KHZhbCkpOworLSAgICB9CistfTsKKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAj aW5jbHVkZSA8bmxvaG1hbm4vYnl0ZV9jb250YWluZXJfd2l0aF9zdWJ0eXBlLmhwcD4KKy0KKy0K Ky0jaW5jbHVkZSA8Y3N0ZGludD4gLy8gdWludDhfdCwgdWludDY0X3QKKy0jaW5jbHVkZSA8dHVw bGU+IC8vIHRpZQorLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBtb3ZlCistCistbmFtZXNwYWNlIG5s b2htYW5uCisteworLQorLS8vLyBAYnJpZWYgYW4gaW50ZXJuYWwgdHlwZSBmb3IgYSBiYWNrZWQg YmluYXJ5IHR5cGUKKy0vLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYnl0ZV9j b250YWluZXJfd2l0aF9zdWJ0eXBlLworLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeVR5cGU+Cist Y2xhc3MgYnl0ZV9jb250YWluZXJfd2l0aF9zdWJ0eXBlIDogcHVibGljIEJpbmFyeVR5cGUKKy17 CistICBwdWJsaWM6CistICAgIHVzaW5nIGNvbnRhaW5lcl90eXBlID0gQmluYXJ5VHlwZTsKKy0g ICAgdXNpbmcgc3VidHlwZV90eXBlID0gc3RkOjp1aW50NjRfdDsKKy0KKy0gICAgLy8vIEBzYSBo dHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2J5dGVfY29udGFpbmVyX3dpdGhfc3VidHlwZS9i eXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUvCistICAgIGJ5dGVfY29udGFpbmVyX3dpdGhfc3Vi dHlwZSgpIG5vZXhjZXB0KG5vZXhjZXB0KGNvbnRhaW5lcl90eXBlKCkpKQorLSAgICAgICAgOiBj b250YWluZXJfdHlwZSgpCistICAgIHt9CistCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5s b2htYW5uLm1lL2FwaS9ieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUvYnl0ZV9jb250YWluZXJf d2l0aF9zdWJ0eXBlLworLSAgICBieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUoY29uc3QgY29u dGFpbmVyX3R5cGUmIGIpIG5vZXhjZXB0KG5vZXhjZXB0KGNvbnRhaW5lcl90eXBlKGIpKSkKKy0g ICAgICAgIDogY29udGFpbmVyX3R5cGUoYikKKy0gICAge30KKy0KKy0gICAgLy8vIEBzYSBodHRw czovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2J5dGVfY29udGFpbmVyX3dpdGhfc3VidHlwZS9ieXRl X2NvbnRhaW5lcl93aXRoX3N1YnR5cGUvCistICAgIGJ5dGVfY29udGFpbmVyX3dpdGhfc3VidHlw ZShjb250YWluZXJfdHlwZSYmIGIpIG5vZXhjZXB0KG5vZXhjZXB0KGNvbnRhaW5lcl90eXBlKHN0 ZDo6bW92ZShiKSkpKQorLSAgICAgICAgOiBjb250YWluZXJfdHlwZShzdGQ6Om1vdmUoYikpCist ICAgIHt9CistCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9ieXRl X2NvbnRhaW5lcl93aXRoX3N1YnR5cGUvYnl0ZV9jb250YWluZXJfd2l0aF9zdWJ0eXBlLworLSAg ICBieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUoY29uc3QgY29udGFpbmVyX3R5cGUmIGIsIHN1 YnR5cGVfdHlwZSBzdWJ0eXBlXykgbm9leGNlcHQobm9leGNlcHQoY29udGFpbmVyX3R5cGUoYikp KQorLSAgICAgICAgOiBjb250YWluZXJfdHlwZShiKQorLSAgICAgICAgLCBtX3N1YnR5cGUoc3Vi dHlwZV8pCistICAgICAgICAsIG1faGFzX3N1YnR5cGUodHJ1ZSkKKy0gICAge30KKy0KKy0gICAg Ly8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2J5dGVfY29udGFpbmVyX3dpdGhf c3VidHlwZS9ieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUvCistICAgIGJ5dGVfY29udGFpbmVy X3dpdGhfc3VidHlwZShjb250YWluZXJfdHlwZSYmIGIsIHN1YnR5cGVfdHlwZSBzdWJ0eXBlXykg bm9leGNlcHQobm9leGNlcHQoY29udGFpbmVyX3R5cGUoc3RkOjptb3ZlKGIpKSkpCistICAgICAg ICA6IGNvbnRhaW5lcl90eXBlKHN0ZDo6bW92ZShiKSkKKy0gICAgICAgICwgbV9zdWJ0eXBlKHN1 YnR5cGVfKQorLSAgICAgICAgLCBtX2hhc19zdWJ0eXBlKHRydWUpCistICAgIHt9CistCistICAg IGJvb2wgb3BlcmF0b3I9PShjb25zdCBieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUmIHJocykg Y29uc3QKKy0gICAgeworLSAgICAgICAgcmV0dXJuIHN0ZDo6dGllKHN0YXRpY19jYXN0PGNvbnN0 IEJpbmFyeVR5cGUmPigqdGhpcyksIG1fc3VidHlwZSwgbV9oYXNfc3VidHlwZSkgPT0KKy0gICAg ICAgICAgICAgICBzdGQ6OnRpZShzdGF0aWNfY2FzdDxjb25zdCBCaW5hcnlUeXBlJj4ocmhzKSwg cmhzLm1fc3VidHlwZSwgcmhzLm1faGFzX3N1YnR5cGUpOworLSAgICB9CistCistICAgIGJvb2wg b3BlcmF0b3IhPShjb25zdCBieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUmIHJocykgY29uc3QK Ky0gICAgeworLSAgICAgICAgcmV0dXJuICEocmhzID09ICp0aGlzKTsKKy0gICAgfQorLQorLSAg ICAvLy8gQGJyaWVmIHNldHMgdGhlIGJpbmFyeSBzdWJ0eXBlCistICAgIC8vLyBAc2EgaHR0cHM6 Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9ieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGUvc2V0X3N1 YnR5cGUvCistICAgIHZvaWQgc2V0X3N1YnR5cGUoc3VidHlwZV90eXBlIHN1YnR5cGVfKSBub2V4 Y2VwdAorLSAgICB7CistICAgICAgICBtX3N1YnR5cGUgPSBzdWJ0eXBlXzsKKy0gICAgICAgIG1f aGFzX3N1YnR5cGUgPSB0cnVlOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJuIHRo ZSBiaW5hcnkgc3VidHlwZQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYnl0ZV9jb250YWluZXJfd2l0aF9zdWJ0eXBlL3N1YnR5cGUvCistICAgIGNvbnN0ZXhwciBz dWJ0eXBlX3R5cGUgc3VidHlwZSgpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJl dHVybiBtX2hhc19zdWJ0eXBlID8gbV9zdWJ0eXBlIDogc3RhdGljX2Nhc3Q8c3VidHlwZV90eXBl PigtMSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm4gd2hldGhlciB0aGUgdmFs dWUgaGFzIGEgc3VidHlwZQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYnl0ZV9jb250YWluZXJfd2l0aF9zdWJ0eXBlL2hhc19zdWJ0eXBlLworLSAgICBjb25zdGV4 cHIgYm9vbCBoYXNfc3VidHlwZSgpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJl dHVybiBtX2hhc19zdWJ0eXBlOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgY2xlYXJzIHRo ZSBiaW5hcnkgc3VidHlwZQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYnl0ZV9jb250YWluZXJfd2l0aF9zdWJ0eXBlL2NsZWFyX3N1YnR5cGUvCistICAgIHZvaWQg Y2xlYXJfc3VidHlwZSgpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIG1fc3VidHlwZSA9IDA7 CistICAgICAgICBtX2hhc19zdWJ0eXBlID0gZmFsc2U7CistICAgIH0KKy0KKy0gIHByaXZhdGU6 CistICAgIHN1YnR5cGVfdHlwZSBtX3N1YnR5cGUgPSAwOworLSAgICBib29sIG1faGFzX3N1YnR5 cGUgPSBmYWxzZTsKKy19OworLQorLX0gIC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vICNp bmNsdWRlIDxubG9obWFubi9kZXRhaWwvY29udmVyc2lvbnMvZnJvbV9qc29uLmhwcD4KKy0KKy0v LyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL2NvbnZlcnNpb25zL3RvX2pzb24uaHBwPgorLQor LS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvZXhjZXB0aW9ucy5ocHA+CistCistLy8gI2lu Y2x1ZGUgPG5sb2htYW5uL2RldGFpbC9oYXNoLmhwcD4KKy0KKy0KKy0jaW5jbHVkZSA8Y3N0ZGlu dD4gLy8gdWludDhfdAorLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKKy0jaW5jbHVkZSA8 ZnVuY3Rpb25hbD4gLy8gaGFzaAorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWFj cm9fc2NvcGUuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvdmFsdWVfdC5o cHA+CistCistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRhaWwKKy17 CistCistLy8gYm9vc3Q6Omhhc2hfY29tYmluZQorLWlubGluZSBzdGQ6OnNpemVfdCBjb21iaW5l KHN0ZDo6c2l6ZV90IHNlZWQsIHN0ZDo6c2l6ZV90IGgpIG5vZXhjZXB0CisteworLSAgICBzZWVk IF49IGggKyAweDllMzc3OWI5ICsgKHNlZWQgPDwgNlUpICsgKHNlZWQgPj4gMlUpOworLSAgICBy ZXR1cm4gc2VlZDsKKy19CistCistLyohCistQGJyaWVmIGhhc2ggYSBKU09OIHZhbHVlCistCist VGhlIGhhc2ggZnVuY3Rpb24gdHJpZXMgdG8gcmVseSBvbiBzdGQ6Omhhc2ggd2hlcmUgcG9zc2li bGUuIEZ1cnRoZXJtb3JlLCB0aGUKKy10eXBlIG9mIHRoZSBKU09OIHZhbHVlIGlzIHRha2VuIGlu dG8gYWNjb3VudCB0byBoYXZlIGRpZmZlcmVudCBoYXNoIHZhbHVlcyBmb3IKKy1udWxsLCAwLCAw VSwgYW5kIGZhbHNlLCBldGMuCistCistQHRwYXJhbSBCYXNpY0pzb25UeXBlIGJhc2ljX2pzb24g c3BlY2lhbGl6YXRpb24KKy1AcGFyYW0gaiBKU09OIHZhbHVlIHRvIGhhc2gKKy1AcmV0dXJuIGhh c2ggdmFsdWUgb2YgagorLSovCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy1z dGQ6OnNpemVfdCBoYXNoKGNvbnN0IEJhc2ljSnNvblR5cGUmIGopCisteworLSAgICB1c2luZyBz dHJpbmdfdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190OworLSAgICB1c2luZyBu dW1iZXJfaW50ZWdlcl90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2ludGVnZXJf dDsKKy0gICAgdXNpbmcgbnVtYmVyX3Vuc2lnbmVkX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBl OjpudW1iZXJfdW5zaWduZWRfdDsKKy0gICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3QgPSB0eXBlbmFt ZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfZmxvYXRfdDsKKy0KKy0gICAgY29uc3QgYXV0byB0eXBl ID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGoudHlwZSgpKTsKKy0gICAgc3dpdGNoIChqLnR5 cGUoKSkKKy0gICAgeworLSAgICAgICAgY2FzZSBCYXNpY0pzb25UeXBlOjp2YWx1ZV90OjpudWxs OgorLSAgICAgICAgY2FzZSBCYXNpY0pzb25UeXBlOjp2YWx1ZV90OjpkaXNjYXJkZWQ6CistICAg ICAgICB7CistICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmUodHlwZSwgMCk7CistICAgICAgICB9 CistCistICAgICAgICBjYXNlIEJhc2ljSnNvblR5cGU6OnZhbHVlX3Q6Om9iamVjdDoKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICBhdXRvIHNlZWQgPSBjb21iaW5lKHR5cGUsIGouc2l6ZSgpKTsK Ky0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBqLml0ZW1zKCkpCistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGggPSBzdGQ6Omhhc2g8c3Ry aW5nX3Q+IHt9KGVsZW1lbnQua2V5KCkpOworLSAgICAgICAgICAgICAgICBzZWVkID0gY29tYmlu ZShzZWVkLCBoKTsKKy0gICAgICAgICAgICAgICAgc2VlZCA9IGNvbWJpbmUoc2VlZCwgaGFzaChl bGVtZW50LnZhbHVlKCkpKTsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgcmV0dXJuIHNl ZWQ7CistICAgICAgICB9CistCistICAgICAgICBjYXNlIEJhc2ljSnNvblR5cGU6OnZhbHVlX3Q6 OmFycmF5OgorLSAgICAgICAgeworLSAgICAgICAgICAgIGF1dG8gc2VlZCA9IGNvbWJpbmUodHlw ZSwgai5zaXplKCkpOworLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IGop CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzZWVkID0gY29tYmluZShzZWVkLCBo YXNoKGVsZW1lbnQpKTsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgcmV0dXJuIHNlZWQ7 CistICAgICAgICB9CistCistICAgICAgICBjYXNlIEJhc2ljSnNvblR5cGU6OnZhbHVlX3Q6OnN0 cmluZzoKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjb25zdCBhdXRvIGggPSBzdGQ6Omhhc2g8 c3RyaW5nX3Q+IHt9KGoudGVtcGxhdGUgZ2V0X3JlZjxjb25zdCBzdHJpbmdfdCY+KCkpOworLSAg ICAgICAgICAgIHJldHVybiBjb21iaW5lKHR5cGUsIGgpOworLSAgICAgICAgfQorLQorLSAgICAg ICAgY2FzZSBCYXNpY0pzb25UeXBlOjp2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgeworLSAg ICAgICAgICAgIGNvbnN0IGF1dG8gaCA9IHN0ZDo6aGFzaDxib29sPiB7fShqLnRlbXBsYXRlIGdl dDxib29sPigpKTsKKy0gICAgICAgICAgICByZXR1cm4gY29tYmluZSh0eXBlLCBoKTsKKy0gICAg ICAgIH0KKy0KKy0gICAgICAgIGNhc2UgQmFzaWNKc29uVHlwZTo6dmFsdWVfdDo6bnVtYmVyX2lu dGVnZXI6CistICAgICAgICB7CistICAgICAgICAgICAgY29uc3QgYXV0byBoID0gc3RkOjpoYXNo PG51bWJlcl9pbnRlZ2VyX3Q+IHt9KGoudGVtcGxhdGUgZ2V0PG51bWJlcl9pbnRlZ2VyX3Q+KCkp OworLSAgICAgICAgICAgIHJldHVybiBjb21iaW5lKHR5cGUsIGgpOworLSAgICAgICAgfQorLQor LSAgICAgICAgY2FzZSBCYXNpY0pzb25UeXBlOjp2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6Cist ICAgICAgICB7CistICAgICAgICAgICAgY29uc3QgYXV0byBoID0gc3RkOjpoYXNoPG51bWJlcl91 bnNpZ25lZF90PiB7fShqLnRlbXBsYXRlIGdldDxudW1iZXJfdW5zaWduZWRfdD4oKSk7CistICAg ICAgICAgICAgcmV0dXJuIGNvbWJpbmUodHlwZSwgaCk7CistICAgICAgICB9CistCistICAgICAg ICBjYXNlIEJhc2ljSnNvblR5cGU6OnZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICBjb25zdCBhdXRvIGggPSBzdGQ6Omhhc2g8bnVtYmVyX2Zsb2F0X3Q+IHt9 KGoudGVtcGxhdGUgZ2V0PG51bWJlcl9mbG9hdF90PigpKTsKKy0gICAgICAgICAgICByZXR1cm4g Y29tYmluZSh0eXBlLCBoKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIGNhc2UgQmFzaWNKc29u VHlwZTo6dmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgeworLSAgICAgICAgICAgIGF1dG8gc2Vl ZCA9IGNvbWJpbmUodHlwZSwgai5nZXRfYmluYXJ5KCkuc2l6ZSgpKTsKKy0gICAgICAgICAgICBj b25zdCBhdXRvIGggPSBzdGQ6Omhhc2g8Ym9vbD4ge30oai5nZXRfYmluYXJ5KCkuaGFzX3N1YnR5 cGUoKSk7CistICAgICAgICAgICAgc2VlZCA9IGNvbWJpbmUoc2VlZCwgaCk7CistICAgICAgICAg ICAgc2VlZCA9IGNvbWJpbmUoc2VlZCwgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGouZ2V0X2Jp bmFyeSgpLnN1YnR5cGUoKSkpOworLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byBieXRlIDog ai5nZXRfYmluYXJ5KCkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzZWVkID0g Y29tYmluZShzZWVkLCBzdGQ6Omhhc2g8c3RkOjp1aW50OF90PiB7fShieXRlKSk7CistICAgICAg ICAgICAgfQorLSAgICAgICAgICAgIHJldHVybiBzZWVkOworLSAgICAgICAgfQorLQorLSAgICAg ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAg ICAgICBKU09OX0FTU0VSVChmYWxzZSk7IC8vIE5PTElOVChjZXJ0LWRjbDAzLWMsaGljcHAtc3Rh dGljLWFzc2VydCxtaXNjLXN0YXRpYy1hc3NlcnQpIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAg ICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAvLyBMQ09WX0VYQ0xfTElORQorLSAgICB9CistfQor LQorLX0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0K Ky0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL2lucHV0L2JpbmFyeV9yZWFkZXIuaHBwPgor LQorLQorLSNpbmNsdWRlIDxhbGdvcml0aG0+IC8vIGdlbmVyYXRlX24KKy0jaW5jbHVkZSA8YXJy YXk+IC8vIGFycmF5CistI2luY2x1ZGUgPGNtYXRoPiAvLyBsZGV4cAorLSNpbmNsdWRlIDxjc3Rk ZGVmPiAvLyBzaXplX3QKKy0jaW5jbHVkZSA8Y3N0ZGludD4gLy8gdWludDhfdCwgdWludDE2X3Qs IHVpbnQzMl90LCB1aW50NjRfdAorLSNpbmNsdWRlIDxjc3RkaW8+IC8vIHNucHJpbnRmCistI2lu Y2x1ZGUgPGNzdHJpbmc+IC8vIG1lbWNweQorLSNpbmNsdWRlIDxpdGVyYXRvcj4gLy8gYmFja19p bnNlcnRlcgorLSNpbmNsdWRlIDxsaW1pdHM+IC8vIG51bWVyaWNfbGltaXRzCistI2luY2x1ZGUg PHN0cmluZz4gLy8gY2hhcl90cmFpdHMsIHN0cmluZworLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBt YWtlX3BhaXIsIG1vdmUKKy0jaW5jbHVkZSA8dmVjdG9yPiAvLyB2ZWN0b3IKKy0KKy0vLyAjaW5j bHVkZSA8bmxvaG1hbm4vZGV0YWlsL2V4Y2VwdGlvbnMuaHBwPgorLQorLS8vICNpbmNsdWRlIDxu bG9obWFubi9kZXRhaWwvaW5wdXQvaW5wdXRfYWRhcHRlcnMuaHBwPgorLQorLQorLSNpbmNsdWRl IDxhcnJheT4gLy8gYXJyYXkKKy0jaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gc2l6ZV90CistI2luY2x1 ZGUgPGNzdHJpbmc+IC8vIHN0cmxlbgorLSNpbmNsdWRlIDxpdGVyYXRvcj4gLy8gYmVnaW4sIGVu ZCwgaXRlcmF0b3JfdHJhaXRzLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgZGlzdGFuY2Us IG5leHQKKy0jaW5jbHVkZSA8bWVtb3J5PiAvLyBzaGFyZWRfcHRyLCBtYWtlX3NoYXJlZCwgYWRk cmVzc29mCistI2luY2x1ZGUgPG51bWVyaWM+IC8vIGFjY3VtdWxhdGUKKy0jaW5jbHVkZSA8c3Ry aW5nPiAvLyBzdHJpbmcsIGNoYXJfdHJhaXRzCistI2luY2x1ZGUgPHR5cGVfdHJhaXRzPiAvLyBl bmFibGVfaWYsIGlzX2Jhc2Vfb2YsIGlzX3BvaW50ZXIsIGlzX2ludGVncmFsLCByZW1vdmVfcG9p bnRlcgorLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBwYWlyLCBkZWNsdmFsCistCistI2lmbmRlZiBK U09OX05PX0lPCistICAgICNpbmNsdWRlIDxjc3RkaW8+ICAgLy8gRklMRSAqCistICAgICNpbmNs dWRlIDxpc3RyZWFtPiAgLy8gaXN0cmVhbQorLSNlbmRpZiAgICAgICAgICAgICAgICAgIC8vIEpT T05fTk9fSU8KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL2l0ZXJhdG9ycy9pdGVy YXRvcl90cmFpdHMuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWFjcm9f c2NvcGUuaHBwPgorLQorLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0 YWlsCisteworLS8vLyB0aGUgc3VwcG9ydGVkIGlucHV0IGZvcm1hdHMKKy1lbnVtIGNsYXNzIGlu cHV0X2Zvcm1hdF90IHsganNvbiwgY2JvciwgbXNncGFjaywgdWJqc29uLCBic29uIH07CistCist Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy0vLyBpbnB1dCBhZGFwdGVycyAvLworLS8vLy8vLy8vLy8v Ly8vLy8vLy8vCistCistI2lmbmRlZiBKU09OX05PX0lPCistLyohCistSW5wdXQgYWRhcHRlciBm b3Igc3RkaW8gZmlsZSBhY2Nlc3MuIFRoaXMgYWRhcHRlciByZWFkIG9ubHkgMSBieXRlIGFuZCBk byBub3QgdXNlIGFueQorLSBidWZmZXIuIFRoaXMgYWRhcHRlciBpcyBhIHZlcnkgbG93IGxldmVs IGFkYXB0ZXIuCistKi8KKy1jbGFzcyBmaWxlX2lucHV0X2FkYXB0ZXIKKy17CistICBwdWJsaWM6 CistICAgIHVzaW5nIGNoYXJfdHlwZSA9IGNoYXI7CistCistICAgIEpTT05fSEVETEVZX05PTl9O VUxMKDIpCistICAgIGV4cGxpY2l0IGZpbGVfaW5wdXRfYWRhcHRlcihzdGQ6OkZJTEUqIGYpIG5v ZXhjZXB0CistICAgICAgICA6IG1fZmlsZShmKQorLSAgICB7fQorLQorLSAgICAvLyBtYWtlIGNs YXNzIG1vdmUtb25seQorLSAgICBmaWxlX2lucHV0X2FkYXB0ZXIoY29uc3QgZmlsZV9pbnB1dF9h ZGFwdGVyJikgPSBkZWxldGU7CistICAgIGZpbGVfaW5wdXRfYWRhcHRlcihmaWxlX2lucHV0X2Fk YXB0ZXImJikgbm9leGNlcHQgPSBkZWZhdWx0OworLSAgICBmaWxlX2lucHV0X2FkYXB0ZXImIG9w ZXJhdG9yPShjb25zdCBmaWxlX2lucHV0X2FkYXB0ZXImKSA9IGRlbGV0ZTsKKy0gICAgZmlsZV9p bnB1dF9hZGFwdGVyJiBvcGVyYXRvcj0oZmlsZV9pbnB1dF9hZGFwdGVyJiYpID0gZGVsZXRlOwor LSAgICB+ZmlsZV9pbnB1dF9hZGFwdGVyKCkgPSBkZWZhdWx0OworLQorLSAgICBzdGQ6OmNoYXJf dHJhaXRzPGNoYXI+OjppbnRfdHlwZSBnZXRfY2hhcmFjdGVyKCkgbm9leGNlcHQKKy0gICAgewor LSAgICAgICAgcmV0dXJuIHN0ZDo6ZmdldGMobV9maWxlKTsKKy0gICAgfQorLQorLSAgcHJpdmF0 ZToKKy0gICAgLy8vIHRoZSBmaWxlIHBvaW50ZXIgdG8gcmVhZCBmcm9tCistICAgIHN0ZDo6RklM RSogbV9maWxlOworLX07CistCistCistLyohCistSW5wdXQgYWRhcHRlciBmb3IgYSAoY2FjaGlu ZykgaXN0cmVhbS4gSWdub3JlcyBhIFVGVCBCeXRlIE9yZGVyIE1hcmsgYXQKKy1iZWdpbm5pbmcg b2YgaW5wdXQuIERvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhlIHVuZGVybHlpbmcgc3RkOjpz dHJlYW1idWYKKy1pbiBtaWQtaW5wdXQuIE1haW50YWlucyB1bmRlcmx5aW5nIHN0ZDo6aXN0cmVh bSBhbmQgc3RkOjpzdHJlYW1idWYgdG8gc3VwcG9ydAorLXN1YnNlcXVlbnQgdXNlIG9mIHN0YW5k YXJkIHN0ZDo6aXN0cmVhbSBvcGVyYXRpb25zIHRvIHByb2Nlc3MgYW55IGlucHV0CistY2hhcmFj dGVycyBmb2xsb3dpbmcgdGhvc2UgdXNlZCBpbiBwYXJzaW5nIHRoZSBKU09OIGlucHV0LiAgQ2xl YXJzIHRoZQorLXN0ZDo6aXN0cmVhbSBmbGFnczsgYW55IGlucHV0IGVycm9ycyAoZS5nLiwgRU9G KSB3aWxsIGJlIGRldGVjdGVkIGJ5IHRoZSBmaXJzdAorLXN1YnNlcXVlbnQgY2FsbCBmb3IgaW5w dXQgZnJvbSB0aGUgc3RkOjppc3RyZWFtLgorLSovCistY2xhc3MgaW5wdXRfc3RyZWFtX2FkYXB0 ZXIKKy17CistICBwdWJsaWM6CistICAgIHVzaW5nIGNoYXJfdHlwZSA9IGNoYXI7CistCistICAg IH5pbnB1dF9zdHJlYW1fYWRhcHRlcigpCistICAgIHsKKy0gICAgICAgIC8vIGNsZWFyIHN0cmVh bSBmbGFnczsgd2UgdXNlIHVuZGVybHlpbmcgc3RyZWFtYnVmIEkvTywgZG8gbm90CistICAgICAg ICAvLyBtYWludGFpbiBpZnN0cmVhbSBmbGFncywgZXhjZXB0IGVvZgorLSAgICAgICAgaWYgKGlz ICE9IG51bGxwdHIpCistICAgICAgICB7CistICAgICAgICAgICAgaXMtPmNsZWFyKGlzLT5yZHN0 YXRlKCkgJiBzdGQ6Omlvczo6ZW9mYml0KTsKKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICBl eHBsaWNpdCBpbnB1dF9zdHJlYW1fYWRhcHRlcihzdGQ6OmlzdHJlYW0mIGkpCistICAgICAgICA6 IGlzKCZpKSwgc2IoaS5yZGJ1ZigpKQorLSAgICB7fQorLQorLSAgICAvLyBkZWxldGUgYmVjYXVz ZSBvZiBwb2ludGVyIG1lbWJlcnMKKy0gICAgaW5wdXRfc3RyZWFtX2FkYXB0ZXIoY29uc3QgaW5w dXRfc3RyZWFtX2FkYXB0ZXImKSA9IGRlbGV0ZTsKKy0gICAgaW5wdXRfc3RyZWFtX2FkYXB0ZXIm IG9wZXJhdG9yPShpbnB1dF9zdHJlYW1fYWRhcHRlciYpID0gZGVsZXRlOworLSAgICBpbnB1dF9z dHJlYW1fYWRhcHRlciYgb3BlcmF0b3I9KGlucHV0X3N0cmVhbV9hZGFwdGVyJiYpID0gZGVsZXRl OworLQorLSAgICBpbnB1dF9zdHJlYW1fYWRhcHRlcihpbnB1dF9zdHJlYW1fYWRhcHRlciYmIHJo cykgbm9leGNlcHQKKy0gICAgICAgIDogaXMocmhzLmlzKSwgc2IocmhzLnNiKQorLSAgICB7Cist ICAgICAgICByaHMuaXMgPSBudWxscHRyOworLSAgICAgICAgcmhzLnNiID0gbnVsbHB0cjsKKy0g ICAgfQorLQorLSAgICAvLyBzdGQ6OmlzdHJlYW0vc3RkOjpzdHJlYW1idWYgdXNlIHN0ZDo6Y2hh cl90cmFpdHM8Y2hhcj46OnRvX2ludF90eXBlLCB0bworLSAgICAvLyBlbnN1cmUgdGhhdCBzdGQ6 OmNoYXJfdHJhaXRzPGNoYXI+Ojplb2YoKSBhbmQgdGhlIGNoYXJhY3RlciAweEZGIGRvIG5vdAor LSAgICAvLyBlbmQgdXAgYXMgdGhlIHNhbWUgdmFsdWUsIGUuZy4gMHhGRkZGRkZGRi4KKy0gICAg c3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGUgZ2V0X2NoYXJhY3RlcigpCistICAgIHsK Ky0gICAgICAgIGF1dG8gcmVzID0gc2ItPnNidW1wYygpOworLSAgICAgICAgLy8gc2V0IGVvZiBt YW51YWxseSwgYXMgd2UgZG9uJ3QgdXNlIHRoZSBpc3RyZWFtIGludGVyZmFjZS4KKy0gICAgICAg IGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShyZXMgPT0gc3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6 ZW9mKCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGlzLT5jbGVhcihpcy0+cmRzdGF0ZSgp IHwgc3RkOjppb3M6OmVvZmJpdCk7CistICAgICAgICB9CistICAgICAgICByZXR1cm4gcmVzOwor LSAgICB9CistCistICBwcml2YXRlOgorLSAgICAvLy8gdGhlIGFzc29jaWF0ZWQgaW5wdXQgc3Ry ZWFtCistICAgIHN0ZDo6aXN0cmVhbSogaXMgPSBudWxscHRyOworLSAgICBzdGQ6OnN0cmVhbWJ1 Ziogc2IgPSBudWxscHRyOworLX07CistI2VuZGlmICAvLyBKU09OX05PX0lPCistCistLy8gR2Vu ZXJhbC1wdXJwb3NlIGl0ZXJhdG9yLWJhc2VkIGFkYXB0ZXIuIEl0IG1pZ2h0IG5vdCBiZSBhcyBm YXN0IGFzCistLy8gdGhlb3JldGljYWxseSBwb3NzaWJsZSBmb3Igc29tZSBjb250YWluZXJzLCBi dXQgaXQgaXMgZXh0cmVtZWx5IHZlcnNhdGlsZS4KKy10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv clR5cGU+CistY2xhc3MgaXRlcmF0b3JfaW5wdXRfYWRhcHRlcgorLXsKKy0gIHB1YmxpYzoKKy0g ICAgdXNpbmcgY2hhcl90eXBlID0gdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0 b3JUeXBlPjo6dmFsdWVfdHlwZTsKKy0KKy0gICAgaXRlcmF0b3JfaW5wdXRfYWRhcHRlcihJdGVy YXRvclR5cGUgZmlyc3QsIEl0ZXJhdG9yVHlwZSBsYXN0KQorLSAgICAgICAgOiBjdXJyZW50KHN0 ZDo6bW92ZShmaXJzdCkpLCBlbmQoc3RkOjptb3ZlKGxhc3QpKQorLSAgICB7fQorLQorLSAgICB0 eXBlbmFtZSBzdGQ6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmludF90eXBlIGdldF9jaGFyYWN0 ZXIoKQorLSAgICB7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElLRUxZKGN1cnJlbnQgIT0g ZW5kKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6Y2hhcl90 cmFpdHM8Y2hhcl90eXBlPjo6dG9faW50X3R5cGUoKmN1cnJlbnQpOworLSAgICAgICAgICAgIHN0 ZDo6YWR2YW5jZShjdXJyZW50LCAxKTsKKy0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworLSAg ICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6 ZW9mKCk7CistICAgIH0KKy0KKy0gIHByaXZhdGU6CistICAgIEl0ZXJhdG9yVHlwZSBjdXJyZW50 OworLSAgICBJdGVyYXRvclR5cGUgZW5kOworLQorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNl SW5wdXRBZGFwdGVyLCBzaXplX3QgVD4KKy0gICAgZnJpZW5kIHN0cnVjdCB3aWRlX3N0cmluZ19p bnB1dF9oZWxwZXI7CistCistICAgIGJvb2wgZW1wdHkoKSBjb25zdAorLSAgICB7CistICAgICAg ICByZXR1cm4gY3VycmVudCA9PSBlbmQ7CistICAgIH0KKy19OworLQorLQorLXRlbXBsYXRlPHR5 cGVuYW1lIEJhc2VJbnB1dEFkYXB0ZXIsIHNpemVfdCBUPgorLXN0cnVjdCB3aWRlX3N0cmluZ19p bnB1dF9oZWxwZXI7CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzZUlucHV0QWRhcHRlcj4KKy1z dHJ1Y3Qgd2lkZV9zdHJpbmdfaW5wdXRfaGVscGVyPEJhc2VJbnB1dEFkYXB0ZXIsIDQ+Cistewor LSAgICAvLyBVVEYtMzIKKy0gICAgc3RhdGljIHZvaWQgZmlsbF9idWZmZXIoQmFzZUlucHV0QWRh cHRlciYgaW5wdXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8c3Rk OjpjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGUsIDQ+JiB1dGY4X2J5dGVzLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QmIHV0ZjhfYnl0ZXNfaW5kZXgsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCYgdXRmOF9ieXRlc19maWxsZWQpCistICAgIHsKKy0g ICAgICAgIHV0ZjhfYnl0ZXNfaW5kZXggPSAwOworLQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZ X1VOTElLRUxZKGlucHV0LmVtcHR5KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHV0Zjhf Ynl0ZXNbMF0gPSBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+Ojplb2YoKTsKKy0gICAgICAgICAgICB1 dGY4X2J5dGVzX2ZpbGxlZCA9IDE7CistICAgICAgICB9CistICAgICAgICBlbHNlCistICAgICAg ICB7CistICAgICAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IGNoYXJhY3RlcgorLSAgICAgICAg ICAgIGNvbnN0IGF1dG8gd2MgPSBpbnB1dC5nZXRfY2hhcmFjdGVyKCk7CistCistICAgICAgICAg ICAgLy8gVVRGLTMyIHRvIFVURi04IGVuY29kaW5nCistICAgICAgICAgICAgaWYgKHdjIDwgMHg4 MCkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNbMF0gPSBzdGF0 aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4od2MpOworLSAgICAgICAg ICAgICAgICB1dGY4X2J5dGVzX2ZpbGxlZCA9IDE7CistICAgICAgICAgICAgfQorLSAgICAgICAg ICAgIGVsc2UgaWYgKHdjIDw9IDB4N0ZGKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgdXRmOF9ieXRlc1swXSA9IHN0YXRpY19jYXN0PHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj46Omlu dF90eXBlPigweEMwdSB8ICgoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3YykgPj4gNnUpICYg MHgxRnUpKTsKKy0gICAgICAgICAgICAgICAgdXRmOF9ieXRlc1sxXSA9IHN0YXRpY19jYXN0PHN0 ZDo6Y2hhcl90cmFpdHM8Y2hhcj46OmludF90eXBlPigweDgwdSB8IChzdGF0aWNfY2FzdDx1bnNp Z25lZCBpbnQ+KHdjKSAmIDB4M0Z1KSk7CistICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNfZmls bGVkID0gMjsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgZWxzZSBpZiAod2MgPD0gMHhG RkZGKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgdXRmOF9ieXRlc1swXSA9IHN0 YXRpY19jYXN0PHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj46OmludF90eXBlPigweEUwdSB8ICgoc3Rh dGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3YykgPj4gMTJ1KSAmIDB4MEZ1KSk7CistICAgICAgICAg ICAgICAgIHV0ZjhfYnl0ZXNbMV0gPSBzdGF0aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ OjppbnRfdHlwZT4oMHg4MHUgfCAoKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4od2MpID4+IDZ1 KSAmIDB4M0Z1KSk7CistICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNbMl0gPSBzdGF0aWNfY2Fz dDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4oMHg4MHUgfCAoc3RhdGljX2Nhc3Q8 dW5zaWduZWQgaW50Pih3YykgJiAweDNGdSkpOworLSAgICAgICAgICAgICAgICB1dGY4X2J5dGVz X2ZpbGxlZCA9IDM7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2UgaWYgKHdjIDw9 IDB4MTBGRkZGKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgdXRmOF9ieXRlc1sw XSA9IHN0YXRpY19jYXN0PHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj46OmludF90eXBlPigweEYwdSB8 ICgoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3YykgPj4gMTh1KSAmIDB4MDd1KSk7CistICAg ICAgICAgICAgICAgIHV0ZjhfYnl0ZXNbMV0gPSBzdGF0aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRz PGNoYXI+OjppbnRfdHlwZT4oMHg4MHUgfCAoKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4od2Mp ID4+IDEydSkgJiAweDNGdSkpOworLSAgICAgICAgICAgICAgICB1dGY4X2J5dGVzWzJdID0gc3Rh dGljX2Nhc3Q8c3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGU+KDB4ODB1IHwgKChzdGF0 aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHdjKSA+PiA2dSkgJiAweDNGdSkpOworLSAgICAgICAgICAg ICAgICB1dGY4X2J5dGVzWzNdID0gc3RhdGljX2Nhc3Q8c3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6 aW50X3R5cGU+KDB4ODB1IHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4od2MpICYgMHgzRnUp KTsKKy0gICAgICAgICAgICAgICAgdXRmOF9ieXRlc19maWxsZWQgPSA0OworLSAgICAgICAgICAg IH0KKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAv LyB1bmtub3duIGNoYXJhY3RlcgorLSAgICAgICAgICAgICAgICB1dGY4X2J5dGVzWzBdID0gc3Rh dGljX2Nhc3Q8c3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGU+KHdjKTsKKy0gICAgICAg ICAgICAgICAgdXRmOF9ieXRlc19maWxsZWQgPSAxOworLSAgICAgICAgICAgIH0KKy0gICAgICAg IH0KKy0gICAgfQorLX07CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzZUlucHV0QWRhcHRlcj4K Ky1zdHJ1Y3Qgd2lkZV9zdHJpbmdfaW5wdXRfaGVscGVyPEJhc2VJbnB1dEFkYXB0ZXIsIDI+Cist eworLSAgICAvLyBVVEYtMTYKKy0gICAgc3RhdGljIHZvaWQgZmlsbF9idWZmZXIoQmFzZUlucHV0 QWRhcHRlciYgaW5wdXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8 c3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGUsIDQ+JiB1dGY4X2J5dGVzLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QmIHV0ZjhfYnl0ZXNfaW5kZXgsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCYgdXRmOF9ieXRlc19maWxsZWQpCistICAgIHsK Ky0gICAgICAgIHV0ZjhfYnl0ZXNfaW5kZXggPSAwOworLQorLSAgICAgICAgaWYgKEpTT05fSEVE TEVZX1VOTElLRUxZKGlucHV0LmVtcHR5KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHV0 ZjhfYnl0ZXNbMF0gPSBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+Ojplb2YoKTsKKy0gICAgICAgICAg ICB1dGY4X2J5dGVzX2ZpbGxlZCA9IDE7CistICAgICAgICB9CistICAgICAgICBlbHNlCistICAg ICAgICB7CistICAgICAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IGNoYXJhY3RlcgorLSAgICAg ICAgICAgIGNvbnN0IGF1dG8gd2MgPSBpbnB1dC5nZXRfY2hhcmFjdGVyKCk7CistCistICAgICAg ICAgICAgLy8gVVRGLTE2IHRvIFVURi04IGVuY29kaW5nCistICAgICAgICAgICAgaWYgKHdjIDwg MHg4MCkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNbMF0gPSBz dGF0aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4od2MpOworLSAgICAg ICAgICAgICAgICB1dGY4X2J5dGVzX2ZpbGxlZCA9IDE7CistICAgICAgICAgICAgfQorLSAgICAg ICAgICAgIGVsc2UgaWYgKHdjIDw9IDB4N0ZGKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgdXRmOF9ieXRlc1swXSA9IHN0YXRpY19jYXN0PHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj46 OmludF90eXBlPigweEMwdSB8ICgoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3YykgPj4gNnUp KSk7CistICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNbMV0gPSBzdGF0aWNfY2FzdDxzdGQ6OmNo YXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4oMHg4MHUgfCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg aW50Pih3YykgJiAweDNGdSkpOworLSAgICAgICAgICAgICAgICB1dGY4X2J5dGVzX2ZpbGxlZCA9 IDI7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2UgaWYgKDB4RDgwMCA+IHdjIHx8 IHdjID49IDB4RTAwMCkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHV0ZjhfYnl0 ZXNbMF0gPSBzdGF0aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4oMHhF MHUgfCAoKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4od2MpID4+IDEydSkpKTsKKy0gICAgICAg ICAgICAgICAgdXRmOF9ieXRlc1sxXSA9IHN0YXRpY19jYXN0PHN0ZDo6Y2hhcl90cmFpdHM8Y2hh cj46OmludF90eXBlPigweDgwdSB8ICgoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3YykgPj4g NnUpICYgMHgzRnUpKTsKKy0gICAgICAgICAgICAgICAgdXRmOF9ieXRlc1syXSA9IHN0YXRpY19j YXN0PHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj46OmludF90eXBlPigweDgwdSB8IChzdGF0aWNfY2Fz dDx1bnNpZ25lZCBpbnQ+KHdjKSAmIDB4M0Z1KSk7CistICAgICAgICAgICAgICAgIHV0ZjhfYnl0 ZXNfZmlsbGVkID0gMzsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgZWxzZQorLSAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFpbnB1 dC5lbXB0eSgpKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgY29u c3QgYXV0byB3YzIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGlucHV0LmdldF9jaGFyYWN0 ZXIoKSk7CistICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGNoYXJjb2RlID0gMHgxMDAw MHUgKyAoKChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHdjKSAmIDB4M0ZGdSkgPDwgMTB1KSB8 ICh3YzIgJiAweDNGRnUpKTsKKy0gICAgICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNbMF0gPSBz dGF0aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4oMHhGMHUgfCAoY2hh cmNvZGUgPj4gMTh1KSk7CistICAgICAgICAgICAgICAgICAgICB1dGY4X2J5dGVzWzFdID0gc3Rh dGljX2Nhc3Q8c3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGU+KDB4ODB1IHwgKChjaGFy Y29kZSA+PiAxMnUpICYgMHgzRnUpKTsKKy0gICAgICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNb Ml0gPSBzdGF0aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4oMHg4MHUg fCAoKGNoYXJjb2RlID4+IDZ1KSAmIDB4M0Z1KSk7CistICAgICAgICAgICAgICAgICAgICB1dGY4 X2J5dGVzWzNdID0gc3RhdGljX2Nhc3Q8c3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGU+ KDB4ODB1IHwgKGNoYXJjb2RlICYgMHgzRnUpKTsKKy0gICAgICAgICAgICAgICAgICAgIHV0Zjhf Ynl0ZXNfZmlsbGVkID0gNDsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBl bHNlCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHV0ZjhfYnl0ZXNb MF0gPSBzdGF0aWNfY2FzdDxzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZT4od2MpOwor LSAgICAgICAgICAgICAgICAgICAgdXRmOF9ieXRlc19maWxsZWQgPSAxOworLSAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICB9CistfTsKKy0KKy0vLyBX cmFwcyBhbm90aGVyIGlucHV0IGFwZGF0ZXIgdG8gY29udmVydCB3aWRlIGNoYXJhY3RlciB0eXBl cyBpbnRvIGluZGl2aWR1YWwgYnl0ZXMuCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzZUlucHV0QWRh cHRlciwgdHlwZW5hbWUgV2lkZUNoYXJUeXBlPgorLWNsYXNzIHdpZGVfc3RyaW5nX2lucHV0X2Fk YXB0ZXIKKy17CistICBwdWJsaWM6CistICAgIHVzaW5nIGNoYXJfdHlwZSA9IGNoYXI7CistCist ICAgIHdpZGVfc3RyaW5nX2lucHV0X2FkYXB0ZXIoQmFzZUlucHV0QWRhcHRlciBiYXNlKQorLSAg ICAgICAgOiBiYXNlX2FkYXB0ZXIoYmFzZSkge30KKy0KKy0gICAgdHlwZW5hbWUgc3RkOjpjaGFy X3RyYWl0czxjaGFyPjo6aW50X3R5cGUgZ2V0X2NoYXJhY3RlcigpIG5vZXhjZXB0CistICAgIHsK Ky0gICAgICAgIC8vIGNoZWNrIGlmIGJ1ZmZlciBuZWVkcyB0byBiZSBmaWxsZWQKKy0gICAgICAg IGlmICh1dGY4X2J5dGVzX2luZGV4ID09IHV0ZjhfYnl0ZXNfZmlsbGVkKQorLSAgICAgICAgewor LSAgICAgICAgICAgIGZpbGxfYnVmZmVyPHNpemVvZihXaWRlQ2hhclR5cGUpPigpOworLQorLSAg ICAgICAgICAgIEpTT05fQVNTRVJUKHV0ZjhfYnl0ZXNfZmlsbGVkID4gMCk7CistICAgICAgICAg ICAgSlNPTl9BU1NFUlQodXRmOF9ieXRlc19pbmRleCA9PSAwKTsKKy0gICAgICAgIH0KKy0KKy0g ICAgICAgIC8vIHVzZSBidWZmZXIKKy0gICAgICAgIEpTT05fQVNTRVJUKHV0ZjhfYnl0ZXNfZmls bGVkID4gMCk7CistICAgICAgICBKU09OX0FTU0VSVCh1dGY4X2J5dGVzX2luZGV4IDwgdXRmOF9i eXRlc19maWxsZWQpOworLSAgICAgICAgcmV0dXJuIHV0ZjhfYnl0ZXNbdXRmOF9ieXRlc19pbmRl eCsrXTsKKy0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0gICAgQmFzZUlucHV0QWRhcHRlciBiYXNl X2FkYXB0ZXI7CistCistICAgIHRlbXBsYXRlPHNpemVfdCBUPgorLSAgICB2b2lkIGZpbGxfYnVm ZmVyKCkKKy0gICAgeworLSAgICAgICAgd2lkZV9zdHJpbmdfaW5wdXRfaGVscGVyPEJhc2VJbnB1 dEFkYXB0ZXIsIFQ+OjpmaWxsX2J1ZmZlcihiYXNlX2FkYXB0ZXIsIHV0ZjhfYnl0ZXMsIHV0Zjhf Ynl0ZXNfaW5kZXgsIHV0ZjhfYnl0ZXNfZmlsbGVkKTsKKy0gICAgfQorLQorLSAgICAvLy8gYSBi dWZmZXIgZm9yIFVURi04IGJ5dGVzCistICAgIHN0ZDo6YXJyYXk8c3RkOjpjaGFyX3RyYWl0czxj aGFyPjo6aW50X3R5cGUsIDQ+IHV0ZjhfYnl0ZXMgPSB7ezAsIDAsIDAsIDB9fTsKKy0KKy0gICAg Ly8vIGluZGV4IHRvIHRoZSB1dGY4X2NvZGVzIGFycmF5IGZvciB0aGUgbmV4dCB2YWxpZCBieXRl CistICAgIHN0ZDo6c2l6ZV90IHV0ZjhfYnl0ZXNfaW5kZXggPSAwOworLSAgICAvLy8gbnVtYmVy IG9mIHZhbGlkIGJ5dGVzIGluIHRoZSB1dGY4X2NvZGVzIGFycmF5CistICAgIHN0ZDo6c2l6ZV90 IHV0ZjhfYnl0ZXNfZmlsbGVkID0gMDsKKy19OworLQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIEl0 ZXJhdG9yVHlwZSwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKy1zdHJ1Y3QgaXRlcmF0b3JfaW5w dXRfYWRhcHRlcl9mYWN0b3J5CisteworLSAgICB1c2luZyBpdGVyYXRvcl90eXBlID0gSXRlcmF0 b3JUeXBlOworLSAgICB1c2luZyBjaGFyX3R5cGUgPSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3Ry YWl0czxpdGVyYXRvcl90eXBlPjo6dmFsdWVfdHlwZTsKKy0gICAgdXNpbmcgYWRhcHRlcl90eXBl ID0gaXRlcmF0b3JfaW5wdXRfYWRhcHRlcjxpdGVyYXRvcl90eXBlPjsKKy0KKy0gICAgc3RhdGlj IGFkYXB0ZXJfdHlwZSBjcmVhdGUoSXRlcmF0b3JUeXBlIGZpcnN0LCBJdGVyYXRvclR5cGUgbGFz dCkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGFkYXB0ZXJfdHlwZShzdGQ6Om1vdmUoZmlyc3Qp LCBzdGQ6Om1vdmUobGFzdCkpOworLSAgICB9CistfTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBU PgorLXN0cnVjdCBpc19pdGVyYXRvcl9vZl9tdWx0aWJ5dGUKKy17CistICAgIHVzaW5nIHZhbHVl X3R5cGUgPSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUPjo6dmFsdWVfdHlwZTsKKy0g ICAgZW51bQorLSAgICB7CistICAgICAgICB2YWx1ZSA9IHNpemVvZih2YWx1ZV90eXBlKSA+IDEK Ky0gICAgfTsKKy19OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKy1zdHJ1 Y3QgaXRlcmF0b3JfaW5wdXRfYWRhcHRlcl9mYWN0b3J5PEl0ZXJhdG9yVHlwZSwgZW5hYmxlX2lm X3Q8aXNfaXRlcmF0b3Jfb2ZfbXVsdGlieXRlPEl0ZXJhdG9yVHlwZT46OnZhbHVlPj4KKy17Cist ICAgIHVzaW5nIGl0ZXJhdG9yX3R5cGUgPSBJdGVyYXRvclR5cGU7CistICAgIHVzaW5nIGNoYXJf dHlwZSA9IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPGl0ZXJhdG9yX3R5cGU+Ojp2YWx1 ZV90eXBlOworLSAgICB1c2luZyBiYXNlX2FkYXB0ZXJfdHlwZSA9IGl0ZXJhdG9yX2lucHV0X2Fk YXB0ZXI8aXRlcmF0b3JfdHlwZT47CistICAgIHVzaW5nIGFkYXB0ZXJfdHlwZSA9IHdpZGVfc3Ry aW5nX2lucHV0X2FkYXB0ZXI8YmFzZV9hZGFwdGVyX3R5cGUsIGNoYXJfdHlwZT47CistCistICAg IHN0YXRpYyBhZGFwdGVyX3R5cGUgY3JlYXRlKEl0ZXJhdG9yVHlwZSBmaXJzdCwgSXRlcmF0b3JU eXBlIGxhc3QpCistICAgIHsKKy0gICAgICAgIHJldHVybiBhZGFwdGVyX3R5cGUoYmFzZV9hZGFw dGVyX3R5cGUoc3RkOjptb3ZlKGZpcnN0KSwgc3RkOjptb3ZlKGxhc3QpKSk7CistICAgIH0KKy19 OworLQorLS8vIEdlbmVyYWwgcHVycG9zZSBpdGVyYXRvci1iYXNlZCBpbnB1dAorLXRlbXBsYXRl PHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKy10eXBlbmFtZSBpdGVyYXRvcl9pbnB1dF9hZGFwdGVy X2ZhY3Rvcnk8SXRlcmF0b3JUeXBlPjo6YWRhcHRlcl90eXBlIGlucHV0X2FkYXB0ZXIoSXRlcmF0 b3JUeXBlIGZpcnN0LCBJdGVyYXRvclR5cGUgbGFzdCkKKy17CistICAgIHVzaW5nIGZhY3Rvcnlf dHlwZSA9IGl0ZXJhdG9yX2lucHV0X2FkYXB0ZXJfZmFjdG9yeTxJdGVyYXRvclR5cGU+OworLSAg ICByZXR1cm4gZmFjdG9yeV90eXBlOjpjcmVhdGUoZmlyc3QsIGxhc3QpOworLX0KKy0KKy0vLyBD b252ZW5pZW5jZSBzaG9ydGhhbmQgZnJvbSBjb250YWluZXIgdG8gaXRlcmF0b3IKKy0vLyBFbmFi bGVzIEFETCBvbiBiZWdpbihjb250YWluZXIpIGFuZCBlbmQoY29udGFpbmVyKQorLS8vIEVuY2xv c2VzIHRoZSB1c2luZyBkZWNsYXJhdGlvbnMgaW4gbmFtZXNwYWNlIGZvciBub3QgdG8gbGVhayB0 aGVtIHRvIG91dHNpZGUgc2NvcGUKKy0KKy1uYW1lc3BhY2UgY29udGFpbmVyX2lucHV0X2FkYXB0 ZXJfZmFjdG9yeV9pbXBsCisteworLQorLXVzaW5nIHN0ZDo6YmVnaW47CistdXNpbmcgc3RkOjpl bmQ7CistCistdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZSwgdHlwZW5hbWUgRW5hYmxl ID0gdm9pZD4KKy1zdHJ1Y3QgY29udGFpbmVyX2lucHV0X2FkYXB0ZXJfZmFjdG9yeSB7fTsKKy0K Ky10ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgorLXN0cnVjdCBjb250YWluZXJfaW5w dXRfYWRhcHRlcl9mYWN0b3J5PCBDb250YWluZXJUeXBlLAorLSAgICAgICB2b2lkX3Q8ZGVjbHR5 cGUoYmVnaW4oc3RkOjpkZWNsdmFsPENvbnRhaW5lclR5cGU+KCkpLCBlbmQoc3RkOjpkZWNsdmFs PENvbnRhaW5lclR5cGU+KCkpKT4+CistICAgICAgIHsKKy0gICAgICAgICAgIHVzaW5nIGFkYXB0 ZXJfdHlwZSA9IGRlY2x0eXBlKGlucHV0X2FkYXB0ZXIoYmVnaW4oc3RkOjpkZWNsdmFsPENvbnRh aW5lclR5cGU+KCkpLCBlbmQoc3RkOjpkZWNsdmFsPENvbnRhaW5lclR5cGU+KCkpKSk7CistCist ICAgICAgICAgICBzdGF0aWMgYWRhcHRlcl90eXBlIGNyZWF0ZShjb25zdCBDb250YWluZXJUeXBl JiBjb250YWluZXIpCisteworLSAgICByZXR1cm4gaW5wdXRfYWRhcHRlcihiZWdpbihjb250YWlu ZXIpLCBlbmQoY29udGFpbmVyKSk7CistfQorLSAgICAgICB9OworLQorLX0gLy8gbmFtZXNwYWNl IGNvbnRhaW5lcl9pbnB1dF9hZGFwdGVyX2ZhY3RvcnlfaW1wbAorLQorLXRlbXBsYXRlPHR5cGVu YW1lIENvbnRhaW5lclR5cGU+CistdHlwZW5hbWUgY29udGFpbmVyX2lucHV0X2FkYXB0ZXJfZmFj dG9yeV9pbXBsOjpjb250YWluZXJfaW5wdXRfYWRhcHRlcl9mYWN0b3J5PENvbnRhaW5lclR5cGU+ OjphZGFwdGVyX3R5cGUgaW5wdXRfYWRhcHRlcihjb25zdCBDb250YWluZXJUeXBlJiBjb250YWlu ZXIpCisteworLSAgICByZXR1cm4gY29udGFpbmVyX2lucHV0X2FkYXB0ZXJfZmFjdG9yeV9pbXBs Ojpjb250YWluZXJfaW5wdXRfYWRhcHRlcl9mYWN0b3J5PENvbnRhaW5lclR5cGU+OjpjcmVhdGUo Y29udGFpbmVyKTsKKy19CistCistI2lmbmRlZiBKU09OX05PX0lPCistLy8gU3BlY2lhbCBjYXNl cyB3aXRoIGZhc3QgcGF0aHMKKy1pbmxpbmUgZmlsZV9pbnB1dF9hZGFwdGVyIGlucHV0X2FkYXB0 ZXIoc3RkOjpGSUxFKiBmaWxlKQorLXsKKy0gICAgcmV0dXJuIGZpbGVfaW5wdXRfYWRhcHRlcihm aWxlKTsKKy19CistCistaW5saW5lIGlucHV0X3N0cmVhbV9hZGFwdGVyIGlucHV0X2FkYXB0ZXIo c3RkOjppc3RyZWFtJiBzdHJlYW0pCisteworLSAgICByZXR1cm4gaW5wdXRfc3RyZWFtX2FkYXB0 ZXIoc3RyZWFtKTsKKy19CistCistaW5saW5lIGlucHV0X3N0cmVhbV9hZGFwdGVyIGlucHV0X2Fk YXB0ZXIoc3RkOjppc3RyZWFtJiYgc3RyZWFtKQorLXsKKy0gICAgcmV0dXJuIGlucHV0X3N0cmVh bV9hZGFwdGVyKHN0cmVhbSk7CistfQorLSNlbmRpZiAgLy8gSlNPTl9OT19JTworLQorLXVzaW5n IGNvbnRpZ3VvdXNfYnl0ZXNfaW5wdXRfYWRhcHRlciA9IGRlY2x0eXBlKGlucHV0X2FkYXB0ZXIo c3RkOjpkZWNsdmFsPGNvbnN0IGNoYXIqPigpLCBzdGQ6OmRlY2x2YWw8Y29uc3QgY2hhcio+KCkp KTsKKy0KKy0vLyBOdWxsLWRlbGltaXRlZCBzdHJpbmdzLCBhbmQgdGhlIGxpa2UuCistdGVtcGxh dGUgPCB0eXBlbmFtZSBDaGFyVCwKKy0gICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm IDwKKy0gICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8Q2hhclQ+Ojp2YWx1ZSYmCistICAg ICAgICAgICAgICAgIXN0ZDo6aXNfYXJyYXk8Q2hhclQ+Ojp2YWx1ZSYmCistICAgICAgICAgICAg ICAgc3RkOjppc19pbnRlZ3JhbDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPENoYXJUPjo6 dHlwZT46OnZhbHVlJiYKKy0gICAgICAgICAgICAgICBzaXplb2YodHlwZW5hbWUgc3RkOjpyZW1v dmVfcG9pbnRlcjxDaGFyVD46OnR5cGUpID09IDEsCistICAgICAgICAgICAgICAgaW50ID46OnR5 cGUgPSAwID4KKy1jb250aWd1b3VzX2J5dGVzX2lucHV0X2FkYXB0ZXIgaW5wdXRfYWRhcHRlcihD aGFyVCBiKQorLXsKKy0gICAgYXV0byBsZW5ndGggPSBzdGQ6OnN0cmxlbihyZWludGVycHJldF9j YXN0PGNvbnN0IGNoYXIqPihiKSk7CistICAgIGNvbnN0IGF1dG8qIHB0ciA9IHJlaW50ZXJwcmV0 X2Nhc3Q8Y29uc3QgY2hhcio+KGIpOworLSAgICByZXR1cm4gaW5wdXRfYWRhcHRlcihwdHIsIHB0 ciArIGxlbmd0aCk7CistfQorLQorLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+ CistYXV0byBpbnB1dF9hZGFwdGVyKFQgKCZhcnJheSlbTl0pIC0+IGRlY2x0eXBlKGlucHV0X2Fk YXB0ZXIoYXJyYXksIGFycmF5ICsgTikpIC8vIE5PTElOVChjcHBjb3JlZ3VpZGVsaW5lcy1hdm9p ZC1jLWFycmF5cyxoaWNwcC1hdm9pZC1jLWFycmF5cyxtb2Rlcm5pemUtYXZvaWQtYy1hcnJheXMp CisteworLSAgICByZXR1cm4gaW5wdXRfYWRhcHRlcihhcnJheSwgYXJyYXkgKyBOKTsKKy19Cist CistLy8gVGhpcyBjbGFzcyBvbmx5IGhhbmRsZXMgaW5wdXRzIG9mIGlucHV0X2J1ZmZlcl9hZGFw dGVyIHR5cGUuCistLy8gSXQncyByZXF1aXJlZCBzbyB0aGF0IGV4cHJlc3Npb25zIGxpa2Uge3B0 ciwgbGVufSBjYW4gYmUgaW1wbGljaXRseSBjYXN0CistLy8gdG8gdGhlIGNvcnJlY3QgYWRhcHRl ci4KKy1jbGFzcyBzcGFuX2lucHV0X2FkYXB0ZXIKKy17CistICBwdWJsaWM6CistICAgIHRlbXBs YXRlIDwgdHlwZW5hbWUgQ2hhclQsCistICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFi bGVfaWYgPAorLSAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8Q2hhclQ+Ojp2YWx1 ZSYmCistICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfaW50ZWdyYWw8dHlwZW5hbWUgc3RkOjpy ZW1vdmVfcG9pbnRlcjxDaGFyVD46OnR5cGU+Ojp2YWx1ZSYmCistICAgICAgICAgICAgICAgICAg IHNpemVvZih0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPENoYXJUPjo6dHlwZSkgPT0gMSwK Ky0gICAgICAgICAgICAgICAgICAgaW50ID46OnR5cGUgPSAwID4KKy0gICAgc3Bhbl9pbnB1dF9h ZGFwdGVyKENoYXJUIGIsIHN0ZDo6c2l6ZV90IGwpCistICAgICAgICA6IGlhKHJlaW50ZXJwcmV0 X2Nhc3Q8Y29uc3QgY2hhcio+KGIpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihiKSAr IGwpIHt9CistCistICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yVHlwZSwKKy0gICAgICAgICAg ICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3Nh bWU8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlwZT46Oml0ZXJhdG9yX2NhdGVn b3J5LCBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPjo6dmFsdWUsCistICAgICAgICAg ICAgICAgICBpbnQ+Ojp0eXBlID0gMD4KKy0gICAgc3Bhbl9pbnB1dF9hZGFwdGVyKEl0ZXJhdG9y VHlwZSBmaXJzdCwgSXRlcmF0b3JUeXBlIGxhc3QpCistICAgICAgICA6IGlhKGlucHV0X2FkYXB0 ZXIoZmlyc3QsIGxhc3QpKSB7fQorLQorLSAgICBjb250aWd1b3VzX2J5dGVzX2lucHV0X2FkYXB0 ZXImJiBnZXQoKQorLSAgICB7CistICAgICAgICByZXR1cm4gc3RkOjptb3ZlKGlhKTsgLy8gTk9M SU5UKGhpY3BwLW1vdmUtY29uc3QtYXJnLHBlcmZvcm1hbmNlLW1vdmUtY29uc3QtYXJnKQorLSAg ICB9CistCistICBwcml2YXRlOgorLSAgICBjb250aWd1b3VzX2J5dGVzX2lucHV0X2FkYXB0ZXIg aWE7CistfTsKKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2ht YW5uCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9pbnB1dC9qc29uX3NheC5ocHA+ CistCistCistI2luY2x1ZGUgPGNzdGRkZWY+CistI2luY2x1ZGUgPHN0cmluZz4gLy8gc3RyaW5n CistI2luY2x1ZGUgPHV0aWxpdHk+IC8vIG1vdmUKKy0jaW5jbHVkZSA8dmVjdG9yPiAvLyB2ZWN0 b3IKKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL2V4Y2VwdGlvbnMuaHBwPgorLQor LS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWFjcm9fc2NvcGUuaHBwPgorLQorLQorLW5h bWVzcGFjZSBubG9obWFubgorLXsKKy0KKy0vKiEKKy1AYnJpZWYgU0FYIGludGVyZmFjZQorLQor LVRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBTQVggaW50ZXJmYWNlIHVzZWQgYnkgQHJlZiBubG9o bWFubjo6anNvbjo6c2F4X3BhcnNlLgorLUVhY2ggZnVuY3Rpb24gaXMgY2FsbGVkIGluIGRpZmZl cmVudCBzaXR1YXRpb25zIHdoaWxlIHRoZSBpbnB1dCBpcyBwYXJzZWQuIFRoZQorLWJvb2xlYW4g cmV0dXJuIHZhbHVlIGluZm9ybXMgdGhlIHBhcnNlciB3aGV0aGVyIHRvIGNvbnRpbnVlIHByb2Nl c3NpbmcgdGhlCistaW5wdXQuCistKi8KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBl PgorLXN0cnVjdCBqc29uX3NheAorLXsKKy0gICAgdXNpbmcgbnVtYmVyX2ludGVnZXJfdCA9IHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9pbnRlZ2VyX3Q7CistICAgIHVzaW5nIG51bWJl cl91bnNpZ25lZF90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVkX3Q7 CistICAgIHVzaW5nIG51bWJlcl9mbG9hdF90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVt YmVyX2Zsb2F0X3Q7CistICAgIHVzaW5nIHN0cmluZ190ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlw ZTo6c3RyaW5nX3Q7CistICAgIHVzaW5nIGJpbmFyeV90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlw ZTo6YmluYXJ5X3Q7CistCistICAgIC8qIQorLSAgICBAYnJpZWYgYSBudWxsIHZhbHVlIHdhcyBy ZWFkCistICAgIEByZXR1cm4gd2hldGhlciBwYXJzaW5nIHNob3VsZCBwcm9jZWVkCistICAgICov CistICAgIHZpcnR1YWwgYm9vbCBudWxsKCkgPSAwOworLQorLSAgICAvKiEKKy0gICAgQGJyaWVm IGEgYm9vbGVhbiB2YWx1ZSB3YXMgcmVhZAorLSAgICBAcGFyYW1baW5dIHZhbCAgYm9vbGVhbiB2 YWx1ZQorLSAgICBAcmV0dXJuIHdoZXRoZXIgcGFyc2luZyBzaG91bGQgcHJvY2VlZAorLSAgICAq LworLSAgICB2aXJ0dWFsIGJvb2wgYm9vbGVhbihib29sIHZhbCkgPSAwOworLQorLSAgICAvKiEK Ky0gICAgQGJyaWVmIGFuIGludGVnZXIgbnVtYmVyIHdhcyByZWFkCistICAgIEBwYXJhbVtpbl0g dmFsICBpbnRlZ2VyIHZhbHVlCistICAgIEByZXR1cm4gd2hldGhlciBwYXJzaW5nIHNob3VsZCBw cm9jZWVkCistICAgICovCistICAgIHZpcnR1YWwgYm9vbCBudW1iZXJfaW50ZWdlcihudW1iZXJf aW50ZWdlcl90IHZhbCkgPSAwOworLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGFuIHVuc2lnbmVk IGludGVnZXIgbnVtYmVyIHdhcyByZWFkCistICAgIEBwYXJhbVtpbl0gdmFsICB1bnNpZ25lZCBp bnRlZ2VyIHZhbHVlCistICAgIEByZXR1cm4gd2hldGhlciBwYXJzaW5nIHNob3VsZCBwcm9jZWVk CistICAgICovCistICAgIHZpcnR1YWwgYm9vbCBudW1iZXJfdW5zaWduZWQobnVtYmVyX3Vuc2ln bmVkX3QgdmFsKSA9IDA7CistCistICAgIC8qIQorLSAgICBAYnJpZWYgYSBmbG9hdGluZy1wb2lu dCBudW1iZXIgd2FzIHJlYWQKKy0gICAgQHBhcmFtW2luXSB2YWwgIGZsb2F0aW5nLXBvaW50IHZh bHVlCistICAgIEBwYXJhbVtpbl0gcyAgICByYXcgdG9rZW4gdmFsdWUKKy0gICAgQHJldHVybiB3 aGV0aGVyIHBhcnNpbmcgc2hvdWxkIHByb2NlZWQKKy0gICAgKi8KKy0gICAgdmlydHVhbCBib29s IG51bWJlcl9mbG9hdChudW1iZXJfZmxvYXRfdCB2YWwsIGNvbnN0IHN0cmluZ190JiBzKSA9IDA7 CistCistICAgIC8qIQorLSAgICBAYnJpZWYgYSBzdHJpbmcgdmFsdWUgd2FzIHJlYWQKKy0gICAg QHBhcmFtW2luXSB2YWwgIHN0cmluZyB2YWx1ZQorLSAgICBAcmV0dXJuIHdoZXRoZXIgcGFyc2lu ZyBzaG91bGQgcHJvY2VlZAorLSAgICBAbm90ZSBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIHBhc3Nl ZCBzdHJpbmcgdmFsdWUuCistICAgICovCistICAgIHZpcnR1YWwgYm9vbCBzdHJpbmcoc3RyaW5n X3QmIHZhbCkgPSAwOworLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGEgYmluYXJ5IHZhbHVlIHdh cyByZWFkCistICAgIEBwYXJhbVtpbl0gdmFsICBiaW5hcnkgdmFsdWUKKy0gICAgQHJldHVybiB3 aGV0aGVyIHBhcnNpbmcgc2hvdWxkIHByb2NlZWQKKy0gICAgQG5vdGUgSXQgaXMgc2FmZSB0byBt b3ZlIHRoZSBwYXNzZWQgYmluYXJ5IHZhbHVlLgorLSAgICAqLworLSAgICB2aXJ0dWFsIGJvb2wg YmluYXJ5KGJpbmFyeV90JiB2YWwpID0gMDsKKy0KKy0gICAgLyohCistICAgIEBicmllZiB0aGUg YmVnaW5uaW5nIG9mIGFuIG9iamVjdCB3YXMgcmVhZAorLSAgICBAcGFyYW1baW5dIGVsZW1lbnRz ICBudW1iZXIgb2Ygb2JqZWN0IGVsZW1lbnRzIG9yIC0xIGlmIHVua25vd24KKy0gICAgQHJldHVy biB3aGV0aGVyIHBhcnNpbmcgc2hvdWxkIHByb2NlZWQKKy0gICAgQG5vdGUgYmluYXJ5IGZvcm1h dHMgbWF5IHJlcG9ydCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCistICAgICovCistICAgIHZpcnR1 YWwgYm9vbCBzdGFydF9vYmplY3Qoc3RkOjpzaXplX3QgZWxlbWVudHMpID0gMDsKKy0KKy0gICAg LyohCistICAgIEBicmllZiBhbiBvYmplY3Qga2V5IHdhcyByZWFkCistICAgIEBwYXJhbVtpbl0g dmFsICBvYmplY3Qga2V5CistICAgIEByZXR1cm4gd2hldGhlciBwYXJzaW5nIHNob3VsZCBwcm9j ZWVkCistICAgIEBub3RlIEl0IGlzIHNhZmUgdG8gbW92ZSB0aGUgcGFzc2VkIHN0cmluZy4KKy0g ICAgKi8KKy0gICAgdmlydHVhbCBib29sIGtleShzdHJpbmdfdCYgdmFsKSA9IDA7CistCistICAg IC8qIQorLSAgICBAYnJpZWYgdGhlIGVuZCBvZiBhbiBvYmplY3Qgd2FzIHJlYWQKKy0gICAgQHJl dHVybiB3aGV0aGVyIHBhcnNpbmcgc2hvdWxkIHByb2NlZWQKKy0gICAgKi8KKy0gICAgdmlydHVh bCBib29sIGVuZF9vYmplY3QoKSA9IDA7CistCistICAgIC8qIQorLSAgICBAYnJpZWYgdGhlIGJl Z2lubmluZyBvZiBhbiBhcnJheSB3YXMgcmVhZAorLSAgICBAcGFyYW1baW5dIGVsZW1lbnRzICBu dW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgb3IgLTEgaWYgdW5rbm93bgorLSAgICBAcmV0dXJuIHdo ZXRoZXIgcGFyc2luZyBzaG91bGQgcHJvY2VlZAorLSAgICBAbm90ZSBiaW5hcnkgZm9ybWF0cyBt YXkgcmVwb3J0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKy0gICAgKi8KKy0gICAgdmlydHVhbCBi b29sIHN0YXJ0X2FycmF5KHN0ZDo6c2l6ZV90IGVsZW1lbnRzKSA9IDA7CistCistICAgIC8qIQor LSAgICBAYnJpZWYgdGhlIGVuZCBvZiBhbiBhcnJheSB3YXMgcmVhZAorLSAgICBAcmV0dXJuIHdo ZXRoZXIgcGFyc2luZyBzaG91bGQgcHJvY2VlZAorLSAgICAqLworLSAgICB2aXJ0dWFsIGJvb2wg ZW5kX2FycmF5KCkgPSAwOworLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGEgcGFyc2UgZXJyb3Ig b2NjdXJyZWQKKy0gICAgQHBhcmFtW2luXSBwb3NpdGlvbiAgICB0aGUgcG9zaXRpb24gaW4gdGhl IGlucHV0IHdoZXJlIHRoZSBlcnJvciBvY2N1cnMKKy0gICAgQHBhcmFtW2luXSBsYXN0X3Rva2Vu ICB0aGUgbGFzdCByZWFkIHRva2VuCistICAgIEBwYXJhbVtpbl0gZXggICAgICAgICAgYW4gZXhj ZXB0aW9uIG9iamVjdCBkZXNjcmliaW5nIHRoZSBlcnJvcgorLSAgICBAcmV0dXJuIHdoZXRoZXIg cGFyc2luZyBzaG91bGQgcHJvY2VlZCAobXVzdCByZXR1cm4gZmFsc2UpCistICAgICovCistICAg IHZpcnR1YWwgYm9vbCBwYXJzZV9lcnJvcihzdGQ6OnNpemVfdCBwb3NpdGlvbiwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYXN0X3Rva2VuLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsOjpleGNlcHRpb24mIGV4KSA9 IDA7CistCistICAgIGpzb25fc2F4KCkgPSBkZWZhdWx0OworLSAgICBqc29uX3NheChjb25zdCBq c29uX3NheCYpID0gZGVmYXVsdDsKKy0gICAganNvbl9zYXgoanNvbl9zYXgmJikgbm9leGNlcHQg PSBkZWZhdWx0OworLSAgICBqc29uX3NheCYgb3BlcmF0b3I9KGNvbnN0IGpzb25fc2F4JikgPSBk ZWZhdWx0OworLSAgICBqc29uX3NheCYgb3BlcmF0b3I9KGpzb25fc2F4JiYpIG5vZXhjZXB0ID0g ZGVmYXVsdDsKKy0gICAgdmlydHVhbCB+anNvbl9zYXgoKSA9IGRlZmF1bHQ7CistfTsKKy0KKy0K Ky1uYW1lc3BhY2UgZGV0YWlsCisteworLS8qIQorLUBicmllZiBTQVggaW1wbGVtZW50YXRpb24g dG8gY3JlYXRlIGEgSlNPTiB2YWx1ZSBmcm9tIFNBWCBldmVudHMKKy0KKy1UaGlzIGNsYXNzIGlt cGxlbWVudHMgdGhlIEByZWYganNvbl9zYXggaW50ZXJmYWNlIGFuZCBwcm9jZXNzZXMgdGhlIFNB WCBldmVudHMKKy10byBjcmVhdGUgYSBKU09OIHZhbHVlIHdoaWNoIG1ha2VzIGl0IGJhc2ljYWxs eSBhIERPTSBwYXJzZXIuIFRoZSBzdHJ1Y3R1cmUgb3IKKy1oaWVyYXJjaHkgb2YgdGhlIEpTT04g dmFsdWUgaXMgbWFuYWdlZCBieSB0aGUgc3RhY2sgYHJlZl9zdGFja2Agd2hpY2ggY29udGFpbnMK Ky1hIHBvaW50ZXIgdG8gdGhlIHJlc3BlY3RpdmUgYXJyYXkgb3Igb2JqZWN0IGZvciBlYWNoIHJl Y3Vyc2lvbiBkZXB0aC4KKy0KKy1BZnRlciBzdWNjZXNzZnVsIHBhcnNpbmcsIHRoZSB2YWx1ZSB0 aGF0IGlzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdGhlCistY29uc3RydWN0b3IgY29udGFpbnMg dGhlIHBhcnNlZCB2YWx1ZS4KKy0KKy1AdHBhcmFtIEJhc2ljSnNvblR5cGUgIHRoZSBKU09OIHR5 cGUKKy0qLworLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistY2xhc3MganNvbl9z YXhfZG9tX3BhcnNlcgorLXsKKy0gIHB1YmxpYzoKKy0gICAgdXNpbmcgbnVtYmVyX2ludGVnZXJf dCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9pbnRlZ2VyX3Q7CistICAgIHVzaW5n IG51bWJlcl91bnNpZ25lZF90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2ln bmVkX3Q7CistICAgIHVzaW5nIG51bWJlcl9mbG9hdF90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlw ZTo6bnVtYmVyX2Zsb2F0X3Q7CistICAgIHVzaW5nIHN0cmluZ190ID0gdHlwZW5hbWUgQmFzaWNK c29uVHlwZTo6c3RyaW5nX3Q7CistICAgIHVzaW5nIGJpbmFyeV90ID0gdHlwZW5hbWUgQmFzaWNK c29uVHlwZTo6YmluYXJ5X3Q7CistCistICAgIC8qIQorLSAgICBAcGFyYW1baW4sb3V0XSByICBy ZWZlcmVuY2UgdG8gYSBKU09OIHZhbHVlIHRoYXQgaXMgbWFuaXB1bGF0ZWQgd2hpbGUKKy0gICAg ICAgICAgICAgICAgICAgICAgIHBhcnNpbmcKKy0gICAgQHBhcmFtW2luXSBhbGxvd19leGNlcHRp b25zXyAgd2hldGhlciBwYXJzZSBlcnJvcnMgeWllbGQgZXhjZXB0aW9ucworLSAgICAqLworLSAg ICBleHBsaWNpdCBqc29uX3NheF9kb21fcGFyc2VyKEJhc2ljSnNvblR5cGUmIHIsIGNvbnN0IGJv b2wgYWxsb3dfZXhjZXB0aW9uc18gPSB0cnVlKQorLSAgICAgICAgOiByb290KHIpLCBhbGxvd19l eGNlcHRpb25zKGFsbG93X2V4Y2VwdGlvbnNfKQorLSAgICB7fQorLQorLSAgICAvLyBtYWtlIGNs YXNzIG1vdmUtb25seQorLSAgICBqc29uX3NheF9kb21fcGFyc2VyKGNvbnN0IGpzb25fc2F4X2Rv bV9wYXJzZXImKSA9IGRlbGV0ZTsKKy0gICAganNvbl9zYXhfZG9tX3BhcnNlcihqc29uX3NheF9k b21fcGFyc2VyJiYpID0gZGVmYXVsdDsgLy8gTk9MSU5UKGhpY3BwLW5vZXhjZXB0LW1vdmUscGVy Zm9ybWFuY2Utbm9leGNlcHQtbW92ZS1jb25zdHJ1Y3RvcikKKy0gICAganNvbl9zYXhfZG9tX3Bh cnNlciYgb3BlcmF0b3I9KGNvbnN0IGpzb25fc2F4X2RvbV9wYXJzZXImKSA9IGRlbGV0ZTsKKy0g ICAganNvbl9zYXhfZG9tX3BhcnNlciYgb3BlcmF0b3I9KGpzb25fc2F4X2RvbV9wYXJzZXImJikg PSBkZWZhdWx0OyAvLyBOT0xJTlQoaGljcHAtbm9leGNlcHQtbW92ZSxwZXJmb3JtYW5jZS1ub2V4 Y2VwdC1tb3ZlLWNvbnN0cnVjdG9yKQorLSAgICB+anNvbl9zYXhfZG9tX3BhcnNlcigpID0gZGVm YXVsdDsKKy0KKy0gICAgYm9vbCBudWxsKCkKKy0gICAgeworLSAgICAgICAgaGFuZGxlX3ZhbHVl KG51bGxwdHIpOworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBi b29sZWFuKGJvb2wgdmFsKQorLSAgICB7CistICAgICAgICBoYW5kbGVfdmFsdWUodmFsKTsKKy0g ICAgICAgIHJldHVybiB0cnVlOworLSAgICB9CistCistICAgIGJvb2wgbnVtYmVyX2ludGVnZXIo bnVtYmVyX2ludGVnZXJfdCB2YWwpCistICAgIHsKKy0gICAgICAgIGhhbmRsZV92YWx1ZSh2YWwp OworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBudW1iZXJfdW5z aWduZWQobnVtYmVyX3Vuc2lnbmVkX3QgdmFsKQorLSAgICB7CistICAgICAgICBoYW5kbGVfdmFs dWUodmFsKTsKKy0gICAgICAgIHJldHVybiB0cnVlOworLSAgICB9CistCistICAgIGJvb2wgbnVt YmVyX2Zsb2F0KG51bWJlcl9mbG9hdF90IHZhbCwgY29uc3Qgc3RyaW5nX3QmIC8qdW51c2VkKi8p CistICAgIHsKKy0gICAgICAgIGhhbmRsZV92YWx1ZSh2YWwpOworLSAgICAgICAgcmV0dXJuIHRy dWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBzdHJpbmcoc3RyaW5nX3QmIHZhbCkKKy0gICAgewor LSAgICAgICAgaGFuZGxlX3ZhbHVlKHZhbCk7CistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAg fQorLQorLSAgICBib29sIGJpbmFyeShiaW5hcnlfdCYgdmFsKQorLSAgICB7CistICAgICAgICBo YW5kbGVfdmFsdWUoc3RkOjptb3ZlKHZhbCkpOworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAg IH0KKy0KKy0gICAgYm9vbCBzdGFydF9vYmplY3Qoc3RkOjpzaXplX3QgbGVuKQorLSAgICB7Cist ICAgICAgICByZWZfc3RhY2sucHVzaF9iYWNrKGhhbmRsZV92YWx1ZShCYXNpY0pzb25UeXBlOjp2 YWx1ZV90OjpvYmplY3QpKTsKKy0KKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShs ZW4gIT0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSAmJiBsZW4gPiByZWZfc3RhY2suYmFj aygpLT5tYXhfc2l6ZSgpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKG91 dF9vZl9yYW5nZTo6Y3JlYXRlKDQwOCwgImV4Y2Vzc2l2ZSBvYmplY3Qgc2l6ZTogIiArIHN0ZDo6 dG9fc3RyaW5nKGxlbiksICpyZWZfc3RhY2suYmFjaygpKSk7CistICAgICAgICB9CistCistICAg ICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICBib29sIGtleShzdHJpbmdfdCYgdmFs KQorLSAgICB7CistICAgICAgICAvLyBhZGQgbnVsbCBhdCBnaXZlbiBrZXkgYW5kIHN0b3JlIHRo ZSByZWZlcmVuY2UgZm9yIGxhdGVyCistICAgICAgICBvYmplY3RfZWxlbWVudCA9ICYocmVmX3N0 YWNrLmJhY2soKS0+bV92YWx1ZS5vYmplY3QtPm9wZXJhdG9yW10odmFsKSk7CistICAgICAgICBy ZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICBib29sIGVuZF9vYmplY3QoKQorLSAgICB7Cist ICAgICAgICByZWZfc3RhY2suYmFjaygpLT5zZXRfcGFyZW50cygpOworLSAgICAgICAgcmVmX3N0 YWNrLnBvcF9iYWNrKCk7CistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICBi b29sIHN0YXJ0X2FycmF5KHN0ZDo6c2l6ZV90IGxlbikKKy0gICAgeworLSAgICAgICAgcmVmX3N0 YWNrLnB1c2hfYmFjayhoYW5kbGVfdmFsdWUoQmFzaWNKc29uVHlwZTo6dmFsdWVfdDo6YXJyYXkp KTsKKy0KKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShsZW4gIT0gc3RhdGljX2Nh c3Q8c3RkOjpzaXplX3Q+KC0xKSAmJiBsZW4gPiByZWZfc3RhY2suYmFjaygpLT5tYXhfc2l6ZSgp KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKG91dF9vZl9yYW5nZTo6Y3Jl YXRlKDQwOCwgImV4Y2Vzc2l2ZSBhcnJheSBzaXplOiAiICsgc3RkOjp0b19zdHJpbmcobGVuKSwg KnJlZl9zdGFjay5iYWNrKCkpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiB0cnVl OworLSAgICB9CistCistICAgIGJvb2wgZW5kX2FycmF5KCkKKy0gICAgeworLSAgICAgICAgcmVm X3N0YWNrLmJhY2soKS0+c2V0X3BhcmVudHMoKTsKKy0gICAgICAgIHJlZl9zdGFjay5wb3BfYmFj aygpOworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgdGVtcGxhdGU8Y2xh c3MgRXhjZXB0aW9uPgorLSAgICBib29sIHBhcnNlX2Vycm9yKHN0ZDo6c2l6ZV90IC8qdW51c2Vk Ki8sIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKnVudXNlZCovLAorLSAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEV4Y2VwdGlvbiYgZXgpCistICAgIHsKKy0gICAgICAgIGVycm9yZWQgPSB0cnVlOwor LSAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oZXgpOworLSAgICAgICAgaWYgKGFsbG93X2V4Y2Vw dGlvbnMpCistICAgICAgICB7CistICAgICAgICAgICAgSlNPTl9USFJPVyhleCk7CistICAgICAg ICB9CistICAgICAgICByZXR1cm4gZmFsc2U7CistICAgIH0KKy0KKy0gICAgY29uc3RleHByIGJv b2wgaXNfZXJyb3JlZCgpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiBlcnJvcmVkOwor LSAgICB9CistCistICBwcml2YXRlOgorLSAgICAvKiEKKy0gICAgQGludmFyaWFudCBJZiB0aGUg cmVmIHN0YWNrIGlzIGVtcHR5LCB0aGVuIHRoZSBwYXNzZWQgdmFsdWUgd2lsbCBiZSB0aGUgbmV3 CistICAgICAgICAgICAgICAgcm9vdC4KKy0gICAgQGludmFyaWFudCBJZiB0aGUgcmVmIHN0YWNr IGNvbnRhaW5zIGEgdmFsdWUsIHRoZW4gaXQgaXMgYW4gYXJyYXkgb3IgYW4KKy0gICAgICAgICAg ICAgICBvYmplY3QgdG8gd2hpY2ggd2UgY2FuIGFkZCBlbGVtZW50cworLSAgICAqLworLSAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZT4KKy0gICAgSlNPTl9IRURMRVlfUkVUVVJOU19OT05fTlVM TAorLSAgICBCYXNpY0pzb25UeXBlKiBoYW5kbGVfdmFsdWUoVmFsdWUmJiB2KQorLSAgICB7Cist ICAgICAgICBpZiAocmVmX3N0YWNrLmVtcHR5KCkpCistICAgICAgICB7CistICAgICAgICAgICAg cm9vdCA9IEJhc2ljSnNvblR5cGUoc3RkOjpmb3J3YXJkPFZhbHVlPih2KSk7CistICAgICAgICAg ICAgcmV0dXJuICZyb290OworLSAgICAgICAgfQorLQorLSAgICAgICAgSlNPTl9BU1NFUlQocmVm X3N0YWNrLmJhY2soKS0+aXNfYXJyYXkoKSB8fCByZWZfc3RhY2suYmFjaygpLT5pc19vYmplY3Qo KSk7CistCistICAgICAgICBpZiAocmVmX3N0YWNrLmJhY2soKS0+aXNfYXJyYXkoKSkKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICByZWZfc3RhY2suYmFjaygpLT5tX3ZhbHVlLmFycmF5LT5lbXBs YWNlX2JhY2soc3RkOjpmb3J3YXJkPFZhbHVlPih2KSk7CistICAgICAgICAgICAgcmV0dXJuICYo cmVmX3N0YWNrLmJhY2soKS0+bV92YWx1ZS5hcnJheS0+YmFjaygpKTsKKy0gICAgICAgIH0KKy0K Ky0gICAgICAgIEpTT05fQVNTRVJUKHJlZl9zdGFjay5iYWNrKCktPmlzX29iamVjdCgpKTsKKy0g ICAgICAgIEpTT05fQVNTRVJUKG9iamVjdF9lbGVtZW50KTsKKy0gICAgICAgICpvYmplY3RfZWxl bWVudCA9IEJhc2ljSnNvblR5cGUoc3RkOjpmb3J3YXJkPFZhbHVlPih2KSk7CistICAgICAgICBy ZXR1cm4gb2JqZWN0X2VsZW1lbnQ7CistICAgIH0KKy0KKy0gICAgLy8vIHRoZSBwYXJzZWQgSlNP TiB2YWx1ZQorLSAgICBCYXNpY0pzb25UeXBlJiByb290OworLSAgICAvLy8gc3RhY2sgdG8gbW9k ZWwgaGllcmFyY2h5IG9mIHZhbHVlcworLSAgICBzdGQ6OnZlY3RvcjxCYXNpY0pzb25UeXBlKj4g cmVmX3N0YWNrIHt9OworLSAgICAvLy8gaGVscGVyIHRvIGhvbGQgdGhlIHJlZmVyZW5jZSBmb3Ig dGhlIG5leHQgb2JqZWN0IGVsZW1lbnQKKy0gICAgQmFzaWNKc29uVHlwZSogb2JqZWN0X2VsZW1l bnQgPSBudWxscHRyOworLSAgICAvLy8gd2hldGhlciBhIHN5bnRheCBlcnJvciBvY2N1cnJlZAor LSAgICBib29sIGVycm9yZWQgPSBmYWxzZTsKKy0gICAgLy8vIHdoZXRoZXIgdG8gdGhyb3cgZXhj ZXB0aW9ucyBpbiBjYXNlIG9mIGVycm9ycworLSAgICBjb25zdCBib29sIGFsbG93X2V4Y2VwdGlv bnMgPSB0cnVlOworLX07CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy1j bGFzcyBqc29uX3NheF9kb21fY2FsbGJhY2tfcGFyc2VyCisteworLSAgcHVibGljOgorLSAgICB1 c2luZyBudW1iZXJfaW50ZWdlcl90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2lu dGVnZXJfdDsKKy0gICAgdXNpbmcgbnVtYmVyX3Vuc2lnbmVkX3QgPSB0eXBlbmFtZSBCYXNpY0pz b25UeXBlOjpudW1iZXJfdW5zaWduZWRfdDsKKy0gICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3QgPSB0 eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfZmxvYXRfdDsKKy0gICAgdXNpbmcgc3RyaW5n X3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdfdDsKKy0gICAgdXNpbmcgYmluYXJ5 X3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpiaW5hcnlfdDsKKy0gICAgdXNpbmcgcGFyc2Vy X2NhbGxiYWNrX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpwYXJzZXJfY2FsbGJhY2tfdDsK Ky0gICAgdXNpbmcgcGFyc2VfZXZlbnRfdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnBhcnNl X2V2ZW50X3Q7CistCistICAgIGpzb25fc2F4X2RvbV9jYWxsYmFja19wYXJzZXIoQmFzaWNKc29u VHlwZSYgciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZXJf Y2FsbGJhY2tfdCBjYiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBi b29sIGFsbG93X2V4Y2VwdGlvbnNfID0gdHJ1ZSkKKy0gICAgICAgIDogcm9vdChyKSwgY2FsbGJh Y2soY2IpLCBhbGxvd19leGNlcHRpb25zKGFsbG93X2V4Y2VwdGlvbnNfKQorLSAgICB7CistICAg ICAgICBrZWVwX3N0YWNrLnB1c2hfYmFjayh0cnVlKTsKKy0gICAgfQorLQorLSAgICAvLyBtYWtl IGNsYXNzIG1vdmUtb25seQorLSAgICBqc29uX3NheF9kb21fY2FsbGJhY2tfcGFyc2VyKGNvbnN0 IGpzb25fc2F4X2RvbV9jYWxsYmFja19wYXJzZXImKSA9IGRlbGV0ZTsKKy0gICAganNvbl9zYXhf ZG9tX2NhbGxiYWNrX3BhcnNlcihqc29uX3NheF9kb21fY2FsbGJhY2tfcGFyc2VyJiYpID0gZGVm YXVsdDsgLy8gTk9MSU5UKGhpY3BwLW5vZXhjZXB0LW1vdmUscGVyZm9ybWFuY2Utbm9leGNlcHQt bW92ZS1jb25zdHJ1Y3RvcikKKy0gICAganNvbl9zYXhfZG9tX2NhbGxiYWNrX3BhcnNlciYgb3Bl cmF0b3I9KGNvbnN0IGpzb25fc2F4X2RvbV9jYWxsYmFja19wYXJzZXImKSA9IGRlbGV0ZTsKKy0g ICAganNvbl9zYXhfZG9tX2NhbGxiYWNrX3BhcnNlciYgb3BlcmF0b3I9KGpzb25fc2F4X2RvbV9j YWxsYmFja19wYXJzZXImJikgPSBkZWZhdWx0OyAvLyBOT0xJTlQoaGljcHAtbm9leGNlcHQtbW92 ZSxwZXJmb3JtYW5jZS1ub2V4Y2VwdC1tb3ZlLWNvbnN0cnVjdG9yKQorLSAgICB+anNvbl9zYXhf ZG9tX2NhbGxiYWNrX3BhcnNlcigpID0gZGVmYXVsdDsKKy0KKy0gICAgYm9vbCBudWxsKCkKKy0g ICAgeworLSAgICAgICAgaGFuZGxlX3ZhbHVlKG51bGxwdHIpOworLSAgICAgICAgcmV0dXJuIHRy dWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBib29sZWFuKGJvb2wgdmFsKQorLSAgICB7CistICAg ICAgICBoYW5kbGVfdmFsdWUodmFsKTsKKy0gICAgICAgIHJldHVybiB0cnVlOworLSAgICB9Cist CistICAgIGJvb2wgbnVtYmVyX2ludGVnZXIobnVtYmVyX2ludGVnZXJfdCB2YWwpCistICAgIHsK Ky0gICAgICAgIGhhbmRsZV92YWx1ZSh2YWwpOworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAg IH0KKy0KKy0gICAgYm9vbCBudW1iZXJfdW5zaWduZWQobnVtYmVyX3Vuc2lnbmVkX3QgdmFsKQor LSAgICB7CistICAgICAgICBoYW5kbGVfdmFsdWUodmFsKTsKKy0gICAgICAgIHJldHVybiB0cnVl OworLSAgICB9CistCistICAgIGJvb2wgbnVtYmVyX2Zsb2F0KG51bWJlcl9mbG9hdF90IHZhbCwg Y29uc3Qgc3RyaW5nX3QmIC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAgIGhhbmRsZV92YWx1 ZSh2YWwpOworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBzdHJp bmcoc3RyaW5nX3QmIHZhbCkKKy0gICAgeworLSAgICAgICAgaGFuZGxlX3ZhbHVlKHZhbCk7Cist ICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICBib29sIGJpbmFyeShiaW5hcnlf dCYgdmFsKQorLSAgICB7CistICAgICAgICBoYW5kbGVfdmFsdWUoc3RkOjptb3ZlKHZhbCkpOwor LSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBzdGFydF9vYmplY3Qo c3RkOjpzaXplX3QgbGVuKQorLSAgICB7CistICAgICAgICAvLyBjaGVjayBjYWxsYmFjayBmb3Ig b2JqZWN0IHN0YXJ0CistICAgICAgICBjb25zdCBib29sIGtlZXAgPSBjYWxsYmFjayhzdGF0aWNf Y2FzdDxpbnQ+KHJlZl9zdGFjay5zaXplKCkpLCBwYXJzZV9ldmVudF90OjpvYmplY3Rfc3RhcnQs IGRpc2NhcmRlZCk7CistICAgICAgICBrZWVwX3N0YWNrLnB1c2hfYmFjayhrZWVwKTsKKy0KKy0g ICAgICAgIGF1dG8gdmFsID0gaGFuZGxlX3ZhbHVlKEJhc2ljSnNvblR5cGU6OnZhbHVlX3Q6Om9i amVjdCwgdHJ1ZSk7CistICAgICAgICByZWZfc3RhY2sucHVzaF9iYWNrKHZhbC5zZWNvbmQpOwor LQorLSAgICAgICAgLy8gY2hlY2sgb2JqZWN0IGxpbWl0CistICAgICAgICBpZiAocmVmX3N0YWNr LmJhY2soKSAmJiBKU09OX0hFRExFWV9VTkxJS0VMWShsZW4gIT0gc3RhdGljX2Nhc3Q8c3RkOjpz aXplX3Q+KC0xKSAmJiBsZW4gPiByZWZfc3RhY2suYmFjaygpLT5tYXhfc2l6ZSgpKSkKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKG91dF9vZl9yYW5nZTo6Y3JlYXRlKDQwOCwg ImV4Y2Vzc2l2ZSBvYmplY3Qgc2l6ZTogIiArIHN0ZDo6dG9fc3RyaW5nKGxlbiksICpyZWZfc3Rh Y2suYmFjaygpKSk7CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAg fQorLQorLSAgICBib29sIGtleShzdHJpbmdfdCYgdmFsKQorLSAgICB7CistICAgICAgICBCYXNp Y0pzb25UeXBlIGsgPSBCYXNpY0pzb25UeXBlKHZhbCk7CistCistICAgICAgICAvLyBjaGVjayBj YWxsYmFjayBmb3Iga2V5CistICAgICAgICBjb25zdCBib29sIGtlZXAgPSBjYWxsYmFjayhzdGF0 aWNfY2FzdDxpbnQ+KHJlZl9zdGFjay5zaXplKCkpLCBwYXJzZV9ldmVudF90OjprZXksIGspOwor LSAgICAgICAga2V5X2tlZXBfc3RhY2sucHVzaF9iYWNrKGtlZXApOworLQorLSAgICAgICAgLy8g YWRkIGRpc2NhcmRlZCB2YWx1ZSBhdCBnaXZlbiBrZXkgYW5kIHN0b3JlIHRoZSByZWZlcmVuY2Ug Zm9yIGxhdGVyCistICAgICAgICBpZiAoa2VlcCAmJiByZWZfc3RhY2suYmFjaygpKQorLSAgICAg ICAgeworLSAgICAgICAgICAgIG9iamVjdF9lbGVtZW50ID0gJihyZWZfc3RhY2suYmFjaygpLT5t X3ZhbHVlLm9iamVjdC0+b3BlcmF0b3JbXSh2YWwpID0gZGlzY2FyZGVkKTsKKy0gICAgICAgIH0K Ky0KKy0gICAgICAgIHJldHVybiB0cnVlOworLSAgICB9CistCistICAgIGJvb2wgZW5kX29iamVj dCgpCistICAgIHsKKy0gICAgICAgIGlmIChyZWZfc3RhY2suYmFjaygpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIGlmICghY2FsbGJhY2soc3RhdGljX2Nhc3Q8aW50PihyZWZfc3RhY2suc2l6 ZSgpKSAtIDEsIHBhcnNlX2V2ZW50X3Q6Om9iamVjdF9lbmQsICpyZWZfc3RhY2suYmFjaygpKSkK Ky0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIC8vIGRpc2NhcmQgb2JqZWN0CistICAg ICAgICAgICAgICAgICpyZWZfc3RhY2suYmFjaygpID0gZGlzY2FyZGVkOworLSAgICAgICAgICAg IH0KKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBy ZWZfc3RhY2suYmFjaygpLT5zZXRfcGFyZW50cygpOworLSAgICAgICAgICAgIH0KKy0gICAgICAg IH0KKy0KKy0gICAgICAgIEpTT05fQVNTRVJUKCFyZWZfc3RhY2suZW1wdHkoKSk7CistICAgICAg ICBKU09OX0FTU0VSVCgha2VlcF9zdGFjay5lbXB0eSgpKTsKKy0gICAgICAgIHJlZl9zdGFjay5w b3BfYmFjaygpOworLSAgICAgICAga2VlcF9zdGFjay5wb3BfYmFjaygpOworLQorLSAgICAgICAg aWYgKCFyZWZfc3RhY2suZW1wdHkoKSAmJiByZWZfc3RhY2suYmFjaygpICYmIHJlZl9zdGFjay5i YWNrKCktPmlzX3N0cnVjdHVyZWQoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyByZW1v dmUgZGlzY2FyZGVkIHZhbHVlCistICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gcmVmX3N0YWNr LmJhY2soKS0+YmVnaW4oKTsgaXQgIT0gcmVmX3N0YWNrLmJhY2soKS0+ZW5kKCk7ICsraXQpCist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAoaXQtPmlzX2Rpc2NhcmRlZCgpKQor LSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICByZWZfc3RhY2suYmFjaygp LT5lcmFzZShpdCk7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiB0cnVl OworLSAgICB9CistCistICAgIGJvb2wgc3RhcnRfYXJyYXkoc3RkOjpzaXplX3QgbGVuKQorLSAg ICB7CistICAgICAgICBjb25zdCBib29sIGtlZXAgPSBjYWxsYmFjayhzdGF0aWNfY2FzdDxpbnQ+ KHJlZl9zdGFjay5zaXplKCkpLCBwYXJzZV9ldmVudF90OjphcnJheV9zdGFydCwgZGlzY2FyZGVk KTsKKy0gICAgICAgIGtlZXBfc3RhY2sucHVzaF9iYWNrKGtlZXApOworLQorLSAgICAgICAgYXV0 byB2YWwgPSBoYW5kbGVfdmFsdWUoQmFzaWNKc29uVHlwZTo6dmFsdWVfdDo6YXJyYXksIHRydWUp OworLSAgICAgICAgcmVmX3N0YWNrLnB1c2hfYmFjayh2YWwuc2Vjb25kKTsKKy0KKy0gICAgICAg IC8vIGNoZWNrIGFycmF5IGxpbWl0CistICAgICAgICBpZiAocmVmX3N0YWNrLmJhY2soKSAmJiBK U09OX0hFRExFWV9VTkxJS0VMWShsZW4gIT0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSAm JiBsZW4gPiByZWZfc3RhY2suYmFjaygpLT5tYXhfc2l6ZSgpKSkKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICBKU09OX1RIUk9XKG91dF9vZl9yYW5nZTo6Y3JlYXRlKDQwOCwgImV4Y2Vzc2l2ZSBh cnJheSBzaXplOiAiICsgc3RkOjp0b19zdHJpbmcobGVuKSwgKnJlZl9zdGFjay5iYWNrKCkpKTsK Ky0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiB0cnVlOworLSAgICB9CistCistICAgIGJv b2wgZW5kX2FycmF5KCkKKy0gICAgeworLSAgICAgICAgYm9vbCBrZWVwID0gdHJ1ZTsKKy0KKy0g ICAgICAgIGlmIChyZWZfc3RhY2suYmFjaygpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGtl ZXAgPSBjYWxsYmFjayhzdGF0aWNfY2FzdDxpbnQ+KHJlZl9zdGFjay5zaXplKCkpIC0gMSwgcGFy c2VfZXZlbnRfdDo6YXJyYXlfZW5kLCAqcmVmX3N0YWNrLmJhY2soKSk7CistICAgICAgICAgICAg aWYgKGtlZXApCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICByZWZfc3RhY2suYmFj aygpLT5zZXRfcGFyZW50cygpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBlbHNlCist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBkaXNjYXJkIGFycmF5CistICAgICAg ICAgICAgICAgICpyZWZfc3RhY2suYmFjaygpID0gZGlzY2FyZGVkOworLSAgICAgICAgICAgIH0K Ky0gICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05fQVNTRVJUKCFyZWZfc3RhY2suZW1wdHkoKSk7 CistICAgICAgICBKU09OX0FTU0VSVCgha2VlcF9zdGFjay5lbXB0eSgpKTsKKy0gICAgICAgIHJl Zl9zdGFjay5wb3BfYmFjaygpOworLSAgICAgICAga2VlcF9zdGFjay5wb3BfYmFjaygpOworLQor LSAgICAgICAgLy8gcmVtb3ZlIGRpc2NhcmRlZCB2YWx1ZQorLSAgICAgICAgaWYgKCFrZWVwICYm ICFyZWZfc3RhY2suZW1wdHkoKSAmJiByZWZfc3RhY2suYmFjaygpLT5pc19hcnJheSgpKQorLSAg ICAgICAgeworLSAgICAgICAgICAgIHJlZl9zdGFjay5iYWNrKCktPm1fdmFsdWUuYXJyYXktPnBv cF9iYWNrKCk7CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQor LQorLSAgICB0ZW1wbGF0ZTxjbGFzcyBFeGNlcHRpb24+CistICAgIGJvb2wgcGFyc2VfZXJyb3Io c3RkOjpzaXplX3QgLyp1bnVzZWQqLywgY29uc3Qgc3RkOjpzdHJpbmcmIC8qdW51c2VkKi8sCist ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXhjZXB0aW9uJiBleCkKKy0gICAgeworLSAgICAg ICAgZXJyb3JlZCA9IHRydWU7CistICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihleCk7CistICAg ICAgICBpZiAoYWxsb3dfZXhjZXB0aW9ucykKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09O X1RIUk9XKGV4KTsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQor LQorLSAgICBjb25zdGV4cHIgYm9vbCBpc19lcnJvcmVkKCkgY29uc3QKKy0gICAgeworLSAgICAg ICAgcmV0dXJuIGVycm9yZWQ7CistICAgIH0KKy0KKy0gIHByaXZhdGU6CistICAgIC8qIQorLSAg ICBAcGFyYW1baW5dIHYgIHZhbHVlIHRvIGFkZCB0byB0aGUgSlNPTiB2YWx1ZSB3ZSBidWlsZCBk dXJpbmcgcGFyc2luZworLSAgICBAcGFyYW1baW5dIHNraXBfY2FsbGJhY2sgIHdoZXRoZXIgd2Ug c2hvdWxkIHNraXAgY2FsbGluZyB0aGUgY2FsbGJhY2sKKy0gICAgICAgICAgICAgICBmdW5jdGlv bjsgdGhpcyBpcyByZXF1aXJlZCBhZnRlciBzdGFydF9hcnJheSgpIGFuZAorLSAgICAgICAgICAg ICAgIHN0YXJ0X29iamVjdCgpIFNBWCBldmVudHMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvdWxk IGNhbGwgdGhlCistICAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhbiBlbXB0 eSBhcnJheSBvciBvYmplY3QsIHJlc3BlY3RpdmVseS4KKy0KKy0gICAgQGludmFyaWFudCBJZiB0 aGUgcmVmIHN0YWNrIGlzIGVtcHR5LCB0aGVuIHRoZSBwYXNzZWQgdmFsdWUgd2lsbCBiZSB0aGUg bmV3CistICAgICAgICAgICAgICAgcm9vdC4KKy0gICAgQGludmFyaWFudCBJZiB0aGUgcmVmIHN0 YWNrIGNvbnRhaW5zIGEgdmFsdWUsIHRoZW4gaXQgaXMgYW4gYXJyYXkgb3IgYW4KKy0gICAgICAg ICAgICAgICBvYmplY3QgdG8gd2hpY2ggd2UgY2FuIGFkZCBlbGVtZW50cworLQorLSAgICBAcmV0 dXJuIHBhaXIgb2YgYm9vbGVhbiAod2hldGhlciB2YWx1ZSBzaG91bGQgYmUga2VwdCkgYW5kIHBv aW50ZXIgKHRvIHRoZQorLSAgICAgICAgICAgIHBhc3NlZCB2YWx1ZSBpbiB0aGUgcmVmX3N0YWNr IGhpZXJhcmNoeTsgbnVsbHB0ciBpZiBub3Qga2VwdCkKKy0gICAgKi8KKy0gICAgdGVtcGxhdGU8 dHlwZW5hbWUgVmFsdWU+CistICAgIHN0ZDo6cGFpcjxib29sLCBCYXNpY0pzb25UeXBlKj4gaGFu ZGxlX3ZhbHVlKFZhbHVlJiYgdiwgY29uc3QgYm9vbCBza2lwX2NhbGxiYWNrID0gZmFsc2UpCist ICAgIHsKKy0gICAgICAgIEpTT05fQVNTRVJUKCFrZWVwX3N0YWNrLmVtcHR5KCkpOworLQorLSAg ICAgICAgLy8gZG8gbm90IGhhbmRsZSB0aGlzIHZhbHVlIGlmIHdlIGtub3cgaXQgd291bGQgYmUg YWRkZWQgdG8gYSBkaXNjYXJkZWQKKy0gICAgICAgIC8vIGNvbnRhaW5lcgorLSAgICAgICAgaWYg KCFrZWVwX3N0YWNrLmJhY2soKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4ge2Zh bHNlLCBudWxscHRyfTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIGNyZWF0ZSB2YWx1ZQor LSAgICAgICAgYXV0byB2YWx1ZSA9IEJhc2ljSnNvblR5cGUoc3RkOjpmb3J3YXJkPFZhbHVlPih2 KSk7CistCistICAgICAgICAvLyBjaGVjayBjYWxsYmFjaworLSAgICAgICAgY29uc3QgYm9vbCBr ZWVwID0gc2tpcF9jYWxsYmFjayB8fCBjYWxsYmFjayhzdGF0aWNfY2FzdDxpbnQ+KHJlZl9zdGFj ay5zaXplKCkpLCBwYXJzZV9ldmVudF90Ojp2YWx1ZSwgdmFsdWUpOworLQorLSAgICAgICAgLy8g ZG8gbm90IGhhbmRsZSB0aGlzIHZhbHVlIGlmIHdlIGp1c3QgbGVhcm50IGl0IHNoYWxsIGJlIGRp c2NhcmRlZAorLSAgICAgICAgaWYgKCFrZWVwKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJl dHVybiB7ZmFsc2UsIG51bGxwdHJ9OworLSAgICAgICAgfQorLQorLSAgICAgICAgaWYgKHJlZl9z dGFjay5lbXB0eSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJvb3QgPSBzdGQ6Om1vdmUo dmFsdWUpOworLSAgICAgICAgICAgIHJldHVybiB7dHJ1ZSwgJnJvb3R9OworLSAgICAgICAgfQor LQorLSAgICAgICAgLy8gc2tpcCB0aGlzIHZhbHVlIGlmIHdlIGFscmVhZHkgZGVjaWRlZCB0byBz a2lwIHRoZSBwYXJlbnQKKy0gICAgICAgIC8vIChodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4v anNvbi9pc3N1ZXMvOTcxI2lzc3VlY29tbWVudC00MTM2NzgzNjApCistICAgICAgICBpZiAoIXJl Zl9zdGFjay5iYWNrKCkpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIHtmYWxzZSwg bnVsbHB0cn07CistICAgICAgICB9CistCistICAgICAgICAvLyB3ZSBub3cgb25seSBleHBlY3Qg YXJyYXlzIGFuZCBvYmplY3RzCistICAgICAgICBKU09OX0FTU0VSVChyZWZfc3RhY2suYmFjaygp LT5pc19hcnJheSgpIHx8IHJlZl9zdGFjay5iYWNrKCktPmlzX29iamVjdCgpKTsKKy0KKy0gICAg ICAgIC8vIGFycmF5CistICAgICAgICBpZiAocmVmX3N0YWNrLmJhY2soKS0+aXNfYXJyYXkoKSkK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICByZWZfc3RhY2suYmFjaygpLT5tX3ZhbHVlLmFycmF5 LT5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHZhbHVlKSk7CistICAgICAgICAgICAgcmV0dXJuIHt0 cnVlLCAmKHJlZl9zdGFjay5iYWNrKCktPm1fdmFsdWUuYXJyYXktPmJhY2soKSl9OworLSAgICAg ICAgfQorLQorLSAgICAgICAgLy8gb2JqZWN0CistICAgICAgICBKU09OX0FTU0VSVChyZWZfc3Rh Y2suYmFjaygpLT5pc19vYmplY3QoKSk7CistICAgICAgICAvLyBjaGVjayBpZiB3ZSBzaG91bGQg c3RvcmUgYW4gZWxlbWVudCBmb3IgdGhlIGN1cnJlbnQga2V5CistICAgICAgICBKU09OX0FTU0VS VCgha2V5X2tlZXBfc3RhY2suZW1wdHkoKSk7CistICAgICAgICBjb25zdCBib29sIHN0b3JlX2Vs ZW1lbnQgPSBrZXlfa2VlcF9zdGFjay5iYWNrKCk7CistICAgICAgICBrZXlfa2VlcF9zdGFjay5w b3BfYmFjaygpOworLQorLSAgICAgICAgaWYgKCFzdG9yZV9lbGVtZW50KQorLSAgICAgICAgewor LSAgICAgICAgICAgIHJldHVybiB7ZmFsc2UsIG51bGxwdHJ9OworLSAgICAgICAgfQorLQorLSAg ICAgICAgSlNPTl9BU1NFUlQob2JqZWN0X2VsZW1lbnQpOworLSAgICAgICAgKm9iamVjdF9lbGVt ZW50ID0gc3RkOjptb3ZlKHZhbHVlKTsKKy0gICAgICAgIHJldHVybiB7dHJ1ZSwgb2JqZWN0X2Vs ZW1lbnR9OworLSAgICB9CistCistICAgIC8vLyB0aGUgcGFyc2VkIEpTT04gdmFsdWUKKy0gICAg QmFzaWNKc29uVHlwZSYgcm9vdDsKKy0gICAgLy8vIHN0YWNrIHRvIG1vZGVsIGhpZXJhcmNoeSBv ZiB2YWx1ZXMKKy0gICAgc3RkOjp2ZWN0b3I8QmFzaWNKc29uVHlwZSo+IHJlZl9zdGFjayB7fTsK Ky0gICAgLy8vIHN0YWNrIHRvIG1hbmFnZSB3aGljaCB2YWx1ZXMgdG8ga2VlcAorLSAgICBzdGQ6 OnZlY3Rvcjxib29sPiBrZWVwX3N0YWNrIHt9OworLSAgICAvLy8gc3RhY2sgdG8gbWFuYWdlIHdo aWNoIG9iamVjdCBrZXlzIHRvIGtlZXAKKy0gICAgc3RkOjp2ZWN0b3I8Ym9vbD4ga2V5X2tlZXBf c3RhY2sge307CistICAgIC8vLyBoZWxwZXIgdG8gaG9sZCB0aGUgcmVmZXJlbmNlIGZvciB0aGUg bmV4dCBvYmplY3QgZWxlbWVudAorLSAgICBCYXNpY0pzb25UeXBlKiBvYmplY3RfZWxlbWVudCA9 IG51bGxwdHI7CistICAgIC8vLyB3aGV0aGVyIGEgc3ludGF4IGVycm9yIG9jY3VycmVkCistICAg IGJvb2wgZXJyb3JlZCA9IGZhbHNlOworLSAgICAvLy8gY2FsbGJhY2sgZnVuY3Rpb24KKy0gICAg Y29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2FsbGJhY2sgPSBudWxscHRyOworLSAgICAvLy8gd2hl dGhlciB0byB0aHJvdyBleGNlcHRpb25zIGluIGNhc2Ugb2YgZXJyb3JzCistICAgIGNvbnN0IGJv b2wgYWxsb3dfZXhjZXB0aW9ucyA9IHRydWU7CistICAgIC8vLyBhIGRpc2NhcmRlZCB2YWx1ZSBm b3IgdGhlIGNhbGxiYWNrCistICAgIEJhc2ljSnNvblR5cGUgZGlzY2FyZGVkID0gQmFzaWNKc29u VHlwZTo6dmFsdWVfdDo6ZGlzY2FyZGVkOworLX07CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFz aWNKc29uVHlwZT4KKy1jbGFzcyBqc29uX3NheF9hY2NlcHRvcgorLXsKKy0gIHB1YmxpYzoKKy0g ICAgdXNpbmcgbnVtYmVyX2ludGVnZXJfdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJl cl9pbnRlZ2VyX3Q7CistICAgIHVzaW5nIG51bWJlcl91bnNpZ25lZF90ID0gdHlwZW5hbWUgQmFz aWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVkX3Q7CistICAgIHVzaW5nIG51bWJlcl9mbG9hdF90 ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2Zsb2F0X3Q7CistICAgIHVzaW5nIHN0 cmluZ190ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3Q7CistICAgIHVzaW5nIGJp bmFyeV90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6YmluYXJ5X3Q7CistCistICAgIGJvb2wg bnVsbCgpCistICAgIHsKKy0gICAgICAgIHJldHVybiB0cnVlOworLSAgICB9CistCistICAgIGJv b2wgYm9vbGVhbihib29sIC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAgIHJldHVybiB0cnVl OworLSAgICB9CistCistICAgIGJvb2wgbnVtYmVyX2ludGVnZXIobnVtYmVyX2ludGVnZXJfdCAv KnVudXNlZCovKQorLSAgICB7CistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAg ICBib29sIG51bWJlcl91bnNpZ25lZChudW1iZXJfdW5zaWduZWRfdCAvKnVudXNlZCovKQorLSAg ICB7CistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICBib29sIG51bWJlcl9m bG9hdChudW1iZXJfZmxvYXRfdCAvKnVudXNlZCovLCBjb25zdCBzdHJpbmdfdCYgLyp1bnVzZWQq LykKKy0gICAgeworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBz dHJpbmcoc3RyaW5nX3QmIC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAgIHJldHVybiB0cnVl OworLSAgICB9CistCistICAgIGJvb2wgYmluYXJ5KGJpbmFyeV90JiAvKnVudXNlZCovKQorLSAg ICB7CistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICBib29sIHN0YXJ0X29i amVjdChzdGQ6OnNpemVfdCAvKnVudXNlZCovID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0x KSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBr ZXkoc3RyaW5nX3QmIC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAgIHJldHVybiB0cnVlOwor LSAgICB9CistCistICAgIGJvb2wgZW5kX29iamVjdCgpCistICAgIHsKKy0gICAgICAgIHJldHVy biB0cnVlOworLSAgICB9CistCistICAgIGJvb2wgc3RhcnRfYXJyYXkoc3RkOjpzaXplX3QgLyp1 bnVzZWQqLyA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMSkpCistICAgIHsKKy0gICAgICAg IHJldHVybiB0cnVlOworLSAgICB9CistCistICAgIGJvb2wgZW5kX2FycmF5KCkKKy0gICAgewor LSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgYm9vbCBwYXJzZV9lcnJvcihz dGQ6OnNpemVfdCAvKnVudXNlZCovLCBjb25zdCBzdGQ6OnN0cmluZyYgLyp1bnVzZWQqLywgY29u c3QgZGV0YWlsOjpleGNlcHRpb24mIC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAgIHJldHVy biBmYWxzZTsKKy0gICAgfQorLX07CistfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorLQorLX0gIC8v IG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvaW5w dXQvbGV4ZXIuaHBwPgorLQorLQorLSNpbmNsdWRlIDxhcnJheT4gLy8gYXJyYXkKKy0jaW5jbHVk ZSA8Y2xvY2FsZT4gLy8gbG9jYWxlY29udgorLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QK Ky0jaW5jbHVkZSA8Y3N0ZGlvPiAvLyBzbnByaW50ZgorLSNpbmNsdWRlIDxjc3RkbGliPiAvLyBz dHJ0b2YsIHN0cnRvZCwgc3RydG9sZCwgc3RydG9sbCwgc3RydG91bGwKKy0jaW5jbHVkZSA8aW5p dGlhbGl6ZXJfbGlzdD4gLy8gaW5pdGlhbGl6ZXJfbGlzdAorLSNpbmNsdWRlIDxzdHJpbmc+IC8v IGNoYXJfdHJhaXRzLCBzdHJpbmcKKy0jaW5jbHVkZSA8dXRpbGl0eT4gLy8gbW92ZQorLSNpbmNs dWRlIDx2ZWN0b3I+IC8vIHZlY3RvcgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwv aW5wdXQvaW5wdXRfYWRhcHRlcnMuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRh aWwvaW5wdXQvcG9zaXRpb25fdC5ocHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFp bC9tYWNyb19zY29wZS5ocHA+CistCistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVz cGFjZSBkZXRhaWwKKy17CistLy8vLy8vLy8vLy8KKy0vLyBsZXhlciAvLworLS8vLy8vLy8vLy8v CistCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy1jbGFzcyBsZXhlcl9iYXNl CisteworLSAgcHVibGljOgorLSAgICAvLy8gdG9rZW4gdHlwZXMgZm9yIHRoZSBwYXJzZXIKKy0g ICAgZW51bSBjbGFzcyB0b2tlbl90eXBlCistICAgIHsKKy0gICAgICAgIHVuaW5pdGlhbGl6ZWQs ICAgIC8vLzwgaW5kaWNhdGluZyB0aGUgc2Nhbm5lciBpcyB1bmluaXRpYWxpemVkCistICAgICAg ICBsaXRlcmFsX3RydWUsICAgICAvLy88IHRoZSBgdHJ1ZWAgbGl0ZXJhbAorLSAgICAgICAgbGl0 ZXJhbF9mYWxzZSwgICAgLy8vPCB0aGUgYGZhbHNlYCBsaXRlcmFsCistICAgICAgICBsaXRlcmFs X251bGwsICAgICAvLy88IHRoZSBgbnVsbGAgbGl0ZXJhbAorLSAgICAgICAgdmFsdWVfc3RyaW5n LCAgICAgLy8vPCBhIHN0cmluZyAtLSB1c2UgZ2V0X3N0cmluZygpIGZvciBhY3R1YWwgdmFsdWUK Ky0gICAgICAgIHZhbHVlX3Vuc2lnbmVkLCAgIC8vLzwgYW4gdW5zaWduZWQgaW50ZWdlciAtLSB1 c2UgZ2V0X251bWJlcl91bnNpZ25lZCgpIGZvciBhY3R1YWwgdmFsdWUKKy0gICAgICAgIHZhbHVl X2ludGVnZXIsICAgIC8vLzwgYSBzaWduZWQgaW50ZWdlciAtLSB1c2UgZ2V0X251bWJlcl9pbnRl Z2VyKCkgZm9yIGFjdHVhbCB2YWx1ZQorLSAgICAgICAgdmFsdWVfZmxvYXQsICAgICAgLy8vPCBh biBmbG9hdGluZyBwb2ludCBudW1iZXIgLS0gdXNlIGdldF9udW1iZXJfZmxvYXQoKSBmb3IgYWN0 dWFsIHZhbHVlCistICAgICAgICBiZWdpbl9hcnJheSwgICAgICAvLy88IHRoZSBjaGFyYWN0ZXIg Zm9yIGFycmF5IGJlZ2luIGBbYAorLSAgICAgICAgYmVnaW5fb2JqZWN0LCAgICAgLy8vPCB0aGUg Y2hhcmFjdGVyIGZvciBvYmplY3QgYmVnaW4gYHtgCistICAgICAgICBlbmRfYXJyYXksICAgICAg ICAvLy88IHRoZSBjaGFyYWN0ZXIgZm9yIGFycmF5IGVuZCBgXWAKKy0gICAgICAgIGVuZF9vYmpl Y3QsICAgICAgIC8vLzwgdGhlIGNoYXJhY3RlciBmb3Igb2JqZWN0IGVuZCBgfWAKKy0gICAgICAg IG5hbWVfc2VwYXJhdG9yLCAgIC8vLzwgdGhlIG5hbWUgc2VwYXJhdG9yIGA6YAorLSAgICAgICAg dmFsdWVfc2VwYXJhdG9yLCAgLy8vPCB0aGUgdmFsdWUgc2VwYXJhdG9yIGAsYAorLSAgICAgICAg cGFyc2VfZXJyb3IsICAgICAgLy8vPCBpbmRpY2F0aW5nIGEgcGFyc2UgZXJyb3IKKy0gICAgICAg IGVuZF9vZl9pbnB1dCwgICAgIC8vLzwgaW5kaWNhdGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBi dWZmZXIKKy0gICAgICAgIGxpdGVyYWxfb3JfdmFsdWUgIC8vLzwgYSBsaXRlcmFsIG9yIHRoZSBi ZWdpbiBvZiBhIHZhbHVlIChvbmx5IGZvciBkaWFnbm9zdGljcykKKy0gICAgfTsKKy0KKy0gICAg Ly8vIHJldHVybiBuYW1lIG9mIHZhbHVlcyBvZiB0eXBlIHRva2VuX3R5cGUgKG9ubHkgdXNlZCBm b3IgZXJyb3JzKQorLSAgICBKU09OX0hFRExFWV9SRVRVUk5TX05PTl9OVUxMCistICAgIEpTT05f SEVETEVZX0NPTlNUCistICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0b2tlbl90eXBlX25hbWUoY29u c3QgdG9rZW5fdHlwZSB0KSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICBzd2l0Y2ggKHQpCist ICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjp1bmluaXRpYWxpemVkOgor LSAgICAgICAgICAgICAgICByZXR1cm4gIjx1bmluaXRpYWxpemVkPiI7CistICAgICAgICAgICAg Y2FzZSB0b2tlbl90eXBlOjpsaXRlcmFsX3RydWU6CistICAgICAgICAgICAgICAgIHJldHVybiAi dHJ1ZSBsaXRlcmFsIjsKKy0gICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfZmFs c2U6CistICAgICAgICAgICAgICAgIHJldHVybiAiZmFsc2UgbGl0ZXJhbCI7CistICAgICAgICAg ICAgY2FzZSB0b2tlbl90eXBlOjpsaXRlcmFsX251bGw6CistICAgICAgICAgICAgICAgIHJldHVy biAibnVsbCBsaXRlcmFsIjsKKy0gICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnZhbHVlX3N0 cmluZzoKKy0gICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmcgbGl0ZXJhbCI7CistICAgICAg ICAgICAgY2FzZSB0b2tlbl90eXBlOjp2YWx1ZV91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNl IHRva2VuX3R5cGU6OnZhbHVlX2ludGVnZXI6CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBl Ojp2YWx1ZV9mbG9hdDoKKy0gICAgICAgICAgICAgICAgcmV0dXJuICJudW1iZXIgbGl0ZXJhbCI7 CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpiZWdpbl9hcnJheToKKy0gICAgICAgICAg ICAgICAgcmV0dXJuICInWyciOworLSAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6YmVnaW5f b2JqZWN0OgorLSAgICAgICAgICAgICAgICByZXR1cm4gIid7JyI7CistICAgICAgICAgICAgY2Fz ZSB0b2tlbl90eXBlOjplbmRfYXJyYXk6CistICAgICAgICAgICAgICAgIHJldHVybiAiJ10nIjsK Ky0gICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmVuZF9vYmplY3Q6CistICAgICAgICAgICAg ICAgIHJldHVybiAiJ30nIjsKKy0gICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6Om5hbWVfc2Vw YXJhdG9yOgorLSAgICAgICAgICAgICAgICByZXR1cm4gIic6JyI7CistICAgICAgICAgICAgY2Fz ZSB0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3I6CistICAgICAgICAgICAgICAgIHJldHVybiAi JywnIjsKKy0gICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOgorLSAgICAg ICAgICAgICAgICByZXR1cm4gIjxwYXJzZSBlcnJvcj4iOworLSAgICAgICAgICAgIGNhc2UgdG9r ZW5fdHlwZTo6ZW5kX29mX2lucHV0OgorLSAgICAgICAgICAgICAgICByZXR1cm4gImVuZCBvZiBp bnB1dCI7CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpsaXRlcmFsX29yX3ZhbHVlOgor LSAgICAgICAgICAgICAgICByZXR1cm4gIidbJywgJ3snLCBvciBhIGxpdGVyYWwiOworLSAgICAg ICAgICAgIC8vIExDT1ZfRVhDTF9TVEFSVAorLSAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGNhdGNo IG5vbi1lbnVtIHZhbHVlcworLSAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gdG9rZW4i OworLSAgICAgICAgICAgICAgICAvLyBMQ09WX0VYQ0xfU1RPUAorLSAgICAgICAgfQorLSAgICB9 CistfTsKKy0vKiEKKy1AYnJpZWYgbGV4aWNhbCBhbmFseXNpcworLQorLVRoaXMgY2xhc3Mgb3Jn YW5pemVzIHRoZSBsZXhpY2FsIGFuYWx5c2lzIGR1cmluZyBKU09OIGRlc2VyaWFsaXphdGlvbi4K Ky0qLworLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIElucHV0QWRh cHRlclR5cGU+CistY2xhc3MgbGV4ZXIgOiBwdWJsaWMgbGV4ZXJfYmFzZTxCYXNpY0pzb25UeXBl PgorLXsKKy0gICAgdXNpbmcgbnVtYmVyX2ludGVnZXJfdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5 cGU6Om51bWJlcl9pbnRlZ2VyX3Q7CistICAgIHVzaW5nIG51bWJlcl91bnNpZ25lZF90ID0gdHlw ZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVkX3Q7CistICAgIHVzaW5nIG51bWJl cl9mbG9hdF90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2Zsb2F0X3Q7CistICAg IHVzaW5nIHN0cmluZ190ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3Q7CistICAg IHVzaW5nIGNoYXJfdHlwZSA9IHR5cGVuYW1lIElucHV0QWRhcHRlclR5cGU6OmNoYXJfdHlwZTsK Ky0gICAgdXNpbmcgY2hhcl9pbnRfdHlwZSA9IHR5cGVuYW1lIHN0ZDo6Y2hhcl90cmFpdHM8Y2hh cl90eXBlPjo6aW50X3R5cGU7CistCistICBwdWJsaWM6CistICAgIHVzaW5nIHRva2VuX3R5cGUg PSB0eXBlbmFtZSBsZXhlcl9iYXNlPEJhc2ljSnNvblR5cGU+Ojp0b2tlbl90eXBlOworLQorLSAg ICBleHBsaWNpdCBsZXhlcihJbnB1dEFkYXB0ZXJUeXBlJiYgYWRhcHRlciwgYm9vbCBpZ25vcmVf Y29tbWVudHNfID0gZmFsc2UpIG5vZXhjZXB0CistICAgICAgICA6IGlhKHN0ZDo6bW92ZShhZGFw dGVyKSkKKy0gICAgICAgICwgaWdub3JlX2NvbW1lbnRzKGlnbm9yZV9jb21tZW50c18pCistICAg ICAgICAsIGRlY2ltYWxfcG9pbnRfY2hhcihzdGF0aWNfY2FzdDxjaGFyX2ludF90eXBlPihnZXRf ZGVjaW1hbF9wb2ludCgpKSkKKy0gICAge30KKy0KKy0gICAgLy8gZGVsZXRlIGJlY2F1c2Ugb2Yg cG9pbnRlciBtZW1iZXJzCistICAgIGxleGVyKGNvbnN0IGxleGVyJikgPSBkZWxldGU7CistICAg IGxleGVyKGxleGVyJiYpID0gZGVmYXVsdDsgLy8gTk9MSU5UKGhpY3BwLW5vZXhjZXB0LW1vdmUs cGVyZm9ybWFuY2Utbm9leGNlcHQtbW92ZS1jb25zdHJ1Y3RvcikKKy0gICAgbGV4ZXImIG9wZXJh dG9yPShsZXhlciYpID0gZGVsZXRlOworLSAgICBsZXhlciYgb3BlcmF0b3I9KGxleGVyJiYpID0g ZGVmYXVsdDsgLy8gTk9MSU5UKGhpY3BwLW5vZXhjZXB0LW1vdmUscGVyZm9ybWFuY2Utbm9leGNl cHQtbW92ZS1jb25zdHJ1Y3RvcikKKy0gICAgfmxleGVyKCkgPSBkZWZhdWx0OworLQorLSAgcHJp dmF0ZToKKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8vIGxvY2FsZXMKKy0gICAg Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8vLyByZXR1cm4gdGhlIGxvY2FsZS1kZXBl bmRlbnQgZGVjaW1hbCBwb2ludAorLSAgICBKU09OX0hFRExFWV9QVVJFCistICAgIHN0YXRpYyBj aGFyIGdldF9kZWNpbWFsX3BvaW50KCkgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgY29uc3Qg YXV0byogbG9jID0gbG9jYWxlY29udigpOworLSAgICAgICAgSlNPTl9BU1NFUlQobG9jICE9IG51 bGxwdHIpOworLSAgICAgICAgcmV0dXJuIChsb2MtPmRlY2ltYWxfcG9pbnQgPT0gbnVsbHB0cikg PyAnLicgOiAqKGxvYy0+ZGVjaW1hbF9wb2ludCk7CistICAgIH0KKy0KKy0gICAgLy8vLy8vLy8v Ly8vLy8vLy8vLy8vCistICAgIC8vIHNjYW4gZnVuY3Rpb25zCistICAgIC8vLy8vLy8vLy8vLy8v Ly8vLy8vLworLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGdldCBjb2RlcG9pbnQgZnJvbSA0IGhl eCBjaGFyYWN0ZXJzIGZvbGxvd2luZyBgXHVgCistCistICAgIEZvciBpbnB1dCAiXHUgYzEgYzIg YzMgYzQiIHRoZSBjb2RlcG9pbnQgaXM6CistICAgICAgKGMxICogMHgxMDAwKSArIChjMiAqIDB4 MDEwMCkgKyAoYzMgKiAweDAwMTApICsgYzQKKy0gICAgPSAoYzEgPDwgMTIpICsgKGMyIDw8IDgp ICsgKGMzIDw8IDQpICsgKGM0IDw8IDApCistCistICAgIEZ1cnRoZXJtb3JlLCB0aGUgcG9zc2li bGUgY2hhcmFjdGVycyAnMCcuLic5JywgJ0EnLi4nRicsIGFuZCAnYScuLidmJworLSAgICBtdXN0 IGJlIGNvbnZlcnRlZCB0byB0aGUgaW50ZWdlcnMgMHgwLi4weDksIDB4QS4uMHhGLCAweEEuLjB4 RiwgcmVzcC4gVGhlCistICAgIGNvbnZlcnNpb24gaXMgZG9uZSBieSBzdWJ0cmFjdGluZyB0aGUg b2Zmc2V0ICgweDMwLCAweDM3LCBhbmQgMHg1NykKKy0gICAgYmV0d2VlbiB0aGUgQVNDSUkgdmFs dWUgb2YgdGhlIGNoYXJhY3RlciBhbmQgdGhlIGRlc2lyZWQgaW50ZWdlciB2YWx1ZS4KKy0KKy0g ICAgQHJldHVybiBjb2RlcG9pbnQgKDB4MDAwMC4uMHhGRkZGKSBvciAtMSBpbiBjYXNlIG9mIGFu IGVycm9yIChlLmcuIEVPRiBvcgorLSAgICAgICAgICAgIG5vbi1oZXggY2hhcmFjdGVyKQorLSAg ICAqLworLSAgICBpbnQgZ2V0X2NvZGVwb2ludCgpCistICAgIHsKKy0gICAgICAgIC8vIHRoaXMg ZnVuY3Rpb24gb25seSBtYWtlcyBzZW5zZSBhZnRlciByZWFkaW5nIGBcdWAKKy0gICAgICAgIEpT T05fQVNTRVJUKGN1cnJlbnQgPT0gJ3UnKTsKKy0gICAgICAgIGludCBjb2RlcG9pbnQgPSAwOwor LQorLSAgICAgICAgY29uc3QgYXV0byBmYWN0b3JzID0geyAxMnUsIDh1LCA0dSwgMHUgfTsKKy0g ICAgICAgIGZvciAoY29uc3QgYXV0byBmYWN0b3IgOiBmYWN0b3JzKQorLSAgICAgICAgeworLSAg ICAgICAgICAgIGdldCgpOworLQorLSAgICAgICAgICAgIGlmIChjdXJyZW50ID49ICcwJyAmJiBj dXJyZW50IDw9ICc5JykKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNvZGVwb2lu dCArPSBzdGF0aWNfY2FzdDxpbnQ+KChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGN1cnJlbnQp IC0gMHgzMHUpIDw8IGZhY3Rvcik7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2Ug aWYgKGN1cnJlbnQgPj0gJ0EnICYmIGN1cnJlbnQgPD0gJ0YnKQorLSAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgY29kZXBvaW50ICs9IHN0YXRpY19jYXN0PGludD4oKHN0YXRpY19jYXN0 PHVuc2lnbmVkIGludD4oY3VycmVudCkgLSAweDM3dSkgPDwgZmFjdG9yKTsKKy0gICAgICAgICAg ICB9CistICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA+PSAnYScgJiYgY3VycmVudCA8PSAn ZicpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBjb2RlcG9pbnQgKz0gc3RhdGlj X2Nhc3Q8aW50Pigoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihjdXJyZW50KSAtIDB4NTd1KSA8 PCBmYWN0b3IpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CistICAgICAgICAgICAgfQorLSAgICAg ICAgfQorLQorLSAgICAgICAgSlNPTl9BU1NFUlQoMHgwMDAwIDw9IGNvZGVwb2ludCAmJiBjb2Rl cG9pbnQgPD0gMHhGRkZGKTsKKy0gICAgICAgIHJldHVybiBjb2RlcG9pbnQ7CistICAgIH0KKy0K Ky0gICAgLyohCistICAgIEBicmllZiBjaGVjayBpZiB0aGUgbmV4dCBieXRlKHMpIGFyZSBpbnNp ZGUgYSBnaXZlbiByYW5nZQorLQorLSAgICBBZGRzIHRoZSBjdXJyZW50IGJ5dGUgYW5kLCBmb3Ig ZWFjaCBwYXNzZWQgcmFuZ2UsIHJlYWRzIGEgbmV3IGJ5dGUgYW5kCistICAgIGNoZWNrcyBpZiBp dCBpcyBpbnNpZGUgdGhlIHJhbmdlLiBJZiBhIHZpb2xhdGlvbiB3YXMgZGV0ZWN0ZWQsIHNldCB1 cCBhbgorLSAgICBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSwgcmV0 dXJuIHRydWUuCistCistICAgIEBwYXJhbVtpbl0gcmFuZ2VzICBsaXN0IG9mIGludGVnZXJzOyBp bnRlcnByZXRlZCBhcyBsaXN0IG9mIHBhaXJzIG9mCistICAgICAgICAgICAgICAgICAgICAgICBp bmNsdXNpdmUgbG93ZXIgYW5kIHVwcGVyIGJvdW5kLCByZXNwZWN0aXZlbHkKKy0KKy0gICAgQHBy ZSBUaGUgcGFzc2VkIGxpc3QgQGEgcmFuZ2VzIG11c3QgaGF2ZSAyLCA0LCBvciA2IGVsZW1lbnRz OyB0aGF0IGlzLAorLSAgICAgICAgIDEsIDIsIG9yIDMgcGFpcnMuIFRoaXMgcHJlY29uZGl0aW9u IGlzIGVuZm9yY2VkIGJ5IGFuIGFzc2VydGlvbi4KKy0KKy0gICAgQHJldHVybiB0cnVlIGlmIGFu ZCBvbmx5IGlmIG5vIHJhbmdlIHZpb2xhdGlvbiB3YXMgZGV0ZWN0ZWQKKy0gICAgKi8KKy0gICAg Ym9vbCBuZXh0X2J5dGVfaW5fcmFuZ2Uoc3RkOjppbml0aWFsaXplcl9saXN0PGNoYXJfaW50X3R5 cGU+IHJhbmdlcykKKy0gICAgeworLSAgICAgICAgSlNPTl9BU1NFUlQocmFuZ2VzLnNpemUoKSA9 PSAyIHx8IHJhbmdlcy5zaXplKCkgPT0gNCB8fCByYW5nZXMuc2l6ZSgpID09IDYpOworLSAgICAg ICAgYWRkKGN1cnJlbnQpOworLQorLSAgICAgICAgZm9yIChhdXRvIHJhbmdlID0gcmFuZ2VzLmJl Z2luKCk7IHJhbmdlICE9IHJhbmdlcy5lbmQoKTsgKytyYW5nZSkKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICBnZXQoKTsKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElLRUxZKCpyYW5n ZSA8PSBjdXJyZW50ICYmIGN1cnJlbnQgPD0gKigrK3JhbmdlKSkpCistICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICBhZGQoY3VycmVudCk7CistICAgICAgICAgICAgfQorLSAgICAgICAg ICAgIGVsc2UKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2Ug PSAiaW52YWxpZCBzdHJpbmc6IGlsbC1mb3JtZWQgVVRGLTggYnl0ZSI7CistICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistCistICAgICAg ICByZXR1cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIHNjYW4gYSBz dHJpbmcgbGl0ZXJhbAorLQorLSAgICBUaGlzIGZ1bmN0aW9uIHNjYW5zIGEgc3RyaW5nIGFjY29y ZGluZyB0byBTZWN0LiA3IG9mIFJGQyA4MjU5LiBXaGlsZQorLSAgICBzY2FubmluZywgYnl0ZXMg YXJlIGVzY2FwZWQgYW5kIGNvcGllZCBpbnRvIGJ1ZmZlciB0b2tlbl9idWZmZXIuIFRoZW4gdGhl CistICAgIGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB0b2tlbl9idWZmZXIgaXMgKm5v dCogbnVsbC10ZXJtaW5hdGVkIChhcyBpdAorLSAgICBtYXkgY29udGFpbiBcMCBieXRlcyksIGFu ZCB0b2tlbl9idWZmZXIuc2l6ZSgpIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCistICAg IHN0cmluZy4KKy0KKy0gICAgQHJldHVybiB0b2tlbl90eXBlOjp2YWx1ZV9zdHJpbmcgaWYgc3Ry aW5nIGNvdWxkIGJlIHN1Y2Nlc3NmdWxseSBzY2FubmVkLAorLSAgICAgICAgICAgIHRva2VuX3R5 cGU6OnBhcnNlX2Vycm9yIG90aGVyd2lzZQorLQorLSAgICBAbm90ZSBJbiBjYXNlIG9mIGVycm9y cywgdmFyaWFibGUgZXJyb3JfbWVzc2FnZSBjb250YWlucyBhIHRleHR1YWwKKy0gICAgICAgICAg ZGVzY3JpcHRpb24uCistICAgICovCistICAgIHRva2VuX3R5cGUgc2Nhbl9zdHJpbmcoKQorLSAg ICB7CistICAgICAgICAvLyByZXNldCB0b2tlbl9idWZmZXIgKGlnbm9yZSBvcGVuaW5nIHF1b3Rl KQorLSAgICAgICAgcmVzZXQoKTsKKy0KKy0gICAgICAgIC8vIHdlIGVudGVyZWQgdGhlIGZ1bmN0 aW9uIGJ5IHJlYWRpbmcgYW4gb3BlbiBxdW90ZQorLSAgICAgICAgSlNPTl9BU1NFUlQoY3VycmVu dCA9PSAnXCInKTsKKy0KKy0gICAgICAgIHdoaWxlICh0cnVlKQorLSAgICAgICAgeworLSAgICAg ICAgICAgIC8vIGdldCBuZXh0IGNoYXJhY3RlcgorLSAgICAgICAgICAgIHN3aXRjaCAoZ2V0KCkp CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBlbmQgb2YgZmlsZSB3aGlsZSBw YXJzaW5nIHN0cmluZworLSAgICAgICAgICAgICAgICBjYXNlIHN0ZDo6Y2hhcl90cmFpdHM8Y2hh cl90eXBlPjo6ZW9mKCk6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IG1pc3NpbmcgY2xvc2luZyBxdW90ZSI7 CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7Cist ICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgLy8gY2xvc2luZyBxdW90ZQor LSAgICAgICAgICAgICAgICBjYXNlICdcIic6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjp2YWx1ZV9zdHJpbmc7CistICAgICAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgLy8gZXNjYXBlcworLSAgICAgICAgICAgICAg ICBjYXNlICdcXCc6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHN3 aXRjaCAoZ2V0KCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICAgICAgLy8gcXVvdGF0aW9uIG1hcmsKKy0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdc Iic6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCgnXCInKTsKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV2 ZXJzZSBzb2xpZHVzCistICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXFwnOgorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhZGQoJ1xcJyk7CistICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbGlkdXMKKy0gICAg ICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzoKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgYWRkKCcvJyk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGJhY2tzcGFjZQorLSAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgJ2InOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQoJ1xiJyk7CistICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgICAg IC8vIGZvcm0gZmVlZAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhZGQoJ1xmJyk7CistICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgZmVlZAorLSAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhZGQoJ1xuJyk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAg ICAgICAgICAgICAgICAgICAgICAgIC8vIGNhcnJpYWdlIHJldHVybgorLSAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgJ3InOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQoJ1xy Jyk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAg ICAgICAgICAgIC8vIHRhYgorLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQoJ1x0Jyk7CistICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworLQorLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuaWNvZGUg ZXNjYXBlcworLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgorLSAgICAgICAgICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGNv ZGVwb2ludDEgPSBnZXRfY29kZXBvaW50KCk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBjb2RlcG9pbnQgPSBjb2RlcG9pbnQxOyAvLyBzdGFydCB3aXRoIGNvZGVwb2ludDEKKy0K Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKGNv ZGVwb2ludDEgPT0gLTEpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5n OiAnXFx1JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDQgaGV4IGRpZ2l0cyI7CistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gY2hlY2sgaWYgY29kZSBwb2ludCBpcyBhIGhpZ2ggc3Vycm9nYXRlCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgweEQ4MDAgPD0gY29kZXBvaW50MSAmJiBjb2RlcG9pbnQx IDw9IDB4REJGRikKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gZXhwZWN0IG5leHQgXHV4eHh4IGVudHJ5CistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElLRUxZKGdldCgpID09 ICdcXCcgJiYgZ2V0KCkgPT0gJ3UnKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29kZXBv aW50MiA9IGdldF9jb2RlcG9pbnQoKTsKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoY29kZXBvaW50MiA9PSAtMSkpCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5nOiAnXFx1 JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDQgaGV4IGRpZ2l0cyI7CistICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29kZXBvaW50MiBpcyBhIGxvdyBzdXJy b2dhdGUKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURM RVlfTElLRUxZKDB4REMwMCA8PSBjb2RlcG9pbnQyICYmIGNvZGVwb2ludDIgPD0gMHhERkZGKSkK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSBjb2RlcG9pbnQKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXBvaW50ID0gc3RhdGljX2Nhc3Q8 aW50PigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlIG9jY3VwaWVzIHRoZSBtb3N0IHNpZ25pZmljYW50IDIy IGJpdHMKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGVwb2ludDEpIDw8IDEwdSkKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IGxvdyBzdXJyb2dhdGUgb2NjdXBpZXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IDE1IGJpdHMKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb2RlcG9pbnQyKQorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgc3RpbGwg dGhlIDB4RDgwMCwgMHhEQzAwIGFuZCAweDEwMDAwIG5vaXNlCistICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgcmVzdWx0LCBz byB3ZSBoYXZlIHRvIHN1YnRyYWN0IHdpdGg6CistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMHhEODAwIDw8IDEwKSArIERDMDAgLSAw eDEwMDAwID0gMHgzNUZEQzAwCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtIDB4MzVGREMwMHUpOworLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3Ry aW5nOiBzdXJyb2dhdGUgVStEODAwLi5VK0RCRkYgbXVzdCBiZSBmb2xsb3dlZCBieSBVK0RDMDAu LlUrREZGRiI7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2Fn ZSA9ICJpbnZhbGlkIHN0cmluZzogc3Vycm9nYXRlIFUrRDgwMC4uVStEQkZGIG11c3QgYmUgZm9s bG93ZWQgYnkgVStEQzAwLi5VK0RGRkYiOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJ S0VMWSgweERDMDAgPD0gY29kZXBvaW50MSAmJiBjb2RlcG9pbnQxIDw9IDB4REZGRikpCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJpbnZhbGlkIHN0cmluZzogc3Vycm9nYXRlIFUr REMwMC4uVStERkZGIG11c3QgZm9sbG93IFUrRDgwMC4uVStEQkZGIjsKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7Cist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0IG9mIHRo ZSBhYm92ZSBjYWxjdWxhdGlvbiB5aWVsZHMgYSBwcm9wZXIgY29kZXBvaW50CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKDB4MDAgPD0gY29kZXBvaW50ICYmIGNvZGVw b2ludCA8PSAweDEwRkZGRik7CistCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRy YW5zbGF0ZSBjb2RlcG9pbnQgaW50byBieXRlcworLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoY29kZXBvaW50IDwgMHg4MCkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMS1ieXRlIGNoYXJhY3RlcnM6IDB4 eHh4eHh4IChBU0NJSSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZChzdGF0 aWNfY2FzdDxjaGFyX2ludF90eXBlPihjb2RlcG9pbnQpKTsKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2RlcG9p bnQgPD0gMHg3RkYpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIDItYnl0ZSBjaGFyYWN0ZXJzOiAxMTB4eHh4eCAxMHh4 eHh4eAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKHN0YXRpY19jYXN0PGNo YXJfaW50X3R5cGU+KDB4QzB1IHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY29kZXBvaW50 KSA+PiA2dSkpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZChzdGF0aWNf Y2FzdDxjaGFyX2ludF90eXBlPigweDgwdSB8IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNv ZGVwb2ludCkgJiAweDNGdSkpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHhGRkZGKQor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyAzLWJ5dGUgY2hhcmFjdGVyczogMTExMHh4eHggMTB4eHh4eHggMTB4eHh4eHgK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZChzdGF0aWNfY2FzdDxjaGFyX2lu dF90eXBlPigweEUwdSB8IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGVwb2ludCkgPj4g MTJ1KSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKHN0YXRpY19jYXN0 PGNoYXJfaW50X3R5cGU+KDB4ODB1IHwgKChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGVw b2ludCkgPj4gNnUpICYgMHgzRnUpKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZGQoc3RhdGljX2Nhc3Q8Y2hhcl9pbnRfdHlwZT4oMHg4MHUgfCAoc3RhdGljX2Nhc3Q8dW5z aWduZWQgaW50Pihjb2RlcG9pbnQpICYgMHgzRnUpKSk7CistICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0 LWJ5dGUgY2hhcmFjdGVyczogMTExMTB4eHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHgKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZChzdGF0aWNfY2FzdDxjaGFyX2ludF90 eXBlPigweEYwdSB8IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGVwb2ludCkgPj4gMTh1 KSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKHN0YXRpY19jYXN0PGNo YXJfaW50X3R5cGU+KDB4ODB1IHwgKChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGVwb2lu dCkgPj4gMTJ1KSAmIDB4M0Z1KSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YWRkKHN0YXRpY19jYXN0PGNoYXJfaW50X3R5cGU+KDB4ODB1IHwgKChzdGF0aWNfY2FzdDx1bnNp Z25lZCBpbnQ+KGNvZGVwb2ludCkgPj4gNnUpICYgMHgzRnUpKSk7CistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhZGQoc3RhdGljX2Nhc3Q8Y2hhcl9pbnRfdHlwZT4oMHg4MHUgfCAo c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb2RlcG9pbnQpICYgMHgzRnUpKSk7CistICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAg ICAgICAgIC8vIG90aGVyIGNoYXJhY3RlcnMgYWZ0ZXIgZXNjYXBlCistICAgICAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVz c2FnZSA9ICJpbnZhbGlkIHN0cmluZzogZm9yYmlkZGVuIGNoYXJhY3RlciBhZnRlciBiYWNrc2xh c2giOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFy c2VfZXJyb3I7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAvLyBpbnZh bGlkIGNvbnRyb2wgY2hhcmFjdGVycworLSAgICAgICAgICAgICAgICBjYXNlIDB4MDA6CistICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52 YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAwMCAoTlVMKSBtdXN0IGJlIGVzY2Fw ZWQgdG8gXFx1MDAwMCI7CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6 cGFyc2VfZXJyb3I7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2Fz ZSAweDAxOgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBlcnJvcl9t ZXNzYWdlID0gImludmFsaWQgc3RyaW5nOiBjb250cm9sIGNoYXJhY3RlciBVKzAwMDEgKFNPSCkg bXVzdCBiZSBlc2NhcGVkIHRvIFxcdTAwMDEiOworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAg ICAgICAgICAgIGNhc2UgMHgwMjoKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgZXJyb3JfbWVzc2FnZSA9ICJpbnZhbGlkIHN0cmluZzogY29udHJvbCBjaGFyYWN0ZXIg VSswMDAyIChTVFgpIG11c3QgYmUgZXNjYXBlZCB0byBcXHUwMDAyIjsKKy0gICAgICAgICAgICAg ICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgICAgICBjYXNlIDB4MDM6CistICAgICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRy b2wgY2hhcmFjdGVyIFUrMDAwMyAoRVRYKSBtdXN0IGJlIGVzY2FwZWQgdG8gXFx1MDAwMyI7Cist ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAg ICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSAweDA0OgorLSAgICAgICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQg c3RyaW5nOiBjb250cm9sIGNoYXJhY3RlciBVKzAwMDQgKEVPVCkgbXVzdCBiZSBlc2NhcGVkIHRv IFxcdTAwMDQiOworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNl X2Vycm9yOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgMHgw NToKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2Fn ZSA9ICJpbnZhbGlkIHN0cmluZzogY29udHJvbCBjaGFyYWN0ZXIgVSswMDA1IChFTlEpIG11c3Qg YmUgZXNjYXBlZCB0byBcXHUwMDA1IjsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tl bl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAg ICAgICBjYXNlIDB4MDY6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAw NiAoQUNLKSBtdXN0IGJlIGVzY2FwZWQgdG8gXFx1MDAwNiI7CistICAgICAgICAgICAgICAgICAg ICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICAgICAgY2FzZSAweDA3OgorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5nOiBjb250cm9sIGNo YXJhY3RlciBVKzAwMDcgKEJFTCkgbXVzdCBiZSBlc2NhcGVkIHRvIFxcdTAwMDciOworLSAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAg ICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgMHgwODoKKy0gICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJpbnZhbGlkIHN0cmlu ZzogY29udHJvbCBjaGFyYWN0ZXIgVSswMDA4IChCUykgbXVzdCBiZSBlc2NhcGVkIHRvIFxcdTAw MDggb3IgXFxiIjsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJz ZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIDB4 MDk6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3Nh Z2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAwOSAoSFQpIG11c3Qg YmUgZXNjYXBlZCB0byBcXHUwMDA5IG9yIFxcdCI7CistICAgICAgICAgICAgICAgICAgICByZXR1 cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICAgICAgY2FzZSAweDBBOgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5nOiBjb250cm9sIGNoYXJhY3Rl ciBVKzAwMEEgKExGKSBtdXN0IGJlIGVzY2FwZWQgdG8gXFx1MDAwQSBvciBcXG4iOworLSAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAg ICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgMHgwQjoKKy0gICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJpbnZhbGlkIHN0cmlu ZzogY29udHJvbCBjaGFyYWN0ZXIgVSswMDBCIChWVCkgbXVzdCBiZSBlc2NhcGVkIHRvIFxcdTAw MEIiOworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9y OworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgMHgwQzoKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJp bnZhbGlkIHN0cmluZzogY29udHJvbCBjaGFyYWN0ZXIgVSswMDBDIChGRikgbXVzdCBiZSBlc2Nh cGVkIHRvIFxcdTAwMEMgb3IgXFxmIjsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tl bl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAg ICAgICBjYXNlIDB4MEQ6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAw RCAoQ1IpIG11c3QgYmUgZXNjYXBlZCB0byBcXHUwMDBEIG9yIFxcciI7CistICAgICAgICAgICAg ICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSAweDBFOgorLSAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5nOiBjb250 cm9sIGNoYXJhY3RlciBVKzAwMEUgKFNPKSBtdXN0IGJlIGVzY2FwZWQgdG8gXFx1MDAwRSI7Cist ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAg ICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSAweDBGOgorLSAgICAgICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQg c3RyaW5nOiBjb250cm9sIGNoYXJhY3RlciBVKzAwMEYgKFNJKSBtdXN0IGJlIGVzY2FwZWQgdG8g XFx1MDAwRiI7CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2Vf ZXJyb3I7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSAweDEw OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdl ID0gImludmFsaWQgc3RyaW5nOiBjb250cm9sIGNoYXJhY3RlciBVKzAwMTAgKERMRSkgbXVzdCBi ZSBlc2NhcGVkIHRvIFxcdTAwMTAiOworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu X3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAg ICAgIGNhc2UgMHgxMToKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg ZXJyb3JfbWVzc2FnZSA9ICJpbnZhbGlkIHN0cmluZzogY29udHJvbCBjaGFyYWN0ZXIgVSswMDEx IChEQzEpIG11c3QgYmUgZXNjYXBlZCB0byBcXHUwMDExIjsKKy0gICAgICAgICAgICAgICAgICAg IHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgfQorLQor LSAgICAgICAgICAgICAgICBjYXNlIDB4MTI6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hh cmFjdGVyIFUrMDAxMiAoREMyKSBtdXN0IGJlIGVzY2FwZWQgdG8gXFx1MDAxMiI7CistICAgICAg ICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSAweDEzOgorLSAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5n OiBjb250cm9sIGNoYXJhY3RlciBVKzAwMTMgKERDMykgbXVzdCBiZSBlc2NhcGVkIHRvIFxcdTAw MTMiOworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9y OworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgMHgxNDoKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJp bnZhbGlkIHN0cmluZzogY29udHJvbCBjaGFyYWN0ZXIgVSswMDE0IChEQzQpIG11c3QgYmUgZXNj YXBlZCB0byBcXHUwMDE0IjsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBl OjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBj YXNlIDB4MTU6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVycm9y X21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAxNSAoTkFL KSBtdXN0IGJlIGVzY2FwZWQgdG8gXFx1MDAxNSI7CistICAgICAgICAgICAgICAgICAgICByZXR1 cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICAgICAgY2FzZSAweDE2OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5nOiBjb250cm9sIGNoYXJhY3Rl ciBVKzAwMTYgKFNZTikgbXVzdCBiZSBlc2NhcGVkIHRvIFxcdTAwMTYiOworLSAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAgICAg ICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgMHgxNzoKKy0gICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJpbnZhbGlkIHN0cmluZzogY29u dHJvbCBjaGFyYWN0ZXIgVSswMDE3IChFVEIpIG11c3QgYmUgZXNjYXBlZCB0byBcXHUwMDE3IjsK Ky0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0g ICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIDB4MTg6CistICAgICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxp ZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAxOCAoQ0FOKSBtdXN0IGJlIGVzY2FwZWQg dG8gXFx1MDAxOCI7CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFy c2VfZXJyb3I7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSAw eDE5OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNz YWdlID0gImludmFsaWQgc3RyaW5nOiBjb250cm9sIGNoYXJhY3RlciBVKzAwMTkgKEVNKSBtdXN0 IGJlIGVzY2FwZWQgdG8gXFx1MDAxOSI7CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9r ZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICAgICAgY2FzZSAweDFBOgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgc3RyaW5nOiBjb250cm9sIGNoYXJhY3RlciBVKzAw MUEgKFNVQikgbXVzdCBiZSBlc2NhcGVkIHRvIFxcdTAwMUEiOworLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAgICAgICB9Cist CistICAgICAgICAgICAgICAgIGNhc2UgMHgxQjoKKy0gICAgICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJpbnZhbGlkIHN0cmluZzogY29udHJvbCBj aGFyYWN0ZXIgVSswMDFCIChFU0MpIG11c3QgYmUgZXNjYXBlZCB0byBcXHUwMDFCIjsKKy0gICAg ICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIDB4MUM6CistICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBzdHJp bmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAxQyAoRlMpIG11c3QgYmUgZXNjYXBlZCB0byBcXHUw MDFDIjsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJv cjsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIDB4MUQ6Cist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAi aW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAxRCAoR1MpIG11c3QgYmUgZXNj YXBlZCB0byBcXHUwMDFEIjsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBl OjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBj YXNlIDB4MUU6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVycm9y X21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDAxRSAoUlMp IG11c3QgYmUgZXNjYXBlZCB0byBcXHUwMDFFIjsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVy biB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAg ICAgICAgICAgICBjYXNlIDB4MUY6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBzdHJpbmc6IGNvbnRyb2wgY2hhcmFjdGVy IFUrMDAxRiAoVVMpIG11c3QgYmUgZXNjYXBlZCB0byBcXHUwMDFGIjsKKy0gICAgICAgICAgICAg ICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgICAgICAvLyBVKzAwMjAuLlUrMDA3RiAoZXhjZXB0IFUrMDAyMiAo cXVvdGUpIGFuZCBVKzAwNUMgKGJhY2tzcGFjZSkpCistICAgICAgICAgICAgICAgIGNhc2UgMHgy MDoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDIxOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4 MjM6CistICAgICAgICAgICAgICAgIGNhc2UgMHgyNDoKKy0gICAgICAgICAgICAgICAgY2FzZSAw eDI1OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4MjY6CistICAgICAgICAgICAgICAgIGNhc2Ug MHgyNzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDI4OgorLSAgICAgICAgICAgICAgICBjYXNl IDB4Mjk6CistICAgICAgICAgICAgICAgIGNhc2UgMHgyQToKKy0gICAgICAgICAgICAgICAgY2Fz ZSAweDJCOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4MkM6CistICAgICAgICAgICAgICAgIGNh c2UgMHgyRDoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDJFOgorLSAgICAgICAgICAgICAgICBj YXNlIDB4MkY6CistICAgICAgICAgICAgICAgIGNhc2UgMHgzMDoKKy0gICAgICAgICAgICAgICAg Y2FzZSAweDMxOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4MzI6CistICAgICAgICAgICAgICAg IGNhc2UgMHgzMzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDM0OgorLSAgICAgICAgICAgICAg ICBjYXNlIDB4MzU6CistICAgICAgICAgICAgICAgIGNhc2UgMHgzNjoKKy0gICAgICAgICAgICAg ICAgY2FzZSAweDM3OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4Mzg6CistICAgICAgICAgICAg ICAgIGNhc2UgMHgzOToKKy0gICAgICAgICAgICAgICAgY2FzZSAweDNBOgorLSAgICAgICAgICAg ICAgICBjYXNlIDB4M0I6CistICAgICAgICAgICAgICAgIGNhc2UgMHgzQzoKKy0gICAgICAgICAg ICAgICAgY2FzZSAweDNEOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4M0U6CistICAgICAgICAg ICAgICAgIGNhc2UgMHgzRjoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDQwOgorLSAgICAgICAg ICAgICAgICBjYXNlIDB4NDE6CistICAgICAgICAgICAgICAgIGNhc2UgMHg0MjoKKy0gICAgICAg ICAgICAgICAgY2FzZSAweDQzOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NDQ6CistICAgICAg ICAgICAgICAgIGNhc2UgMHg0NToKKy0gICAgICAgICAgICAgICAgY2FzZSAweDQ2OgorLSAgICAg ICAgICAgICAgICBjYXNlIDB4NDc6CistICAgICAgICAgICAgICAgIGNhc2UgMHg0ODoKKy0gICAg ICAgICAgICAgICAgY2FzZSAweDQ5OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NEE6CistICAg ICAgICAgICAgICAgIGNhc2UgMHg0QjoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDRDOgorLSAg ICAgICAgICAgICAgICBjYXNlIDB4NEQ6CistICAgICAgICAgICAgICAgIGNhc2UgMHg0RToKKy0g ICAgICAgICAgICAgICAgY2FzZSAweDRGOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NTA6Cist ICAgICAgICAgICAgICAgIGNhc2UgMHg1MToKKy0gICAgICAgICAgICAgICAgY2FzZSAweDUyOgor LSAgICAgICAgICAgICAgICBjYXNlIDB4NTM6CistICAgICAgICAgICAgICAgIGNhc2UgMHg1NDoK Ky0gICAgICAgICAgICAgICAgY2FzZSAweDU1OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NTY6 CistICAgICAgICAgICAgICAgIGNhc2UgMHg1NzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDU4 OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NTk6CistICAgICAgICAgICAgICAgIGNhc2UgMHg1 QToKKy0gICAgICAgICAgICAgICAgY2FzZSAweDVCOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4 NUQ6CistICAgICAgICAgICAgICAgIGNhc2UgMHg1RToKKy0gICAgICAgICAgICAgICAgY2FzZSAw eDVGOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NjA6CistICAgICAgICAgICAgICAgIGNhc2Ug MHg2MToKKy0gICAgICAgICAgICAgICAgY2FzZSAweDYyOgorLSAgICAgICAgICAgICAgICBjYXNl IDB4NjM6CistICAgICAgICAgICAgICAgIGNhc2UgMHg2NDoKKy0gICAgICAgICAgICAgICAgY2Fz ZSAweDY1OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NjY6CistICAgICAgICAgICAgICAgIGNh c2UgMHg2NzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDY4OgorLSAgICAgICAgICAgICAgICBj YXNlIDB4Njk6CistICAgICAgICAgICAgICAgIGNhc2UgMHg2QToKKy0gICAgICAgICAgICAgICAg Y2FzZSAweDZCOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NkM6CistICAgICAgICAgICAgICAg IGNhc2UgMHg2RDoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDZFOgorLSAgICAgICAgICAgICAg ICBjYXNlIDB4NkY6CistICAgICAgICAgICAgICAgIGNhc2UgMHg3MDoKKy0gICAgICAgICAgICAg ICAgY2FzZSAweDcxOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4NzI6CistICAgICAgICAgICAg ICAgIGNhc2UgMHg3MzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweDc0OgorLSAgICAgICAgICAg ICAgICBjYXNlIDB4NzU6CistICAgICAgICAgICAgICAgIGNhc2UgMHg3NjoKKy0gICAgICAgICAg ICAgICAgY2FzZSAweDc3OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4Nzg6CistICAgICAgICAg ICAgICAgIGNhc2UgMHg3OToKKy0gICAgICAgICAgICAgICAgY2FzZSAweDdBOgorLSAgICAgICAg ICAgICAgICBjYXNlIDB4N0I6CistICAgICAgICAgICAgICAgIGNhc2UgMHg3QzoKKy0gICAgICAg ICAgICAgICAgY2FzZSAweDdEOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4N0U6CistICAgICAg ICAgICAgICAgIGNhc2UgMHg3RjoKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgYWRkKGN1cnJlbnQpOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAg ICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgLy8gVSswMDgwLi5VKzA3RkY6IGJ5dGVz IEMyLi5ERiA4MC4uQkYKKy0gICAgICAgICAgICAgICAgY2FzZSAweEMyOgorLSAgICAgICAgICAg ICAgICBjYXNlIDB4QzM6CistICAgICAgICAgICAgICAgIGNhc2UgMHhDNDoKKy0gICAgICAgICAg ICAgICAgY2FzZSAweEM1OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4QzY6CistICAgICAgICAg ICAgICAgIGNhc2UgMHhDNzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweEM4OgorLSAgICAgICAg ICAgICAgICBjYXNlIDB4Qzk6CistICAgICAgICAgICAgICAgIGNhc2UgMHhDQToKKy0gICAgICAg ICAgICAgICAgY2FzZSAweENCOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4Q0M6CistICAgICAg ICAgICAgICAgIGNhc2UgMHhDRDoKKy0gICAgICAgICAgICAgICAgY2FzZSAweENFOgorLSAgICAg ICAgICAgICAgICBjYXNlIDB4Q0Y6CistICAgICAgICAgICAgICAgIGNhc2UgMHhEMDoKKy0gICAg ICAgICAgICAgICAgY2FzZSAweEQxOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4RDI6CistICAg ICAgICAgICAgICAgIGNhc2UgMHhEMzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweEQ0OgorLSAg ICAgICAgICAgICAgICBjYXNlIDB4RDU6CistICAgICAgICAgICAgICAgIGNhc2UgMHhENjoKKy0g ICAgICAgICAgICAgICAgY2FzZSAweEQ3OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4RDg6Cist ICAgICAgICAgICAgICAgIGNhc2UgMHhEOToKKy0gICAgICAgICAgICAgICAgY2FzZSAweERBOgor LSAgICAgICAgICAgICAgICBjYXNlIDB4REI6CistICAgICAgICAgICAgICAgIGNhc2UgMHhEQzoK Ky0gICAgICAgICAgICAgICAgY2FzZSAweEREOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4REU6 CistICAgICAgICAgICAgICAgIGNhc2UgMHhERjoKKy0gICAgICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFuZXh0X2J5dGVfaW5fcmFu Z2UoezB4ODAsIDB4QkZ9KSkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAg ICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgLy8gVSswODAwLi5VKzBGRkY6IGJ5dGVzIEUwIEEwLi5C RiA4MC4uQkYKKy0gICAgICAgICAgICAgICAgY2FzZSAweEUwOgorLSAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIShuZXh0X2J5 dGVfaW5fcmFuZ2UoezB4QTAsIDB4QkYsIDB4ODAsIDB4QkZ9KSkpKQorLSAgICAgICAgICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJz ZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIC8vIFUrMTAwMC4u VStDRkZGOiBieXRlcyBFMS4uRUMgODAuLkJGIDgwLi5CRgorLSAgICAgICAgICAgICAgICAvLyBV K0UwMDAuLlUrRkZGRjogYnl0ZXMgRUUuLkVGIDgwLi5CRiA4MC4uQkYKKy0gICAgICAgICAgICAg ICAgY2FzZSAweEUxOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4RTI6CistICAgICAgICAgICAg ICAgIGNhc2UgMHhFMzoKKy0gICAgICAgICAgICAgICAgY2FzZSAweEU0OgorLSAgICAgICAgICAg ICAgICBjYXNlIDB4RTU6CistICAgICAgICAgICAgICAgIGNhc2UgMHhFNjoKKy0gICAgICAgICAg ICAgICAgY2FzZSAweEU3OgorLSAgICAgICAgICAgICAgICBjYXNlIDB4RTg6CistICAgICAgICAg ICAgICAgIGNhc2UgMHhFOToKKy0gICAgICAgICAgICAgICAgY2FzZSAweEVBOgorLSAgICAgICAg ICAgICAgICBjYXNlIDB4RUI6CistICAgICAgICAgICAgICAgIGNhc2UgMHhFQzoKKy0gICAgICAg ICAgICAgICAgY2FzZSAweEVFOgorLSAgICAgICAgICAgICAgICBjYXNlIDB4RUY6CistICAgICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VM WSghKG5leHRfYnl0ZV9pbl9yYW5nZSh7MHg4MCwgMHhCRiwgMHg4MCwgMHhCRn0pKSkpCistICAg ICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu X3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAg Ly8gVStEMDAwLi5VK0Q3RkY6IGJ5dGVzIEVEIDgwLi45RiA4MC4uQkYKKy0gICAgICAgICAgICAg ICAgY2FzZSAweEVEOgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBp ZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIShuZXh0X2J5dGVfaW5fcmFuZ2UoezB4ODAsIDB4OUYs IDB4ODAsIDB4QkZ9KSkpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9 CistCistICAgICAgICAgICAgICAgIC8vIFUrMTAwMDAuLlUrM0ZGRkYgRjAgOTAuLkJGIDgwLi5C RiA4MC4uQkYKKy0gICAgICAgICAgICAgICAgY2FzZSAweEYwOgorLSAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIShuZXh0X2J5 dGVfaW5fcmFuZ2UoezB4OTAsIDB4QkYsIDB4ODAsIDB4QkYsIDB4ODAsIDB4QkZ9KSkpKQorLSAg ICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tl bl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAg IC8vIFUrNDAwMDAuLlUrRkZGRkYgRjEuLkYzIDgwLi5CRiA4MC4uQkYgODAuLkJGCistICAgICAg ICAgICAgICAgIGNhc2UgMHhGMToKKy0gICAgICAgICAgICAgICAgY2FzZSAweEYyOgorLSAgICAg ICAgICAgICAgICBjYXNlIDB4RjM6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghKG5leHRfYnl0ZV9pbl9yYW5nZSh7MHg4 MCwgMHhCRiwgMHg4MCwgMHhCRiwgMHg4MCwgMHhCRn0pKSkpCistICAgICAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vy cm9yOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgLy8gVSsxMDAwMDAuLlUr MTBGRkZGIEY0IDgwLi44RiA4MC4uQkYgODAuLkJGCistICAgICAgICAgICAgICAgIGNhc2UgMHhG NDoKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05fSEVE TEVZX1VOTElLRUxZKCEobmV4dF9ieXRlX2luX3JhbmdlKHsweDgwLCAweDhGLCAweDgwLCAweEJG LCAweDgwLCAweEJGfSkpKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAgICAg ICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgICAgICAvLyByZW1haW5pbmcgYnl0ZXMgKDgwLi5DMSBhbmQgRjUu LkZGKSBhcmUgaWxsLWZvcm1lZAorLSAgICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQg c3RyaW5nOiBpbGwtZm9ybWVkIFVURi04IGJ5dGUiOworLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAgICAgICB9CistICAgICAg ICAgICAgfQorLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8qIQorLSAgICAgKiBAYnJpZWYg c2NhbiBhIGNvbW1lbnQKKy0gICAgICogQHJldHVybiB3aGV0aGVyIGNvbW1lbnQgY291bGQgYmUg c2Nhbm5lZCBzdWNjZXNzZnVsbHkKKy0gICAgICovCistICAgIGJvb2wgc2Nhbl9jb21tZW50KCkK Ky0gICAgeworLSAgICAgICAgc3dpdGNoIChnZXQoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICAvLyBzaW5nbGUtbGluZSBjb21tZW50cyBza2lwIGlucHV0IHVudGlsIGEgbmV3bGluZSBvciBF T0YgaXMgcmVhZAorLSAgICAgICAgICAgIGNhc2UgJy8nOgorLSAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgd2hpbGUgKHRydWUpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgIHN3aXRjaCAoZ2V0KCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAnXG4nOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgJ1xyJzoKKy0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHN0ZDo6Y2hhcl90cmFpdHM8 Y2hhcl90eXBlPjo6ZW9mKCk6CistICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXDAnOgor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKy0KKy0gICAgICAgICAg ICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBtdWx0aS1saW5lIGNvbW1lbnRzIHNraXAgaW5wdXQg dW50aWwgKi8gaXMgcmVhZAorLSAgICAgICAgICAgIGNhc2UgJyonOgorLSAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpCistICAgICAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0KCkpCistICAgICAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzdGQ6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46 OmVvZigpOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1wwJzoKKy0gICAgICAgICAg ICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3Nh Z2UgPSAiaW52YWxpZCBjb21tZW50OyBtaXNzaW5nIGNsb3NpbmcgJyovJyI7CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICB9CistCistICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKic6CistICAgICAgICAgICAg ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldCgp KQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICcvJzoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1 bHQ6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5nZXQoKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAg ICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyB1bmV4cGVjdGVk IGNoYXJhY3RlciBhZnRlciByZWFkaW5nICcvJworLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gImludmFsaWQgY29t bWVudDsgZXhwZWN0aW5nICcvJyBvciAnKicgYWZ0ZXIgJy8nIjsKKy0gICAgICAgICAgICAgICAg cmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAg ICBKU09OX0hFRExFWV9OT05fTlVMTCgyKQorLSAgICBzdGF0aWMgdm9pZCBzdHJ0b2YoZmxvYXQm IGYsIGNvbnN0IGNoYXIqIHN0ciwgY2hhcioqIGVuZHB0cikgbm9leGNlcHQKKy0gICAgeworLSAg ICAgICAgZiA9IHN0ZDo6c3RydG9mKHN0ciwgZW5kcHRyKTsKKy0gICAgfQorLQorLSAgICBKU09O X0hFRExFWV9OT05fTlVMTCgyKQorLSAgICBzdGF0aWMgdm9pZCBzdHJ0b2YoZG91YmxlJiBmLCBj b25zdCBjaGFyKiBzdHIsIGNoYXIqKiBlbmRwdHIpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAg IGYgPSBzdGQ6OnN0cnRvZChzdHIsIGVuZHB0cik7CistICAgIH0KKy0KKy0gICAgSlNPTl9IRURM RVlfTk9OX05VTEwoMikKKy0gICAgc3RhdGljIHZvaWQgc3RydG9mKGxvbmcgZG91YmxlJiBmLCBj b25zdCBjaGFyKiBzdHIsIGNoYXIqKiBlbmRwdHIpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAg IGYgPSBzdGQ6OnN0cnRvbGQoc3RyLCBlbmRwdHIpOworLSAgICB9CistCistICAgIC8qIQorLSAg ICBAYnJpZWYgc2NhbiBhIG51bWJlciBsaXRlcmFsCistCistICAgIFRoaXMgZnVuY3Rpb24gc2Nh bnMgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIFNlY3QuIDYgb2YgUkZDIDgyNTkuCistCistICAgIFRo ZSBmdW5jdGlvbiBpcyByZWFsaXplZCB3aXRoIGEgZGV0ZXJtaW5pc3RpYyBmaW5pdGUgc3RhdGUg bWFjaGluZSBkZXJpdmVkCistICAgIGZyb20gdGhlIGdyYW1tYXIgZGVzY3JpYmVkIGluIFJGQyA4 MjU5LiBTdGFydGluZyBpbiBzdGF0ZSAiaW5pdCIsIHRoZQorLSAgICBpbnB1dCBpcyByZWFkIGFu ZCB1c2VkIHRvIGRldGVybWluZWQgdGhlIG5leHQgc3RhdGUuIE9ubHkgc3RhdGUgImRvbmUiCist ICAgIGFjY2VwdHMgdGhlIG51bWJlci4gU3RhdGUgImVycm9yIiBpcyBhIHRyYXAgc3RhdGUgdG8g bW9kZWwgZXJyb3JzLiBJbiB0aGUKKy0gICAgdGFibGUgYmVsb3csICJhbnl0aGluZyIgbWVhbnMg YW55IGNoYXJhY3RlciBidXQgdGhlIG9uZXMgbGlzdGVkIGJlZm9yZS4KKy0KKy0gICAgc3RhdGUg ICAgfCAwICAgICAgICB8IDEtOSAgICAgIHwgZSBFICAgICAgfCArICAgICAgIHwgLSAgICAgICB8 IC4gICAgICAgIHwgYW55dGhpbmcKKy0gICAgLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0t LXwtLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLQor LSAgICBpbml0ICAgICB8IHplcm8gICAgIHwgYW55MSAgICAgfCBbZXJyb3JdICB8IFtlcnJvcl0g fCBtaW51cyAgIHwgW2Vycm9yXSAgfCBbZXJyb3JdCistICAgIG1pbnVzICAgIHwgemVybyAgICAg fCBhbnkxICAgICB8IFtlcnJvcl0gIHwgW2Vycm9yXSB8IFtlcnJvcl0gfCBbZXJyb3JdICB8IFtl cnJvcl0KKy0gICAgemVybyAgICAgfCBkb25lICAgICB8IGRvbmUgICAgIHwgZXhwb25lbnQgfCBk b25lICAgIHwgZG9uZSAgICB8IGRlY2ltYWwxIHwgZG9uZQorLSAgICBhbnkxICAgICB8IGFueTEg ICAgIHwgYW55MSAgICAgfCBleHBvbmVudCB8IGRvbmUgICAgfCBkb25lICAgIHwgZGVjaW1hbDEg fCBkb25lCistICAgIGRlY2ltYWwxIHwgZGVjaW1hbDIgfCBkZWNpbWFsMiB8IFtlcnJvcl0gIHwg W2Vycm9yXSB8IFtlcnJvcl0gfCBbZXJyb3JdICB8IFtlcnJvcl0KKy0gICAgZGVjaW1hbDIgfCBk ZWNpbWFsMiB8IGRlY2ltYWwyIHwgZXhwb25lbnQgfCBkb25lICAgIHwgZG9uZSAgICB8IGRvbmUg ICAgIHwgZG9uZQorLSAgICBleHBvbmVudCB8IGFueTIgICAgIHwgYW55MiAgICAgfCBbZXJyb3Jd ICB8IHNpZ24gICAgfCBzaWduICAgIHwgW2Vycm9yXSAgfCBbZXJyb3JdCistICAgIHNpZ24gICAg IHwgYW55MiAgICAgfCBhbnkyICAgICB8IFtlcnJvcl0gIHwgW2Vycm9yXSB8IFtlcnJvcl0gfCBb ZXJyb3JdICB8IFtlcnJvcl0KKy0gICAgYW55MiAgICAgfCBhbnkyICAgICB8IGFueTIgICAgIHwg ZG9uZSAgICAgfCBkb25lICAgIHwgZG9uZSAgICB8IGRvbmUgICAgIHwgZG9uZQorLQorLSAgICBU aGUgc3RhdGUgbWFjaGluZSBpcyByZWFsaXplZCB3aXRoIG9uZSBsYWJlbCBwZXIgc3RhdGUgKHBy ZWZpeGVkIHdpdGgKKy0gICAgInNjYW5fbnVtYmVyXyIpIGFuZCBgZ290b2Agc3RhdGVtZW50cyBi ZXR3ZWVuIHRoZW0uIFRoZSBzdGF0ZSBtYWNoaW5lCistICAgIGNvbnRhaW5zIGN5Y2xlcywgYnV0 IGFueSBjeWNsZSBjYW4gYmUgbGVmdCB3aGVuIEVPRiBpcyByZWFkLiBUaGVyZWZvcmUsCistICAg IHRoZSBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHRlcm1pbmF0ZS4KKy0KKy0gICAgRHVyaW5n IHNjYW5uaW5nLCB0aGUgcmVhZCBieXRlcyBhcmUgc3RvcmVkIGluIHRva2VuX2J1ZmZlci4gVGhp cyBzdHJpbmcgaXMKKy0gICAgdGhlbiBjb252ZXJ0ZWQgdG8gYSBzaWduZWQgaW50ZWdlciwgYW4g dW5zaWduZWQgaW50ZWdlciwgb3IgYQorLSAgICBmbG9hdGluZy1wb2ludCBudW1iZXIuCistCist ICAgIEByZXR1cm4gdG9rZW5fdHlwZTo6dmFsdWVfdW5zaWduZWQsIHRva2VuX3R5cGU6OnZhbHVl X2ludGVnZXIsIG9yCistICAgICAgICAgICAgdG9rZW5fdHlwZTo6dmFsdWVfZmxvYXQgaWYgbnVt YmVyIGNvdWxkIGJlIHN1Y2Nlc3NmdWxseSBzY2FubmVkLAorLSAgICAgICAgICAgIHRva2VuX3R5 cGU6OnBhcnNlX2Vycm9yIG90aGVyd2lzZQorLQorLSAgICBAbm90ZSBUaGUgc2Nhbm5lciBpcyBp bmRlcGVuZGVudCBvZiB0aGUgY3VycmVudCBsb2NhbGUuIEludGVybmFsbHksIHRoZQorLSAgICAg ICAgICBsb2NhbGUncyBkZWNpbWFsIHBvaW50IGlzIHVzZWQgaW5zdGVhZCBvZiBgLmAgdG8gd29y ayB3aXRoIHRoZQorLSAgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGNvbnZlcnRlcnMuCistICAg ICovCistICAgIHRva2VuX3R5cGUgc2Nhbl9udW1iZXIoKSAgLy8gbGd0bSBbY3BwL3VzZS1vZi1n b3RvXQorLSAgICB7CistICAgICAgICAvLyByZXNldCB0b2tlbl9idWZmZXIgdG8gc3RvcmUgdGhl IG51bWJlcidzIGJ5dGVzCistICAgICAgICByZXNldCgpOworLQorLSAgICAgICAgLy8gdGhlIHR5 cGUgb2YgdGhlIHBhcnNlZCBudW1iZXI7IGluaXRpYWxseSBzZXQgdG8gdW5zaWduZWQ7IHdpbGwg YmUKKy0gICAgICAgIC8vIGNoYW5nZWQgaWYgbWludXMgc2lnbiwgZGVjaW1hbCBwb2ludCBvciBl eHBvbmVudCBpcyByZWFkCistICAgICAgICB0b2tlbl90eXBlIG51bWJlcl90eXBlID0gdG9rZW5f dHlwZTo6dmFsdWVfdW5zaWduZWQ7CistCistICAgICAgICAvLyBzdGF0ZSAoaW5pdCk6IHdlIGp1 c3QgZm91bmQgb3V0IHdlIG5lZWQgdG8gc2NhbiBhIG51bWJlcgorLSAgICAgICAgc3dpdGNoIChj dXJyZW50KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNhc2UgJy0nOgorLSAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgYWRkKGN1cnJlbnQpOworLSAgICAgICAgICAgICAgICBnb3Rv IHNjYW5fbnVtYmVyX21pbnVzOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl ICcwJzoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGFkZChjdXJyZW50KTsKKy0g ICAgICAgICAgICAgICAgZ290byBzY2FuX251bWJlcl96ZXJvOworLSAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICBjYXNlICcxJzoKKy0gICAgICAgICAgICBjYXNlICcyJzoKKy0gICAgICAg ICAgICBjYXNlICczJzoKKy0gICAgICAgICAgICBjYXNlICc0JzoKKy0gICAgICAgICAgICBjYXNl ICc1JzoKKy0gICAgICAgICAgICBjYXNlICc2JzoKKy0gICAgICAgICAgICBjYXNlICc3JzoKKy0g ICAgICAgICAgICBjYXNlICc4JzoKKy0gICAgICAgICAgICBjYXNlICc5JzoKKy0gICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgIGFkZChjdXJyZW50KTsKKy0gICAgICAgICAgICAgICAgZ290 byBzY2FuX251bWJlcl9hbnkxOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBh bGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgcmVqZWN0ZWQgb3V0c2lkZSBzY2FuX251bWJlcigpCist ICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAvLyBMQ09WX0VYQ0xfTElORQorLSAgICAg ICAgICAgICAgICBKU09OX0FTU0VSVChmYWxzZSk7IC8vIE5PTElOVChjZXJ0LWRjbDAzLWMsaGlj cHAtc3RhdGljLWFzc2VydCxtaXNjLXN0YXRpYy1hc3NlcnQpIExDT1ZfRVhDTF9MSU5FCistICAg ICAgICB9CistCistc2Nhbl9udW1iZXJfbWludXM6CistICAgICAgICAvLyBzdGF0ZTogd2UganVz dCBwYXJzZWQgYSBsZWFkaW5nIG1pbnVzIHNpZ24KKy0gICAgICAgIG51bWJlcl90eXBlID0gdG9r ZW5fdHlwZTo6dmFsdWVfaW50ZWdlcjsKKy0gICAgICAgIHN3aXRjaCAoZ2V0KCkpCistICAgICAg ICB7CistICAgICAgICAgICAgY2FzZSAnMCc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICBhZGQoY3VycmVudCk7CistICAgICAgICAgICAgICAgIGdvdG8gc2Nhbl9udW1iZXJfemVy bzsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAnMSc6CistICAgICAgICAg ICAgY2FzZSAnMic6CistICAgICAgICAgICAgY2FzZSAnMyc6CistICAgICAgICAgICAgY2FzZSAn NCc6CistICAgICAgICAgICAgY2FzZSAnNSc6CistICAgICAgICAgICAgY2FzZSAnNic6CistICAg ICAgICAgICAgY2FzZSAnNyc6CistICAgICAgICAgICAgY2FzZSAnOCc6CistICAgICAgICAgICAg Y2FzZSAnOSc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBhZGQoY3VycmVudCk7 CistICAgICAgICAgICAgICAgIGdvdG8gc2Nhbl9udW1iZXJfYW55MTsKKy0gICAgICAgICAgICB9 CistCistICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBudW1iZXI7IGV4cGVjdGVkIGRpZ2l0IGFmdGVy ICctJyI7CistICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsK Ky0gICAgICAgICAgICB9CistICAgICAgICB9CistCistc2Nhbl9udW1iZXJfemVybzoKKy0gICAg ICAgIC8vIHN0YXRlOiB3ZSBqdXN0IHBhcnNlIGEgemVybyAobWF5YmUgd2l0aCBhIGxlYWRpbmcg bWludXMgc2lnbikKKy0gICAgICAgIHN3aXRjaCAoZ2V0KCkpCistICAgICAgICB7CistICAgICAg ICAgICAgY2FzZSAnLic6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBhZGQoZGVj aW1hbF9wb2ludF9jaGFyKTsKKy0gICAgICAgICAgICAgICAgZ290byBzY2FuX251bWJlcl9kZWNp bWFsMTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAnZSc6CistICAgICAg ICAgICAgY2FzZSAnRSc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBhZGQoY3Vy cmVudCk7CistICAgICAgICAgICAgICAgIGdvdG8gc2Nhbl9udW1iZXJfZXhwb25lbnQ7CistICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgIGdv dG8gc2Nhbl9udW1iZXJfZG9uZTsKKy0gICAgICAgIH0KKy0KKy1zY2FuX251bWJlcl9hbnkxOgor LSAgICAgICAgLy8gc3RhdGU6IHdlIGp1c3QgcGFyc2VkIGEgbnVtYmVyIDAtOSAobWF5YmUgd2l0 aCBhIGxlYWRpbmcgbWludXMgc2lnbikKKy0gICAgICAgIHN3aXRjaCAoZ2V0KCkpCistICAgICAg ICB7CistICAgICAgICAgICAgY2FzZSAnMCc6CistICAgICAgICAgICAgY2FzZSAnMSc6CistICAg ICAgICAgICAgY2FzZSAnMic6CistICAgICAgICAgICAgY2FzZSAnMyc6CistICAgICAgICAgICAg Y2FzZSAnNCc6CistICAgICAgICAgICAgY2FzZSAnNSc6CistICAgICAgICAgICAgY2FzZSAnNic6 CistICAgICAgICAgICAgY2FzZSAnNyc6CistICAgICAgICAgICAgY2FzZSAnOCc6CistICAgICAg ICAgICAgY2FzZSAnOSc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBhZGQoY3Vy cmVudCk7CistICAgICAgICAgICAgICAgIGdvdG8gc2Nhbl9udW1iZXJfYW55MTsKKy0gICAgICAg ICAgICB9CistCistICAgICAgICAgICAgY2FzZSAnLic6CistICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICBhZGQoZGVjaW1hbF9wb2ludF9jaGFyKTsKKy0gICAgICAgICAgICAgICAgZ290 byBzY2FuX251bWJlcl9kZWNpbWFsMTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAg Y2FzZSAnZSc6CistICAgICAgICAgICAgY2FzZSAnRSc6CistICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICBhZGQoY3VycmVudCk7CistICAgICAgICAgICAgICAgIGdvdG8gc2Nhbl9udW1i ZXJfZXhwb25lbnQ7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGRlZmF1bHQ6Cist ICAgICAgICAgICAgICAgIGdvdG8gc2Nhbl9udW1iZXJfZG9uZTsKKy0gICAgICAgIH0KKy0KKy1z Y2FuX251bWJlcl9kZWNpbWFsMToKKy0gICAgICAgIC8vIHN0YXRlOiB3ZSBqdXN0IHBhcnNlZCBh IGRlY2ltYWwgcG9pbnQKKy0gICAgICAgIG51bWJlcl90eXBlID0gdG9rZW5fdHlwZTo6dmFsdWVf ZmxvYXQ7CistICAgICAgICBzd2l0Y2ggKGdldCgpKQorLSAgICAgICAgeworLSAgICAgICAgICAg IGNhc2UgJzAnOgorLSAgICAgICAgICAgIGNhc2UgJzEnOgorLSAgICAgICAgICAgIGNhc2UgJzIn OgorLSAgICAgICAgICAgIGNhc2UgJzMnOgorLSAgICAgICAgICAgIGNhc2UgJzQnOgorLSAgICAg ICAgICAgIGNhc2UgJzUnOgorLSAgICAgICAgICAgIGNhc2UgJzYnOgorLSAgICAgICAgICAgIGNh c2UgJzcnOgorLSAgICAgICAgICAgIGNhc2UgJzgnOgorLSAgICAgICAgICAgIGNhc2UgJzknOgor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgYWRkKGN1cnJlbnQpOworLSAgICAgICAg ICAgICAgICBnb3RvIHNjYW5fbnVtYmVyX2RlY2ltYWwyOworLSAgICAgICAgICAgIH0KKy0KKy0g ICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgZXJy b3JfbWVzc2FnZSA9ICJpbnZhbGlkIG51bWJlcjsgZXhwZWN0ZWQgZGlnaXQgYWZ0ZXIgJy4nIjsK Ky0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAg ICAgICAgIH0KKy0gICAgICAgIH0KKy0KKy1zY2FuX251bWJlcl9kZWNpbWFsMjoKKy0gICAgICAg IC8vIHdlIGp1c3QgcGFyc2VkIGF0IGxlYXN0IG9uZSBudW1iZXIgYWZ0ZXIgYSBkZWNpbWFsIHBv aW50CistICAgICAgICBzd2l0Y2ggKGdldCgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNh c2UgJzAnOgorLSAgICAgICAgICAgIGNhc2UgJzEnOgorLSAgICAgICAgICAgIGNhc2UgJzInOgor LSAgICAgICAgICAgIGNhc2UgJzMnOgorLSAgICAgICAgICAgIGNhc2UgJzQnOgorLSAgICAgICAg ICAgIGNhc2UgJzUnOgorLSAgICAgICAgICAgIGNhc2UgJzYnOgorLSAgICAgICAgICAgIGNhc2Ug JzcnOgorLSAgICAgICAgICAgIGNhc2UgJzgnOgorLSAgICAgICAgICAgIGNhc2UgJzknOgorLSAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgYWRkKGN1cnJlbnQpOworLSAgICAgICAgICAg ICAgICBnb3RvIHNjYW5fbnVtYmVyX2RlY2ltYWwyOworLSAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICBjYXNlICdlJzoKKy0gICAgICAgICAgICBjYXNlICdFJzoKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIGFkZChjdXJyZW50KTsKKy0gICAgICAgICAgICAgICAgZ290byBz Y2FuX251bWJlcl9leHBvbmVudDsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgZGVm YXVsdDoKKy0gICAgICAgICAgICAgICAgZ290byBzY2FuX251bWJlcl9kb25lOworLSAgICAgICAg fQorLQorLXNjYW5fbnVtYmVyX2V4cG9uZW50OgorLSAgICAgICAgLy8gd2UganVzdCBwYXJzZWQg YW4gZXhwb25lbnQKKy0gICAgICAgIG51bWJlcl90eXBlID0gdG9rZW5fdHlwZTo6dmFsdWVfZmxv YXQ7CistICAgICAgICBzd2l0Y2ggKGdldCgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNh c2UgJysnOgorLSAgICAgICAgICAgIGNhc2UgJy0nOgorLSAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgYWRkKGN1cnJlbnQpOworLSAgICAgICAgICAgICAgICBnb3RvIHNjYW5fbnVtYmVy X3NpZ247CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgJzAnOgorLSAgICAg ICAgICAgIGNhc2UgJzEnOgorLSAgICAgICAgICAgIGNhc2UgJzInOgorLSAgICAgICAgICAgIGNh c2UgJzMnOgorLSAgICAgICAgICAgIGNhc2UgJzQnOgorLSAgICAgICAgICAgIGNhc2UgJzUnOgor LSAgICAgICAgICAgIGNhc2UgJzYnOgorLSAgICAgICAgICAgIGNhc2UgJzcnOgorLSAgICAgICAg ICAgIGNhc2UgJzgnOgorLSAgICAgICAgICAgIGNhc2UgJzknOgorLSAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgYWRkKGN1cnJlbnQpOworLSAgICAgICAgICAgICAgICBnb3RvIHNjYW5f bnVtYmVyX2FueTI7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGRlZmF1bHQ6Cist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0KKy0gICAgICAg ICAgICAgICAgICAgICJpbnZhbGlkIG51bWJlcjsgZXhwZWN0ZWQgJysnLCAnLScsIG9yIGRpZ2l0 IGFmdGVyIGV4cG9uZW50IjsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBh cnNlX2Vycm9yOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0KKy1zY2FuX251bWJlcl9z aWduOgorLSAgICAgICAgLy8gd2UganVzdCBwYXJzZWQgYW4gZXhwb25lbnQgc2lnbgorLSAgICAg ICAgc3dpdGNoIChnZXQoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlICcwJzoKKy0g ICAgICAgICAgICBjYXNlICcxJzoKKy0gICAgICAgICAgICBjYXNlICcyJzoKKy0gICAgICAgICAg ICBjYXNlICczJzoKKy0gICAgICAgICAgICBjYXNlICc0JzoKKy0gICAgICAgICAgICBjYXNlICc1 JzoKKy0gICAgICAgICAgICBjYXNlICc2JzoKKy0gICAgICAgICAgICBjYXNlICc3JzoKKy0gICAg ICAgICAgICBjYXNlICc4JzoKKy0gICAgICAgICAgICBjYXNlICc5JzoKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIGFkZChjdXJyZW50KTsKKy0gICAgICAgICAgICAgICAgZ290byBz Y2FuX251bWJlcl9hbnkyOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBkZWZhdWx0 OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJpbnZh bGlkIG51bWJlcjsgZXhwZWN0ZWQgZGlnaXQgYWZ0ZXIgZXhwb25lbnQgc2lnbiI7CistICAgICAg ICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjsKKy0gICAgICAgICAgICB9 CistICAgICAgICB9CistCistc2Nhbl9udW1iZXJfYW55MjoKKy0gICAgICAgIC8vIHdlIGp1c3Qg cGFyc2VkIGEgbnVtYmVyIGFmdGVyIHRoZSBleHBvbmVudCBvciBleHBvbmVudCBzaWduCistICAg ICAgICBzd2l0Y2ggKGdldCgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNhc2UgJzAnOgor LSAgICAgICAgICAgIGNhc2UgJzEnOgorLSAgICAgICAgICAgIGNhc2UgJzInOgorLSAgICAgICAg ICAgIGNhc2UgJzMnOgorLSAgICAgICAgICAgIGNhc2UgJzQnOgorLSAgICAgICAgICAgIGNhc2Ug JzUnOgorLSAgICAgICAgICAgIGNhc2UgJzYnOgorLSAgICAgICAgICAgIGNhc2UgJzcnOgorLSAg ICAgICAgICAgIGNhc2UgJzgnOgorLSAgICAgICAgICAgIGNhc2UgJzknOgorLSAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgYWRkKGN1cnJlbnQpOworLSAgICAgICAgICAgICAgICBnb3Rv IHNjYW5fbnVtYmVyX2FueTI7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGRlZmF1 bHQ6CistICAgICAgICAgICAgICAgIGdvdG8gc2Nhbl9udW1iZXJfZG9uZTsKKy0gICAgICAgIH0K Ky0KKy1zY2FuX251bWJlcl9kb25lOgorLSAgICAgICAgLy8gdW5nZXQgdGhlIGNoYXJhY3RlciBh ZnRlciB0aGUgbnVtYmVyICh3ZSBvbmx5IHJlYWQgaXQgdG8ga25vdyB0aGF0CistICAgICAgICAv LyB3ZSBhcmUgZG9uZSBzY2FubmluZyBhIG51bWJlcikKKy0gICAgICAgIHVuZ2V0KCk7CistCist ICAgICAgICBjaGFyKiBlbmRwdHIgPSBudWxscHRyOyAvLyBOT0xJTlQoY3BwY29yZWd1aWRlbGlu ZXMtcHJvLXR5cGUtdmFyYXJnLGhpY3BwLXZhcmFyZykKKy0gICAgICAgIGVycm5vID0gMDsKKy0K Ky0gICAgICAgIC8vIHRyeSB0byBwYXJzZSBpbnRlZ2VycyBmaXJzdCBhbmQgZmFsbCBiYWNrIHRv IGZsb2F0cworLSAgICAgICAgaWYgKG51bWJlcl90eXBlID09IHRva2VuX3R5cGU6OnZhbHVlX3Vu c2lnbmVkKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNvbnN0IGF1dG8geCA9IHN0ZDo6c3Ry dG91bGwodG9rZW5fYnVmZmVyLmRhdGEoKSwgJmVuZHB0ciwgMTApOworLQorLSAgICAgICAgICAg IC8vIHdlIGNoZWNrZWQgdGhlIG51bWJlciBmb3JtYXQgYmVmb3JlCistICAgICAgICAgICAgSlNP Tl9BU1NFUlQoZW5kcHRyID09IHRva2VuX2J1ZmZlci5kYXRhKCkgKyB0b2tlbl9idWZmZXIuc2l6 ZSgpKTsKKy0KKy0gICAgICAgICAgICBpZiAoZXJybm8gPT0gMCkKKy0gICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgIHZhbHVlX3Vuc2lnbmVkID0gc3RhdGljX2Nhc3Q8bnVtYmVyX3Vuc2ln bmVkX3Q+KHgpOworLSAgICAgICAgICAgICAgICBpZiAodmFsdWVfdW5zaWduZWQgPT0geCkKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6 OnZhbHVlX3Vuc2lnbmVkOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgfQorLSAg ICAgICAgfQorLSAgICAgICAgZWxzZSBpZiAobnVtYmVyX3R5cGUgPT0gdG9rZW5fdHlwZTo6dmFs dWVfaW50ZWdlcikKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjb25zdCBhdXRvIHggPSBzdGQ6 OnN0cnRvbGwodG9rZW5fYnVmZmVyLmRhdGEoKSwgJmVuZHB0ciwgMTApOworLQorLSAgICAgICAg ICAgIC8vIHdlIGNoZWNrZWQgdGhlIG51bWJlciBmb3JtYXQgYmVmb3JlCistICAgICAgICAgICAg SlNPTl9BU1NFUlQoZW5kcHRyID09IHRva2VuX2J1ZmZlci5kYXRhKCkgKyB0b2tlbl9idWZmZXIu c2l6ZSgpKTsKKy0KKy0gICAgICAgICAgICBpZiAoZXJybm8gPT0gMCkKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIHZhbHVlX2ludGVnZXIgPSBzdGF0aWNfY2FzdDxudW1iZXJfaW50 ZWdlcl90Pih4KTsKKy0gICAgICAgICAgICAgICAgaWYgKHZhbHVlX2ludGVnZXIgPT0geCkKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6 OnZhbHVlX2ludGVnZXI7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICB9CistICAg ICAgICB9CistCistICAgICAgICAvLyB0aGlzIGNvZGUgaXMgcmVhY2hlZCBpZiB3ZSBwYXJzZSBh IGZsb2F0aW5nLXBvaW50IG51bWJlciBvciBpZiBhbgorLSAgICAgICAgLy8gaW50ZWdlciBjb252 ZXJzaW9uIGFib3ZlIGZhaWxlZAorLSAgICAgICAgc3RydG9mKHZhbHVlX2Zsb2F0LCB0b2tlbl9i dWZmZXIuZGF0YSgpLCAmZW5kcHRyKTsKKy0KKy0gICAgICAgIC8vIHdlIGNoZWNrZWQgdGhlIG51 bWJlciBmb3JtYXQgYmVmb3JlCistICAgICAgICBKU09OX0FTU0VSVChlbmRwdHIgPT0gdG9rZW5f YnVmZmVyLmRhdGEoKSArIHRva2VuX2J1ZmZlci5zaXplKCkpOworLQorLSAgICAgICAgcmV0dXJu IHRva2VuX3R5cGU6OnZhbHVlX2Zsb2F0OworLSAgICB9CistCistICAgIC8qIQorLSAgICBAcGFy YW1baW5dIGxpdGVyYWxfdGV4dCAgdGhlIGxpdGVyYWwgdGV4dCB0byBleHBlY3QKKy0gICAgQHBh cmFtW2luXSBsZW5ndGggICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHBhc3NlZCBsaXRlcmFsIHRl eHQKKy0gICAgQHBhcmFtW2luXSByZXR1cm5fdHlwZSAgIHRoZSB0b2tlbiB0eXBlIHRvIHJldHVy biBvbiBzdWNjZXNzCistICAgICovCistICAgIEpTT05fSEVETEVZX05PTl9OVUxMKDIpCistICAg IHRva2VuX3R5cGUgc2Nhbl9saXRlcmFsKGNvbnN0IGNoYXJfdHlwZSogbGl0ZXJhbF90ZXh0LCBj b25zdCBzdGQ6OnNpemVfdCBsZW5ndGgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv a2VuX3R5cGUgcmV0dXJuX3R5cGUpCistICAgIHsKKy0gICAgICAgIEpTT05fQVNTRVJUKHN0ZDo6 Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6dG9fY2hhcl90eXBlKGN1cnJlbnQpID09IGxpdGVyYWxf dGV4dFswXSk7CistICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAxOyBpIDwgbGVuZ3RoOyAr K2kpCistICAgICAgICB7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKHN0 ZDo6Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6dG9fY2hhcl90eXBlKGdldCgpKSAhPSBsaXRlcmFs X3RleHRbaV0pKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgZXJyb3JfbWVzc2Fn ZSA9ICJpbnZhbGlkIGxpdGVyYWwiOworLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fdHlw ZTo6cGFyc2VfZXJyb3I7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgcmV0 dXJuIHJldHVybl90eXBlOworLSAgICB9CistCistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLwor LSAgICAvLyBpbnB1dCBtYW5hZ2VtZW50CistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQor LSAgICAvLy8gcmVzZXQgdG9rZW5fYnVmZmVyOyBjdXJyZW50IGNoYXJhY3RlciBpcyBiZWdpbm5p bmcgb2YgdG9rZW4KKy0gICAgdm9pZCByZXNldCgpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAg IHRva2VuX2J1ZmZlci5jbGVhcigpOworLSAgICAgICAgdG9rZW5fc3RyaW5nLmNsZWFyKCk7Cist ICAgICAgICB0b2tlbl9zdHJpbmcucHVzaF9iYWNrKHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcl90eXBl Pjo6dG9fY2hhcl90eXBlKGN1cnJlbnQpKTsKKy0gICAgfQorLQorLSAgICAvKgorLSAgICBAYnJp ZWYgZ2V0IG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGlucHV0CistCistICAgIFRoaXMgZnVuY3Rp b24gcHJvdmlkZXMgdGhlIGludGVyZmFjZSB0byB0aGUgdXNlZCBpbnB1dCBhZGFwdGVyLiBJdCBk b2VzCistICAgIG5vdCB0aHJvdyBpbiBjYXNlIHRoZSBpbnB1dCByZWFjaGVkIEVPRiwgYnV0IHJl dHVybnMgYQorLSAgICBgc3RkOjpjaGFyX3RyYWl0czxjaGFyPjo6ZW9mKClgIGluIHRoYXQgY2Fz ZS4gIFN0b3JlcyB0aGUgc2Nhbm5lZCBjaGFyYWN0ZXJzCistICAgIGZvciB1c2UgaW4gZXJyb3Ig bWVzc2FnZXMuCistCistICAgIEByZXR1cm4gY2hhcmFjdGVyIHJlYWQgZnJvbSB0aGUgaW5wdXQK Ky0gICAgKi8KKy0gICAgY2hhcl9pbnRfdHlwZSBnZXQoKQorLSAgICB7CistICAgICAgICArK3Bv c2l0aW9uLmNoYXJzX3JlYWRfdG90YWw7CistICAgICAgICArK3Bvc2l0aW9uLmNoYXJzX3JlYWRf Y3VycmVudF9saW5lOworLQorLSAgICAgICAgaWYgKG5leHRfdW5nZXQpCistICAgICAgICB7Cist ICAgICAgICAgICAgLy8ganVzdCByZXNldCB0aGUgbmV4dF91bmdldCB2YXJpYWJsZSBhbmQgd29y ayB3aXRoIGN1cnJlbnQKKy0gICAgICAgICAgICBuZXh0X3VuZ2V0ID0gZmFsc2U7CistICAgICAg ICB9CistICAgICAgICBlbHNlCistICAgICAgICB7CistICAgICAgICAgICAgY3VycmVudCA9IGlh LmdldF9jaGFyYWN0ZXIoKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIGlmIChKU09OX0hFRExF WV9MSUtFTFkoY3VycmVudCAhPSBzdGQ6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmVvZigpKSkK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICB0b2tlbl9zdHJpbmcucHVzaF9iYWNrKHN0ZDo6Y2hh cl90cmFpdHM8Y2hhcl90eXBlPjo6dG9fY2hhcl90eXBlKGN1cnJlbnQpKTsKKy0gICAgICAgIH0K Ky0KKy0gICAgICAgIGlmIChjdXJyZW50ID09ICdcbicpCistICAgICAgICB7CistICAgICAgICAg ICAgKytwb3NpdGlvbi5saW5lc19yZWFkOworLSAgICAgICAgICAgIHBvc2l0aW9uLmNoYXJzX3Jl YWRfY3VycmVudF9saW5lID0gMDsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiBjdXJy ZW50OworLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgdW5nZXQgY3VycmVudCBjaGFy YWN0ZXIgKHJlYWQgaXQgYWdhaW4gb24gbmV4dCBnZXQpCistCistICAgIFdlIGltcGxlbWVudCB1 bmdldCBieSBzZXR0aW5nIHZhcmlhYmxlIG5leHRfdW5nZXQgdG8gdHJ1ZS4gVGhlIGlucHV0IGlz IG5vdAorLSAgICBjaGFuZ2VkIC0gd2UganVzdCBzaW11bGF0ZSB1bmdldHRpbmcgYnkgbW9kaWZ5 aW5nIGNoYXJzX3JlYWRfdG90YWwsCistICAgIGNoYXJzX3JlYWRfY3VycmVudF9saW5lLCBhbmQg dG9rZW5fc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIGdldCgpIHdpbGwKKy0gICAgYmVoYXZlIGFz IGlmIHRoZSB1bmdldCBjaGFyYWN0ZXIgaXMgcmVhZCBhZ2Fpbi4KKy0gICAgKi8KKy0gICAgdm9p ZCB1bmdldCgpCistICAgIHsKKy0gICAgICAgIG5leHRfdW5nZXQgPSB0cnVlOworLQorLSAgICAg ICAgLS1wb3NpdGlvbi5jaGFyc19yZWFkX3RvdGFsOworLQorLSAgICAgICAgLy8gaW4gY2FzZSB3 ZSAidW5nZXQiIGEgbmV3bGluZSwgd2UgaGF2ZSB0byBhbHNvIGRlY3JlbWVudCB0aGUgbGluZXNf cmVhZAorLSAgICAgICAgaWYgKHBvc2l0aW9uLmNoYXJzX3JlYWRfY3VycmVudF9saW5lID09IDAp CistICAgICAgICB7CistICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmxpbmVzX3JlYWQgPiAwKQor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLS1wb3NpdGlvbi5saW5lc19yZWFkOwor LSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0g ICAgICAgICAgICAtLXBvc2l0aW9uLmNoYXJzX3JlYWRfY3VycmVudF9saW5lOworLSAgICAgICAg fQorLQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJS0VMWShjdXJyZW50ICE9IHN0ZDo6Y2hh cl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpT T05fQVNTRVJUKCF0b2tlbl9zdHJpbmcuZW1wdHkoKSk7CistICAgICAgICAgICAgdG9rZW5fc3Ry aW5nLnBvcF9iYWNrKCk7CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIGFkZCBhIGNo YXJhY3RlciB0byB0b2tlbl9idWZmZXIKKy0gICAgdm9pZCBhZGQoY2hhcl9pbnRfdHlwZSBjKQor LSAgICB7CistICAgICAgICB0b2tlbl9idWZmZXIucHVzaF9iYWNrKHN0YXRpY19jYXN0PHR5cGVu YW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPihjKSk7CistICAgIH0KKy0KKy0gIHB1YmxpYzoKKy0g ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8vIHZhbHVlIGdldHRlcnMKKy0gICAgLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8vLyByZXR1cm4gaW50ZWdlciB2YWx1ZQorLSAg ICBjb25zdGV4cHIgbnVtYmVyX2ludGVnZXJfdCBnZXRfbnVtYmVyX2ludGVnZXIoKSBjb25zdCBu b2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gdmFsdWVfaW50ZWdlcjsKKy0gICAgfQor LQorLSAgICAvLy8gcmV0dXJuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUKKy0gICAgY29uc3RleHBy IG51bWJlcl91bnNpZ25lZF90IGdldF9udW1iZXJfdW5zaWduZWQoKSBjb25zdCBub2V4Y2VwdAor LSAgICB7CistICAgICAgICByZXR1cm4gdmFsdWVfdW5zaWduZWQ7CistICAgIH0KKy0KKy0gICAg Ly8vIHJldHVybiBmbG9hdGluZy1wb2ludCB2YWx1ZQorLSAgICBjb25zdGV4cHIgbnVtYmVyX2Zs b2F0X3QgZ2V0X251bWJlcl9mbG9hdCgpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAg IHJldHVybiB2YWx1ZV9mbG9hdDsKKy0gICAgfQorLQorLSAgICAvLy8gcmV0dXJuIGN1cnJlbnQg c3RyaW5nIHZhbHVlIChpbXBsaWNpdGx5IHJlc2V0cyB0aGUgdG9rZW47IHVzZWZ1bCBvbmx5IG9u Y2UpCistICAgIHN0cmluZ190JiBnZXRfc3RyaW5nKCkKKy0gICAgeworLSAgICAgICAgcmV0dXJu IHRva2VuX2J1ZmZlcjsKKy0gICAgfQorLQorLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0g ICAgLy8gZGlhZ25vc3RpY3MKKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8v LyByZXR1cm4gcG9zaXRpb24gb2YgbGFzdCByZWFkIHRva2VuCistICAgIGNvbnN0ZXhwciBwb3Np dGlvbl90IGdldF9wb3NpdGlvbigpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJl dHVybiBwb3NpdGlvbjsKKy0gICAgfQorLQorLSAgICAvLy8gcmV0dXJuIHRoZSBsYXN0IHJlYWQg dG9rZW4gKGZvciBlcnJvcnMgb25seSkuICBXaWxsIG5ldmVyIGNvbnRhaW4gRU9GCistICAgIC8v LyAoYW4gYXJiaXRyYXJ5IHZhbHVlIHRoYXQgaXMgbm90IGEgdmFsaWQgY2hhciB2YWx1ZSwgb2Z0 ZW4gLTEpLCBiZWNhdXNlCistICAgIC8vLyAyNTUgbWF5IGxlZ2l0aW1hdGVseSBvY2N1ci4gIE1h eSBjb250YWluIE5VTCwgd2hpY2ggc2hvdWxkIGJlIGVzY2FwZWQuCistICAgIHN0ZDo6c3RyaW5n IGdldF90b2tlbl9zdHJpbmcoKSBjb25zdAorLSAgICB7CistICAgICAgICAvLyBlc2NhcGUgY29u dHJvbCBjaGFyYWN0ZXJzCistICAgICAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CistICAgICAgICBm b3IgKGNvbnN0IGF1dG8gYyA6IHRva2VuX3N0cmluZykKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYykgPD0gJ1x4MUYnKQorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gZXNjYXBlIGNvbnRyb2wgY2hhcmFjdGVycworLSAg ICAgICAgICAgICAgICBzdGQ6OmFycmF5PGNoYXIsIDk+IGNze3t9fTsKKy0gICAgICAgICAgICAg ICAgc3RhdGljX2Nhc3Q8dm9pZD4oKHN0ZDo6c25wcmludGYpKGNzLmRhdGEoKSwgY3Muc2l6ZSgp LCAiPFUrJS40WD4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSkpOyAvLyBOT0xJTlQo Y3BwY29yZWd1aWRlbGluZXMtcHJvLXR5cGUtdmFyYXJnLGhpY3BwLXZhcmFyZykKKy0gICAgICAg ICAgICAgICAgcmVzdWx0ICs9IGNzLmRhdGEoKTsKKy0gICAgICAgICAgICB9CistICAgICAgICAg ICAgZWxzZQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gYWRkIGNoYXJhY3Rl ciBhcyBpcworLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0YXRpY19jYXN0PHN0 ZDo6c3RyaW5nOjp2YWx1ZV90eXBlPihjKSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQor LQorLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLQorLSAgICAvLy8gcmV0dXJuIHN5 bnRheCBlcnJvciBtZXNzYWdlCistICAgIEpTT05fSEVETEVZX1JFVFVSTlNfTk9OX05VTEwKKy0g ICAgY29uc3RleHByIGNvbnN0IGNoYXIqIGdldF9lcnJvcl9tZXNzYWdlKCkgY29uc3Qgbm9leGNl cHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGVycm9yX21lc3NhZ2U7CistICAgIH0KKy0KKy0g ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8vIGFjdHVhbCBzY2FubmVyCistICAgIC8v Ly8vLy8vLy8vLy8vLy8vLy8vLworLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIHNraXAgdGhlIFVU Ri04IGJ5dGUgb3JkZXIgbWFyaworLSAgICBAcmV0dXJuIHRydWUgaWZmIHRoZXJlIGlzIG5vIEJP TSBvciB0aGUgY29ycmVjdCBCT00gaGFzIGJlZW4gc2tpcHBlZAorLSAgICAqLworLSAgICBib29s IHNraXBfYm9tKCkKKy0gICAgeworLSAgICAgICAgaWYgKGdldCgpID09IDB4RUYpCistICAgICAg ICB7CistICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgY29tcGxldGVseSBwYXJzZSB0aGUgQk9N CistICAgICAgICAgICAgcmV0dXJuIGdldCgpID09IDB4QkIgJiYgZ2V0KCkgPT0gMHhCRjsKKy0g ICAgICAgIH0KKy0KKy0gICAgICAgIC8vIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgbm90IHRoZSBi ZWdpbm5pbmcgb2YgdGhlIEJPTTsgdW5nZXQgaXQgdG8KKy0gICAgICAgIC8vIHByb2Nlc3MgaXMg bGF0ZXIKKy0gICAgICAgIHVuZ2V0KCk7CistICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgfQor LQorLSAgICB2b2lkIHNraXBfd2hpdGVzcGFjZSgpCistICAgIHsKKy0gICAgICAgIGRvCistICAg ICAgICB7CistICAgICAgICAgICAgZ2V0KCk7CistICAgICAgICB9CistICAgICAgICB3aGlsZSAo Y3VycmVudCA9PSAnICcgfHwgY3VycmVudCA9PSAnXHQnIHx8IGN1cnJlbnQgPT0gJ1xuJyB8fCBj dXJyZW50ID09ICdccicpOworLSAgICB9CistCistICAgIHRva2VuX3R5cGUgc2NhbigpCistICAg IHsKKy0gICAgICAgIC8vIGluaXRpYWxseSwgc2tpcCB0aGUgQk9NCistICAgICAgICBpZiAocG9z aXRpb24uY2hhcnNfcmVhZF90b3RhbCA9PSAwICYmICFza2lwX2JvbSgpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBCT007IG11c3QgYmUgMHhFRiAw eEJCIDB4QkYgaWYgZ2l2ZW4iOworLSAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpwYXJz ZV9lcnJvcjsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIHJlYWQgbmV4dCBjaGFyYWN0ZXIg YW5kIGlnbm9yZSB3aGl0ZXNwYWNlCistICAgICAgICBza2lwX3doaXRlc3BhY2UoKTsKKy0KKy0g ICAgICAgIC8vIGlnbm9yZSBjb21tZW50cworLSAgICAgICAgd2hpbGUgKGlnbm9yZV9jb21tZW50 cyAmJiBjdXJyZW50ID09ICcvJykKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoIXNjYW5f Y29tbWVudCgpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu X3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBz a2lwIGZvbGxvd2luZyB3aGl0ZXNwYWNlCistICAgICAgICAgICAgc2tpcF93aGl0ZXNwYWNlKCk7 CistICAgICAgICB9CistCistICAgICAgICBzd2l0Y2ggKGN1cnJlbnQpCistICAgICAgICB7Cist ICAgICAgICAgICAgLy8gc3RydWN0dXJhbCBjaGFyYWN0ZXJzCistICAgICAgICAgICAgY2FzZSAn Wyc6CistICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpiZWdpbl9hcnJheTsKKy0g ICAgICAgICAgICBjYXNlICddJzoKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6 OmVuZF9hcnJheTsKKy0gICAgICAgICAgICBjYXNlICd7JzoKKy0gICAgICAgICAgICAgICAgcmV0 dXJuIHRva2VuX3R5cGU6OmJlZ2luX29iamVjdDsKKy0gICAgICAgICAgICBjYXNlICd9JzoKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OmVuZF9vYmplY3Q7CistICAgICAgICAg ICAgY2FzZSAnOic6CistICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl90eXBlOjpuYW1lX3Nl cGFyYXRvcjsKKy0gICAgICAgICAgICBjYXNlICcsJzoKKy0gICAgICAgICAgICAgICAgcmV0dXJu IHRva2VuX3R5cGU6OnZhbHVlX3NlcGFyYXRvcjsKKy0KKy0gICAgICAgICAgICAvLyBsaXRlcmFs cworLSAgICAgICAgICAgIGNhc2UgJ3QnOgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgc3RkOjphcnJheTxjaGFyX3R5cGUsIDQ+IHRydWVfbGl0ZXJhbCA9IHt7c3RhdGljX2Nhc3Q8 Y2hhcl90eXBlPigndCcpLCBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KCdyJyksIHN0YXRpY19jYXN0 PGNoYXJfdHlwZT4oJ3UnKSwgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPignZScpfX07CistICAgICAg ICAgICAgICAgIHJldHVybiBzY2FuX2xpdGVyYWwodHJ1ZV9saXRlcmFsLmRhdGEoKSwgdHJ1ZV9s aXRlcmFsLnNpemUoKSwgdG9rZW5fdHlwZTo6bGl0ZXJhbF90cnVlKTsKKy0gICAgICAgICAgICB9 CistICAgICAgICAgICAgY2FzZSAnZic6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICBzdGQ6OmFycmF5PGNoYXJfdHlwZSwgNT4gZmFsc2VfbGl0ZXJhbCA9IHt7c3RhdGljX2Nhc3Q8 Y2hhcl90eXBlPignZicpLCBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KCdhJyksIHN0YXRpY19jYXN0 PGNoYXJfdHlwZT4oJ2wnKSwgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPigncycpLCBzdGF0aWNfY2Fz dDxjaGFyX3R5cGU+KCdlJyl9fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5fbGl0ZXJh bChmYWxzZV9saXRlcmFsLmRhdGEoKSwgZmFsc2VfbGl0ZXJhbC5zaXplKCksIHRva2VuX3R5cGU6 OmxpdGVyYWxfZmFsc2UpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBjYXNlICduJzoK Ky0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8Y2hhcl90eXBlLCA0 PiBudWxsX2xpdGVyYWwgPSB7e3N0YXRpY19jYXN0PGNoYXJfdHlwZT4oJ24nKSwgc3RhdGljX2Nh c3Q8Y2hhcl90eXBlPigndScpLCBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KCdsJyksIHN0YXRpY19j YXN0PGNoYXJfdHlwZT4oJ2wnKX19OworLSAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbl9saXRl cmFsKG51bGxfbGl0ZXJhbC5kYXRhKCksIG51bGxfbGl0ZXJhbC5zaXplKCksIHRva2VuX3R5cGU6 OmxpdGVyYWxfbnVsbCk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIC8vIHN0cmlu ZworLSAgICAgICAgICAgIGNhc2UgJ1wiJzoKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5f c3RyaW5nKCk7CistCistICAgICAgICAgICAgLy8gbnVtYmVyCistICAgICAgICAgICAgY2FzZSAn LSc6CistICAgICAgICAgICAgY2FzZSAnMCc6CistICAgICAgICAgICAgY2FzZSAnMSc6CistICAg ICAgICAgICAgY2FzZSAnMic6CistICAgICAgICAgICAgY2FzZSAnMyc6CistICAgICAgICAgICAg Y2FzZSAnNCc6CistICAgICAgICAgICAgY2FzZSAnNSc6CistICAgICAgICAgICAgY2FzZSAnNic6 CistICAgICAgICAgICAgY2FzZSAnNyc6CistICAgICAgICAgICAgY2FzZSAnOCc6CistICAgICAg ICAgICAgY2FzZSAnOSc6CistICAgICAgICAgICAgICAgIHJldHVybiBzY2FuX251bWJlcigpOwor LQorLSAgICAgICAgICAgIC8vIGVuZCBvZiBpbnB1dCAodGhlIG51bGwgYnl0ZSBpcyBuZWVkZWQg d2hlbiBwYXJzaW5nIGZyb20KKy0gICAgICAgICAgICAvLyBzdHJpbmcgbGl0ZXJhbHMpCistICAg ICAgICAgICAgY2FzZSAnXDAnOgorLSAgICAgICAgICAgIGNhc2Ugc3RkOjpjaGFyX3RyYWl0czxj aGFyX3R5cGU+Ojplb2YoKToKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OmVu ZF9vZl9pbnB1dDsKKy0KKy0gICAgICAgICAgICAvLyBlcnJvcgorLSAgICAgICAgICAgIGRlZmF1 bHQ6CistICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiaW52YWxpZCBsaXRlcmFsIjsK Ky0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOworLSAgICAg ICAgfQorLSAgICB9CistCistICBwcml2YXRlOgorLSAgICAvLy8gaW5wdXQgYWRhcHRlcgorLSAg ICBJbnB1dEFkYXB0ZXJUeXBlIGlhOworLQorLSAgICAvLy8gd2hldGhlciBjb21tZW50cyBzaG91 bGQgYmUgaWdub3JlZCAodHJ1ZSkgb3Igc2lnbmFsZWQgYXMgZXJyb3JzIChmYWxzZSkKKy0gICAg Y29uc3QgYm9vbCBpZ25vcmVfY29tbWVudHMgPSBmYWxzZTsKKy0KKy0gICAgLy8vIHRoZSBjdXJy ZW50IGNoYXJhY3RlcgorLSAgICBjaGFyX2ludF90eXBlIGN1cnJlbnQgPSBzdGQ6OmNoYXJfdHJh aXRzPGNoYXJfdHlwZT46OmVvZigpOworLQorLSAgICAvLy8gd2hldGhlciB0aGUgbmV4dCBnZXQo KSBjYWxsIHNob3VsZCBqdXN0IHJldHVybiBjdXJyZW50CistICAgIGJvb2wgbmV4dF91bmdldCA9 IGZhbHNlOworLQorLSAgICAvLy8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRv a2VuCistICAgIHBvc2l0aW9uX3QgcG9zaXRpb24ge307CistCistICAgIC8vLyByYXcgaW5wdXQg dG9rZW4gc3RyaW5nIChmb3IgZXJyb3IgbWVzc2FnZXMpCistICAgIHN0ZDo6dmVjdG9yPGNoYXJf dHlwZT4gdG9rZW5fc3RyaW5nIHt9OworLQorLSAgICAvLy8gYnVmZmVyIGZvciB2YXJpYWJsZS1s ZW5ndGggdG9rZW5zIChudW1iZXJzLCBzdHJpbmdzKQorLSAgICBzdHJpbmdfdCB0b2tlbl9idWZm ZXIge307CistCistICAgIC8vLyBhIGRlc2NyaXB0aW9uIG9mIG9jY3VycmVkIGxleGVyIGVycm9y cworLSAgICBjb25zdCBjaGFyKiBlcnJvcl9tZXNzYWdlID0gIiI7CistCistICAgIC8vIG51bWJl ciB2YWx1ZXMKKy0gICAgbnVtYmVyX2ludGVnZXJfdCB2YWx1ZV9pbnRlZ2VyID0gMDsKKy0gICAg bnVtYmVyX3Vuc2lnbmVkX3QgdmFsdWVfdW5zaWduZWQgPSAwOworLSAgICBudW1iZXJfZmxvYXRf dCB2YWx1ZV9mbG9hdCA9IDA7CistCistICAgIC8vLyB0aGUgZGVjaW1hbCBwb2ludAorLSAgICBj b25zdCBjaGFyX2ludF90eXBlIGRlY2ltYWxfcG9pbnRfY2hhciA9ICcuJzsKKy19OworLX0gIC8v IG5hbWVzcGFjZSBkZXRhaWwKKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAjaW5j bHVkZSA8bmxvaG1hbm4vZGV0YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8 bmxvaG1hbm4vZGV0YWlsL21ldGEvaXNfc2F4LmhwcD4KKy0KKy0KKy0jaW5jbHVkZSA8Y3N0ZGlu dD4gLy8gc2l6ZV90CistI2luY2x1ZGUgPHV0aWxpdHk+IC8vIGRlY2x2YWwKKy0jaW5jbHVkZSA8 c3RyaW5nPiAvLyBzdHJpbmcKKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21ldGEv ZGV0ZWN0ZWQuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWV0YS90eXBl X3RyYWl0cy5ocHA+CistCistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBk ZXRhaWwKKy17CistdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy11c2luZyBudWxsX2Z1bmN0aW9uX3Qg PSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VCY+KCkubnVsbCgpKTsKKy0KKy10ZW1wbGF0ZTx0eXBl bmFtZSBUPgorLXVzaW5nIGJvb2xlYW5fZnVuY3Rpb25fdCA9CistICAgIGRlY2x0eXBlKHN0ZDo6 ZGVjbHZhbDxUJj4oKS5ib29sZWFuKHN0ZDo6ZGVjbHZhbDxib29sPigpKSk7CistCistdGVtcGxh dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSW50ZWdlcj4KKy11c2luZyBudW1iZXJfaW50ZWdlcl9m dW5jdGlvbl90ID0KKy0gICAgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFQmPigpLm51bWJlcl9pbnRl Z2VyKHN0ZDo6ZGVjbHZhbDxJbnRlZ2VyPigpKSk7CistCistdGVtcGxhdGU8dHlwZW5hbWUgVCwg dHlwZW5hbWUgVW5zaWduZWQ+CistdXNpbmcgbnVtYmVyX3Vuc2lnbmVkX2Z1bmN0aW9uX3QgPQor LSAgICBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VCY+KCkubnVtYmVyX3Vuc2lnbmVkKHN0ZDo6ZGVj bHZhbDxVbnNpZ25lZD4oKSkpOworLQorLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZs b2F0LCB0eXBlbmFtZSBTdHJpbmc+CistdXNpbmcgbnVtYmVyX2Zsb2F0X2Z1bmN0aW9uX3QgPSBk ZWNsdHlwZShzdGQ6OmRlY2x2YWw8VCY+KCkubnVtYmVyX2Zsb2F0KAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6ZGVjbHZhbDxGbG9hdD4oKSwgc3RkOjpkZWNsdmFs PGNvbnN0IFN0cmluZyY+KCkpKTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBT dHJpbmc+CistdXNpbmcgc3RyaW5nX2Z1bmN0aW9uX3QgPQorLSAgICBkZWNsdHlwZShzdGQ6OmRl Y2x2YWw8VCY+KCkuc3RyaW5nKHN0ZDo6ZGVjbHZhbDxTdHJpbmcmPigpKSk7CistCistdGVtcGxh dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQmluYXJ5PgorLXVzaW5nIGJpbmFyeV9mdW5jdGlvbl90 ID0KKy0gICAgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFQmPigpLmJpbmFyeShzdGQ6OmRlY2x2YWw8 QmluYXJ5Jj4oKSkpOworLQorLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CistdXNpbmcgc3RhcnRfb2Jq ZWN0X2Z1bmN0aW9uX3QgPQorLSAgICBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VCY+KCkuc3RhcnRf b2JqZWN0KHN0ZDo6ZGVjbHZhbDxzdGQ6OnNpemVfdD4oKSkpOworLQorLXRlbXBsYXRlPHR5cGVu YW1lIFQsIHR5cGVuYW1lIFN0cmluZz4KKy11c2luZyBrZXlfZnVuY3Rpb25fdCA9CistICAgIGRl Y2x0eXBlKHN0ZDo6ZGVjbHZhbDxUJj4oKS5rZXkoc3RkOjpkZWNsdmFsPFN0cmluZyY+KCkpKTsK Ky0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLXVzaW5nIGVuZF9vYmplY3RfZnVuY3Rpb25fdCA9 IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxUJj4oKS5lbmRfb2JqZWN0KCkpOworLQorLXRlbXBsYXRl PHR5cGVuYW1lIFQ+CistdXNpbmcgc3RhcnRfYXJyYXlfZnVuY3Rpb25fdCA9CistICAgIGRlY2x0 eXBlKHN0ZDo6ZGVjbHZhbDxUJj4oKS5zdGFydF9hcnJheShzdGQ6OmRlY2x2YWw8c3RkOjpzaXpl X3Q+KCkpKTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLXVzaW5nIGVuZF9hcnJheV9mdW5j dGlvbl90ID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFQmPigpLmVuZF9hcnJheSgpKTsKKy0KKy10 ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb24+CistdXNpbmcgcGFyc2VfZXJy b3JfZnVuY3Rpb25fdCA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxUJj4oKS5wYXJzZV9lcnJvcigK Ky0gICAgICAgIHN0ZDo6ZGVjbHZhbDxzdGQ6OnNpemVfdD4oKSwgc3RkOjpkZWNsdmFsPGNvbnN0 IHN0ZDo6c3RyaW5nJj4oKSwKKy0gICAgICAgIHN0ZDo6ZGVjbHZhbDxjb25zdCBFeGNlcHRpb24m PigpKSk7CistCistdGVtcGxhdGU8dHlwZW5hbWUgU0FYLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBl PgorLXN0cnVjdCBpc19zYXgKKy17CistICBwcml2YXRlOgorLSAgICBzdGF0aWNfYXNzZXJ0KGlz X2Jhc2ljX2pzb248QmFzaWNKc29uVHlwZT46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICJC YXNpY0pzb25UeXBlIG11c3QgYmUgb2YgdHlwZSBiYXNpY19qc29uPC4uLj4iKTsKKy0KKy0gICAg dXNpbmcgbnVtYmVyX2ludGVnZXJfdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9p bnRlZ2VyX3Q7CistICAgIHVzaW5nIG51bWJlcl91bnNpZ25lZF90ID0gdHlwZW5hbWUgQmFzaWNK c29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVkX3Q7CistICAgIHVzaW5nIG51bWJlcl9mbG9hdF90ID0g dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2Zsb2F0X3Q7CistICAgIHVzaW5nIHN0cmlu Z190ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3Q7CistICAgIHVzaW5nIGJpbmFy eV90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6YmluYXJ5X3Q7CistICAgIHVzaW5nIGV4Y2Vw dGlvbl90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6ZXhjZXB0aW9uOworLQorLSAgcHVibGlj OgorLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQorLSAgICAgICAgaXNfZGV0ZWN0 ZWRfZXhhY3Q8Ym9vbCwgbnVsbF9mdW5jdGlvbl90LCBTQVg+Ojp2YWx1ZSAmJgorLSAgICAgICAg aXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwgYm9vbGVhbl9mdW5jdGlvbl90LCBTQVg+Ojp2YWx1ZSAm JgorLSAgICAgICAgaXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwgbnVtYmVyX2ludGVnZXJfZnVuY3Rp b25fdCwgU0FYLCBudW1iZXJfaW50ZWdlcl90Pjo6dmFsdWUgJiYKKy0gICAgICAgIGlzX2RldGVj dGVkX2V4YWN0PGJvb2wsIG51bWJlcl91bnNpZ25lZF9mdW5jdGlvbl90LCBTQVgsIG51bWJlcl91 bnNpZ25lZF90Pjo6dmFsdWUgJiYKKy0gICAgICAgIGlzX2RldGVjdGVkX2V4YWN0PGJvb2wsIG51 bWJlcl9mbG9hdF9mdW5jdGlvbl90LCBTQVgsIG51bWJlcl9mbG9hdF90LCBzdHJpbmdfdD46OnZh bHVlICYmCistICAgICAgICBpc19kZXRlY3RlZF9leGFjdDxib29sLCBzdHJpbmdfZnVuY3Rpb25f dCwgU0FYLCBzdHJpbmdfdD46OnZhbHVlICYmCistICAgICAgICBpc19kZXRlY3RlZF9leGFjdDxi b29sLCBiaW5hcnlfZnVuY3Rpb25fdCwgU0FYLCBiaW5hcnlfdD46OnZhbHVlICYmCistICAgICAg ICBpc19kZXRlY3RlZF9leGFjdDxib29sLCBzdGFydF9vYmplY3RfZnVuY3Rpb25fdCwgU0FYPjo6 dmFsdWUgJiYKKy0gICAgICAgIGlzX2RldGVjdGVkX2V4YWN0PGJvb2wsIGtleV9mdW5jdGlvbl90 LCBTQVgsIHN0cmluZ190Pjo6dmFsdWUgJiYKKy0gICAgICAgIGlzX2RldGVjdGVkX2V4YWN0PGJv b2wsIGVuZF9vYmplY3RfZnVuY3Rpb25fdCwgU0FYPjo6dmFsdWUgJiYKKy0gICAgICAgIGlzX2Rl dGVjdGVkX2V4YWN0PGJvb2wsIHN0YXJ0X2FycmF5X2Z1bmN0aW9uX3QsIFNBWD46OnZhbHVlICYm CistICAgICAgICBpc19kZXRlY3RlZF9leGFjdDxib29sLCBlbmRfYXJyYXlfZnVuY3Rpb25fdCwg U0FYPjo6dmFsdWUgJiYKKy0gICAgICAgIGlzX2RldGVjdGVkX2V4YWN0PGJvb2wsIHBhcnNlX2Vy cm9yX2Z1bmN0aW9uX3QsIFNBWCwgZXhjZXB0aW9uX3Q+Ojp2YWx1ZTsKKy19OworLQorLXRlbXBs YXRlPHR5cGVuYW1lIFNBWCwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy1zdHJ1Y3QgaXNfc2F4 X3N0YXRpY19hc3NlcnRzCisteworLSAgcHJpdmF0ZToKKy0gICAgc3RhdGljX2Fzc2VydChpc19i YXNpY19qc29uPEJhc2ljSnNvblR5cGU+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAiQmFz aWNKc29uVHlwZSBtdXN0IGJlIG9mIHR5cGUgYmFzaWNfanNvbjwuLi4+Iik7CistCistICAgIHVz aW5nIG51bWJlcl9pbnRlZ2VyX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfaW50 ZWdlcl90OworLSAgICB1c2luZyBudW1iZXJfdW5zaWduZWRfdCA9IHR5cGVuYW1lIEJhc2ljSnNv blR5cGU6Om51bWJlcl91bnNpZ25lZF90OworLSAgICB1c2luZyBudW1iZXJfZmxvYXRfdCA9IHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9mbG9hdF90OworLSAgICB1c2luZyBzdHJpbmdf dCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190OworLSAgICB1c2luZyBiaW5hcnlf dCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmJpbmFyeV90OworLSAgICB1c2luZyBleGNlcHRp b25fdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmV4Y2VwdGlvbjsKKy0KKy0gIHB1YmxpYzoK Ky0gICAgc3RhdGljX2Fzc2VydChpc19kZXRlY3RlZF9leGFjdDxib29sLCBudWxsX2Z1bmN0aW9u X3QsIFNBWD46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICJNaXNzaW5nL2ludmFsaWQgZnVu Y3Rpb246IGJvb2wgbnVsbCgpIik7CistICAgIHN0YXRpY19hc3NlcnQoaXNfZGV0ZWN0ZWRfZXhh Y3Q8Ym9vbCwgYm9vbGVhbl9mdW5jdGlvbl90LCBTQVg+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAg ICAgICAiTWlzc2luZy9pbnZhbGlkIGZ1bmN0aW9uOiBib29sIGJvb2xlYW4oYm9vbCkiKTsKKy0g ICAgc3RhdGljX2Fzc2VydChpc19kZXRlY3RlZF9leGFjdDxib29sLCBib29sZWFuX2Z1bmN0aW9u X3QsIFNBWD46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICJNaXNzaW5nL2ludmFsaWQgZnVu Y3Rpb246IGJvb2wgYm9vbGVhbihib29sKSIpOworLSAgICBzdGF0aWNfYXNzZXJ0KAorLSAgICAg ICAgaXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwgbnVtYmVyX2ludGVnZXJfZnVuY3Rpb25fdCwgU0FY LAorLSAgICAgICAgbnVtYmVyX2ludGVnZXJfdD46OnZhbHVlLAorLSAgICAgICAgIk1pc3Npbmcv aW52YWxpZCBmdW5jdGlvbjogYm9vbCBudW1iZXJfaW50ZWdlcihudW1iZXJfaW50ZWdlcl90KSIp OworLSAgICBzdGF0aWNfYXNzZXJ0KAorLSAgICAgICAgaXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwg bnVtYmVyX3Vuc2lnbmVkX2Z1bmN0aW9uX3QsIFNBWCwKKy0gICAgICAgIG51bWJlcl91bnNpZ25l ZF90Pjo6dmFsdWUsCistICAgICAgICAiTWlzc2luZy9pbnZhbGlkIGZ1bmN0aW9uOiBib29sIG51 bWJlcl91bnNpZ25lZChudW1iZXJfdW5zaWduZWRfdCkiKTsKKy0gICAgc3RhdGljX2Fzc2VydChp c19kZXRlY3RlZF9leGFjdDxib29sLCBudW1iZXJfZmxvYXRfZnVuY3Rpb25fdCwgU0FYLAorLSAg ICAgICAgICAgICAgICAgIG51bWJlcl9mbG9hdF90LCBzdHJpbmdfdD46OnZhbHVlLAorLSAgICAg ICAgICAgICAgICAgICJNaXNzaW5nL2ludmFsaWQgZnVuY3Rpb246IGJvb2wgbnVtYmVyX2Zsb2F0 KG51bWJlcl9mbG9hdF90LCBjb25zdCBzdHJpbmdfdCYpIik7CistICAgIHN0YXRpY19hc3NlcnQo CistICAgICAgICBpc19kZXRlY3RlZF9leGFjdDxib29sLCBzdHJpbmdfZnVuY3Rpb25fdCwgU0FY LCBzdHJpbmdfdD46OnZhbHVlLAorLSAgICAgICAgIk1pc3NpbmcvaW52YWxpZCBmdW5jdGlvbjog Ym9vbCBzdHJpbmcoc3RyaW5nX3QmKSIpOworLSAgICBzdGF0aWNfYXNzZXJ0KAorLSAgICAgICAg aXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwgYmluYXJ5X2Z1bmN0aW9uX3QsIFNBWCwgYmluYXJ5X3Q+ Ojp2YWx1ZSwKKy0gICAgICAgICJNaXNzaW5nL2ludmFsaWQgZnVuY3Rpb246IGJvb2wgYmluYXJ5 KGJpbmFyeV90JikiKTsKKy0gICAgc3RhdGljX2Fzc2VydChpc19kZXRlY3RlZF9leGFjdDxib29s LCBzdGFydF9vYmplY3RfZnVuY3Rpb25fdCwgU0FYPjo6dmFsdWUsCistICAgICAgICAgICAgICAg ICAgIk1pc3NpbmcvaW52YWxpZCBmdW5jdGlvbjogYm9vbCBzdGFydF9vYmplY3Qoc3RkOjpzaXpl X3QpIik7CistICAgIHN0YXRpY19hc3NlcnQoaXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwga2V5X2Z1 bmN0aW9uX3QsIFNBWCwgc3RyaW5nX3Q+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAiTWlz c2luZy9pbnZhbGlkIGZ1bmN0aW9uOiBib29sIGtleShzdHJpbmdfdCYpIik7CistICAgIHN0YXRp Y19hc3NlcnQoaXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwgZW5kX29iamVjdF9mdW5jdGlvbl90LCBT QVg+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAiTWlzc2luZy9pbnZhbGlkIGZ1bmN0aW9u OiBib29sIGVuZF9vYmplY3QoKSIpOworLSAgICBzdGF0aWNfYXNzZXJ0KGlzX2RldGVjdGVkX2V4 YWN0PGJvb2wsIHN0YXJ0X2FycmF5X2Z1bmN0aW9uX3QsIFNBWD46OnZhbHVlLAorLSAgICAgICAg ICAgICAgICAgICJNaXNzaW5nL2ludmFsaWQgZnVuY3Rpb246IGJvb2wgc3RhcnRfYXJyYXkoc3Rk OjpzaXplX3QpIik7CistICAgIHN0YXRpY19hc3NlcnQoaXNfZGV0ZWN0ZWRfZXhhY3Q8Ym9vbCwg ZW5kX2FycmF5X2Z1bmN0aW9uX3QsIFNBWD46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICJN aXNzaW5nL2ludmFsaWQgZnVuY3Rpb246IGJvb2wgZW5kX2FycmF5KCkiKTsKKy0gICAgc3RhdGlj X2Fzc2VydCgKKy0gICAgICAgIGlzX2RldGVjdGVkX2V4YWN0PGJvb2wsIHBhcnNlX2Vycm9yX2Z1 bmN0aW9uX3QsIFNBWCwgZXhjZXB0aW9uX3Q+Ojp2YWx1ZSwKKy0gICAgICAgICJNaXNzaW5nL2lu dmFsaWQgZnVuY3Rpb246IGJvb2wgcGFyc2VfZXJyb3Ioc3RkOjpzaXplX3QsIGNvbnN0ICIKKy0g ICAgICAgICJzdGQ6OnN0cmluZyYsIGNvbnN0IGV4Y2VwdGlvbiYpIik7CistfTsKKy19ICAvLyBu YW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCistCistLy8gI2luY2x1 ZGUgPG5sb2htYW5uL2RldGFpbC9tZXRhL3R5cGVfdHJhaXRzLmhwcD4KKy0KKy0vLyAjaW5jbHVk ZSA8bmxvaG1hbm4vZGV0YWlsL3ZhbHVlX3QuaHBwPgorLQorLQorLW5hbWVzcGFjZSBubG9obWFu bgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCisteworLQorLS8vLyBob3cgdG8gdHJlYXQgQ0JPUiB0 YWdzCistZW51bSBjbGFzcyBjYm9yX3RhZ19oYW5kbGVyX3QKKy17CistICAgIGVycm9yLCAgIC8v LzwgdGhyb3cgYSBwYXJzZV9lcnJvciBleGNlcHRpb24gaW4gY2FzZSBvZiBhIHRhZworLSAgICBp Z25vcmUsICAvLy88IGlnbm9yZSB0YWdzCistICAgIHN0b3JlICAgIC8vLzwgc3RvcmUgdGFncyBh cyBiaW5hcnkgdHlwZQorLX07CistCistLyohCistQGJyaWVmIGRldGVybWluZSBzeXN0ZW0gYnl0 ZSBvcmRlcgorLQorLUByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiBzeXN0ZW0ncyBieXRlIG9y ZGVyIGlzIGxpdHRsZSBlbmRpYW4KKy0KKy1Abm90ZSBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxv dy5jb20vYS8xMDAxMzI4LzI2NjM3OAorLSovCistc3RhdGljIGlubGluZSBib29sIGxpdHRsZV9l bmRpYW5uZXNzKGludCBudW0gPSAxKSBub2V4Y2VwdAorLXsKKy0gICAgcmV0dXJuICpyZWludGVy cHJldF9jYXN0PGNoYXIqPigmbnVtKSA9PSAxOworLX0KKy0KKy0KKy0vLy8vLy8vLy8vLy8vLy8v Ly8vCistLy8gYmluYXJ5IHJlYWRlciAvLworLS8vLy8vLy8vLy8vLy8vLy8vLy8KKy0KKy0vKiEK Ky1AYnJpZWYgZGVzZXJpYWxpemF0aW9uIG9mIENCT1IsIE1lc3NhZ2VQYWNrLCBhbmQgVUJKU09O IHZhbHVlcworLSovCistdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUg SW5wdXRBZGFwdGVyVHlwZSwgdHlwZW5hbWUgU0FYID0ganNvbl9zYXhfZG9tX3BhcnNlcjxCYXNp Y0pzb25UeXBlPj4KKy1jbGFzcyBiaW5hcnlfcmVhZGVyCisteworLSAgICB1c2luZyBudW1iZXJf aW50ZWdlcl90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2ludGVnZXJfdDsKKy0g ICAgdXNpbmcgbnVtYmVyX3Vuc2lnbmVkX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1i ZXJfdW5zaWduZWRfdDsKKy0gICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3QgPSB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpudW1iZXJfZmxvYXRfdDsKKy0gICAgdXNpbmcgc3RyaW5nX3QgPSB0eXBlbmFt ZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdfdDsKKy0gICAgdXNpbmcgYmluYXJ5X3QgPSB0eXBlbmFt ZSBCYXNpY0pzb25UeXBlOjpiaW5hcnlfdDsKKy0gICAgdXNpbmcganNvbl9zYXhfdCA9IFNBWDsK Ky0gICAgdXNpbmcgY2hhcl90eXBlID0gdHlwZW5hbWUgSW5wdXRBZGFwdGVyVHlwZTo6Y2hhcl90 eXBlOworLSAgICB1c2luZyBjaGFyX2ludF90eXBlID0gdHlwZW5hbWUgc3RkOjpjaGFyX3RyYWl0 czxjaGFyX3R5cGU+OjppbnRfdHlwZTsKKy0KKy0gIHB1YmxpYzoKKy0gICAgLyohCistICAgIEBi cmllZiBjcmVhdGUgYSBiaW5hcnkgcmVhZGVyCistCistICAgIEBwYXJhbVtpbl0gYWRhcHRlciAg aW5wdXQgYWRhcHRlciB0byByZWFkIGZyb20KKy0gICAgKi8KKy0gICAgZXhwbGljaXQgYmluYXJ5 X3JlYWRlcihJbnB1dEFkYXB0ZXJUeXBlJiYgYWRhcHRlcikgbm9leGNlcHQgOiBpYShzdGQ6Om1v dmUoYWRhcHRlcikpCistICAgIHsKKy0gICAgICAgICh2b2lkKWRldGFpbDo6aXNfc2F4X3N0YXRp Y19hc3NlcnRzPFNBWCwgQmFzaWNKc29uVHlwZT4ge307CistICAgIH0KKy0KKy0gICAgLy8gbWFr ZSBjbGFzcyBtb3ZlLW9ubHkKKy0gICAgYmluYXJ5X3JlYWRlcihjb25zdCBiaW5hcnlfcmVhZGVy JikgPSBkZWxldGU7CistICAgIGJpbmFyeV9yZWFkZXIoYmluYXJ5X3JlYWRlciYmKSA9IGRlZmF1 bHQ7IC8vIE5PTElOVChoaWNwcC1ub2V4Y2VwdC1tb3ZlLHBlcmZvcm1hbmNlLW5vZXhjZXB0LW1v dmUtY29uc3RydWN0b3IpCistICAgIGJpbmFyeV9yZWFkZXImIG9wZXJhdG9yPShjb25zdCBiaW5h cnlfcmVhZGVyJikgPSBkZWxldGU7CistICAgIGJpbmFyeV9yZWFkZXImIG9wZXJhdG9yPShiaW5h cnlfcmVhZGVyJiYpID0gZGVmYXVsdDsgLy8gTk9MSU5UKGhpY3BwLW5vZXhjZXB0LW1vdmUscGVy Zm9ybWFuY2Utbm9leGNlcHQtbW92ZS1jb25zdHJ1Y3RvcikKKy0gICAgfmJpbmFyeV9yZWFkZXIo KSA9IGRlZmF1bHQ7CistCistICAgIC8qIQorLSAgICBAcGFyYW1baW5dIGZvcm1hdCAgdGhlIGJp bmFyeSBmb3JtYXQgdG8gcGFyc2UKKy0gICAgQHBhcmFtW2luXSBzYXhfICAgIGEgU0FYIGV2ZW50 IHByb2Nlc3NvcgorLSAgICBAcGFyYW1baW5dIHN0cmljdCAgd2hldGhlciB0byBleHBlY3QgdGhl IGlucHV0IHRvIGJlIGNvbnN1bWVkIGNvbXBsZXRlZAorLSAgICBAcGFyYW1baW5dIHRhZ19oYW5k bGVyICBob3cgdG8gdHJlYXQgQ0JPUiB0YWdzCistCistICAgIEByZXR1cm4gd2hldGhlciBwYXJz aW5nIHdhcyBzdWNjZXNzZnVsCistICAgICovCistICAgIEpTT05fSEVETEVZX05PTl9OVUxMKDMp CistICAgIGJvb2wgc2F4X3BhcnNlKGNvbnN0IGlucHV0X2Zvcm1hdF90IGZvcm1hdCwKKy0gICAg ICAgICAgICAgICAgICAganNvbl9zYXhfdCogc2F4XywKKy0gICAgICAgICAgICAgICAgICAgY29u c3QgYm9vbCBzdHJpY3QgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBjYm9yX3Rh Z19oYW5kbGVyX3QgdGFnX2hhbmRsZXIgPSBjYm9yX3RhZ19oYW5kbGVyX3Q6OmVycm9yKQorLSAg ICB7CistICAgICAgICBzYXggPSBzYXhfOworLSAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK Ky0KKy0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNh c2UgaW5wdXRfZm9ybWF0X3Q6OmJzb246CistICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNl X2Jzb25faW50ZXJuYWwoKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistCistICAgICAgICAg ICAgY2FzZSBpbnB1dF9mb3JtYXRfdDo6Y2JvcjoKKy0gICAgICAgICAgICAgICAgcmVzdWx0ID0g cGFyc2VfY2Jvcl9pbnRlcm5hbCh0cnVlLCB0YWdfaGFuZGxlcik7CistICAgICAgICAgICAgICAg IGJyZWFrOworLQorLSAgICAgICAgICAgIGNhc2UgaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2s6Cist ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlX21zZ3BhY2tfaW50ZXJuYWwoKTsKKy0gICAg ICAgICAgICAgICAgYnJlYWs7CistCistICAgICAgICAgICAgY2FzZSBpbnB1dF9mb3JtYXRfdDo6 dWJqc29uOgorLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZV91Ympzb25faW50ZXJuYWwo KTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistCistICAgICAgICAgICAgY2FzZSBpbnB1dF9m b3JtYXRfdDo6anNvbjogLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICBkZWZhdWx0OiAg ICAgICAgICAgIC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgIEpTT05fQVNTRVJU KGZhbHNlKTsgLy8gTk9MSU5UKGNlcnQtZGNsMDMtYyxoaWNwcC1zdGF0aWMtYXNzZXJ0LG1pc2Mt c3RhdGljLWFzc2VydCkgTENPVl9FWENMX0xJTkUKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8v IHN0cmljdCBtb2RlOiBuZXh0IGJ5dGUgbXVzdCBiZSBFT0YKKy0gICAgICAgIGlmIChyZXN1bHQg JiYgc3RyaWN0KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gaW5wdXRf Zm9ybWF0X3Q6OnVianNvbikKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGdldF9p Z25vcmVfbm9vcCgpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBlbHNlCistICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICBnZXQoKTsKKy0gICAgICAgICAgICB9CistCistICAg ICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKGN1cnJlbnQgIT0gc3RkOjpjaGFyX3Ry YWl0czxjaGFyX3R5cGU+Ojplb2YoKSkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICByZXR1cm4gc2F4LT5wYXJzZV9lcnJvcihjaGFyc19yZWFkLCBnZXRfdG9rZW5fc3RyaW5nKCks CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2Vycm9yOjpj cmVhdGUoMTEwLCBjaGFyc19yZWFkLCBleGNlcHRpb25fbWVzc2FnZShmb3JtYXQsICJleHBlY3Rl ZCBlbmQgb2YgaW5wdXQ7IGxhc3QgYnl0ZTogMHgiICsgZ2V0X3Rva2VuX3N0cmluZygpLCAidmFs dWUiKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLQor LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0gICAgLy8v Ly8vLy8vLworLSAgICAvLyBCU09OIC8vCistICAgIC8vLy8vLy8vLy8KKy0KKy0gICAgLyohCist ICAgIEBicmllZiBSZWFkcyBpbiBhIEJTT04tb2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gdGhlIFNB WC1wYXJzZXIuCistICAgIEByZXR1cm4gd2hldGhlciBhIHZhbGlkIEJTT04tdmFsdWUgd2FzIHBh c3NlZCB0byB0aGUgU0FYIHBhcnNlcgorLSAgICAqLworLSAgICBib29sIHBhcnNlX2Jzb25faW50 ZXJuYWwoKQorLSAgICB7CistICAgICAgICBzdGQ6OmludDMyX3QgZG9jdW1lbnRfc2l6ZXt9Owor LSAgICAgICAgZ2V0X251bWJlcjxzdGQ6OmludDMyX3QsIHRydWU+KGlucHV0X2Zvcm1hdF90Ojpi c29uLCBkb2N1bWVudF9zaXplKTsKKy0KKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VM WSghc2F4LT5zdGFydF9vYmplY3Qoc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSkpKQorLSAg ICAgICAgeworLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgIH0KKy0KKy0gICAg ICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghcGFyc2VfYnNvbl9lbGVtZW50X2xpc3QoLypp c19hcnJheSovZmFsc2UpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gZmFsc2U7 CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4gc2F4LT5lbmRfb2JqZWN0KCk7CistICAg IH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBQYXJzZXMgYSBDLXN0eWxlIHN0cmluZyBmcm9t IHRoZSBCU09OIGlucHV0LgorLSAgICBAcGFyYW1baW4sb3V0XSByZXN1bHQgIEEgcmVmZXJlbmNl IHRvIHRoZSBzdHJpbmcgdmFyaWFibGUgd2hlcmUgdGhlIHJlYWQKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RyaW5nIGlzIHRvIGJlIHN0b3JlZC4KKy0gICAgQHJldHVybiBgdHJ1ZWAg aWYgdGhlIFx4MDAtYnl0ZSBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3YXMKKy0g ICAgICAgICAgICAgZW5jb3VudGVyZWQgYmVmb3JlIHRoZSBFT0Y7IGZhbHNlYCBpbmRpY2F0ZXMg YW4gdW5leHBlY3RlZCBFT0YuCistICAgICovCistICAgIGJvb2wgZ2V0X2Jzb25fY3N0cihzdHJp bmdfdCYgcmVzdWx0KQorLSAgICB7CistICAgICAgICBhdXRvIG91dCA9IHN0ZDo6YmFja19pbnNl cnRlcihyZXN1bHQpOworLSAgICAgICAgd2hpbGUgKHRydWUpCistICAgICAgICB7CistICAgICAg ICAgICAgZ2V0KCk7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCF1bmV4 cGVjdF9lb2YoaW5wdXRfZm9ybWF0X3Q6OmJzb24sICJjc3RyaW5nIikpKQorLSAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICBpZiAoY3VycmVudCA9PSAweDAwKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpvdXQrKyA9 IHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPihjdXJyZW50KTsKKy0g ICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIFBhcnNlcyBhIHplcm8t dGVybWluYXRlZCBzdHJpbmcgb2YgbGVuZ3RoIEBhIGxlbiBmcm9tIHRoZSBCU09OCistICAgICAg ICAgICBpbnB1dC4KKy0gICAgQHBhcmFtW2luXSBsZW4gIFRoZSBsZW5ndGggKGluY2x1ZGluZyB0 aGUgemVyby1ieXRlIGF0IHRoZSBlbmQpIG9mIHRoZQorLSAgICAgICAgICAgICAgICAgICAgc3Ry aW5nIHRvIGJlIHJlYWQuCistICAgIEBwYXJhbVtpbixvdXRdIHJlc3VsdCAgQSByZWZlcmVuY2Ug dG8gdGhlIHN0cmluZyB2YXJpYWJsZSB3aGVyZSB0aGUgcmVhZAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJpbmcgaXMgdG8gYmUgc3RvcmVkLgorLSAgICBAdHBhcmFtIE51bWJlclR5 cGUgVGhlIHR5cGUgb2YgdGhlIGxlbmd0aCBAYSBsZW4KKy0gICAgQHByZSBsZW4gPj0gMQorLSAg ICBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkCist ICAgICovCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclR5cGU+CistICAgIGJvb2wgZ2V0 X2Jzb25fc3RyaW5nKGNvbnN0IE51bWJlclR5cGUgbGVuLCBzdHJpbmdfdCYgcmVzdWx0KQorLSAg ICB7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkobGVuIDwgMSkpCistICAgICAg ICB7CistICAgICAgICAgICAgYXV0byBsYXN0X3Rva2VuID0gZ2V0X3Rva2VuX3N0cmluZygpOwor LSAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsIGxhc3RfdG9r ZW4sIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTEyLCBjaGFyc19yZWFkLCBleGNlcHRpb25fbWVzc2Fn ZShpbnB1dF9mb3JtYXRfdDo6YnNvbiwgInN0cmluZyBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAx LCBpcyAiICsgc3RkOjp0b19zdHJpbmcobGVuKSwgInN0cmluZyIpLCBCYXNpY0pzb25UeXBlKCkp KTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiBnZXRfc3RyaW5nKGlucHV0X2Zvcm1h dF90Ojpic29uLCBsZW4gLSBzdGF0aWNfY2FzdDxOdW1iZXJUeXBlPigxKSwgcmVzdWx0KSAmJiBn ZXQoKSAhPSBzdGQ6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmVvZigpOworLSAgICB9CistCist ICAgIC8qIQorLSAgICBAYnJpZWYgUGFyc2VzIGEgYnl0ZSBhcnJheSBpbnB1dCBvZiBsZW5ndGgg QGEgbGVuIGZyb20gdGhlIEJTT04gaW5wdXQuCistICAgIEBwYXJhbVtpbl0gbGVuICBUaGUgbGVu Z3RoIG9mIHRoZSBieXRlIGFycmF5IHRvIGJlIHJlYWQuCistICAgIEBwYXJhbVtpbixvdXRdIHJl c3VsdCAgQSByZWZlcmVuY2UgdG8gdGhlIGJpbmFyeSB2YXJpYWJsZSB3aGVyZSB0aGUgcmVhZAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpcyB0byBiZSBzdG9yZWQuCistICAg IEB0cGFyYW0gTnVtYmVyVHlwZSBUaGUgdHlwZSBvZiB0aGUgbGVuZ3RoIEBhIGxlbgorLSAgICBA cHJlIGxlbiA+PSAwCistICAgIEByZXR1cm4gYHRydWVgIGlmIHRoZSBieXRlIGFycmF5IHdhcyBz dWNjZXNzZnVsbHkgcGFyc2VkCistICAgICovCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIE51bWJl clR5cGU+CistICAgIGJvb2wgZ2V0X2Jzb25fYmluYXJ5KGNvbnN0IE51bWJlclR5cGUgbGVuLCBi aW5hcnlfdCYgcmVzdWx0KQorLSAgICB7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtF TFkobGVuIDwgMCkpCistICAgICAgICB7CistICAgICAgICAgICAgYXV0byBsYXN0X3Rva2VuID0g Z2V0X3Rva2VuX3N0cmluZygpOworLSAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9y KGNoYXJzX3JlYWQsIGxhc3RfdG9rZW4sIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTEyLCBjaGFyc19y ZWFkLCBleGNlcHRpb25fbWVzc2FnZShpbnB1dF9mb3JtYXRfdDo6YnNvbiwgImJ5dGUgYXJyYXkg bGVuZ3RoIGNhbm5vdCBiZSBuZWdhdGl2ZSwgaXMgIiArIHN0ZDo6dG9fc3RyaW5nKGxlbiksICJi aW5hcnkiKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICB9CistCistICAgICAgICAvLyBB bGwgQlNPTiBiaW5hcnkgdmFsdWVzIGhhdmUgYSBzdWJ0eXBlCistICAgICAgICBzdGQ6OnVpbnQ4 X3Qgc3VidHlwZXt9OworLSAgICAgICAgZ2V0X251bWJlcjxzdGQ6OnVpbnQ4X3Q+KGlucHV0X2Zv cm1hdF90Ojpic29uLCBzdWJ0eXBlKTsKKy0gICAgICAgIHJlc3VsdC5zZXRfc3VidHlwZShzdWJ0 eXBlKTsKKy0KKy0gICAgICAgIHJldHVybiBnZXRfYmluYXJ5KGlucHV0X2Zvcm1hdF90Ojpic29u LCBsZW4sIHJlc3VsdCk7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBSZWFkIGEg QlNPTiBkb2N1bWVudCBlbGVtZW50IG9mIHRoZSBnaXZlbiBAYSBlbGVtZW50X3R5cGUuCistICAg IEBwYXJhbVtpbl0gZWxlbWVudF90eXBlIFRoZSBCU09OIGVsZW1lbnQgdHlwZSwgYy5mLiBodHRw Oi8vYnNvbnNwZWMub3JnL3NwZWMuaHRtbAorLSAgICBAcGFyYW1baW5dIGVsZW1lbnRfdHlwZV9w YXJzZV9wb3NpdGlvbiBUaGUgcG9zaXRpb24gaW4gdGhlIGlucHV0IHN0cmVhbSwKKy0gICAgICAg ICAgICAgICB3aGVyZSB0aGUgYGVsZW1lbnRfdHlwZWAgd2FzIHJlYWQuCistICAgIEB3YXJuaW5n IE5vdCBhbGwgQlNPTiBlbGVtZW50IHR5cGVzIGFyZSBzdXBwb3J0ZWQgeWV0LiBBbiB1bnN1cHBv cnRlZAorLSAgICAgICAgICAgICBAYSBlbGVtZW50X3R5cGUgd2lsbCBnaXZlIHJpc2UgdG8gYSBw YXJzZV9lcnJvci4xMTQ6CistICAgICAgICAgICAgIFVuc3VwcG9ydGVkIEJTT04gcmVjb3JkIHR5 cGUgMHguLi4KKy0gICAgQHJldHVybiB3aGV0aGVyIGEgdmFsaWQgQlNPTi1vYmplY3QvYXJyYXkg d2FzIHBhc3NlZCB0byB0aGUgU0FYIHBhcnNlcgorLSAgICAqLworLSAgICBib29sIHBhcnNlX2Jz b25fZWxlbWVudF9pbnRlcm5hbChjb25zdCBjaGFyX2ludF90eXBlIGVsZW1lbnRfdHlwZSwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgZWxl bWVudF90eXBlX3BhcnNlX3Bvc2l0aW9uKQorLSAgICB7CistICAgICAgICBzd2l0Y2ggKGVsZW1l bnRfdHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIDB4MDE6IC8vIGRvdWJsZQor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgZG91YmxlIG51bWJlcnt9OworLSAgICAg ICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcjxkb3VibGUsIHRydWU+KGlucHV0X2Zvcm1hdF90 Ojpic29uLCBudW1iZXIpICYmIHNheC0+bnVtYmVyX2Zsb2F0KHN0YXRpY19jYXN0PG51bWJlcl9m bG9hdF90PihudW1iZXIpLCAiIik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNh c2UgMHgwMjogLy8gc3RyaW5nCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6 OmludDMyX3QgbGVue307CistICAgICAgICAgICAgICAgIHN0cmluZ190IHZhbHVlOworLSAgICAg ICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcjxzdGQ6OmludDMyX3QsIHRydWU+KGlucHV0X2Zv cm1hdF90Ojpic29uLCBsZW4pICYmIGdldF9ic29uX3N0cmluZyhsZW4sIHZhbHVlKSAmJiBzYXgt PnN0cmluZyh2YWx1ZSk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHgw MzogLy8gb2JqZWN0CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy c2VfYnNvbl9pbnRlcm5hbCgpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl IDB4MDQ6IC8vIGFycmF5CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4g cGFyc2VfYnNvbl9hcnJheSgpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl IDB4MDU6IC8vIGJpbmFyeQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjpp bnQzMl90IGxlbnt9OworLSAgICAgICAgICAgICAgICBiaW5hcnlfdCB2YWx1ZTsKKy0gICAgICAg ICAgICAgICAgcmV0dXJuIGdldF9udW1iZXI8c3RkOjppbnQzMl90LCB0cnVlPihpbnB1dF9mb3Jt YXRfdDo6YnNvbiwgbGVuKSAmJiBnZXRfYnNvbl9iaW5hcnkobGVuLCB2YWx1ZSkgJiYgc2F4LT5i aW5hcnkodmFsdWUpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4MDg6 IC8vIGJvb2xlYW4KKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBzYXgt PmJvb2xlYW4oZ2V0KCkgIT0gMCk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNh c2UgMHgwQTogLy8gbnVsbAorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJu IHNheC0+bnVsbCgpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4MTA6 IC8vIGludDMyCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OmludDMyX3Qg dmFsdWV7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXI8c3RkOjppbnQzMl90 LCB0cnVlPihpbnB1dF9mb3JtYXRfdDo6YnNvbiwgdmFsdWUpICYmIHNheC0+bnVtYmVyX2ludGVn ZXIodmFsdWUpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4MTI6IC8v IGludDY0CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OmludDY0X3QgdmFs dWV7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXI8c3RkOjppbnQ2NF90LCB0 cnVlPihpbnB1dF9mb3JtYXRfdDo6YnNvbiwgdmFsdWUpICYmIHNheC0+bnVtYmVyX2ludGVnZXIo dmFsdWUpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBkZWZhdWx0OiAvLyBhbnl0 aGluZyBlbHNlIG5vdCBzdXBwb3J0ZWQgKHlldCkKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIHN0ZDo6YXJyYXk8Y2hhciwgMz4gY3J7e319OworLSAgICAgICAgICAgICAgICBzdGF0 aWNfY2FzdDx2b2lkPigoc3RkOjpzbnByaW50ZikoY3IuZGF0YSgpLCBjci5zaXplKCksICIlLjJo aFgiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihlbGVtZW50X3R5cGUpKSk7IC8vIE5PTElO VChjcHBjb3JlZ3VpZGVsaW5lcy1wcm8tdHlwZS12YXJhcmcsaGljcHAtdmFyYXJnKQorLSAgICAg ICAgICAgICAgICByZXR1cm4gc2F4LT5wYXJzZV9lcnJvcihlbGVtZW50X3R5cGVfcGFyc2VfcG9z aXRpb24sIHN0ZDo6c3RyaW5nKGNyLmRhdGEoKSksIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTE0LCBl bGVtZW50X3R5cGVfcGFyc2VfcG9zaXRpb24sICJVbnN1cHBvcnRlZCBCU09OIHJlY29yZCB0eXBl IDB4IiArIHN0ZDo6c3RyaW5nKGNyLmRhdGEoKSksIEJhc2ljSnNvblR5cGUoKSkpOworLSAgICAg ICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIFJl YWQgYSBCU09OIGVsZW1lbnQgbGlzdCAoYXMgc3BlY2lmaWVkIGluIHRoZSBCU09OLXNwZWMpCist CistICAgIFRoZSBzYW1lIGJpbmFyeSBsYXlvdXQgaXMgdXNlZCBmb3Igb2JqZWN0cyBhbmQgYXJy YXlzLCBoZW5jZSBpdCBtdXN0IGJlCistICAgIGluZGljYXRlZCB3aXRoIHRoZSBhcmd1bWVudCBA YSBpc19hcnJheSB3aGljaCBvbmUgaXMgZXhwZWN0ZWQKKy0gICAgKHRydWUgLS0+IGFycmF5LCBm YWxzZSAtLT4gb2JqZWN0KS4KKy0KKy0gICAgQHBhcmFtW2luXSBpc19hcnJheSBEZXRlcm1pbmVz IGlmIHRoZSBlbGVtZW50IGxpc3QgYmVpbmcgcmVhZCBpcyB0byBiZQorLSAgICAgICAgICAgICAg ICAgICAgICAgIHRyZWF0ZWQgYXMgYW4gb2JqZWN0IChAYSBpc19hcnJheSA9PSBmYWxzZSksIG9y IGFzIGFuCistICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgKEBhIGlzX2FycmF5ID09IHRy dWUpLgorLSAgICBAcmV0dXJuIHdoZXRoZXIgYSB2YWxpZCBCU09OLW9iamVjdC9hcnJheSB3YXMg cGFzc2VkIHRvIHRoZSBTQVggcGFyc2VyCistICAgICovCistICAgIGJvb2wgcGFyc2VfYnNvbl9l bGVtZW50X2xpc3QoY29uc3QgYm9vbCBpc19hcnJheSkKKy0gICAgeworLSAgICAgICAgc3RyaW5n X3Qga2V5OworLQorLSAgICAgICAgd2hpbGUgKGF1dG8gZWxlbWVudF90eXBlID0gZ2V0KCkpCist ICAgICAgICB7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCF1bmV4cGVj dF9lb2YoaW5wdXRfZm9ybWF0X3Q6OmJzb24sICJlbGVtZW50IGxpc3QiKSkpCistICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgfQorLQor LSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2l6ZV90IGVsZW1lbnRfdHlwZV9wYXJzZV9wb3NpdGlv biA9IGNoYXJzX3JlYWQ7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFn ZXRfYnNvbl9jc3RyKGtleSkpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBpZiAoIWlzX2FycmF5 ICYmICFzYXgtPmtleShrZXkpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURM RVlfVU5MSUtFTFkoIXBhcnNlX2Jzb25fZWxlbWVudF9pbnRlcm5hbChlbGVtZW50X3R5cGUsIGVs ZW1lbnRfdHlwZV9wYXJzZV9wb3NpdGlvbikpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBn ZXRfYnNvbl9jc3RyIG9ubHkgYXBwZW5kcworLSAgICAgICAgICAgIGtleS5jbGVhcigpOworLSAg ICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgLyohCist ICAgIEBicmllZiBSZWFkcyBhbiBhcnJheSBmcm9tIHRoZSBCU09OIGlucHV0IGFuZCBwYXNzZXMg aXQgdG8gdGhlIFNBWC1wYXJzZXIuCistICAgIEByZXR1cm4gd2hldGhlciBhIHZhbGlkIEJTT04t YXJyYXkgd2FzIHBhc3NlZCB0byB0aGUgU0FYIHBhcnNlcgorLSAgICAqLworLSAgICBib29sIHBh cnNlX2Jzb25fYXJyYXkoKQorLSAgICB7CistICAgICAgICBzdGQ6OmludDMyX3QgZG9jdW1lbnRf c2l6ZXt9OworLSAgICAgICAgZ2V0X251bWJlcjxzdGQ6OmludDMyX3QsIHRydWU+KGlucHV0X2Zv cm1hdF90Ojpic29uLCBkb2N1bWVudF9zaXplKTsKKy0KKy0gICAgICAgIGlmIChKU09OX0hFRExF WV9VTkxJS0VMWSghc2F4LT5zdGFydF9hcnJheShzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEp KSkpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgfQor LQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFwYXJzZV9ic29uX2VsZW1lbnRf bGlzdCgvKmlzX2FycmF5Ki90cnVlKSkpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworLSAgICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIHNheC0+ZW5kX2FycmF5KCk7 CistICAgIH0KKy0KKy0gICAgLy8vLy8vLy8vLworLSAgICAvLyBDQk9SIC8vCistICAgIC8vLy8v Ly8vLy8KKy0KKy0gICAgLyohCistICAgIEBwYXJhbVtpbl0gZ2V0X2NoYXIgIHdoZXRoZXIgYSBu ZXcgY2hhcmFjdGVyIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXQgKHRydWUpIG9yIHdoZXRoZXIgdGhlIGxhc3QgcmVhZCBjaGFyYWN0 ZXIgc2hvdWxkCistICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGNvbnNpZGVyZWQgaW5zdGVh ZCAoZmFsc2UpCistICAgIEBwYXJhbVtpbl0gdGFnX2hhbmRsZXIgaG93IENCT1IgdGFncyBzaG91 bGQgYmUgdHJlYXRlZAorLQorLSAgICBAcmV0dXJuIHdoZXRoZXIgYSB2YWxpZCBDQk9SIHZhbHVl IHdhcyBwYXNzZWQgdG8gdGhlIFNBWCBwYXJzZXIKKy0gICAgKi8KKy0gICAgYm9vbCBwYXJzZV9j Ym9yX2ludGVybmFsKGNvbnN0IGJvb2wgZ2V0X2NoYXIsCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjYm9yX3RhZ19oYW5kbGVyX3QgdGFnX2hhbmRsZXIpCistICAgIHsKKy0g ICAgICAgIHN3aXRjaCAoZ2V0X2NoYXIgPyBnZXQoKSA6IGN1cnJlbnQpCistICAgICAgICB7Cist ICAgICAgICAgICAgLy8gRU9GCistICAgICAgICAgICAgY2FzZSBzdGQ6OmNoYXJfdHJhaXRzPGNo YXJfdHlwZT46OmVvZigpOgorLSAgICAgICAgICAgICAgICByZXR1cm4gdW5leHBlY3RfZW9mKGlu cHV0X2Zvcm1hdF90OjpjYm9yLCAidmFsdWUiKTsKKy0KKy0gICAgICAgICAgICAvLyBJbnRlZ2Vy IDB4MDAuLjB4MTcgKDAuLjIzKQorLSAgICAgICAgICAgIGNhc2UgMHgwMDoKKy0gICAgICAgICAg ICBjYXNlIDB4MDE6CistICAgICAgICAgICAgY2FzZSAweDAyOgorLSAgICAgICAgICAgIGNhc2Ug MHgwMzoKKy0gICAgICAgICAgICBjYXNlIDB4MDQ6CistICAgICAgICAgICAgY2FzZSAweDA1Ogor LSAgICAgICAgICAgIGNhc2UgMHgwNjoKKy0gICAgICAgICAgICBjYXNlIDB4MDc6CistICAgICAg ICAgICAgY2FzZSAweDA4OgorLSAgICAgICAgICAgIGNhc2UgMHgwOToKKy0gICAgICAgICAgICBj YXNlIDB4MEE6CistICAgICAgICAgICAgY2FzZSAweDBCOgorLSAgICAgICAgICAgIGNhc2UgMHgw QzoKKy0gICAgICAgICAgICBjYXNlIDB4MEQ6CistICAgICAgICAgICAgY2FzZSAweDBFOgorLSAg ICAgICAgICAgIGNhc2UgMHgwRjoKKy0gICAgICAgICAgICBjYXNlIDB4MTA6CistICAgICAgICAg ICAgY2FzZSAweDExOgorLSAgICAgICAgICAgIGNhc2UgMHgxMjoKKy0gICAgICAgICAgICBjYXNl IDB4MTM6CistICAgICAgICAgICAgY2FzZSAweDE0OgorLSAgICAgICAgICAgIGNhc2UgMHgxNToK Ky0gICAgICAgICAgICBjYXNlIDB4MTY6CistICAgICAgICAgICAgY2FzZSAweDE3OgorLSAgICAg ICAgICAgICAgICByZXR1cm4gc2F4LT5udW1iZXJfdW5zaWduZWQoc3RhdGljX2Nhc3Q8bnVtYmVy X3Vuc2lnbmVkX3Q+KGN1cnJlbnQpKTsKKy0KKy0gICAgICAgICAgICBjYXNlIDB4MTg6IC8vIFVu c2lnbmVkIGludGVnZXIgKG9uZS1ieXRlIHVpbnQ4X3QgZm9sbG93cykKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDhfdCBudW1iZXJ7fTsKKy0gICAgICAgICAgICAg ICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIG51bWJlcikgJiYgc2F4 LT5udW1iZXJfdW5zaWduZWQobnVtYmVyKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAg ICAgY2FzZSAweDE5OiAvLyBVbnNpZ25lZCBpbnRlZ2VyICh0d28tYnl0ZSB1aW50MTZfdCBmb2xs b3dzKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjp1aW50MTZfdCBudW1i ZXJ7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6 OmNib3IsIG51bWJlcikgJiYgc2F4LT5udW1iZXJfdW5zaWduZWQobnVtYmVyKTsKKy0gICAgICAg ICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweDFBOiAvLyBVbnNpZ25lZCBpbnRlZ2VyIChm b3VyLWJ5dGUgdWludDMyX3QgZm9sbG93cykKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIHN0ZDo6dWludDMyX3QgbnVtYmVye307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRf bnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBudW1iZXIpICYmIHNheC0+bnVtYmVyX3Vuc2ln bmVkKG51bWJlcik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHgxQjog Ly8gVW5zaWduZWQgaW50ZWdlciAoZWlnaHQtYnl0ZSB1aW50NjRfdCBmb2xsb3dzKQorLSAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjp1aW50NjRfdCBudW1iZXJ7fTsKKy0gICAg ICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIG51bWJl cikgJiYgc2F4LT5udW1iZXJfdW5zaWduZWQobnVtYmVyKTsKKy0gICAgICAgICAgICB9CistCist ICAgICAgICAgICAgLy8gTmVnYXRpdmUgaW50ZWdlciAtMS0weDAwLi4tMS0weDE3ICgtMS4uLTI0 KQorLSAgICAgICAgICAgIGNhc2UgMHgyMDoKKy0gICAgICAgICAgICBjYXNlIDB4MjE6CistICAg ICAgICAgICAgY2FzZSAweDIyOgorLSAgICAgICAgICAgIGNhc2UgMHgyMzoKKy0gICAgICAgICAg ICBjYXNlIDB4MjQ6CistICAgICAgICAgICAgY2FzZSAweDI1OgorLSAgICAgICAgICAgIGNhc2Ug MHgyNjoKKy0gICAgICAgICAgICBjYXNlIDB4Mjc6CistICAgICAgICAgICAgY2FzZSAweDI4Ogor LSAgICAgICAgICAgIGNhc2UgMHgyOToKKy0gICAgICAgICAgICBjYXNlIDB4MkE6CistICAgICAg ICAgICAgY2FzZSAweDJCOgorLSAgICAgICAgICAgIGNhc2UgMHgyQzoKKy0gICAgICAgICAgICBj YXNlIDB4MkQ6CistICAgICAgICAgICAgY2FzZSAweDJFOgorLSAgICAgICAgICAgIGNhc2UgMHgy RjoKKy0gICAgICAgICAgICBjYXNlIDB4MzA6CistICAgICAgICAgICAgY2FzZSAweDMxOgorLSAg ICAgICAgICAgIGNhc2UgMHgzMjoKKy0gICAgICAgICAgICBjYXNlIDB4MzM6CistICAgICAgICAg ICAgY2FzZSAweDM0OgorLSAgICAgICAgICAgIGNhc2UgMHgzNToKKy0gICAgICAgICAgICBjYXNl IDB4MzY6CistICAgICAgICAgICAgY2FzZSAweDM3OgorLSAgICAgICAgICAgICAgICByZXR1cm4g c2F4LT5udW1iZXJfaW50ZWdlcihzdGF0aWNfY2FzdDxzdGQ6OmludDhfdD4oMHgyMCAtIDEgLSBj dXJyZW50KSk7CistCistICAgICAgICAgICAgY2FzZSAweDM4OiAvLyBOZWdhdGl2ZSBpbnRlZ2Vy IChvbmUtYnl0ZSB1aW50OF90IGZvbGxvd3MpCistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICBzdGQ6OnVpbnQ4X3QgbnVtYmVye307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRf bnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBudW1iZXIpICYmIHNheC0+bnVtYmVyX2ludGVn ZXIoc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4oLTEpIC0gbnVtYmVyKTsKKy0gICAgICAg ICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweDM5OiAvLyBOZWdhdGl2ZSBpbnRlZ2VyIC0x LW4gKHR3by1ieXRlIHVpbnQxNl90IGZvbGxvd3MpCistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICBzdGQ6OnVpbnQxNl90IG51bWJlcnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4g Z2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6Y2JvciwgbnVtYmVyKSAmJiBzYXgtPm51bWJlcl9p bnRlZ2VyKHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+KC0xKSAtIG51bWJlcik7CistICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHgzQTogLy8gTmVnYXRpdmUgaW50ZWdl ciAtMS1uIChmb3VyLWJ5dGUgdWludDMyX3QgZm9sbG93cykKKy0gICAgICAgICAgICB7CistICAg ICAgICAgICAgICAgIHN0ZDo6dWludDMyX3QgbnVtYmVye307CistICAgICAgICAgICAgICAgIHJl dHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBudW1iZXIpICYmIHNheC0+bnVt YmVyX2ludGVnZXIoc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4oLTEpIC0gbnVtYmVyKTsK Ky0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweDNCOiAvLyBOZWdhdGl2ZSBp bnRlZ2VyIC0xLW4gKGVpZ2h0LWJ5dGUgdWludDY0X3QgZm9sbG93cykKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgbnVtYmVye307CistICAgICAgICAgICAg ICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBudW1iZXIpICYmIHNh eC0+bnVtYmVyX2ludGVnZXIoc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4oLTEpCistICAg ICAgICAgICAgICAgICAgICAgICAgLSBzdGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90PihudW1i ZXIpKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgLy8gQmluYXJ5IGRhdGEgKDB4 MDAuLjB4MTcgYnl0ZXMgZm9sbG93KQorLSAgICAgICAgICAgIGNhc2UgMHg0MDoKKy0gICAgICAg ICAgICBjYXNlIDB4NDE6CistICAgICAgICAgICAgY2FzZSAweDQyOgorLSAgICAgICAgICAgIGNh c2UgMHg0MzoKKy0gICAgICAgICAgICBjYXNlIDB4NDQ6CistICAgICAgICAgICAgY2FzZSAweDQ1 OgorLSAgICAgICAgICAgIGNhc2UgMHg0NjoKKy0gICAgICAgICAgICBjYXNlIDB4NDc6CistICAg ICAgICAgICAgY2FzZSAweDQ4OgorLSAgICAgICAgICAgIGNhc2UgMHg0OToKKy0gICAgICAgICAg ICBjYXNlIDB4NEE6CistICAgICAgICAgICAgY2FzZSAweDRCOgorLSAgICAgICAgICAgIGNhc2Ug MHg0QzoKKy0gICAgICAgICAgICBjYXNlIDB4NEQ6CistICAgICAgICAgICAgY2FzZSAweDRFOgor LSAgICAgICAgICAgIGNhc2UgMHg0RjoKKy0gICAgICAgICAgICBjYXNlIDB4NTA6CistICAgICAg ICAgICAgY2FzZSAweDUxOgorLSAgICAgICAgICAgIGNhc2UgMHg1MjoKKy0gICAgICAgICAgICBj YXNlIDB4NTM6CistICAgICAgICAgICAgY2FzZSAweDU0OgorLSAgICAgICAgICAgIGNhc2UgMHg1 NToKKy0gICAgICAgICAgICBjYXNlIDB4NTY6CistICAgICAgICAgICAgY2FzZSAweDU3OgorLSAg ICAgICAgICAgIGNhc2UgMHg1ODogLy8gQmluYXJ5IGRhdGEgKG9uZS1ieXRlIHVpbnQ4X3QgZm9y IG4gZm9sbG93cykKKy0gICAgICAgICAgICBjYXNlIDB4NTk6IC8vIEJpbmFyeSBkYXRhICh0d28t Ynl0ZSB1aW50MTZfdCBmb3IgbiBmb2xsb3cpCistICAgICAgICAgICAgY2FzZSAweDVBOiAvLyBC aW5hcnkgZGF0YSAoZm91ci1ieXRlIHVpbnQzMl90IGZvciBuIGZvbGxvdykKKy0gICAgICAgICAg ICBjYXNlIDB4NUI6IC8vIEJpbmFyeSBkYXRhIChlaWdodC1ieXRlIHVpbnQ2NF90IGZvciBuIGZv bGxvdykKKy0gICAgICAgICAgICBjYXNlIDB4NUY6IC8vIEJpbmFyeSBkYXRhIChpbmRlZmluaXRl IGxlbmd0aCkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGJpbmFyeV90IGI7Cist ICAgICAgICAgICAgICAgIHJldHVybiBnZXRfY2Jvcl9iaW5hcnkoYikgJiYgc2F4LT5iaW5hcnko Yik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIC8vIFVURi04IHN0cmluZyAoMHgw MC4uMHgxNyBieXRlcyBmb2xsb3cpCistICAgICAgICAgICAgY2FzZSAweDYwOgorLSAgICAgICAg ICAgIGNhc2UgMHg2MToKKy0gICAgICAgICAgICBjYXNlIDB4NjI6CistICAgICAgICAgICAgY2Fz ZSAweDYzOgorLSAgICAgICAgICAgIGNhc2UgMHg2NDoKKy0gICAgICAgICAgICBjYXNlIDB4NjU6 CistICAgICAgICAgICAgY2FzZSAweDY2OgorLSAgICAgICAgICAgIGNhc2UgMHg2NzoKKy0gICAg ICAgICAgICBjYXNlIDB4Njg6CistICAgICAgICAgICAgY2FzZSAweDY5OgorLSAgICAgICAgICAg IGNhc2UgMHg2QToKKy0gICAgICAgICAgICBjYXNlIDB4NkI6CistICAgICAgICAgICAgY2FzZSAw eDZDOgorLSAgICAgICAgICAgIGNhc2UgMHg2RDoKKy0gICAgICAgICAgICBjYXNlIDB4NkU6Cist ICAgICAgICAgICAgY2FzZSAweDZGOgorLSAgICAgICAgICAgIGNhc2UgMHg3MDoKKy0gICAgICAg ICAgICBjYXNlIDB4NzE6CistICAgICAgICAgICAgY2FzZSAweDcyOgorLSAgICAgICAgICAgIGNh c2UgMHg3MzoKKy0gICAgICAgICAgICBjYXNlIDB4NzQ6CistICAgICAgICAgICAgY2FzZSAweDc1 OgorLSAgICAgICAgICAgIGNhc2UgMHg3NjoKKy0gICAgICAgICAgICBjYXNlIDB4Nzc6CistICAg ICAgICAgICAgY2FzZSAweDc4OiAvLyBVVEYtOCBzdHJpbmcgKG9uZS1ieXRlIHVpbnQ4X3QgZm9y IG4gZm9sbG93cykKKy0gICAgICAgICAgICBjYXNlIDB4Nzk6IC8vIFVURi04IHN0cmluZyAodHdv LWJ5dGUgdWludDE2X3QgZm9yIG4gZm9sbG93KQorLSAgICAgICAgICAgIGNhc2UgMHg3QTogLy8g VVRGLTggc3RyaW5nIChmb3VyLWJ5dGUgdWludDMyX3QgZm9yIG4gZm9sbG93KQorLSAgICAgICAg ICAgIGNhc2UgMHg3QjogLy8gVVRGLTggc3RyaW5nIChlaWdodC1ieXRlIHVpbnQ2NF90IGZvciBu IGZvbGxvdykKKy0gICAgICAgICAgICBjYXNlIDB4N0Y6IC8vIFVURi04IHN0cmluZyAoaW5kZWZp bml0ZSBsZW5ndGgpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdHJpbmdfdCBz OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X2Nib3Jfc3RyaW5nKHMpICYmIHNheC0+c3Ry aW5nKHMpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBhcnJheSAoMHgwMC4u MHgxNyBkYXRhIGl0ZW1zIGZvbGxvdykKKy0gICAgICAgICAgICBjYXNlIDB4ODA6CistICAgICAg ICAgICAgY2FzZSAweDgxOgorLSAgICAgICAgICAgIGNhc2UgMHg4MjoKKy0gICAgICAgICAgICBj YXNlIDB4ODM6CistICAgICAgICAgICAgY2FzZSAweDg0OgorLSAgICAgICAgICAgIGNhc2UgMHg4 NToKKy0gICAgICAgICAgICBjYXNlIDB4ODY6CistICAgICAgICAgICAgY2FzZSAweDg3OgorLSAg ICAgICAgICAgIGNhc2UgMHg4ODoKKy0gICAgICAgICAgICBjYXNlIDB4ODk6CistICAgICAgICAg ICAgY2FzZSAweDhBOgorLSAgICAgICAgICAgIGNhc2UgMHg4QjoKKy0gICAgICAgICAgICBjYXNl IDB4OEM6CistICAgICAgICAgICAgY2FzZSAweDhEOgorLSAgICAgICAgICAgIGNhc2UgMHg4RToK Ky0gICAgICAgICAgICBjYXNlIDB4OEY6CistICAgICAgICAgICAgY2FzZSAweDkwOgorLSAgICAg ICAgICAgIGNhc2UgMHg5MToKKy0gICAgICAgICAgICBjYXNlIDB4OTI6CistICAgICAgICAgICAg Y2FzZSAweDkzOgorLSAgICAgICAgICAgIGNhc2UgMHg5NDoKKy0gICAgICAgICAgICBjYXNlIDB4 OTU6CistICAgICAgICAgICAgY2FzZSAweDk2OgorLSAgICAgICAgICAgIGNhc2UgMHg5NzoKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIGdldF9jYm9yX2FycmF5KHN0YXRpY19jYXN0PHN0ZDo6c2l6 ZV90PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGN1cnJlbnQpICYgMHgxRnUpLCB0YWdfaGFu ZGxlcik7CistCistICAgICAgICAgICAgY2FzZSAweDk4OiAvLyBhcnJheSAob25lLWJ5dGUgdWlu dDhfdCBmb3IgbiBmb2xsb3dzKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3Rk Ojp1aW50OF90IGxlbnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1 dF9mb3JtYXRfdDo6Y2JvciwgbGVuKSAmJiBnZXRfY2Jvcl9hcnJheShzdGF0aWNfY2FzdDxzdGQ6 OnNpemVfdD4obGVuKSwgdGFnX2hhbmRsZXIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAg ICAgICBjYXNlIDB4OTk6IC8vIGFycmF5ICh0d28tYnl0ZSB1aW50MTZfdCBmb3IgbiBmb2xsb3cp CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVpbnQxNl90IGxlbnt9Owor LSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6Y2Jvciwg bGVuKSAmJiBnZXRfY2Jvcl9hcnJheShzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4obGVuKSwgdGFn X2hhbmRsZXIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4OUE6IC8v IGFycmF5IChmb3VyLWJ5dGUgdWludDMyX3QgZm9yIG4gZm9sbG93KQorLSAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgc3RkOjp1aW50MzJfdCBsZW57fTsKKy0gICAgICAgICAgICAgICAg cmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIGxlbikgJiYgZ2V0X2Nib3Jf YXJyYXkoc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGxlbiksIHRhZ19oYW5kbGVyKTsKKy0gICAg ICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweDlCOiAvLyBhcnJheSAoZWlnaHQtYnl0 ZSB1aW50NjRfdCBmb3IgbiBmb2xsb3cpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICBzdGQ6OnVpbnQ2NF90IGxlbnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJl cihpbnB1dF9mb3JtYXRfdDo6Y2JvciwgbGVuKSAmJiBnZXRfY2Jvcl9hcnJheShkZXRhaWw6OmNv bmRpdGlvbmFsX3N0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihsZW4pLCB0YWdfaGFuZGxlcik7Cist ICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHg5RjogLy8gYXJyYXkgKGluZGVm aW5pdGUgbGVuZ3RoKQorLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X2Nib3JfYXJyYXkoc3Rh dGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSwgdGFnX2hhbmRsZXIpOworLQorLSAgICAgICAgICAg IC8vIG1hcCAoMHgwMC4uMHgxNyBwYWlycyBvZiBkYXRhIGl0ZW1zIGZvbGxvdykKKy0gICAgICAg ICAgICBjYXNlIDB4QTA6CistICAgICAgICAgICAgY2FzZSAweEExOgorLSAgICAgICAgICAgIGNh c2UgMHhBMjoKKy0gICAgICAgICAgICBjYXNlIDB4QTM6CistICAgICAgICAgICAgY2FzZSAweEE0 OgorLSAgICAgICAgICAgIGNhc2UgMHhBNToKKy0gICAgICAgICAgICBjYXNlIDB4QTY6CistICAg ICAgICAgICAgY2FzZSAweEE3OgorLSAgICAgICAgICAgIGNhc2UgMHhBODoKKy0gICAgICAgICAg ICBjYXNlIDB4QTk6CistICAgICAgICAgICAgY2FzZSAweEFBOgorLSAgICAgICAgICAgIGNhc2Ug MHhBQjoKKy0gICAgICAgICAgICBjYXNlIDB4QUM6CistICAgICAgICAgICAgY2FzZSAweEFEOgor LSAgICAgICAgICAgIGNhc2UgMHhBRToKKy0gICAgICAgICAgICBjYXNlIDB4QUY6CistICAgICAg ICAgICAgY2FzZSAweEIwOgorLSAgICAgICAgICAgIGNhc2UgMHhCMToKKy0gICAgICAgICAgICBj YXNlIDB4QjI6CistICAgICAgICAgICAgY2FzZSAweEIzOgorLSAgICAgICAgICAgIGNhc2UgMHhC NDoKKy0gICAgICAgICAgICBjYXNlIDB4QjU6CistICAgICAgICAgICAgY2FzZSAweEI2OgorLSAg ICAgICAgICAgIGNhc2UgMHhCNzoKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9jYm9yX29i amVjdChzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihj dXJyZW50KSAmIDB4MUZ1KSwgdGFnX2hhbmRsZXIpOworLQorLSAgICAgICAgICAgIGNhc2UgMHhC ODogLy8gbWFwIChvbmUtYnl0ZSB1aW50OF90IGZvciBuIGZvbGxvd3MpCistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBzdGQ6OnVpbnQ4X3QgbGVue307CistICAgICAgICAgICAgICAg IHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBsZW4pICYmIGdldF9jYm9y X29iamVjdChzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4obGVuKSwgdGFnX2hhbmRsZXIpOworLSAg ICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4Qjk6IC8vIG1hcCAodHdvLWJ5dGUg dWludDE2X3QgZm9yIG4gZm9sbG93KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg c3RkOjp1aW50MTZfdCBsZW57fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIo aW5wdXRfZm9ybWF0X3Q6OmNib3IsIGxlbikgJiYgZ2V0X2Nib3Jfb2JqZWN0KHN0YXRpY19jYXN0 PHN0ZDo6c2l6ZV90PihsZW4pLCB0YWdfaGFuZGxlcik7CistICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgIGNhc2UgMHhCQTogLy8gbWFwIChmb3VyLWJ5dGUgdWludDMyX3QgZm9yIG4gZm9s bG93KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjp1aW50MzJfdCBsZW57 fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OmNi b3IsIGxlbikgJiYgZ2V0X2Nib3Jfb2JqZWN0KHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihsZW4p LCB0YWdfaGFuZGxlcik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHhC QjogLy8gbWFwIChlaWdodC1ieXRlIHVpbnQ2NF90IGZvciBuIGZvbGxvdykKKy0gICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgbGVue307CistICAgICAgICAgICAg ICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBsZW4pICYmIGdldF9j Ym9yX29iamVjdChkZXRhaWw6OmNvbmRpdGlvbmFsX3N0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pihs ZW4pLCB0YWdfaGFuZGxlcik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2Ug MHhCRjogLy8gbWFwIChpbmRlZmluaXRlIGxlbmd0aCkKKy0gICAgICAgICAgICAgICAgcmV0dXJu IGdldF9jYm9yX29iamVjdChzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpLCB0YWdfaGFuZGxl cik7CistCistICAgICAgICAgICAgY2FzZSAweEM2OiAvLyB0YWdnZWQgaXRlbQorLSAgICAgICAg ICAgIGNhc2UgMHhDNzoKKy0gICAgICAgICAgICBjYXNlIDB4Qzg6CistICAgICAgICAgICAgY2Fz ZSAweEM5OgorLSAgICAgICAgICAgIGNhc2UgMHhDQToKKy0gICAgICAgICAgICBjYXNlIDB4Q0I6 CistICAgICAgICAgICAgY2FzZSAweENDOgorLSAgICAgICAgICAgIGNhc2UgMHhDRDoKKy0gICAg ICAgICAgICBjYXNlIDB4Q0U6CistICAgICAgICAgICAgY2FzZSAweENGOgorLSAgICAgICAgICAg IGNhc2UgMHhEMDoKKy0gICAgICAgICAgICBjYXNlIDB4RDE6CistICAgICAgICAgICAgY2FzZSAw eEQyOgorLSAgICAgICAgICAgIGNhc2UgMHhEMzoKKy0gICAgICAgICAgICBjYXNlIDB4RDQ6Cist ICAgICAgICAgICAgY2FzZSAweEQ4OiAvLyB0YWdnZWQgaXRlbSAoMSBieXRlcyBmb2xsb3cpCist ICAgICAgICAgICAgY2FzZSAweEQ5OiAvLyB0YWdnZWQgaXRlbSAoMiBieXRlcyBmb2xsb3cpCist ICAgICAgICAgICAgY2FzZSAweERBOiAvLyB0YWdnZWQgaXRlbSAoNCBieXRlcyBmb2xsb3cpCist ICAgICAgICAgICAgY2FzZSAweERCOiAvLyB0YWdnZWQgaXRlbSAoOCBieXRlcyBmb2xsb3cpCist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZ19oYW5kbGVyKQorLSAg ICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBjYXNlIGNib3JfdGFnX2hhbmRs ZXJfdDo6ZXJyb3I6CistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICAgICAgYXV0byBsYXN0X3Rva2VuID0gZ2V0X3Rva2VuX3N0cmluZygpOworLSAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsIGxhc3RfdG9r ZW4sIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTEyLCBjaGFyc19yZWFkLCBleGNlcHRpb25fbWVzc2Fn ZShpbnB1dF9mb3JtYXRfdDo6Y2JvciwgImludmFsaWQgYnl0ZTogMHgiICsgbGFzdF90b2tlbiwg InZhbHVlIiksIEJhc2ljSnNvblR5cGUoKSkpOworLSAgICAgICAgICAgICAgICAgICAgfQorLQor LSAgICAgICAgICAgICAgICAgICAgY2FzZSBjYm9yX3RhZ19oYW5kbGVyX3Q6Omlnbm9yZToKKy0g ICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUg YmluYXJ5IHN1YnR5cGUKKy0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQp CistICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIDB4RDg6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dWludDhfdCBzdWJ0eXBlX3RvX2lnbm9yZXt9Owor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X251bWJlcihpbnB1dF9mb3JtYXRf dDo6Y2Jvciwgc3VidHlwZV90b19pZ25vcmUpOworLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAweEQ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVpbnQxNl90IHN1YnR5 cGVfdG9faWdub3Jle307CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbnVt YmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBzdWJ0eXBlX3RvX2lnbm9yZSk7CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4REE6CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 ZDo6dWludDMyX3Qgc3VidHlwZV90b19pZ25vcmV7fTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIHN1YnR5cGVfdG9faWdu b3JlKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug MHhEQjoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RkOjp1aW50NjRfdCBzdWJ0eXBlX3RvX2lnbm9yZXt9OworLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6Y2Jv ciwgc3VidHlwZV90b19pZ25vcmUpOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gcGFyc2VfY2Jvcl9pbnRlcm5hbCh0cnVlLCB0YWdfaGFuZGxlcik7CistICAgICAg ICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICBjYXNlIGNib3JfdGFnX2hh bmRsZXJfdDo6c3RvcmU6CistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgYmluYXJ5X3QgYjsKKy0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgYmlu YXJ5IHN1YnR5cGUgYW5kIHN0b3JlIGluIGJpbmFyeSBjb250YWluZXIKKy0gICAgICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQpCistICAgICAgICAgICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RDg6CistICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dWlu dDhfdCBzdWJ0eXBle307CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbnVt YmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBzdWJ0eXBlKTsKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGIuc2V0X3N1YnR5cGUoZGV0YWlsOjpjb25kaXRpb25hbF9zdGF0aWNfY2Fz dDx0eXBlbmFtZSBiaW5hcnlfdDo6c3VidHlwZV90eXBlPihzdWJ0eXBlKSk7CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RDk6CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 ZDo6dWludDE2X3Qgc3VidHlwZXt9OworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6Y2Jvciwgc3VidHlwZSk7CistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBiLnNldF9zdWJ0eXBlKGRldGFpbDo6Y29uZGl0aW9uYWxfc3Rh dGljX2Nhc3Q8dHlwZW5hbWUgYmluYXJ5X3Q6OnN1YnR5cGVfdHlwZT4oc3VidHlwZSkpOworLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERBOgorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdGQ6OnVpbnQzMl90IHN1YnR5cGV7fTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIHN1YnR5cGUpOworLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5zZXRfc3VidHlwZShkZXRhaWw6OmNvbmRpdGlv bmFsX3N0YXRpY19jYXN0PHR5cGVuYW1lIGJpbmFyeV90OjpzdWJ0eXBlX3R5cGU+KHN1YnR5cGUp KTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhE QjoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RkOjp1aW50NjRfdCBzdWJ0eXBle307CistICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBzdWJ0eXBlKTsK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuc2V0X3N1YnR5cGUoZGV0YWlsOjpj b25kaXRpb25hbF9zdGF0aWNfY2FzdDx0eXBlbmFtZSBiaW5hcnlfdDo6c3VidHlwZV90eXBlPihz dWJ0eXBlKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2Ni b3JfaW50ZXJuYWwodHJ1ZSwgdGFnX2hhbmRsZXIpOworLSAgICAgICAgICAgICAgICAgICAgICAg IH0KKy0gICAgICAgICAgICAgICAgICAgICAgICBnZXQoKTsKKy0gICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gZ2V0X2Nib3JfYmluYXJ5KGIpICYmIHNheC0+YmluYXJ5KGIpOworLSAgICAg ICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgIC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgICAgICAgICAgSlNP Tl9BU1NFUlQoZmFsc2UpOyAvLyBOT0xJTlQoY2VydC1kY2wwMy1jLGhpY3BwLXN0YXRpYy1hc3Nl cnQsbWlzYy1zdGF0aWMtYXNzZXJ0KSBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgIC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweEY0OiAvLyBm YWxzZQorLSAgICAgICAgICAgICAgICByZXR1cm4gc2F4LT5ib29sZWFuKGZhbHNlKTsKKy0KKy0g ICAgICAgICAgICBjYXNlIDB4RjU6IC8vIHRydWUKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHNh eC0+Ym9vbGVhbih0cnVlKTsKKy0KKy0gICAgICAgICAgICBjYXNlIDB4RjY6IC8vIG51bGwKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIHNheC0+bnVsbCgpOworLQorLSAgICAgICAgICAgIGNhc2Ug MHhGOTogLy8gSGFsZi1QcmVjaXNpb24gRmxvYXQgKHR3by1ieXRlIElFRUUgNzU0KQorLSAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBieXRlMV9yYXcgPSBnZXQoKTsK Ky0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCF1bmV4cGVjdF9lb2Yo aW5wdXRfZm9ybWF0X3Q6OmNib3IsICJudW1iZXIiKSkpCistICAgICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgfQorLSAg ICAgICAgICAgICAgICBjb25zdCBhdXRvIGJ5dGUyX3JhdyA9IGdldCgpOworLSAgICAgICAgICAg ICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXVuZXhwZWN0X2VvZihpbnB1dF9mb3JtYXRf dDo6Y2JvciwgIm51bWJlciIpKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAg ICAgIGNvbnN0IGF1dG8gYnl0ZTEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihieXRlMV9y YXcpOworLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGJ5dGUyID0gc3RhdGljX2Nhc3Q8dW5z aWduZWQgY2hhcj4oYnl0ZTJfcmF3KTsKKy0KKy0gICAgICAgICAgICAgICAgLy8gY29kZSBmcm9t IFJGQyA3MDQ5LCBBcHBlbmRpeCBELCBGaWd1cmUgMzoKKy0gICAgICAgICAgICAgICAgLy8gQXMg aGFsZi1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgbnVtYmVycyB3ZXJlIG9ubHkgYWRkZWQKKy0g ICAgICAgICAgICAgICAgLy8gdG8gSUVFRSA3NTQgaW4gMjAwOCwgdG9kYXkncyBwcm9ncmFtbWlu ZyBwbGF0Zm9ybXMgb2Z0ZW4KKy0gICAgICAgICAgICAgICAgLy8gc3RpbGwgb25seSBoYXZlIGxp bWl0ZWQgc3VwcG9ydCBmb3IgdGhlbS4gSXQgaXMgdmVyeQorLSAgICAgICAgICAgICAgICAvLyBl YXN5IHRvIGluY2x1ZGUgYXQgbGVhc3QgZGVjb2Rpbmcgc3VwcG9ydCBmb3IgdGhlbSBldmVuCist ICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgc3VjaCBzdXBwb3J0LiBBbiBleGFtcGxlIG9mIGEg c21hbGwgZGVjb2RlciBmb3IKKy0gICAgICAgICAgICAgICAgLy8gaGFsZi1wcmVjaXNpb24gZmxv YXRpbmctcG9pbnQgbnVtYmVycyBpbiB0aGUgQyBsYW5ndWFnZQorLSAgICAgICAgICAgICAgICAv LyBpcyBzaG93biBpbiBGaWcuIDMuCistICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gaGFsZiA9 IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGJ5dGUxIDw8IDh1KSArIGJ5dGUyKTsKKy0gICAg ICAgICAgICAgICAgY29uc3QgZG91YmxlIHZhbCA9IFsmaGFsZl0KKy0gICAgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGV4cCA9IChoYWxmID4+IDEwdSkgJiAw eDFGdTsKKy0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYW50ID0gaGFs ZiAmIDB4M0ZGdTsKKy0gICAgICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKDAgPD0gZXhwJiYg ZXhwIDw9IDMyKTsKKy0gICAgICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKG1hbnQgPD0gMTAy NCk7CistICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4cCkKKy0gICAgICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CistICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBzdGQ6OmxkZXhwKG1hbnQsIC0yNCk7CistICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSAzMToKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IChtYW50ID09IDApCistICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc3RkOjpudW1lcmlj X2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpCistICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKy0gICAgICAgICAg ICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gc3RkOjpsZGV4cChtYW50ICsgMTAyNCwgZXhwIC0gMjUpOworLSAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICB9KCk7CistICAgICAgICAgICAgICAgIHJldHVybiBzYXgt Pm51bWJlcl9mbG9hdCgoaGFsZiAmIDB4ODAwMHUpICE9IDAKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KC12YWwp CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0 PG51bWJlcl9mbG9hdF90Pih2YWwpLCAiIik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAg ICAgIGNhc2UgMHhGQTogLy8gU2luZ2xlLVByZWNpc2lvbiBGbG9hdCAoZm91ci1ieXRlIElFRUUg NzU0KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgZmxvYXQgbnVtYmVye307Cist ICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBu dW1iZXIpICYmIHNheC0+bnVtYmVyX2Zsb2F0KHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90Pihu dW1iZXIpLCAiIik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHhGQjog Ly8gRG91YmxlLVByZWNpc2lvbiBGbG9hdCAoZWlnaHQtYnl0ZSBJRUVFIDc1NCkKKy0gICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgIGRvdWJsZSBudW1iZXJ7fTsKKy0gICAgICAgICAgICAg ICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIG51bWJlcikgJiYgc2F4 LT5udW1iZXJfZmxvYXQoc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KG51bWJlciksICIiKTsK Ky0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgZGVmYXVsdDogLy8gYW55dGhpbmcgZWxz ZSAoMHhGRiBpcyBoYW5kbGVkIGluc2lkZSB0aGUgb3RoZXIgdHlwZXMpCistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBhdXRvIGxhc3RfdG9rZW4gPSBnZXRfdG9rZW5fc3RyaW5nKCk7 CistICAgICAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsIGxh c3RfdG9rZW4sIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTEyLCBjaGFyc19yZWFkLCBleGNlcHRpb25f bWVzc2FnZShpbnB1dF9mb3JtYXRfdDo6Y2JvciwgImludmFsaWQgYnl0ZTogMHgiICsgbGFzdF90 b2tlbiwgInZhbHVlIiksIEJhc2ljSnNvblR5cGUoKSkpOworLSAgICAgICAgICAgIH0KKy0gICAg ICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIHJlYWRzIGEgQ0JPUiBzdHJp bmcKKy0KKy0gICAgVGhpcyBmdW5jdGlvbiBmaXJzdCByZWFkcyBzdGFydGluZyBieXRlcyB0byBk ZXRlcm1pbmUgdGhlIGV4cGVjdGVkCistICAgIHN0cmluZyBsZW5ndGggYW5kIHRoZW4gY29waWVz IHRoaXMgbnVtYmVyIG9mIGJ5dGVzIGludG8gYSBzdHJpbmcuCistICAgIEFkZGl0aW9uYWxseSwg Q0JPUidzIHN0cmluZ3Mgd2l0aCBpbmRlZmluaXRlIGxlbmd0aHMgYXJlIHN1cHBvcnRlZC4KKy0K Ky0gICAgQHBhcmFtW291dF0gcmVzdWx0ICBjcmVhdGVkIHN0cmluZworLQorLSAgICBAcmV0dXJu IHdoZXRoZXIgc3RyaW5nIGNyZWF0aW9uIGNvbXBsZXRlZAorLSAgICAqLworLSAgICBib29sIGdl dF9jYm9yX3N0cmluZyhzdHJpbmdfdCYgcmVzdWx0KQorLSAgICB7CistICAgICAgICBpZiAoSlNP Tl9IRURMRVlfVU5MSUtFTFkoIXVuZXhwZWN0X2VvZihpbnB1dF9mb3JtYXRfdDo6Y2JvciwgInN0 cmluZyIpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAg ICB9CistCistICAgICAgICBzd2l0Y2ggKGN1cnJlbnQpCistICAgICAgICB7CistICAgICAgICAg ICAgLy8gVVRGLTggc3RyaW5nICgweDAwLi4weDE3IGJ5dGVzIGZvbGxvdykKKy0gICAgICAgICAg ICBjYXNlIDB4NjA6CistICAgICAgICAgICAgY2FzZSAweDYxOgorLSAgICAgICAgICAgIGNhc2Ug MHg2MjoKKy0gICAgICAgICAgICBjYXNlIDB4NjM6CistICAgICAgICAgICAgY2FzZSAweDY0Ogor LSAgICAgICAgICAgIGNhc2UgMHg2NToKKy0gICAgICAgICAgICBjYXNlIDB4NjY6CistICAgICAg ICAgICAgY2FzZSAweDY3OgorLSAgICAgICAgICAgIGNhc2UgMHg2ODoKKy0gICAgICAgICAgICBj YXNlIDB4Njk6CistICAgICAgICAgICAgY2FzZSAweDZBOgorLSAgICAgICAgICAgIGNhc2UgMHg2 QjoKKy0gICAgICAgICAgICBjYXNlIDB4NkM6CistICAgICAgICAgICAgY2FzZSAweDZEOgorLSAg ICAgICAgICAgIGNhc2UgMHg2RToKKy0gICAgICAgICAgICBjYXNlIDB4NkY6CistICAgICAgICAg ICAgY2FzZSAweDcwOgorLSAgICAgICAgICAgIGNhc2UgMHg3MToKKy0gICAgICAgICAgICBjYXNl IDB4NzI6CistICAgICAgICAgICAgY2FzZSAweDczOgorLSAgICAgICAgICAgIGNhc2UgMHg3NDoK Ky0gICAgICAgICAgICBjYXNlIDB4NzU6CistICAgICAgICAgICAgY2FzZSAweDc2OgorLSAgICAg ICAgICAgIGNhc2UgMHg3NzoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVy biBnZXRfc3RyaW5nKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp bnQ+KGN1cnJlbnQpICYgMHgxRnUsIHJlc3VsdCk7CistICAgICAgICAgICAgfQorLQorLSAgICAg ICAgICAgIGNhc2UgMHg3ODogLy8gVVRGLTggc3RyaW5nIChvbmUtYnl0ZSB1aW50OF90IGZvciBu IGZvbGxvd3MpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVpbnQ4X3Qg bGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90 OjpjYm9yLCBsZW4pICYmIGdldF9zdHJpbmcoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIGxlbiwgcmVz dWx0KTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweDc5OiAvLyBVVEYt OCBzdHJpbmcgKHR3by1ieXRlIHVpbnQxNl90IGZvciBuIGZvbGxvdykKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDE2X3QgbGVue307CistICAgICAgICAgICAgICAg IHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBsZW4pICYmIGdldF9zdHJp bmcoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIGxlbiwgcmVzdWx0KTsKKy0gICAgICAgICAgICB9Cist CistICAgICAgICAgICAgY2FzZSAweDdBOiAvLyBVVEYtOCBzdHJpbmcgKGZvdXItYnl0ZSB1aW50 MzJfdCBmb3IgbiBmb2xsb3cpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6 OnVpbnQzMl90IGxlbnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1 dF9mb3JtYXRfdDo6Y2JvciwgbGVuKSAmJiBnZXRfc3RyaW5nKGlucHV0X2Zvcm1hdF90OjpjYm9y LCBsZW4sIHJlc3VsdCk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHg3 QjogLy8gVVRGLTggc3RyaW5nIChlaWdodC1ieXRlIHVpbnQ2NF90IGZvciBuIGZvbGxvdykKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgbGVue307CistICAg ICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90OjpjYm9yLCBsZW4p ICYmIGdldF9zdHJpbmcoaW5wdXRfZm9ybWF0X3Q6OmNib3IsIGxlbiwgcmVzdWx0KTsKKy0gICAg ICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweDdGOiAvLyBVVEYtOCBzdHJpbmcgKGlu ZGVmaW5pdGUgbGVuZ3RoKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgd2hpbGUg KGdldCgpICE9IDB4RkYpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IHN0cmluZ190IGNodW5rOworLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXRfY2Jvcl9zdHJp bmcoY2h1bmspKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgICAgIHJlc3VsdC5hcHBlbmQoY2h1bmspOworLSAgICAgICAgICAgICAgICB9CistICAgICAg ICAgICAgICAgIHJldHVybiB0cnVlOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBk ZWZhdWx0OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgYXV0byBsYXN0X3Rva2Vu ID0gZ2V0X3Rva2VuX3N0cmluZygpOworLSAgICAgICAgICAgICAgICByZXR1cm4gc2F4LT5wYXJz ZV9lcnJvcihjaGFyc19yZWFkLCBsYXN0X3Rva2VuLCBwYXJzZV9lcnJvcjo6Y3JlYXRlKDExMywg Y2hhcnNfcmVhZCwgZXhjZXB0aW9uX21lc3NhZ2UoaW5wdXRfZm9ybWF0X3Q6OmNib3IsICJleHBl Y3RlZCBsZW5ndGggc3BlY2lmaWNhdGlvbiAoMHg2MC0weDdCKSBvciBpbmRlZmluaXRlIHN0cmlu ZyB0eXBlICgweDdGKTsgbGFzdCBieXRlOiAweCIgKyBsYXN0X3Rva2VuLCAic3RyaW5nIiksIEJh c2ljSnNvblR5cGUoKSkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgfQorLQor LSAgICAvKiEKKy0gICAgQGJyaWVmIHJlYWRzIGEgQ0JPUiBieXRlIGFycmF5CistCistICAgIFRo aXMgZnVuY3Rpb24gZmlyc3QgcmVhZHMgc3RhcnRpbmcgYnl0ZXMgdG8gZGV0ZXJtaW5lIHRoZSBl eHBlY3RlZAorLSAgICBieXRlIGFycmF5IGxlbmd0aCBhbmQgdGhlbiBjb3BpZXMgdGhpcyBudW1i ZXIgb2YgYnl0ZXMgaW50byB0aGUgYnl0ZSBhcnJheS4KKy0gICAgQWRkaXRpb25hbGx5LCBDQk9S J3MgYnl0ZSBhcnJheXMgd2l0aCBpbmRlZmluaXRlIGxlbmd0aHMgYXJlIHN1cHBvcnRlZC4KKy0K Ky0gICAgQHBhcmFtW291dF0gcmVzdWx0ICBjcmVhdGVkIGJ5dGUgYXJyYXkKKy0KKy0gICAgQHJl dHVybiB3aGV0aGVyIGJ5dGUgYXJyYXkgY3JlYXRpb24gY29tcGxldGVkCistICAgICovCistICAg IGJvb2wgZ2V0X2Nib3JfYmluYXJ5KGJpbmFyeV90JiByZXN1bHQpCistICAgIHsKKy0gICAgICAg IGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghdW5leHBlY3RfZW9mKGlucHV0X2Zvcm1hdF90Ojpj Ym9yLCAiYmluYXJ5IikpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK Ky0gICAgICAgIH0KKy0KKy0gICAgICAgIHN3aXRjaCAoY3VycmVudCkKKy0gICAgICAgIHsKKy0g ICAgICAgICAgICAvLyBCaW5hcnkgZGF0YSAoMHgwMC4uMHgxNyBieXRlcyBmb2xsb3cpCistICAg ICAgICAgICAgY2FzZSAweDQwOgorLSAgICAgICAgICAgIGNhc2UgMHg0MToKKy0gICAgICAgICAg ICBjYXNlIDB4NDI6CistICAgICAgICAgICAgY2FzZSAweDQzOgorLSAgICAgICAgICAgIGNhc2Ug MHg0NDoKKy0gICAgICAgICAgICBjYXNlIDB4NDU6CistICAgICAgICAgICAgY2FzZSAweDQ2Ogor LSAgICAgICAgICAgIGNhc2UgMHg0NzoKKy0gICAgICAgICAgICBjYXNlIDB4NDg6CistICAgICAg ICAgICAgY2FzZSAweDQ5OgorLSAgICAgICAgICAgIGNhc2UgMHg0QToKKy0gICAgICAgICAgICBj YXNlIDB4NEI6CistICAgICAgICAgICAgY2FzZSAweDRDOgorLSAgICAgICAgICAgIGNhc2UgMHg0 RDoKKy0gICAgICAgICAgICBjYXNlIDB4NEU6CistICAgICAgICAgICAgY2FzZSAweDRGOgorLSAg ICAgICAgICAgIGNhc2UgMHg1MDoKKy0gICAgICAgICAgICBjYXNlIDB4NTE6CistICAgICAgICAg ICAgY2FzZSAweDUyOgorLSAgICAgICAgICAgIGNhc2UgMHg1MzoKKy0gICAgICAgICAgICBjYXNl IDB4NTQ6CistICAgICAgICAgICAgY2FzZSAweDU1OgorLSAgICAgICAgICAgIGNhc2UgMHg1NjoK Ky0gICAgICAgICAgICBjYXNlIDB4NTc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICByZXR1cm4gZ2V0X2JpbmFyeShpbnB1dF9mb3JtYXRfdDo6Y2Jvciwgc3RhdGljX2Nhc3Q8dW5z aWduZWQgaW50PihjdXJyZW50KSAmIDB4MUZ1LCByZXN1bHQpOworLSAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICBjYXNlIDB4NTg6IC8vIEJpbmFyeSBkYXRhIChvbmUtYnl0ZSB1aW50OF90 IGZvciBuIGZvbGxvd3MpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVp bnQ4X3QgbGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zv cm1hdF90OjpjYm9yLCBsZW4pICYmCistICAgICAgICAgICAgICAgICAgICAgICBnZXRfYmluYXJ5 KGlucHV0X2Zvcm1hdF90OjpjYm9yLCBsZW4sIHJlc3VsdCk7CistICAgICAgICAgICAgfQorLQor LSAgICAgICAgICAgIGNhc2UgMHg1OTogLy8gQmluYXJ5IGRhdGEgKHR3by1ieXRlIHVpbnQxNl90 IGZvciBuIGZvbGxvdykKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWlu dDE2X3QgbGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zv cm1hdF90OjpjYm9yLCBsZW4pICYmCistICAgICAgICAgICAgICAgICAgICAgICBnZXRfYmluYXJ5 KGlucHV0X2Zvcm1hdF90OjpjYm9yLCBsZW4sIHJlc3VsdCk7CistICAgICAgICAgICAgfQorLQor LSAgICAgICAgICAgIGNhc2UgMHg1QTogLy8gQmluYXJ5IGRhdGEgKGZvdXItYnl0ZSB1aW50MzJf dCBmb3IgbiBmb2xsb3cpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVp bnQzMl90IGxlbnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9m b3JtYXRfdDo6Y2JvciwgbGVuKSAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2JpbmFy eShpbnB1dF9mb3JtYXRfdDo6Y2JvciwgbGVuLCByZXN1bHQpOworLSAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICBjYXNlIDB4NUI6IC8vIEJpbmFyeSBkYXRhIChlaWdodC1ieXRlIHVpbnQ2 NF90IGZvciBuIGZvbGxvdykKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6 dWludDY0X3QgbGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0 X2Zvcm1hdF90OjpjYm9yLCBsZW4pICYmCistICAgICAgICAgICAgICAgICAgICAgICBnZXRfYmlu YXJ5KGlucHV0X2Zvcm1hdF90OjpjYm9yLCBsZW4sIHJlc3VsdCk7CistICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgIGNhc2UgMHg1RjogLy8gQmluYXJ5IGRhdGEgKGluZGVmaW5pdGUgbGVu Z3RoKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgd2hpbGUgKGdldCgpICE9IDB4 RkYpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGJpbmFyeV90IGNo dW5rOworLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXRfY2Jvcl9iaW5hcnkoY2h1bmspKQor LSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm YWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIHJlc3Vs dC5pbnNlcnQocmVzdWx0LmVuZCgpLCBjaHVuay5iZWdpbigpLCBjaHVuay5lbmQoKSk7CistICAg ICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CistICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICBhdXRvIGxhc3RfdG9rZW4gPSBnZXRfdG9rZW5fc3RyaW5nKCk7CistICAgICAgICAg ICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsIGxhc3RfdG9rZW4sIHBh cnNlX2Vycm9yOjpjcmVhdGUoMTEzLCBjaGFyc19yZWFkLCBleGNlcHRpb25fbWVzc2FnZShpbnB1 dF9mb3JtYXRfdDo6Y2JvciwgImV4cGVjdGVkIGxlbmd0aCBzcGVjaWZpY2F0aW9uICgweDQwLTB4 NUIpIG9yIGluZGVmaW5pdGUgYmluYXJ5IGFycmF5IHR5cGUgKDB4NUYpOyBsYXN0IGJ5dGU6IDB4 IiArIGxhc3RfdG9rZW4sICJiaW5hcnkiKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICAg ICAgfQorLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8qIQorLSAgICBAcGFyYW1baW5dIGxl biAgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3Igc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0x KSBmb3IgYW4KKy0gICAgICAgICAgICAgICAgICAgIGFycmF5IG9mIGluZGVmaW5pdGUgc2l6ZQor LSAgICBAcGFyYW1baW5dIHRhZ19oYW5kbGVyIGhvdyBDQk9SIHRhZ3Mgc2hvdWxkIGJlIHRyZWF0 ZWQKKy0gICAgQHJldHVybiB3aGV0aGVyIGFycmF5IGNyZWF0aW9uIGNvbXBsZXRlZAorLSAgICAq LworLSAgICBib29sIGdldF9jYm9yX2FycmF5KGNvbnN0IHN0ZDo6c2l6ZV90IGxlbiwKKy0gICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjYm9yX3RhZ19oYW5kbGVyX3QgdGFnX2hhbmRsZXIp CistICAgIHsKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghc2F4LT5zdGFydF9h cnJheShsZW4pKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAg ICAgICB9CistCistICAgICAgICBpZiAobGVuICE9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pigt MSkpCistICAgICAgICB7CistICAgICAgICAgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8 IGxlbjsgKytpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVE TEVZX1VOTElLRUxZKCFwYXJzZV9jYm9yX2ludGVybmFsKHRydWUsIHRhZ19oYW5kbGVyKSkpCist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0g ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGVs c2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICB3aGlsZSAoZ2V0KCkgIT0gMHhGRikKKy0gICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghcGFy c2VfY2Jvcl9pbnRlcm5hbChmYWxzZSwgdGFnX2hhbmRsZXIpKSkKKy0gICAgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgICAgICB9 CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIHNheC0+ZW5k X2FycmF5KCk7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBwYXJhbVtpbl0gbGVuICB0aGUg bGVuZ3RoIG9mIHRoZSBvYmplY3Qgb3Igc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSBmb3Ig YW4KKy0gICAgICAgICAgICAgICAgICAgIG9iamVjdCBvZiBpbmRlZmluaXRlIHNpemUKKy0gICAg QHBhcmFtW2luXSB0YWdfaGFuZGxlciBob3cgQ0JPUiB0YWdzIHNob3VsZCBiZSB0cmVhdGVkCist ICAgIEByZXR1cm4gd2hldGhlciBvYmplY3QgY3JlYXRpb24gY29tcGxldGVkCistICAgICovCist ICAgIGJvb2wgZ2V0X2Nib3Jfb2JqZWN0KGNvbnN0IHN0ZDo6c2l6ZV90IGxlbiwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2Jvcl90YWdfaGFuZGxlcl90IHRhZ19oYW5kbGVyKQor LSAgICB7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXNheC0+c3RhcnRfb2Jq ZWN0KGxlbikpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAg ICAgIH0KKy0KKy0gICAgICAgIGlmIChsZW4gIT0gMCkKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICBzdHJpbmdfdCBrZXk7CistICAgICAgICAgICAgaWYgKGxlbiAhPSBzdGF0aWNfY2FzdDxzdGQ6 OnNpemVfdD4oLTEpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgZm9yIChzdGQ6 OnNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICBnZXQoKTsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExF WV9VTkxJS0VMWSghZ2V0X2Nib3Jfc3RyaW5nKGtleSkgfHwgIXNheC0+a2V5KGtleSkpKQorLSAg ICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIGlmIChK U09OX0hFRExFWV9VTkxJS0VMWSghcGFyc2VfY2Jvcl9pbnRlcm5hbCh0cnVlLCB0YWdfaGFuZGxl cikpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAg IGtleS5jbGVhcigpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgfQorLSAgICAg ICAgICAgIGVsc2UKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHdoaWxlIChnZXQo KSAhPSAweEZGKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBpZiAo SlNPTl9IRURMRVlfVU5MSUtFTFkoIWdldF9jYm9yX3N0cmluZyhrZXkpIHx8ICFzYXgtPmtleShr ZXkpKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAg ICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXBhcnNlX2Nib3JfaW50ZXJuYWwodHJ1ZSwg dGFnX2hhbmRsZXIpKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAg ICAgICAgICAgICBrZXkuY2xlYXIoKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg IH0KKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiBzYXgtPmVuZF9vYmplY3QoKTsKKy0g ICAgfQorLQorLSAgICAvLy8vLy8vLy8vLy8vCistICAgIC8vIE1zZ1BhY2sgLy8KKy0gICAgLy8v Ly8vLy8vLy8vLworLQorLSAgICAvKiEKKy0gICAgQHJldHVybiB3aGV0aGVyIGEgdmFsaWQgTWVz c2FnZVBhY2sgdmFsdWUgd2FzIHBhc3NlZCB0byB0aGUgU0FYIHBhcnNlcgorLSAgICAqLworLSAg ICBib29sIHBhcnNlX21zZ3BhY2tfaW50ZXJuYWwoKQorLSAgICB7CistICAgICAgICBzd2l0Y2gg KGdldCgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIC8vIEVPRgorLSAgICAgICAgICAgIGNh c2Ugc3RkOjpjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKToKKy0gICAgICAgICAgICAgICAg cmV0dXJuIHVuZXhwZWN0X2VvZihpbnB1dF9mb3JtYXRfdDo6bXNncGFjaywgInZhbHVlIik7Cist CistICAgICAgICAgICAgLy8gcG9zaXRpdmUgZml4aW50CistICAgICAgICAgICAgY2FzZSAweDAw OgorLSAgICAgICAgICAgIGNhc2UgMHgwMToKKy0gICAgICAgICAgICBjYXNlIDB4MDI6CistICAg ICAgICAgICAgY2FzZSAweDAzOgorLSAgICAgICAgICAgIGNhc2UgMHgwNDoKKy0gICAgICAgICAg ICBjYXNlIDB4MDU6CistICAgICAgICAgICAgY2FzZSAweDA2OgorLSAgICAgICAgICAgIGNhc2Ug MHgwNzoKKy0gICAgICAgICAgICBjYXNlIDB4MDg6CistICAgICAgICAgICAgY2FzZSAweDA5Ogor LSAgICAgICAgICAgIGNhc2UgMHgwQToKKy0gICAgICAgICAgICBjYXNlIDB4MEI6CistICAgICAg ICAgICAgY2FzZSAweDBDOgorLSAgICAgICAgICAgIGNhc2UgMHgwRDoKKy0gICAgICAgICAgICBj YXNlIDB4MEU6CistICAgICAgICAgICAgY2FzZSAweDBGOgorLSAgICAgICAgICAgIGNhc2UgMHgx MDoKKy0gICAgICAgICAgICBjYXNlIDB4MTE6CistICAgICAgICAgICAgY2FzZSAweDEyOgorLSAg ICAgICAgICAgIGNhc2UgMHgxMzoKKy0gICAgICAgICAgICBjYXNlIDB4MTQ6CistICAgICAgICAg ICAgY2FzZSAweDE1OgorLSAgICAgICAgICAgIGNhc2UgMHgxNjoKKy0gICAgICAgICAgICBjYXNl IDB4MTc6CistICAgICAgICAgICAgY2FzZSAweDE4OgorLSAgICAgICAgICAgIGNhc2UgMHgxOToK Ky0gICAgICAgICAgICBjYXNlIDB4MUE6CistICAgICAgICAgICAgY2FzZSAweDFCOgorLSAgICAg ICAgICAgIGNhc2UgMHgxQzoKKy0gICAgICAgICAgICBjYXNlIDB4MUQ6CistICAgICAgICAgICAg Y2FzZSAweDFFOgorLSAgICAgICAgICAgIGNhc2UgMHgxRjoKKy0gICAgICAgICAgICBjYXNlIDB4 MjA6CistICAgICAgICAgICAgY2FzZSAweDIxOgorLSAgICAgICAgICAgIGNhc2UgMHgyMjoKKy0g ICAgICAgICAgICBjYXNlIDB4MjM6CistICAgICAgICAgICAgY2FzZSAweDI0OgorLSAgICAgICAg ICAgIGNhc2UgMHgyNToKKy0gICAgICAgICAgICBjYXNlIDB4MjY6CistICAgICAgICAgICAgY2Fz ZSAweDI3OgorLSAgICAgICAgICAgIGNhc2UgMHgyODoKKy0gICAgICAgICAgICBjYXNlIDB4Mjk6 CistICAgICAgICAgICAgY2FzZSAweDJBOgorLSAgICAgICAgICAgIGNhc2UgMHgyQjoKKy0gICAg ICAgICAgICBjYXNlIDB4MkM6CistICAgICAgICAgICAgY2FzZSAweDJEOgorLSAgICAgICAgICAg IGNhc2UgMHgyRToKKy0gICAgICAgICAgICBjYXNlIDB4MkY6CistICAgICAgICAgICAgY2FzZSAw eDMwOgorLSAgICAgICAgICAgIGNhc2UgMHgzMToKKy0gICAgICAgICAgICBjYXNlIDB4MzI6Cist ICAgICAgICAgICAgY2FzZSAweDMzOgorLSAgICAgICAgICAgIGNhc2UgMHgzNDoKKy0gICAgICAg ICAgICBjYXNlIDB4MzU6CistICAgICAgICAgICAgY2FzZSAweDM2OgorLSAgICAgICAgICAgIGNh c2UgMHgzNzoKKy0gICAgICAgICAgICBjYXNlIDB4Mzg6CistICAgICAgICAgICAgY2FzZSAweDM5 OgorLSAgICAgICAgICAgIGNhc2UgMHgzQToKKy0gICAgICAgICAgICBjYXNlIDB4M0I6CistICAg ICAgICAgICAgY2FzZSAweDNDOgorLSAgICAgICAgICAgIGNhc2UgMHgzRDoKKy0gICAgICAgICAg ICBjYXNlIDB4M0U6CistICAgICAgICAgICAgY2FzZSAweDNGOgorLSAgICAgICAgICAgIGNhc2Ug MHg0MDoKKy0gICAgICAgICAgICBjYXNlIDB4NDE6CistICAgICAgICAgICAgY2FzZSAweDQyOgor LSAgICAgICAgICAgIGNhc2UgMHg0MzoKKy0gICAgICAgICAgICBjYXNlIDB4NDQ6CistICAgICAg ICAgICAgY2FzZSAweDQ1OgorLSAgICAgICAgICAgIGNhc2UgMHg0NjoKKy0gICAgICAgICAgICBj YXNlIDB4NDc6CistICAgICAgICAgICAgY2FzZSAweDQ4OgorLSAgICAgICAgICAgIGNhc2UgMHg0 OToKKy0gICAgICAgICAgICBjYXNlIDB4NEE6CistICAgICAgICAgICAgY2FzZSAweDRCOgorLSAg ICAgICAgICAgIGNhc2UgMHg0QzoKKy0gICAgICAgICAgICBjYXNlIDB4NEQ6CistICAgICAgICAg ICAgY2FzZSAweDRFOgorLSAgICAgICAgICAgIGNhc2UgMHg0RjoKKy0gICAgICAgICAgICBjYXNl IDB4NTA6CistICAgICAgICAgICAgY2FzZSAweDUxOgorLSAgICAgICAgICAgIGNhc2UgMHg1MjoK Ky0gICAgICAgICAgICBjYXNlIDB4NTM6CistICAgICAgICAgICAgY2FzZSAweDU0OgorLSAgICAg ICAgICAgIGNhc2UgMHg1NToKKy0gICAgICAgICAgICBjYXNlIDB4NTY6CistICAgICAgICAgICAg Y2FzZSAweDU3OgorLSAgICAgICAgICAgIGNhc2UgMHg1ODoKKy0gICAgICAgICAgICBjYXNlIDB4 NTk6CistICAgICAgICAgICAgY2FzZSAweDVBOgorLSAgICAgICAgICAgIGNhc2UgMHg1QjoKKy0g ICAgICAgICAgICBjYXNlIDB4NUM6CistICAgICAgICAgICAgY2FzZSAweDVEOgorLSAgICAgICAg ICAgIGNhc2UgMHg1RToKKy0gICAgICAgICAgICBjYXNlIDB4NUY6CistICAgICAgICAgICAgY2Fz ZSAweDYwOgorLSAgICAgICAgICAgIGNhc2UgMHg2MToKKy0gICAgICAgICAgICBjYXNlIDB4NjI6 CistICAgICAgICAgICAgY2FzZSAweDYzOgorLSAgICAgICAgICAgIGNhc2UgMHg2NDoKKy0gICAg ICAgICAgICBjYXNlIDB4NjU6CistICAgICAgICAgICAgY2FzZSAweDY2OgorLSAgICAgICAgICAg IGNhc2UgMHg2NzoKKy0gICAgICAgICAgICBjYXNlIDB4Njg6CistICAgICAgICAgICAgY2FzZSAw eDY5OgorLSAgICAgICAgICAgIGNhc2UgMHg2QToKKy0gICAgICAgICAgICBjYXNlIDB4NkI6Cist ICAgICAgICAgICAgY2FzZSAweDZDOgorLSAgICAgICAgICAgIGNhc2UgMHg2RDoKKy0gICAgICAg ICAgICBjYXNlIDB4NkU6CistICAgICAgICAgICAgY2FzZSAweDZGOgorLSAgICAgICAgICAgIGNh c2UgMHg3MDoKKy0gICAgICAgICAgICBjYXNlIDB4NzE6CistICAgICAgICAgICAgY2FzZSAweDcy OgorLSAgICAgICAgICAgIGNhc2UgMHg3MzoKKy0gICAgICAgICAgICBjYXNlIDB4NzQ6CistICAg ICAgICAgICAgY2FzZSAweDc1OgorLSAgICAgICAgICAgIGNhc2UgMHg3NjoKKy0gICAgICAgICAg ICBjYXNlIDB4Nzc6CistICAgICAgICAgICAgY2FzZSAweDc4OgorLSAgICAgICAgICAgIGNhc2Ug MHg3OToKKy0gICAgICAgICAgICBjYXNlIDB4N0E6CistICAgICAgICAgICAgY2FzZSAweDdCOgor LSAgICAgICAgICAgIGNhc2UgMHg3QzoKKy0gICAgICAgICAgICBjYXNlIDB4N0Q6CistICAgICAg ICAgICAgY2FzZSAweDdFOgorLSAgICAgICAgICAgIGNhc2UgMHg3RjoKKy0gICAgICAgICAgICAg ICAgcmV0dXJuIHNheC0+bnVtYmVyX3Vuc2lnbmVkKHN0YXRpY19jYXN0PG51bWJlcl91bnNpZ25l ZF90PihjdXJyZW50KSk7CistCistICAgICAgICAgICAgLy8gZml4bWFwCistICAgICAgICAgICAg Y2FzZSAweDgwOgorLSAgICAgICAgICAgIGNhc2UgMHg4MToKKy0gICAgICAgICAgICBjYXNlIDB4 ODI6CistICAgICAgICAgICAgY2FzZSAweDgzOgorLSAgICAgICAgICAgIGNhc2UgMHg4NDoKKy0g ICAgICAgICAgICBjYXNlIDB4ODU6CistICAgICAgICAgICAgY2FzZSAweDg2OgorLSAgICAgICAg ICAgIGNhc2UgMHg4NzoKKy0gICAgICAgICAgICBjYXNlIDB4ODg6CistICAgICAgICAgICAgY2Fz ZSAweDg5OgorLSAgICAgICAgICAgIGNhc2UgMHg4QToKKy0gICAgICAgICAgICBjYXNlIDB4OEI6 CistICAgICAgICAgICAgY2FzZSAweDhDOgorLSAgICAgICAgICAgIGNhc2UgMHg4RDoKKy0gICAg ICAgICAgICBjYXNlIDB4OEU6CistICAgICAgICAgICAgY2FzZSAweDhGOgorLSAgICAgICAgICAg ICAgICByZXR1cm4gZ2V0X21zZ3BhY2tfb2JqZWN0KHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pihz dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGN1cnJlbnQpICYgMHgwRnUpKTsKKy0KKy0gICAgICAg ICAgICAvLyBmaXhhcnJheQorLSAgICAgICAgICAgIGNhc2UgMHg5MDoKKy0gICAgICAgICAgICBj YXNlIDB4OTE6CistICAgICAgICAgICAgY2FzZSAweDkyOgorLSAgICAgICAgICAgIGNhc2UgMHg5 MzoKKy0gICAgICAgICAgICBjYXNlIDB4OTQ6CistICAgICAgICAgICAgY2FzZSAweDk1OgorLSAg ICAgICAgICAgIGNhc2UgMHg5NjoKKy0gICAgICAgICAgICBjYXNlIDB4OTc6CistICAgICAgICAg ICAgY2FzZSAweDk4OgorLSAgICAgICAgICAgIGNhc2UgMHg5OToKKy0gICAgICAgICAgICBjYXNl IDB4OUE6CistICAgICAgICAgICAgY2FzZSAweDlCOgorLSAgICAgICAgICAgIGNhc2UgMHg5QzoK Ky0gICAgICAgICAgICBjYXNlIDB4OUQ6CistICAgICAgICAgICAgY2FzZSAweDlFOgorLSAgICAg ICAgICAgIGNhc2UgMHg5RjoKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9tc2dwYWNrX2Fy cmF5KHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGN1 cnJlbnQpICYgMHgwRnUpKTsKKy0KKy0gICAgICAgICAgICAvLyBmaXhzdHIKKy0gICAgICAgICAg ICBjYXNlIDB4QTA6CistICAgICAgICAgICAgY2FzZSAweEExOgorLSAgICAgICAgICAgIGNhc2Ug MHhBMjoKKy0gICAgICAgICAgICBjYXNlIDB4QTM6CistICAgICAgICAgICAgY2FzZSAweEE0Ogor LSAgICAgICAgICAgIGNhc2UgMHhBNToKKy0gICAgICAgICAgICBjYXNlIDB4QTY6CistICAgICAg ICAgICAgY2FzZSAweEE3OgorLSAgICAgICAgICAgIGNhc2UgMHhBODoKKy0gICAgICAgICAgICBj YXNlIDB4QTk6CistICAgICAgICAgICAgY2FzZSAweEFBOgorLSAgICAgICAgICAgIGNhc2UgMHhB QjoKKy0gICAgICAgICAgICBjYXNlIDB4QUM6CistICAgICAgICAgICAgY2FzZSAweEFEOgorLSAg ICAgICAgICAgIGNhc2UgMHhBRToKKy0gICAgICAgICAgICBjYXNlIDB4QUY6CistICAgICAgICAg ICAgY2FzZSAweEIwOgorLSAgICAgICAgICAgIGNhc2UgMHhCMToKKy0gICAgICAgICAgICBjYXNl IDB4QjI6CistICAgICAgICAgICAgY2FzZSAweEIzOgorLSAgICAgICAgICAgIGNhc2UgMHhCNDoK Ky0gICAgICAgICAgICBjYXNlIDB4QjU6CistICAgICAgICAgICAgY2FzZSAweEI2OgorLSAgICAg ICAgICAgIGNhc2UgMHhCNzoKKy0gICAgICAgICAgICBjYXNlIDB4Qjg6CistICAgICAgICAgICAg Y2FzZSAweEI5OgorLSAgICAgICAgICAgIGNhc2UgMHhCQToKKy0gICAgICAgICAgICBjYXNlIDB4 QkI6CistICAgICAgICAgICAgY2FzZSAweEJDOgorLSAgICAgICAgICAgIGNhc2UgMHhCRDoKKy0g ICAgICAgICAgICBjYXNlIDB4QkU6CistICAgICAgICAgICAgY2FzZSAweEJGOgorLSAgICAgICAg ICAgIGNhc2UgMHhEOTogLy8gc3RyIDgKKy0gICAgICAgICAgICBjYXNlIDB4REE6IC8vIHN0ciAx NgorLSAgICAgICAgICAgIGNhc2UgMHhEQjogLy8gc3RyIDMyCistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBzdHJpbmdfdCBzOworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X21z Z3BhY2tfc3RyaW5nKHMpICYmIHNheC0+c3RyaW5nKHMpOworLSAgICAgICAgICAgIH0KKy0KKy0g ICAgICAgICAgICBjYXNlIDB4QzA6IC8vIG5pbAorLSAgICAgICAgICAgICAgICByZXR1cm4gc2F4 LT5udWxsKCk7CistCistICAgICAgICAgICAgY2FzZSAweEMyOiAvLyBmYWxzZQorLSAgICAgICAg ICAgICAgICByZXR1cm4gc2F4LT5ib29sZWFuKGZhbHNlKTsKKy0KKy0gICAgICAgICAgICBjYXNl IDB4QzM6IC8vIHRydWUKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHNheC0+Ym9vbGVhbih0cnVl KTsKKy0KKy0gICAgICAgICAgICBjYXNlIDB4QzQ6IC8vIGJpbiA4CistICAgICAgICAgICAgY2Fz ZSAweEM1OiAvLyBiaW4gMTYKKy0gICAgICAgICAgICBjYXNlIDB4QzY6IC8vIGJpbiAzMgorLSAg ICAgICAgICAgIGNhc2UgMHhDNzogLy8gZXh0IDgKKy0gICAgICAgICAgICBjYXNlIDB4Qzg6IC8v IGV4dCAxNgorLSAgICAgICAgICAgIGNhc2UgMHhDOTogLy8gZXh0IDMyCistICAgICAgICAgICAg Y2FzZSAweEQ0OiAvLyBmaXhleHQgMQorLSAgICAgICAgICAgIGNhc2UgMHhENTogLy8gZml4ZXh0 IDIKKy0gICAgICAgICAgICBjYXNlIDB4RDY6IC8vIGZpeGV4dCA0CistICAgICAgICAgICAgY2Fz ZSAweEQ3OiAvLyBmaXhleHQgOAorLSAgICAgICAgICAgIGNhc2UgMHhEODogLy8gZml4ZXh0IDE2 CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBiaW5hcnlfdCBiOworLSAgICAgICAg ICAgICAgICByZXR1cm4gZ2V0X21zZ3BhY2tfYmluYXJ5KGIpICYmIHNheC0+YmluYXJ5KGIpOwor LSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4Q0E6IC8vIGZsb2F0IDMyCist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBmbG9hdCBudW1iZXJ7fTsKKy0gICAgICAg ICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIG51bWJl cikgJiYgc2F4LT5udW1iZXJfZmxvYXQoc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KG51bWJl ciksICIiKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweENCOiAvLyBm bG9hdCA2NAorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgZG91YmxlIG51bWJlcnt9 OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6bXNn cGFjaywgbnVtYmVyKSAmJiBzYXgtPm51bWJlcl9mbG9hdChzdGF0aWNfY2FzdDxudW1iZXJfZmxv YXRfdD4obnVtYmVyKSwgIiIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl IDB4Q0M6IC8vIHVpbnQgOAorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjp1 aW50OF90IG51bWJlcnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1 dF9mb3JtYXRfdDo6bXNncGFjaywgbnVtYmVyKSAmJiBzYXgtPm51bWJlcl91bnNpZ25lZChudW1i ZXIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4Q0Q6IC8vIHVpbnQg MTYKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDE2X3QgbnVtYmVy e307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojpt c2dwYWNrLCBudW1iZXIpICYmIHNheC0+bnVtYmVyX3Vuc2lnbmVkKG51bWJlcik7CistICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHhDRTogLy8gdWludCAzMgorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjp1aW50MzJfdCBudW1iZXJ7fTsKKy0gICAgICAg ICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIG51bWJl cikgJiYgc2F4LT5udW1iZXJfdW5zaWduZWQobnVtYmVyKTsKKy0gICAgICAgICAgICB9CistCist ICAgICAgICAgICAgY2FzZSAweENGOiAvLyB1aW50IDY0CistICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICBzdGQ6OnVpbnQ2NF90IG51bWJlcnt9OworLSAgICAgICAgICAgICAgICByZXR1 cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6bXNncGFjaywgbnVtYmVyKSAmJiBzYXgtPm51 bWJlcl91bnNpZ25lZChudW1iZXIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBj YXNlIDB4RDA6IC8vIGludCA4CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6 OmludDhfdCBudW1iZXJ7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5w dXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIG51bWJlcikgJiYgc2F4LT5udW1iZXJfaW50ZWdlcihudW1i ZXIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4RDE6IC8vIGludCAx NgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjppbnQxNl90IG51bWJlcnt9 OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6bXNn cGFjaywgbnVtYmVyKSAmJiBzYXgtPm51bWJlcl9pbnRlZ2VyKG51bWJlcik7CistICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHhEMjogLy8gaW50IDMyCistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBzdGQ6OmludDMyX3QgbnVtYmVye307CistICAgICAgICAgICAg ICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCBudW1iZXIpICYm IHNheC0+bnVtYmVyX2ludGVnZXIobnVtYmVyKTsKKy0gICAgICAgICAgICB9CistCistICAgICAg ICAgICAgY2FzZSAweEQzOiAvLyBpbnQgNjQKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIHN0ZDo6aW50NjRfdCBudW1iZXJ7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9u dW1iZXIoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIG51bWJlcikgJiYgc2F4LT5udW1iZXJfaW50 ZWdlcihudW1iZXIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4REM6 IC8vIGFycmF5IDE2CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVpbnQx Nl90IGxlbnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3Jt YXRfdDo6bXNncGFjaywgbGVuKSAmJiBnZXRfbXNncGFja19hcnJheShzdGF0aWNfY2FzdDxzdGQ6 OnNpemVfdD4obGVuKSk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHhE RDogLy8gYXJyYXkgMzIKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWlu dDMyX3QgbGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zv cm1hdF90Ojptc2dwYWNrLCBsZW4pICYmIGdldF9tc2dwYWNrX2FycmF5KHN0YXRpY19jYXN0PHN0 ZDo6c2l6ZV90PihsZW4pKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAw eERFOiAvLyBtYXAgMTYKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWlu dDE2X3QgbGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zv cm1hdF90Ojptc2dwYWNrLCBsZW4pICYmIGdldF9tc2dwYWNrX29iamVjdChzdGF0aWNfY2FzdDxz dGQ6OnNpemVfdD4obGVuKSk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2Ug MHhERjogLy8gbWFwIDMyCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVp bnQzMl90IGxlbnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9m b3JtYXRfdDo6bXNncGFjaywgbGVuKSAmJiBnZXRfbXNncGFja19vYmplY3Qoc3RhdGljX2Nhc3Q8 c3RkOjpzaXplX3Q+KGxlbikpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBu ZWdhdGl2ZSBmaXhpbnQKKy0gICAgICAgICAgICBjYXNlIDB4RTA6CistICAgICAgICAgICAgY2Fz ZSAweEUxOgorLSAgICAgICAgICAgIGNhc2UgMHhFMjoKKy0gICAgICAgICAgICBjYXNlIDB4RTM6 CistICAgICAgICAgICAgY2FzZSAweEU0OgorLSAgICAgICAgICAgIGNhc2UgMHhFNToKKy0gICAg ICAgICAgICBjYXNlIDB4RTY6CistICAgICAgICAgICAgY2FzZSAweEU3OgorLSAgICAgICAgICAg IGNhc2UgMHhFODoKKy0gICAgICAgICAgICBjYXNlIDB4RTk6CistICAgICAgICAgICAgY2FzZSAw eEVBOgorLSAgICAgICAgICAgIGNhc2UgMHhFQjoKKy0gICAgICAgICAgICBjYXNlIDB4RUM6Cist ICAgICAgICAgICAgY2FzZSAweEVEOgorLSAgICAgICAgICAgIGNhc2UgMHhFRToKKy0gICAgICAg ICAgICBjYXNlIDB4RUY6CistICAgICAgICAgICAgY2FzZSAweEYwOgorLSAgICAgICAgICAgIGNh c2UgMHhGMToKKy0gICAgICAgICAgICBjYXNlIDB4RjI6CistICAgICAgICAgICAgY2FzZSAweEYz OgorLSAgICAgICAgICAgIGNhc2UgMHhGNDoKKy0gICAgICAgICAgICBjYXNlIDB4RjU6CistICAg ICAgICAgICAgY2FzZSAweEY2OgorLSAgICAgICAgICAgIGNhc2UgMHhGNzoKKy0gICAgICAgICAg ICBjYXNlIDB4Rjg6CistICAgICAgICAgICAgY2FzZSAweEY5OgorLSAgICAgICAgICAgIGNhc2Ug MHhGQToKKy0gICAgICAgICAgICBjYXNlIDB4RkI6CistICAgICAgICAgICAgY2FzZSAweEZDOgor LSAgICAgICAgICAgIGNhc2UgMHhGRDoKKy0gICAgICAgICAgICBjYXNlIDB4RkU6CistICAgICAg ICAgICAgY2FzZSAweEZGOgorLSAgICAgICAgICAgICAgICByZXR1cm4gc2F4LT5udW1iZXJfaW50 ZWdlcihzdGF0aWNfY2FzdDxzdGQ6OmludDhfdD4oY3VycmVudCkpOworLQorLSAgICAgICAgICAg IGRlZmF1bHQ6IC8vIGFueXRoaW5nIGVsc2UKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIGF1dG8gbGFzdF90b2tlbiA9IGdldF90b2tlbl9zdHJpbmcoKTsKKy0gICAgICAgICAgICAg ICAgcmV0dXJuIHNheC0+cGFyc2VfZXJyb3IoY2hhcnNfcmVhZCwgbGFzdF90b2tlbiwgcGFyc2Vf ZXJyb3I6OmNyZWF0ZSgxMTIsIGNoYXJzX3JlYWQsIGV4Y2VwdGlvbl9tZXNzYWdlKGlucHV0X2Zv cm1hdF90Ojptc2dwYWNrLCAiaW52YWxpZCBieXRlOiAweCIgKyBsYXN0X3Rva2VuLCAidmFsdWUi KSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICB9 CistCistICAgIC8qIQorLSAgICBAYnJpZWYgcmVhZHMgYSBNZXNzYWdlUGFjayBzdHJpbmcKKy0K Ky0gICAgVGhpcyBmdW5jdGlvbiBmaXJzdCByZWFkcyBzdGFydGluZyBieXRlcyB0byBkZXRlcm1p bmUgdGhlIGV4cGVjdGVkCistICAgIHN0cmluZyBsZW5ndGggYW5kIHRoZW4gY29waWVzIHRoaXMg bnVtYmVyIG9mIGJ5dGVzIGludG8gYSBzdHJpbmcuCistCistICAgIEBwYXJhbVtvdXRdIHJlc3Vs dCAgY3JlYXRlZCBzdHJpbmcKKy0KKy0gICAgQHJldHVybiB3aGV0aGVyIHN0cmluZyBjcmVhdGlv biBjb21wbGV0ZWQKKy0gICAgKi8KKy0gICAgYm9vbCBnZXRfbXNncGFja19zdHJpbmcoc3RyaW5n X3QmIHJlc3VsdCkKKy0gICAgeworLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCF1 bmV4cGVjdF9lb2YoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssICJzdHJpbmciKSkpCistICAgICAg ICB7CistICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgfQorLQorLSAgICAgICAg c3dpdGNoIChjdXJyZW50KQorLSAgICAgICAgeworLSAgICAgICAgICAgIC8vIGZpeHN0cgorLSAg ICAgICAgICAgIGNhc2UgMHhBMDoKKy0gICAgICAgICAgICBjYXNlIDB4QTE6CistICAgICAgICAg ICAgY2FzZSAweEEyOgorLSAgICAgICAgICAgIGNhc2UgMHhBMzoKKy0gICAgICAgICAgICBjYXNl IDB4QTQ6CistICAgICAgICAgICAgY2FzZSAweEE1OgorLSAgICAgICAgICAgIGNhc2UgMHhBNjoK Ky0gICAgICAgICAgICBjYXNlIDB4QTc6CistICAgICAgICAgICAgY2FzZSAweEE4OgorLSAgICAg ICAgICAgIGNhc2UgMHhBOToKKy0gICAgICAgICAgICBjYXNlIDB4QUE6CistICAgICAgICAgICAg Y2FzZSAweEFCOgorLSAgICAgICAgICAgIGNhc2UgMHhBQzoKKy0gICAgICAgICAgICBjYXNlIDB4 QUQ6CistICAgICAgICAgICAgY2FzZSAweEFFOgorLSAgICAgICAgICAgIGNhc2UgMHhBRjoKKy0g ICAgICAgICAgICBjYXNlIDB4QjA6CistICAgICAgICAgICAgY2FzZSAweEIxOgorLSAgICAgICAg ICAgIGNhc2UgMHhCMjoKKy0gICAgICAgICAgICBjYXNlIDB4QjM6CistICAgICAgICAgICAgY2Fz ZSAweEI0OgorLSAgICAgICAgICAgIGNhc2UgMHhCNToKKy0gICAgICAgICAgICBjYXNlIDB4QjY6 CistICAgICAgICAgICAgY2FzZSAweEI3OgorLSAgICAgICAgICAgIGNhc2UgMHhCODoKKy0gICAg ICAgICAgICBjYXNlIDB4Qjk6CistICAgICAgICAgICAgY2FzZSAweEJBOgorLSAgICAgICAgICAg IGNhc2UgMHhCQjoKKy0gICAgICAgICAgICBjYXNlIDB4QkM6CistICAgICAgICAgICAgY2FzZSAw eEJEOgorLSAgICAgICAgICAgIGNhc2UgMHhCRToKKy0gICAgICAgICAgICBjYXNlIDB4QkY6Cist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X3N0cmluZyhpbnB1dF9m b3JtYXRfdDo6bXNncGFjaywgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihjdXJyZW50KSAmIDB4 MUZ1LCByZXN1bHQpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4RDk6 IC8vIHN0ciA4CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVpbnQ4X3Qg bGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90 Ojptc2dwYWNrLCBsZW4pICYmIGdldF9zdHJpbmcoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIGxl biwgcmVzdWx0KTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweERBOiAv LyBzdHIgMTYKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDE2X3Qg bGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90 Ojptc2dwYWNrLCBsZW4pICYmIGdldF9zdHJpbmcoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIGxl biwgcmVzdWx0KTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweERCOiAv LyBzdHIgMzIKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDMyX3Qg bGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90 Ojptc2dwYWNrLCBsZW4pICYmIGdldF9zdHJpbmcoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIGxl biwgcmVzdWx0KTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgZGVmYXVsdDoKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGF1dG8gbGFzdF90b2tlbiA9IGdldF90b2tl bl9zdHJpbmcoKTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHNheC0+cGFyc2VfZXJyb3IoY2hh cnNfcmVhZCwgbGFzdF90b2tlbiwgcGFyc2VfZXJyb3I6OmNyZWF0ZSgxMTMsIGNoYXJzX3JlYWQs IGV4Y2VwdGlvbl9tZXNzYWdlKGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCAiZXhwZWN0ZWQgbGVu Z3RoIHNwZWNpZmljYXRpb24gKDB4QTAtMHhCRiwgMHhEOS0weERCKTsgbGFzdCBieXRlOiAweCIg KyBsYXN0X3Rva2VuLCAic3RyaW5nIiksIEJhc2ljSnNvblR5cGUoKSkpOworLSAgICAgICAgICAg IH0KKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIHJlYWRzIGEg TWVzc2FnZVBhY2sgYnl0ZSBhcnJheQorLQorLSAgICBUaGlzIGZ1bmN0aW9uIGZpcnN0IHJlYWRz IHN0YXJ0aW5nIGJ5dGVzIHRvIGRldGVybWluZSB0aGUgZXhwZWN0ZWQKKy0gICAgYnl0ZSBhcnJh eSBsZW5ndGggYW5kIHRoZW4gY29waWVzIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIGludG8gYSBieXRl IGFycmF5LgorLQorLSAgICBAcGFyYW1bb3V0XSByZXN1bHQgIGNyZWF0ZWQgYnl0ZSBhcnJheQor LQorLSAgICBAcmV0dXJuIHdoZXRoZXIgYnl0ZSBhcnJheSBjcmVhdGlvbiBjb21wbGV0ZWQKKy0g ICAgKi8KKy0gICAgYm9vbCBnZXRfbXNncGFja19iaW5hcnkoYmluYXJ5X3QmIHJlc3VsdCkKKy0g ICAgeworLSAgICAgICAgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3VidHlwZQorLSAg ICAgICAgYXV0byBhc3NpZ25fYW5kX3JldHVybl90cnVlID0gWyZyZXN1bHRdKHN0ZDo6aW50OF90 IHN1YnR5cGUpCistICAgICAgICB7CistICAgICAgICAgICAgcmVzdWx0LnNldF9zdWJ0eXBlKHN0 YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oc3VidHlwZSkpOworLSAgICAgICAgICAgIHJldHVybiB0 cnVlOworLSAgICAgICAgfTsKKy0KKy0gICAgICAgIHN3aXRjaCAoY3VycmVudCkKKy0gICAgICAg IHsKKy0gICAgICAgICAgICBjYXNlIDB4QzQ6IC8vIGJpbiA4CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBzdGQ6OnVpbnQ4X3QgbGVue307CistICAgICAgICAgICAgICAgIHJldHVy biBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCBsZW4pICYmCistICAgICAgICAg ICAgICAgICAgICAgICBnZXRfYmluYXJ5KGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCBsZW4sIHJl c3VsdCk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHhDNTogLy8gYmlu IDE2CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVpbnQxNl90IGxlbnt9 OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6bXNn cGFjaywgbGVuKSAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2JpbmFyeShpbnB1dF9m b3JtYXRfdDo6bXNncGFjaywgbGVuLCByZXN1bHQpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICBjYXNlIDB4QzY6IC8vIGJpbiAzMgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgc3RkOjp1aW50MzJfdCBsZW57fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9u dW1iZXIoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIGxlbikgJiYKKy0gICAgICAgICAgICAgICAg ICAgICAgIGdldF9iaW5hcnkoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIGxlbiwgcmVzdWx0KTsK Ky0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweEM3OiAvLyBleHQgOAorLSAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjp1aW50OF90IGxlbnt9OworLSAgICAg ICAgICAgICAgICBzdGQ6OmludDhfdCBzdWJ0eXBle307CistICAgICAgICAgICAgICAgIHJldHVy biBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCBsZW4pICYmCistICAgICAgICAg ICAgICAgICAgICAgICBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCBzdWJ0eXBl KSAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2JpbmFyeShpbnB1dF9mb3JtYXRfdDo6 bXNncGFjaywgbGVuLCByZXN1bHQpICYmCistICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25f YW5kX3JldHVybl90cnVlKHN1YnR5cGUpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICBjYXNlIDB4Qzg6IC8vIGV4dCAxNgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg c3RkOjp1aW50MTZfdCBsZW57fTsKKy0gICAgICAgICAgICAgICAgc3RkOjppbnQ4X3Qgc3VidHlw ZXt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6 bXNncGFjaywgbGVuKSAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgZ2V0X251bWJlcihpbnB1 dF9mb3JtYXRfdDo6bXNncGFjaywgc3VidHlwZSkgJiYKKy0gICAgICAgICAgICAgICAgICAgICAg IGdldF9iaW5hcnkoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIGxlbiwgcmVzdWx0KSAmJgorLSAg ICAgICAgICAgICAgICAgICAgICAgYXNzaWduX2FuZF9yZXR1cm5fdHJ1ZShzdWJ0eXBlKTsKKy0g ICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAweEM5OiAvLyBleHQgMzIKKy0gICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6dWludDMyX3QgbGVue307CistICAgICAg ICAgICAgICAgIHN0ZDo6aW50OF90IHN1YnR5cGV7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJu IGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIGxlbikgJiYKKy0gICAgICAgICAg ICAgICAgICAgICAgIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIHN1YnR5cGUp ICYmCistICAgICAgICAgICAgICAgICAgICAgICBnZXRfYmluYXJ5KGlucHV0X2Zvcm1hdF90Ojpt c2dwYWNrLCBsZW4sIHJlc3VsdCkgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbl9h bmRfcmV0dXJuX3RydWUoc3VidHlwZSk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAg IGNhc2UgMHhENDogLy8gZml4ZXh0IDEKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAg IHN0ZDo6aW50OF90IHN1YnR5cGV7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1i ZXIoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIHN1YnR5cGUpICYmCistICAgICAgICAgICAgICAg ICAgICAgICBnZXRfYmluYXJ5KGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCAxLCByZXN1bHQpICYm CistICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25fYW5kX3JldHVybl90cnVlKHN1YnR5cGUp OworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4RDU6IC8vIGZpeGV4dCAy CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OmludDhfdCBzdWJ0eXBle307 CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojptc2dw YWNrLCBzdWJ0eXBlKSAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2JpbmFyeShpbnB1 dF9mb3JtYXRfdDo6bXNncGFjaywgMiwgcmVzdWx0KSAmJgorLSAgICAgICAgICAgICAgICAgICAg ICAgYXNzaWduX2FuZF9yZXR1cm5fdHJ1ZShzdWJ0eXBlKTsKKy0gICAgICAgICAgICB9CistCist ICAgICAgICAgICAgY2FzZSAweEQ2OiAvLyBmaXhleHQgNAorLSAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgc3RkOjppbnQ4X3Qgc3VidHlwZXt9OworLSAgICAgICAgICAgICAgICByZXR1 cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6bXNncGFjaywgc3VidHlwZSkgJiYKKy0gICAg ICAgICAgICAgICAgICAgICAgIGdldF9iaW5hcnkoaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2ssIDQs IHJlc3VsdCkgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbl9hbmRfcmV0dXJuX3Ry dWUoc3VidHlwZSk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgMHhENzog Ly8gZml4ZXh0IDgKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6aW50OF90 IHN1YnR5cGV7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9y bWF0X3Q6Om1zZ3BhY2ssIHN1YnR5cGUpICYmCistICAgICAgICAgICAgICAgICAgICAgICBnZXRf YmluYXJ5KGlucHV0X2Zvcm1hdF90Ojptc2dwYWNrLCA4LCByZXN1bHQpICYmCistICAgICAgICAg ICAgICAgICAgICAgICBhc3NpZ25fYW5kX3JldHVybl90cnVlKHN1YnR5cGUpOworLSAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIDB4RDg6IC8vIGZpeGV4dCAxNgorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjppbnQ4X3Qgc3VidHlwZXt9OworLSAgICAgICAg ICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6bXNncGFjaywgc3VidHlw ZSkgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgIGdldF9iaW5hcnkoaW5wdXRfZm9ybWF0X3Q6 Om1zZ3BhY2ssIDE2LCByZXN1bHQpICYmCistICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25f YW5kX3JldHVybl90cnVlKHN1YnR5cGUpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICBkZWZhdWx0OiAgICAgICAgICAgLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICAgICAg cmV0dXJuIGZhbHNlOyAgLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgIH0KKy0gICAgfQorLQor LSAgICAvKiEKKy0gICAgQHBhcmFtW2luXSBsZW4gIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5Cist ICAgIEByZXR1cm4gd2hldGhlciBhcnJheSBjcmVhdGlvbiBjb21wbGV0ZWQKKy0gICAgKi8KKy0g ICAgYm9vbCBnZXRfbXNncGFja19hcnJheShjb25zdCBzdGQ6OnNpemVfdCBsZW4pCistICAgIHsK Ky0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghc2F4LT5zdGFydF9hcnJheShsZW4p KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICB9Cist CistICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCistICAgICAg ICB7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFwYXJzZV9tc2dwYWNr X2ludGVybmFsKCkpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiBzYXgt PmVuZF9hcnJheSgpOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAcGFyYW1baW5dIGxlbiAg dGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0CistICAgIEByZXR1cm4gd2hldGhlciBvYmplY3QgY3Jl YXRpb24gY29tcGxldGVkCistICAgICovCistICAgIGJvb2wgZ2V0X21zZ3BhY2tfb2JqZWN0KGNv bnN0IHN0ZDo6c2l6ZV90IGxlbikKKy0gICAgeworLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VO TElLRUxZKCFzYXgtPnN0YXJ0X29iamVjdChsZW4pKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICByZXR1cm4gZmFsc2U7CistICAgICAgICB9CistCistICAgICAgICBzdHJpbmdfdCBrZXk7Cist ICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCistICAgICAgICB7 CistICAgICAgICAgICAgZ2V0KCk7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElL RUxZKCFnZXRfbXNncGFja19zdHJpbmcoa2V5KSB8fCAhc2F4LT5rZXkoa2V5KSkpCistICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghcGFyc2VfbXNncGFja19p bnRlcm5hbCgpKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAga2V5LmNsZWFyKCk7CistICAgICAgICB9 CistCistICAgICAgICByZXR1cm4gc2F4LT5lbmRfb2JqZWN0KCk7CistICAgIH0KKy0KKy0gICAg Ly8vLy8vLy8vLy8vCistICAgIC8vIFVCSlNPTiAvLworLSAgICAvLy8vLy8vLy8vLy8KKy0KKy0g ICAgLyohCistICAgIEBwYXJhbVtpbl0gZ2V0X2NoYXIgIHdoZXRoZXIgYSBuZXcgY2hhcmFjdGVy IHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUKKy0gICAgICAgICAgICAgICAgICAgICAgICAg aW5wdXQgKHRydWUsIGRlZmF1bHQpIG9yIHdoZXRoZXIgdGhlIGxhc3QgcmVhZAorLSAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW5zdGVhZAor LQorLSAgICBAcmV0dXJuIHdoZXRoZXIgYSB2YWxpZCBVQkpTT04gdmFsdWUgd2FzIHBhc3NlZCB0 byB0aGUgU0FYIHBhcnNlcgorLSAgICAqLworLSAgICBib29sIHBhcnNlX3VianNvbl9pbnRlcm5h bChjb25zdCBib29sIGdldF9jaGFyID0gdHJ1ZSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGdl dF91Ympzb25fdmFsdWUoZ2V0X2NoYXIgPyBnZXRfaWdub3JlX25vb3AoKSA6IGN1cnJlbnQpOwor LSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgcmVhZHMgYSBVQkpTT04gc3RyaW5nCist CistICAgIFRoaXMgZnVuY3Rpb24gaXMgZWl0aGVyIGNhbGxlZCBhZnRlciByZWFkaW5nIHRoZSAn UycgYnl0ZSBleHBsaWNpdGx5CistICAgIGluZGljYXRpbmcgYSBzdHJpbmcsIG9yIGluIGNhc2Ug b2YgYW4gb2JqZWN0IGtleSB3aGVyZSB0aGUgJ1MnIGJ5dGUgY2FuIGJlCistICAgIGxlZnQgb3V0 LgorLQorLSAgICBAcGFyYW1bb3V0XSByZXN1bHQgICBjcmVhdGVkIHN0cmluZworLSAgICBAcGFy YW1baW5dIGdldF9jaGFyICB3aGV0aGVyIGEgbmV3IGNoYXJhY3RlciBzaG91bGQgYmUgcmV0cmll dmVkIGZyb20gdGhlCistICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ICh0cnVlLCBkZWZh dWx0KSBvciB3aGV0aGVyIHRoZSBsYXN0IHJlYWQKKy0gICAgICAgICAgICAgICAgICAgICAgICAg Y2hhcmFjdGVyIHNob3VsZCBiZSBjb25zaWRlcmVkIGluc3RlYWQKKy0KKy0gICAgQHJldHVybiB3 aGV0aGVyIHN0cmluZyBjcmVhdGlvbiBjb21wbGV0ZWQKKy0gICAgKi8KKy0gICAgYm9vbCBnZXRf dWJqc29uX3N0cmluZyhzdHJpbmdfdCYgcmVzdWx0LCBjb25zdCBib29sIGdldF9jaGFyID0gdHJ1 ZSkKKy0gICAgeworLSAgICAgICAgaWYgKGdldF9jaGFyKQorLSAgICAgICAgeworLSAgICAgICAg ICAgIGdldCgpOyAgLy8gVE9ETyhuaWVscyk6IG1heSB3ZSBpZ25vcmUgTiBoZXJlPworLSAgICAg ICAgfQorLQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCF1bmV4cGVjdF9lb2Yo aW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgInZhbHVlIikpKQorLSAgICAgICAgeworLSAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHN3aXRjaCAoY3VycmVu dCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlICdVJzoKKy0gICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgIHN0ZDo6dWludDhfdCBsZW57fTsKKy0gICAgICAgICAgICAgICAgcmV0 dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgbGVuKSAmJiBnZXRfc3RyaW5n KGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sIGxlbiwgcmVzdWx0KTsKKy0gICAgICAgICAgICB9Cist CistICAgICAgICAgICAgY2FzZSAnaSc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICBzdGQ6OmludDhfdCBsZW57fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIo aW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgbGVuKSAmJiBnZXRfc3RyaW5nKGlucHV0X2Zvcm1hdF90 Ojp1Ympzb24sIGxlbiwgcmVzdWx0KTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAg Y2FzZSAnSSc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OmludDE2X3Qg bGVue307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90 Ojp1Ympzb24sIGxlbikgJiYgZ2V0X3N0cmluZyhpbnB1dF9mb3JtYXRfdDo6dWJqc29uLCBsZW4s IHJlc3VsdCk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgJ2wnOgorLSAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjppbnQzMl90IGxlbnt9OworLSAgICAg ICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6dWJqc29uLCBsZW4p ICYmIGdldF9zdHJpbmcoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgbGVuLCByZXN1bHQpOworLSAg ICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlICdMJzoKKy0gICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgIHN0ZDo6aW50NjRfdCBsZW57fTsKKy0gICAgICAgICAgICAgICAgcmV0 dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgbGVuKSAmJiBnZXRfc3RyaW5n KGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sIGxlbiwgcmVzdWx0KTsKKy0gICAgICAgICAgICB9Cist CistICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgYXV0byBsYXN0X3Rva2Vu ID0gZ2V0X3Rva2VuX3N0cmluZygpOworLSAgICAgICAgICAgICAgICByZXR1cm4gc2F4LT5wYXJz ZV9lcnJvcihjaGFyc19yZWFkLCBsYXN0X3Rva2VuLCBwYXJzZV9lcnJvcjo6Y3JlYXRlKDExMywg Y2hhcnNfcmVhZCwgZXhjZXB0aW9uX21lc3NhZ2UoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgImV4 cGVjdGVkIGxlbmd0aCB0eXBlIHNwZWNpZmljYXRpb24gKFUsIGksIEksIGwsIEwpOyBsYXN0IGJ5 dGU6IDB4IiArIGxhc3RfdG9rZW4sICJzdHJpbmciKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAg ICAgICB9CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBwYXJhbVtvdXRdIHJlc3VsdCAgZGV0 ZXJtaW5lZCBzaXplCistICAgIEByZXR1cm4gd2hldGhlciBzaXplIGRldGVybWluYXRpb24gY29t cGxldGVkCistICAgICovCistICAgIGJvb2wgZ2V0X3VianNvbl9zaXplX3ZhbHVlKHN0ZDo6c2l6 ZV90JiByZXN1bHQpCistICAgIHsKKy0gICAgICAgIHN3aXRjaCAoZ2V0X2lnbm9yZV9ub29wKCkp CistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSAnVSc6CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBzdGQ6OnVpbnQ4X3QgbnVtYmVye307CistICAgICAgICAgICAgICAgIGlm IChKU09OX0hFRExFWV9VTkxJS0VMWSghZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6dWJqc29u LCBudW1iZXIpKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIHJlc3VsdCA9 IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihudW1iZXIpOworLSAgICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSAnaSc6CistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OmludDhfdCBudW1iZXJ7fTsKKy0gICAg ICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFnZXRfbnVtYmVyKGlucHV0X2Zv cm1hdF90Ojp1Ympzb24sIG51bWJlcikpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KG51bWJlcik7IC8vIE5PTElO VChidWdwcm9uZS1zaWduZWQtY2hhci1taXN1c2UsY2VydC1zdHIzNC1jKTogbnVtYmVyIGlzIG5v dCBhIGNoYXIKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CistICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgIGNhc2UgJ0knOgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgc3RkOjppbnQxNl90IG51bWJlcnt9OworLSAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURM RVlfVU5MSUtFTFkoIWdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgbnVtYmVyKSkp CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK Ky0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz dDxzdGQ6OnNpemVfdD4obnVtYmVyKTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cist ICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgJ2wnOgorLSAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgc3RkOjppbnQzMl90IG51bWJlcnt9OworLSAgICAgICAgICAgICAg ICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIWdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OnVi anNvbiwgbnVtYmVyKSkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICByZXN1 bHQgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4obnVtYmVyKTsKKy0gICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgJ0wnOgor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjppbnQ2NF90IG51bWJlcnt9Owor LSAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIWdldF9udW1iZXIoaW5w dXRfZm9ybWF0X3Q6OnVianNvbiwgbnVtYmVyKSkpCistICAgICAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4obnVtYmVyKTsKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAg ICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBhdXRvIGxhc3Rf dG9rZW4gPSBnZXRfdG9rZW5fc3RyaW5nKCk7CistICAgICAgICAgICAgICAgIHJldHVybiBzYXgt PnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsIGxhc3RfdG9rZW4sIHBhcnNlX2Vycm9yOjpjcmVhdGUo MTEzLCBjaGFyc19yZWFkLCBleGNlcHRpb25fbWVzc2FnZShpbnB1dF9mb3JtYXRfdDo6dWJqc29u LCAiZXhwZWN0ZWQgbGVuZ3RoIHR5cGUgc3BlY2lmaWNhdGlvbiAoVSwgaSwgSSwgbCwgTCkgYWZ0 ZXIgJyMnOyBsYXN0IGJ5dGU6IDB4IiArIGxhc3RfdG9rZW4sICJzaXplIiksIEJhc2ljSnNvblR5 cGUoKSkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEK Ky0gICAgQGJyaWVmIGRldGVybWluZSB0aGUgdHlwZSBhbmQgc2l6ZSBmb3IgYSBjb250YWluZXIK Ky0KKy0gICAgSW4gdGhlIG9wdGltaXplZCBVQkpTT04gZm9ybWF0LCBhIHR5cGUgYW5kIGEgc2l6 ZSBjYW4gYmUgcHJvdmlkZWQgdG8gYWxsb3cKKy0gICAgZm9yIGEgbW9yZSBjb21wYWN0IHJlcHJl c2VudGF0aW9uLgorLQorLSAgICBAcGFyYW1bb3V0XSByZXN1bHQgIHBhaXIgb2YgdGhlIHNpemUg YW5kIHRoZSB0eXBlCistCistICAgIEByZXR1cm4gd2hldGhlciBwYWlyIGNyZWF0aW9uIGNvbXBs ZXRlZAorLSAgICAqLworLSAgICBib29sIGdldF91Ympzb25fc2l6ZV90eXBlKHN0ZDo6cGFpcjxz dGQ6OnNpemVfdCwgY2hhcl9pbnRfdHlwZT4mIHJlc3VsdCkKKy0gICAgeworLSAgICAgICAgcmVz dWx0LmZpcnN0ID0gc3RyaW5nX3Q6Om5wb3M7IC8vIHNpemUKKy0gICAgICAgIHJlc3VsdC5zZWNv bmQgPSAwOyAvLyB0eXBlCistCistICAgICAgICBnZXRfaWdub3JlX25vb3AoKTsKKy0KKy0gICAg ICAgIGlmIChjdXJyZW50ID09ICckJykKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXN1bHQu c2Vjb25kID0gZ2V0KCk7ICAvLyBtdXN0IG5vdCBpZ25vcmUgJ04nLCBiZWNhdXNlICdOJyBtYXli ZSB0aGUgdHlwZQorLSAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghdW5leHBl Y3RfZW9mKGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sICJ0eXBlIikpKQorLSAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICBnZXRfaWdub3JlX25vb3AoKTsKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlf VU5MSUtFTFkoY3VycmVudCAhPSAnIycpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCF1bmV4cGVjdF9lb2YoaW5wdXRfZm9ybWF0X3Q6 OnVianNvbiwgInZhbHVlIikpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAg YXV0byBsYXN0X3Rva2VuID0gZ2V0X3Rva2VuX3N0cmluZygpOworLSAgICAgICAgICAgICAgICBy ZXR1cm4gc2F4LT5wYXJzZV9lcnJvcihjaGFyc19yZWFkLCBsYXN0X3Rva2VuLCBwYXJzZV9lcnJv cjo6Y3JlYXRlKDExMiwgY2hhcnNfcmVhZCwgZXhjZXB0aW9uX21lc3NhZ2UoaW5wdXRfZm9ybWF0 X3Q6OnVianNvbiwgImV4cGVjdGVkICcjJyBhZnRlciB0eXBlIGluZm9ybWF0aW9uOyBsYXN0IGJ5 dGU6IDB4IiArIGxhc3RfdG9rZW4sICJzaXplIiksIEJhc2ljSnNvblR5cGUoKSkpOworLSAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICByZXR1cm4gZ2V0X3VianNvbl9zaXplX3ZhbHVlKHJl c3VsdC5maXJzdCk7CistICAgICAgICB9CistCistICAgICAgICBpZiAoY3VycmVudCA9PSAnIycp CistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIGdldF91Ympzb25fc2l6ZV92YWx1ZShy ZXN1bHQuZmlyc3QpOworLSAgICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIHRydWU7CistICAg IH0KKy0KKy0gICAgLyohCistICAgIEBwYXJhbSBwcmVmaXggIHRoZSBwcmV2aW91c2x5IHJlYWQg b3Igc2V0IHR5cGUgcHJlZml4CistICAgIEByZXR1cm4gd2hldGhlciB2YWx1ZSBjcmVhdGlvbiBj b21wbGV0ZWQKKy0gICAgKi8KKy0gICAgYm9vbCBnZXRfdWJqc29uX3ZhbHVlKGNvbnN0IGNoYXJf aW50X3R5cGUgcHJlZml4KQorLSAgICB7CistICAgICAgICBzd2l0Y2ggKHByZWZpeCkKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICBjYXNlIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9m KCk6ICAvLyBFT0YKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHVuZXhwZWN0X2VvZihpbnB1dF9m b3JtYXRfdDo6dWJqc29uLCAidmFsdWUiKTsKKy0KKy0gICAgICAgICAgICBjYXNlICdUJzogIC8v IHRydWUKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHNheC0+Ym9vbGVhbih0cnVlKTsKKy0gICAg ICAgICAgICBjYXNlICdGJzogIC8vIGZhbHNlCistICAgICAgICAgICAgICAgIHJldHVybiBzYXgt PmJvb2xlYW4oZmFsc2UpOworLQorLSAgICAgICAgICAgIGNhc2UgJ1onOiAgLy8gbnVsbAorLSAg ICAgICAgICAgICAgICByZXR1cm4gc2F4LT5udWxsKCk7CistCistICAgICAgICAgICAgY2FzZSAn VSc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OnVpbnQ4X3QgbnVtYmVy e307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojp1 Ympzb24sIG51bWJlcikgJiYgc2F4LT5udW1iZXJfdW5zaWduZWQobnVtYmVyKTsKKy0gICAgICAg ICAgICB9CistCistICAgICAgICAgICAgY2FzZSAnaSc6CistICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICBzdGQ6OmludDhfdCBudW1iZXJ7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJu IGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgbnVtYmVyKSAmJiBzYXgtPm51bWJl cl9pbnRlZ2VyKG51bWJlcik7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2Ug J0knOgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgc3RkOjppbnQxNl90IG51bWJl cnt9OworLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X251bWJlcihpbnB1dF9mb3JtYXRfdDo6 dWJqc29uLCBudW1iZXIpICYmIHNheC0+bnVtYmVyX2ludGVnZXIobnVtYmVyKTsKKy0gICAgICAg ICAgICB9CistCistICAgICAgICAgICAgY2FzZSAnbCc6CistICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICBzdGQ6OmludDMyX3QgbnVtYmVye307CistICAgICAgICAgICAgICAgIHJldHVy biBnZXRfbnVtYmVyKGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sIG51bWJlcikgJiYgc2F4LT5udW1i ZXJfaW50ZWdlcihudW1iZXIpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl ICdMJzoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6aW50NjRfdCBudW1i ZXJ7fTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF9udW1iZXIoaW5wdXRfZm9ybWF0X3Q6 OnVianNvbiwgbnVtYmVyKSAmJiBzYXgtPm51bWJlcl9pbnRlZ2VyKG51bWJlcik7CistICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgJ2QnOgorLSAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgZmxvYXQgbnVtYmVye307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRf bnVtYmVyKGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sIG51bWJlcikgJiYgc2F4LT5udW1iZXJfZmxv YXQoc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KG51bWJlciksICIiKTsKKy0gICAgICAgICAg ICB9CistCistICAgICAgICAgICAgY2FzZSAnRCc6CistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICBkb3VibGUgbnVtYmVye307CistICAgICAgICAgICAgICAgIHJldHVybiBnZXRfbnVt YmVyKGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sIG51bWJlcikgJiYgc2F4LT5udW1iZXJfZmxvYXQo c3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KG51bWJlciksICIiKTsKKy0gICAgICAgICAgICB9 CistCistICAgICAgICAgICAgY2FzZSAnSCc6CistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICByZXR1cm4gZ2V0X3VianNvbl9oaWdoX3ByZWNpc2lvbl9udW1iZXIoKTsKKy0gICAgICAg ICAgICB9CistCistICAgICAgICAgICAgY2FzZSAnQyc6ICAvLyBjaGFyCistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBnZXQoKTsKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVE TEVZX1VOTElLRUxZKCF1bmV4cGVjdF9lb2YoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgImNoYXIi KSkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlf VU5MSUtFTFkoY3VycmVudCA+IDEyNykpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgIGF1dG8gbGFzdF90b2tlbiA9IGdldF90b2tlbl9zdHJpbmcoKTsKKy0gICAgICAg ICAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsIGxhc3RfdG9r ZW4sIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTEzLCBjaGFyc19yZWFkLCBleGNlcHRpb25fbWVzc2Fn ZShpbnB1dF9mb3JtYXRfdDo6dWJqc29uLCAiYnl0ZSBhZnRlciAnQycgbXVzdCBiZSBpbiByYW5n ZSAweDAwLi4weDdGOyBsYXN0IGJ5dGU6IDB4IiArIGxhc3RfdG9rZW4sICJjaGFyIiksIEJhc2lj SnNvblR5cGUoKSkpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIHN0cmlu Z190IHMoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KGN1cnJl bnQpKTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHNheC0+c3RyaW5nKHMpOworLSAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlICdTJzogIC8vIHN0cmluZworLSAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgc3RyaW5nX3QgczsKKy0gICAgICAgICAgICAgICAgcmV0dXJu IGdldF91Ympzb25fc3RyaW5nKHMpICYmIHNheC0+c3RyaW5nKHMpOworLSAgICAgICAgICAgIH0K Ky0KKy0gICAgICAgICAgICBjYXNlICdbJzogIC8vIGFycmF5CistICAgICAgICAgICAgICAgIHJl dHVybiBnZXRfdWJqc29uX2FycmF5KCk7CistCistICAgICAgICAgICAgY2FzZSAneyc6ICAvLyBv YmplY3QKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF91Ympzb25fb2JqZWN0KCk7CistCist ICAgICAgICAgICAgZGVmYXVsdDogLy8gYW55dGhpbmcgZWxzZQorLSAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgYXV0byBsYXN0X3Rva2VuID0gZ2V0X3Rva2VuX3N0cmluZygpOworLSAg ICAgICAgICAgICAgICByZXR1cm4gc2F4LT5wYXJzZV9lcnJvcihjaGFyc19yZWFkLCBsYXN0X3Rv a2VuLCBwYXJzZV9lcnJvcjo6Y3JlYXRlKDExMiwgY2hhcnNfcmVhZCwgZXhjZXB0aW9uX21lc3Nh Z2UoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwgImludmFsaWQgYnl0ZTogMHgiICsgbGFzdF90b2tl biwgInZhbHVlIiksIEJhc2ljSnNvblR5cGUoKSkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAg IH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQHJldHVybiB3aGV0aGVyIGFycmF5IGNyZWF0 aW9uIGNvbXBsZXRlZAorLSAgICAqLworLSAgICBib29sIGdldF91Ympzb25fYXJyYXkoKQorLSAg ICB7CistICAgICAgICBzdGQ6OnBhaXI8c3RkOjpzaXplX3QsIGNoYXJfaW50X3R5cGU+IHNpemVf YW5kX3R5cGU7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIWdldF91Ympzb25f c2l6ZV90eXBlKHNpemVfYW5kX3R5cGUpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1 cm4gZmFsc2U7CistICAgICAgICB9CistCistICAgICAgICBpZiAoc2l6ZV9hbmRfdHlwZS5maXJz dCAhPSBzdHJpbmdfdDo6bnBvcykKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoSlNPTl9I RURMRVlfVU5MSUtFTFkoIXNheC0+c3RhcnRfYXJyYXkoc2l6ZV9hbmRfdHlwZS5maXJzdCkpKQor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICBpZiAoc2l6ZV9hbmRfdHlwZS5zZWNvbmQgIT0gMCkKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmIChzaXplX2FuZF90eXBlLnNlY29uZCAh PSAnTicpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGZvciAoc3Rk OjpzaXplX3QgaSA9IDA7IGkgPCBzaXplX2FuZF90eXBlLmZpcnN0OyArK2kpCistICAgICAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VO TElLRUxZKCFnZXRfdWJqc29uX3ZhbHVlKHNpemVfYW5kX3R5cGUuc2Vjb25kKSkpCistICAgICAg ICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CistICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAg fQorLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2UK Ky0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7 IGkgPCBzaXplX2FuZF90eXBlLmZpcnN0OyArK2kpCistICAgICAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghcGFyc2VfdWJqc29uX2lu dGVybmFsKCkpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAg IHsKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXNheC0+c3RhcnRfYXJy YXkoc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSkpKQorLSAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICB3aGlsZSAoY3VycmVudCAhPSAnXScpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXBhcnNlX3VianNvbl9pbnRlcm5hbChmYWxzZSkp KQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7 CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZ2V0X2lnbm9yZV9ub29wKCk7 CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIHNheC0+ZW5k X2FycmF5KCk7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEByZXR1cm4gd2hldGhlciBvYmpl Y3QgY3JlYXRpb24gY29tcGxldGVkCistICAgICovCistICAgIGJvb2wgZ2V0X3VianNvbl9vYmpl Y3QoKQorLSAgICB7CistICAgICAgICBzdGQ6OnBhaXI8c3RkOjpzaXplX3QsIGNoYXJfaW50X3R5 cGU+IHNpemVfYW5kX3R5cGU7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIWdl dF91Ympzb25fc2l6ZV90eXBlKHNpemVfYW5kX3R5cGUpKSkKKy0gICAgICAgIHsKKy0gICAgICAg ICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICB9CistCistICAgICAgICBzdHJpbmdfdCBrZXk7 CistICAgICAgICBpZiAoc2l6ZV9hbmRfdHlwZS5maXJzdCAhPSBzdHJpbmdfdDo6bnBvcykKKy0g ICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXNheC0+c3Rh cnRfb2JqZWN0KHNpemVfYW5kX3R5cGUuZmlyc3QpKSkKKy0gICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAg aWYgKHNpemVfYW5kX3R5cGUuc2Vjb25kICE9IDApCistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZV9hbmRfdHlwZS5maXJzdDsg KytpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9I RURMRVlfVU5MSUtFTFkoIWdldF91Ympzb25fc3RyaW5nKGtleSkgfHwgIXNheC0+a2V5KGtleSkp KQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGlm IChKU09OX0hFRExFWV9VTkxJS0VMWSghZ2V0X3VianNvbl92YWx1ZShzaXplX2FuZF90eXBlLnNl Y29uZCkpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAg ICAgIGtleS5jbGVhcigpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgfQorLSAg ICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGZvciAoc3Rk OjpzaXplX3QgaSA9IDA7IGkgPCBzaXplX2FuZF90eXBlLmZpcnN0OyArK2kpCistICAgICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSgh Z2V0X3VianNvbl9zdHJpbmcoa2V5KSB8fCAhc2F4LT5rZXkoa2V5KSkpCistICAgICAgICAgICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAg ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VO TElLRUxZKCFwYXJzZV91Ympzb25faW50ZXJuYWwoKSkpCistICAgICAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgICAg ICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAga2V5LmNsZWFyKCk7CistICAgICAgICAgICAg ICAgIH0KKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICBlbHNlCistICAgICAg ICB7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFzYXgtPnN0YXJ0X29i amVjdChzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpKSkpCistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAg ICAgIHdoaWxlIChjdXJyZW50ICE9ICd9JykKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghZ2V0X3VianNvbl9zdHJpbmcoa2V5LCBmYWxz ZSkgfHwgIXNheC0+a2V5KGtleSkpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFwYXJzZV91Ympzb25faW50ZXJuYWwoKSkpCist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0g ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBnZXRfaWdub3JlX25vb3AoKTsKKy0g ICAgICAgICAgICAgICAga2V5LmNsZWFyKCk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQor LQorLSAgICAgICAgcmV0dXJuIHNheC0+ZW5kX29iamVjdCgpOworLSAgICB9CistCistICAgIC8v IE5vdGUsIG5vIHJlYWRlciBmb3IgVUJKU09OIGJpbmFyeSB0eXBlcyBpcyBpbXBsZW1lbnRlZCBi ZWNhdXNlIHRoZXkgZG8KKy0gICAgLy8gbm90IGV4aXN0CistCistICAgIGJvb2wgZ2V0X3VianNv bl9oaWdoX3ByZWNpc2lvbl9udW1iZXIoKQorLSAgICB7CistICAgICAgICAvLyBnZXQgc2l6ZSBv ZiBmb2xsb3dpbmcgbnVtYmVyIHN0cmluZworLSAgICAgICAgc3RkOjpzaXplX3Qgc2l6ZXt9Owor LSAgICAgICAgYXV0byByZXMgPSBnZXRfdWJqc29uX3NpemVfdmFsdWUoc2l6ZSk7CistICAgICAg ICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXJlcykpCistICAgICAgICB7CistICAgICAgICAg ICAgcmV0dXJuIHJlczsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIGdldCBudW1iZXIgc3Ry aW5nCistICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPiBudW1iZXJfdmVjdG9yOworLSAgICAgICAg Zm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICBnZXQoKTsKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXVu ZXhwZWN0X2VvZihpbnB1dF9mb3JtYXRfdDo6dWJqc29uLCAibnVtYmVyIikpKQorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0g ICAgICAgICAgICBudW1iZXJfdmVjdG9yLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPihjdXJy ZW50KSk7CistICAgICAgICB9CistCistICAgICAgICAvLyBwYXJzZSBudW1iZXIgc3RyaW5nCist ICAgICAgICB1c2luZyBpYV90eXBlID0gZGVjbHR5cGUoZGV0YWlsOjppbnB1dF9hZGFwdGVyKG51 bWJlcl92ZWN0b3IpKTsKKy0gICAgICAgIGF1dG8gbnVtYmVyX2xleGVyID0gZGV0YWlsOjpsZXhl cjxCYXNpY0pzb25UeXBlLCBpYV90eXBlPihkZXRhaWw6OmlucHV0X2FkYXB0ZXIobnVtYmVyX3Zl Y3RvciksIGZhbHNlKTsKKy0gICAgICAgIGNvbnN0IGF1dG8gcmVzdWx0X251bWJlciA9IG51bWJl cl9sZXhlci5zY2FuKCk7CistICAgICAgICBjb25zdCBhdXRvIG51bWJlcl9zdHJpbmcgPSBudW1i ZXJfbGV4ZXIuZ2V0X3Rva2VuX3N0cmluZygpOworLSAgICAgICAgY29uc3QgYXV0byByZXN1bHRf cmVtYWluZGVyID0gbnVtYmVyX2xleGVyLnNjYW4oKTsKKy0KKy0gICAgICAgIHVzaW5nIHRva2Vu X3R5cGUgPSB0eXBlbmFtZSBkZXRhaWw6OmxleGVyX2Jhc2U8QmFzaWNKc29uVHlwZT46OnRva2Vu X3R5cGU7CistCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkocmVzdWx0X3JlbWFp bmRlciAhPSB0b2tlbl90eXBlOjplbmRfb2ZfaW5wdXQpKQorLSAgICAgICAgeworLSAgICAgICAg ICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsIG51bWJlcl9zdHJpbmcsIHBh cnNlX2Vycm9yOjpjcmVhdGUoMTE1LCBjaGFyc19yZWFkLCBleGNlcHRpb25fbWVzc2FnZShpbnB1 dF9mb3JtYXRfdDo6dWJqc29uLCAiaW52YWxpZCBudW1iZXIgdGV4dDogIiArIG51bWJlcl9sZXhl ci5nZXRfdG9rZW5fc3RyaW5nKCksICJoaWdoLXByZWNpc2lvbiBudW1iZXIiKSwgQmFzaWNKc29u VHlwZSgpKSk7CistICAgICAgICB9CistCistICAgICAgICBzd2l0Y2ggKHJlc3VsdF9udW1iZXIp CistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjp2YWx1ZV9pbnRlZ2Vy OgorLSAgICAgICAgICAgICAgICByZXR1cm4gc2F4LT5udW1iZXJfaW50ZWdlcihudW1iZXJfbGV4 ZXIuZ2V0X251bWJlcl9pbnRlZ2VyKCkpOworLSAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6 dmFsdWVfdW5zaWduZWQ6CistICAgICAgICAgICAgICAgIHJldHVybiBzYXgtPm51bWJlcl91bnNp Z25lZChudW1iZXJfbGV4ZXIuZ2V0X251bWJlcl91bnNpZ25lZCgpKTsKKy0gICAgICAgICAgICBj YXNlIHRva2VuX3R5cGU6OnZhbHVlX2Zsb2F0OgorLSAgICAgICAgICAgICAgICByZXR1cm4gc2F4 LT5udW1iZXJfZmxvYXQobnVtYmVyX2xleGVyLmdldF9udW1iZXJfZmxvYXQoKSwgc3RkOjptb3Zl KG51bWJlcl9zdHJpbmcpKTsKKy0gICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnVuaW5pdGlh bGl6ZWQ6CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpsaXRlcmFsX3RydWU6CistICAg ICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpsaXRlcmFsX2ZhbHNlOgorLSAgICAgICAgICAgIGNh c2UgdG9rZW5fdHlwZTo6bGl0ZXJhbF9udWxsOgorLSAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlw ZTo6dmFsdWVfc3RyaW5nOgorLSAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6YmVnaW5fYXJy YXk6CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpiZWdpbl9vYmplY3Q6CistICAgICAg ICAgICAgY2FzZSB0b2tlbl90eXBlOjplbmRfYXJyYXk6CistICAgICAgICAgICAgY2FzZSB0b2tl bl90eXBlOjplbmRfb2JqZWN0OgorLSAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6bmFtZV9z ZXBhcmF0b3I6CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3I6 CistICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjoKKy0gICAgICAgICAg ICBjYXNlIHRva2VuX3R5cGU6OmVuZF9vZl9pbnB1dDoKKy0gICAgICAgICAgICBjYXNlIHRva2Vu X3R5cGU6OmxpdGVyYWxfb3JfdmFsdWU6CistICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAg ICAgICAgICAgcmV0dXJuIHNheC0+cGFyc2VfZXJyb3IoY2hhcnNfcmVhZCwgbnVtYmVyX3N0cmlu ZywgcGFyc2VfZXJyb3I6OmNyZWF0ZSgxMTUsIGNoYXJzX3JlYWQsIGV4Y2VwdGlvbl9tZXNzYWdl KGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sICJpbnZhbGlkIG51bWJlciB0ZXh0OiAiICsgbnVtYmVy X2xleGVyLmdldF90b2tlbl9zdHJpbmcoKSwgImhpZ2gtcHJlY2lzaW9uIG51bWJlciIpLCBCYXNp Y0pzb25UeXBlKCkpKTsKKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLworLSAgICAvLyBVdGlsaXR5IGZ1bmN0aW9ucyAvLworLSAgICAvLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLworLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGdldCBuZXh0IGNoYXJhY3Rl ciBmcm9tIHRoZSBpbnB1dAorLQorLSAgICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSBpbnRl cmZhY2UgdG8gdGhlIHVzZWQgaW5wdXQgYWRhcHRlci4gSXQgZG9lcworLSAgICBub3QgdGhyb3cg aW4gY2FzZSB0aGUgaW5wdXQgcmVhY2hlZCBFT0YsIGJ1dCByZXR1cm5zIGEgLSd2ZSB2YWx1ZWQK Ky0gICAgYHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKClgIGluIHRoYXQgY2FzZS4K Ky0KKy0gICAgQHJldHVybiBjaGFyYWN0ZXIgcmVhZCBmcm9tIHRoZSBpbnB1dAorLSAgICAqLwor LSAgICBjaGFyX2ludF90eXBlIGdldCgpCistICAgIHsKKy0gICAgICAgICsrY2hhcnNfcmVhZDsK Ky0gICAgICAgIHJldHVybiBjdXJyZW50ID0gaWEuZ2V0X2NoYXJhY3RlcigpOworLSAgICB9Cist CistICAgIC8qIQorLSAgICBAcmV0dXJuIGNoYXJhY3RlciByZWFkIGZyb20gdGhlIGlucHV0IGFm dGVyIGlnbm9yaW5nIGFsbCAnTicgZW50cmllcworLSAgICAqLworLSAgICBjaGFyX2ludF90eXBl IGdldF9pZ25vcmVfbm9vcCgpCistICAgIHsKKy0gICAgICAgIGRvCistICAgICAgICB7CistICAg ICAgICAgICAgZ2V0KCk7CistICAgICAgICB9CistICAgICAgICB3aGlsZSAoY3VycmVudCA9PSAn TicpOworLQorLSAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CistICAgIH0KKy0KKy0gICAgLyoKKy0g ICAgQGJyaWVmIHJlYWQgYSBudW1iZXIgZnJvbSB0aGUgaW5wdXQKKy0KKy0gICAgQHRwYXJhbSBO dW1iZXJUeXBlIHRoZSB0eXBlIG9mIHRoZSBudW1iZXIKKy0gICAgQHBhcmFtW2luXSBmb3JtYXQg ICB0aGUgY3VycmVudCBmb3JtYXQgKGZvciBkaWFnbm9zdGljcykKKy0gICAgQHBhcmFtW291dF0g cmVzdWx0ICBudW1iZXIgb2YgdHlwZSBAYSBOdW1iZXJUeXBlCistCistICAgIEByZXR1cm4gd2hl dGhlciBjb252ZXJzaW9uIGNvbXBsZXRlZAorLQorLSAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIG5l ZWRzIHRvIHJlc3BlY3QgdGhlIHN5c3RlbSdzIGVuZGlhbm5lc3MsIGJlY2F1c2UKKy0gICAgICAg ICAgYnl0ZXMgaW4gQ0JPUiwgTWVzc2FnZVBhY2ssIGFuZCBVQkpTT04gYXJlIHN0b3JlZCBpbiBu ZXR3b3JrIG9yZGVyCistICAgICAgICAgIChiaWcgZW5kaWFuKSBhbmQgdGhlcmVmb3JlIG5lZWQg cmVvcmRlcmluZyBvbiBsaXR0bGUgZW5kaWFuIHN5c3RlbXMuCistICAgICovCistICAgIHRlbXBs YXRlPHR5cGVuYW1lIE51bWJlclR5cGUsIGJvb2wgSW5wdXRJc0xpdHRsZUVuZGlhbiA9IGZhbHNl PgorLSAgICBib29sIGdldF9udW1iZXIoY29uc3QgaW5wdXRfZm9ybWF0X3QgZm9ybWF0LCBOdW1i ZXJUeXBlJiByZXN1bHQpCistICAgIHsKKy0gICAgICAgIC8vIHN0ZXAgMTogcmVhZCBpbnB1dCBp bnRvIGFycmF5IHdpdGggc3lzdGVtJ3MgYnl0ZSBvcmRlcgorLSAgICAgICAgc3RkOjphcnJheTxz dGQ6OnVpbnQ4X3QsIHNpemVvZihOdW1iZXJUeXBlKT4gdmVje307CistICAgICAgICBmb3IgKHN0 ZDo6c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKE51bWJlclR5cGUpOyArK2kpCistICAgICAgICB7 CistICAgICAgICAgICAgZ2V0KCk7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElL RUxZKCF1bmV4cGVjdF9lb2YoZm9ybWF0LCAibnVtYmVyIikpKQorLSAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAg ICAgICAvLyByZXZlcnNlIGJ5dGUgb3JkZXIgcHJpb3IgdG8gY29udmVyc2lvbiBpZiBuZWNlc3Nh cnkKKy0gICAgICAgICAgICBpZiAoaXNfbGl0dGxlX2VuZGlhbiAhPSBJbnB1dElzTGl0dGxlRW5k aWFuKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgdmVjW3NpemVvZihOdW1iZXJU eXBlKSAtIGkgLSAxXSA9IHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oY3VycmVudCk7CistICAg ICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIHZlY1tpXSA9IHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oY3VycmVudCk7IC8vIExD T1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLQorLSAgICAgICAgLy8g c3RlcCAyOiBjb252ZXJ0IGFycmF5IGludG8gbnVtYmVyIG9mIHR5cGUgVCBhbmQgcmV0dXJuCist ICAgICAgICBzdGQ6Om1lbWNweSgmcmVzdWx0LCB2ZWMuZGF0YSgpLCBzaXplb2YoTnVtYmVyVHlw ZSkpOworLSAgICAgICAgcmV0dXJuIHRydWU7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBi cmllZiBjcmVhdGUgYSBzdHJpbmcgYnkgcmVhZGluZyBjaGFyYWN0ZXJzIGZyb20gdGhlIGlucHV0 CistCistICAgIEB0cGFyYW0gTnVtYmVyVHlwZSB0aGUgdHlwZSBvZiB0aGUgbnVtYmVyCistICAg IEBwYXJhbVtpbl0gZm9ybWF0IHRoZSBjdXJyZW50IGZvcm1hdCAoZm9yIGRpYWdub3N0aWNzKQor LSAgICBAcGFyYW1baW5dIGxlbiBudW1iZXIgb2YgY2hhcmFjdGVycyB0byByZWFkCistICAgIEBw YXJhbVtvdXRdIHJlc3VsdCBzdHJpbmcgY3JlYXRlZCBieSByZWFkaW5nIEBhIGxlbiBieXRlcwor LQorLSAgICBAcmV0dXJuIHdoZXRoZXIgc3RyaW5nIGNyZWF0aW9uIGNvbXBsZXRlZAorLQorLSAg ICBAbm90ZSBXZSBjYW4gbm90IHJlc2VydmUgQGEgbGVuIGJ5dGVzIGZvciB0aGUgcmVzdWx0LCBi ZWNhdXNlIEBhIGxlbgorLSAgICAgICAgICBtYXkgYmUgdG9vIGxhcmdlLiBVc3VhbGx5LCBAcmVm IHVuZXhwZWN0X2VvZigpIGRldGVjdHMgdGhlIGVuZCBvZgorLSAgICAgICAgICB0aGUgaW5wdXQg YmVmb3JlIHdlIHJ1biBvdXQgb2Ygc3RyaW5nIG1lbW9yeS4KKy0gICAgKi8KKy0gICAgdGVtcGxh dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4KKy0gICAgYm9vbCBnZXRfc3RyaW5nKGNvbnN0IGlucHV0 X2Zvcm1hdF90IGZvcm1hdCwKKy0gICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlclR5cGUg bGVuLAorLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3QmIHJlc3VsdCkKKy0gICAgeworLSAg ICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKy0gICAgICAgIGZvciAoTnVtYmVyVHlwZSBpID0g MDsgaSA8IGxlbjsgaSsrKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGdldCgpOworLSAgICAg ICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghdW5leHBlY3RfZW9mKGZvcm1hdCwgInN0 cmluZyIpKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxz ZTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAg IHJlc3VsdC5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5 cGU+KGN1cnJlbnQpKTsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiBzdWNjZXNzOworLSAg ICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgY3JlYXRlIGEgYnl0ZSBhcnJheSBieSByZWFk aW5nIGJ5dGVzIGZyb20gdGhlIGlucHV0CistCistICAgIEB0cGFyYW0gTnVtYmVyVHlwZSB0aGUg dHlwZSBvZiB0aGUgbnVtYmVyCistICAgIEBwYXJhbVtpbl0gZm9ybWF0IHRoZSBjdXJyZW50IGZv cm1hdCAoZm9yIGRpYWdub3N0aWNzKQorLSAgICBAcGFyYW1baW5dIGxlbiBudW1iZXIgb2YgYnl0 ZXMgdG8gcmVhZAorLSAgICBAcGFyYW1bb3V0XSByZXN1bHQgYnl0ZSBhcnJheSBjcmVhdGVkIGJ5 IHJlYWRpbmcgQGEgbGVuIGJ5dGVzCistCistICAgIEByZXR1cm4gd2hldGhlciBieXRlIGFycmF5 IGNyZWF0aW9uIGNvbXBsZXRlZAorLQorLSAgICBAbm90ZSBXZSBjYW4gbm90IHJlc2VydmUgQGEg bGVuIGJ5dGVzIGZvciB0aGUgcmVzdWx0LCBiZWNhdXNlIEBhIGxlbgorLSAgICAgICAgICBtYXkg YmUgdG9vIGxhcmdlLiBVc3VhbGx5LCBAcmVmIHVuZXhwZWN0X2VvZigpIGRldGVjdHMgdGhlIGVu ZCBvZgorLSAgICAgICAgICB0aGUgaW5wdXQgYmVmb3JlIHdlIHJ1biBvdXQgb2YgbWVtb3J5Lgor LSAgICAqLworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBlPgorLSAgICBib29sIGdl dF9iaW5hcnkoY29uc3QgaW5wdXRfZm9ybWF0X3QgZm9ybWF0LAorLSAgICAgICAgICAgICAgICAg ICAgY29uc3QgTnVtYmVyVHlwZSBsZW4sCistICAgICAgICAgICAgICAgICAgICBiaW5hcnlfdCYg cmVzdWx0KQorLSAgICB7CistICAgICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworLSAgICAgICAg Zm9yIChOdW1iZXJUeXBlIGkgPSAwOyBpIDwgbGVuOyBpKyspCistICAgICAgICB7CistICAgICAg ICAgICAgZ2V0KCk7CistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCF1bmV4 cGVjdF9lb2YoZm9ybWF0LCAiYmluYXJ5IikpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgc3VjY2VzcyA9IGZhbHNlOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAg ICAgICB9CistICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhzdGF0aWNfY2FzdDxzdGQ6OnVp bnQ4X3Q+KGN1cnJlbnQpKTsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiBzdWNjZXNzOwor LSAgICB9CistCistICAgIC8qIQorLSAgICBAcGFyYW1baW5dIGZvcm1hdCAgIHRoZSBjdXJyZW50 IGZvcm1hdCAoZm9yIGRpYWdub3N0aWNzKQorLSAgICBAcGFyYW1baW5dIGNvbnRleHQgIGZ1cnRo ZXIgY29udGV4dCBpbmZvcm1hdGlvbiAoZm9yIGRpYWdub3N0aWNzKQorLSAgICBAcmV0dXJuIHdo ZXRoZXIgdGhlIGxhc3QgcmVhZCBjaGFyYWN0ZXIgaXMgbm90IEVPRgorLSAgICAqLworLSAgICBK U09OX0hFRExFWV9OT05fTlVMTCgzKQorLSAgICBib29sIHVuZXhwZWN0X2VvZihjb25zdCBpbnB1 dF9mb3JtYXRfdCBmb3JtYXQsIGNvbnN0IGNoYXIqIGNvbnRleHQpIGNvbnN0CistICAgIHsKKy0g ICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShjdXJyZW50ID09IHN0ZDo6Y2hhcl90cmFp dHM8Y2hhcl90eXBlPjo6ZW9mKCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiBz YXgtPnBhcnNlX2Vycm9yKGNoYXJzX3JlYWQsICI8ZW5kIG9mIGZpbGU+IiwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9lcnJvcjo6Y3JlYXRlKDExMCwgY2hhcnNf cmVhZCwgZXhjZXB0aW9uX21lc3NhZ2UoZm9ybWF0LCAidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQi LCBjb250ZXh0KSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICB9CistICAgICAgICByZXR1 cm4gdHJ1ZTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQHJldHVybiBhIHN0cmluZyByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgbGFzdCByZWFkIGJ5dGUKKy0gICAgKi8KKy0gICAgc3RkOjpzdHJp bmcgZ2V0X3Rva2VuX3N0cmluZygpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHN0ZDo6YXJyYXk8 Y2hhciwgMz4gY3J7e319OworLSAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oKHN0ZDo6c25wcmlu dGYpKGNyLmRhdGEoKSwgY3Iuc2l6ZSgpLCAiJS4yaGhYIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oY3VycmVudCkpKTsgLy8gTk9MSU5UKGNwcGNvcmVndWlkZWxpbmVzLXByby10eXBlLXZh cmFyZyxoaWNwcC12YXJhcmcpCistICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmd7Y3IuZGF0YSgp fTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQHBhcmFtW2luXSBmb3JtYXQgICB0aGUgY3Vy cmVudCBmb3JtYXQKKy0gICAgQHBhcmFtW2luXSBkZXRhaWwgICBhIGRldGFpbGVkIGVycm9yIG1l c3NhZ2UKKy0gICAgQHBhcmFtW2luXSBjb250ZXh0ICBmdXJ0aGVyIGNvbnRleHQgaW5mb3JtYXRp b24KKy0gICAgQHJldHVybiBhIG1lc3NhZ2Ugc3RyaW5nIHRvIHVzZSBpbiB0aGUgcGFyc2VfZXJy b3IgZXhjZXB0aW9ucworLSAgICAqLworLSAgICBzdGQ6OnN0cmluZyBleGNlcHRpb25fbWVzc2Fn ZShjb25zdCBpbnB1dF9mb3JtYXRfdCBmb3JtYXQsCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXRhaWwsCistICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZXh0KSBjb25zdAorLSAgICB7 CistICAgICAgICBzdGQ6OnN0cmluZyBlcnJvcl9tc2cgPSAic3ludGF4IGVycm9yIHdoaWxlIHBh cnNpbmcgIjsKKy0KKy0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQorLSAgICAgICAgeworLSAgICAg ICAgICAgIGNhc2UgaW5wdXRfZm9ybWF0X3Q6OmNib3I6CistICAgICAgICAgICAgICAgIGVycm9y X21zZyArPSAiQ0JPUiI7CistICAgICAgICAgICAgICAgIGJyZWFrOworLQorLSAgICAgICAgICAg IGNhc2UgaW5wdXRfZm9ybWF0X3Q6Om1zZ3BhY2s6CistICAgICAgICAgICAgICAgIGVycm9yX21z ZyArPSAiTWVzc2FnZVBhY2siOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0KKy0gICAgICAg ICAgICBjYXNlIGlucHV0X2Zvcm1hdF90Ojp1Ympzb246CistICAgICAgICAgICAgICAgIGVycm9y X21zZyArPSAiVUJKU09OIjsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistCistICAgICAgICAg ICAgY2FzZSBpbnB1dF9mb3JtYXRfdDo6YnNvbjoKKy0gICAgICAgICAgICAgICAgZXJyb3JfbXNn ICs9ICJCU09OIjsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistCistICAgICAgICAgICAgY2Fz ZSBpbnB1dF9mb3JtYXRfdDo6anNvbjogLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICBk ZWZhdWx0OiAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgIEpT T05fQVNTRVJUKGZhbHNlKTsgLy8gTk9MSU5UKGNlcnQtZGNsMDMtYyxoaWNwcC1zdGF0aWMtYXNz ZXJ0LG1pc2Mtc3RhdGljLWFzc2VydCkgTENPVl9FWENMX0xJTkUKKy0gICAgICAgIH0KKy0KKy0g ICAgICAgIHJldHVybiBlcnJvcl9tc2cgKyAiICIgKyBjb250ZXh0ICsgIjogIiArIGRldGFpbDsK Ky0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0gICAgLy8vIGlucHV0IGFkYXB0ZXIKKy0gICAgSW5w dXRBZGFwdGVyVHlwZSBpYTsKKy0KKy0gICAgLy8vIHRoZSBjdXJyZW50IGNoYXJhY3RlcgorLSAg ICBjaGFyX2ludF90eXBlIGN1cnJlbnQgPSBzdGQ6OmNoYXJfdHJhaXRzPGNoYXJfdHlwZT46OmVv ZigpOworLQorLSAgICAvLy8gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQKKy0gICAgc3Rk OjpzaXplX3QgY2hhcnNfcmVhZCA9IDA7CistCistICAgIC8vLyB3aGV0aGVyIHdlIGNhbiBhc3N1 bWUgbGl0dGxlIGVuZGlhbm5lc3MKKy0gICAgY29uc3QgYm9vbCBpc19saXR0bGVfZW5kaWFuID0g bGl0dGxlX2VuZGlhbm5lc3MoKTsKKy0KKy0gICAgLy8vIHRoZSBTQVggcGFyc2VyCistICAgIGpz b25fc2F4X3QqIHNheCA9IG51bGxwdHI7CistfTsKKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCist fSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFp bC9pbnB1dC9pbnB1dF9hZGFwdGVycy5ocHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2Rl dGFpbC9pbnB1dC9sZXhlci5ocHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9p bnB1dC9wYXJzZXIuaHBwPgorLQorLQorLSNpbmNsdWRlIDxjbWF0aD4gLy8gaXNmaW5pdGUKKy0j aW5jbHVkZSA8Y3N0ZGludD4gLy8gdWludDhfdAorLSNpbmNsdWRlIDxmdW5jdGlvbmFsPiAvLyBm dW5jdGlvbgorLSNpbmNsdWRlIDxzdHJpbmc+IC8vIHN0cmluZworLSNpbmNsdWRlIDx1dGlsaXR5 PiAvLyBtb3ZlCistI2luY2x1ZGUgPHZlY3Rvcj4gLy8gdmVjdG9yCistCistLy8gI2luY2x1ZGUg PG5sb2htYW5uL2RldGFpbC9leGNlcHRpb25zLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1h bm4vZGV0YWlsL2lucHV0L2lucHV0X2FkYXB0ZXJzLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxv aG1hbm4vZGV0YWlsL2lucHV0L2pzb25fc2F4LmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1h bm4vZGV0YWlsL2lucHV0L2xleGVyLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0 YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21l dGEvaXNfc2F4LmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL3ZhbHVlX3Qu aHBwPgorLQorLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCist eworLS8vLy8vLy8vLy8vLworLS8vIHBhcnNlciAvLworLS8vLy8vLy8vLy8vLworLQorLWVudW0g Y2xhc3MgcGFyc2VfZXZlbnRfdCA6IHN0ZDo6dWludDhfdAorLXsKKy0gICAgLy8vIHRoZSBwYXJz ZXIgcmVhZCBge2AgYW5kIHN0YXJ0ZWQgdG8gcHJvY2VzcyBhIEpTT04gb2JqZWN0CistICAgIG9i amVjdF9zdGFydCwKKy0gICAgLy8vIHRoZSBwYXJzZXIgcmVhZCBgfWAgYW5kIGZpbmlzaGVkIHBy b2Nlc3NpbmcgYSBKU09OIG9iamVjdAorLSAgICBvYmplY3RfZW5kLAorLSAgICAvLy8gdGhlIHBh cnNlciByZWFkIGBbYCBhbmQgc3RhcnRlZCB0byBwcm9jZXNzIGEgSlNPTiBhcnJheQorLSAgICBh cnJheV9zdGFydCwKKy0gICAgLy8vIHRoZSBwYXJzZXIgcmVhZCBgXWAgYW5kIGZpbmlzaGVkIHBy b2Nlc3NpbmcgYSBKU09OIGFycmF5CistICAgIGFycmF5X2VuZCwKKy0gICAgLy8vIHRoZSBwYXJz ZXIgcmVhZCBhIGtleSBvZiBhIHZhbHVlIGluIGFuIG9iamVjdAorLSAgICBrZXksCistICAgIC8v LyB0aGUgcGFyc2VyIGZpbmlzaGVkIHJlYWRpbmcgYSBKU09OIHZhbHVlCistICAgIHZhbHVlCist fTsKKy0KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLXVzaW5nIHBhcnNlcl9j YWxsYmFja190ID0KKy0gICAgc3RkOjpmdW5jdGlvbjxib29sKGludCAvKmRlcHRoKi8sIHBhcnNl X2V2ZW50X3QgLypldmVudCovLCBCYXNpY0pzb25UeXBlJiAvKnBhcnNlZCovKT47CistCistLyoh CistQGJyaWVmIHN5bnRheCBhbmFseXNpcworLQorLVRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHJl Y3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4KKy0qLworLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNv blR5cGUsIHR5cGVuYW1lIElucHV0QWRhcHRlclR5cGU+CistY2xhc3MgcGFyc2VyCisteworLSAg ICB1c2luZyBudW1iZXJfaW50ZWdlcl90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVy X2ludGVnZXJfdDsKKy0gICAgdXNpbmcgbnVtYmVyX3Vuc2lnbmVkX3QgPSB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpudW1iZXJfdW5zaWduZWRfdDsKKy0gICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3Qg PSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfZmxvYXRfdDsKKy0gICAgdXNpbmcgc3Ry aW5nX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdfdDsKKy0gICAgdXNpbmcgbGV4 ZXJfdCA9IGxleGVyPEJhc2ljSnNvblR5cGUsIElucHV0QWRhcHRlclR5cGU+OworLSAgICB1c2lu ZyB0b2tlbl90eXBlID0gdHlwZW5hbWUgbGV4ZXJfdDo6dG9rZW5fdHlwZTsKKy0KKy0gIHB1Ymxp YzoKKy0gICAgLy8vIGEgcGFyc2VyIHJlYWRpbmcgZnJvbSBhbiBpbnB1dCBhZGFwdGVyCistICAg IGV4cGxpY2l0IHBhcnNlcihJbnB1dEFkYXB0ZXJUeXBlJiYgYWRhcHRlciwKKy0gICAgICAgICAg ICAgICAgICAgIGNvbnN0IHBhcnNlcl9jYWxsYmFja190PEJhc2ljSnNvblR5cGU+IGNiID0gbnVs bHB0ciwKKy0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfZXhjZXB0aW9uc18g PSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBza2lwX2NvbW1lbnRzID0g ZmFsc2UpCistICAgICAgICA6IGNhbGxiYWNrKGNiKQorLSAgICAgICAgLCBtX2xleGVyKHN0ZDo6 bW92ZShhZGFwdGVyKSwgc2tpcF9jb21tZW50cykKKy0gICAgICAgICwgYWxsb3dfZXhjZXB0aW9u cyhhbGxvd19leGNlcHRpb25zXykKKy0gICAgeworLSAgICAgICAgLy8gcmVhZCBmaXJzdCB0b2tl bgorLSAgICAgICAgZ2V0X3Rva2VuKCk7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmll ZiBwdWJsaWMgcGFyc2VyIGludGVyZmFjZQorLQorLSAgICBAcGFyYW1baW5dIHN0cmljdCAgICAg IHdoZXRoZXIgdG8gZXhwZWN0IHRoZSBsYXN0IHRva2VuIHRvIGJlIEVPRgorLSAgICBAcGFyYW1b aW4sb3V0XSByZXN1bHQgIHBhcnNlZCBKU09OIHZhbHVlCistCistICAgIEB0aHJvdyBwYXJzZV9l cnJvci4xMDEgaW4gY2FzZSBvZiBhbiB1bmV4cGVjdGVkIHRva2VuCistICAgIEB0aHJvdyBwYXJz ZV9lcnJvci4xMDIgaWYgdG9fdW5pY29kZSBmYWlscyBvciBzdXJyb2dhdGUgZXJyb3IKKy0gICAg QHRocm93IHBhcnNlX2Vycm9yLjEwMyBpZiB0b191bmljb2RlIGZhaWxzCistICAgICovCistICAg IHZvaWQgcGFyc2UoY29uc3QgYm9vbCBzdHJpY3QsIEJhc2ljSnNvblR5cGUmIHJlc3VsdCkKKy0g ICAgeworLSAgICAgICAgaWYgKGNhbGxiYWNrKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGpz b25fc2F4X2RvbV9jYWxsYmFja19wYXJzZXI8QmFzaWNKc29uVHlwZT4gc2RwKHJlc3VsdCwgY2Fs bGJhY2ssIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICAgICAgICAgIHNheF9wYXJzZV9pbnRlcm5h bCgmc2RwKTsKKy0KKy0gICAgICAgICAgICAvLyBpbiBzdHJpY3QgbW9kZSwgaW5wdXQgbXVzdCBi ZSBjb21wbGV0ZWx5IHJlYWQKKy0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIChnZXRfdG9rZW4o KSAhPSB0b2tlbl90eXBlOjplbmRfb2ZfaW5wdXQpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgc2RwLnBhcnNlX2Vycm9yKG1fbGV4ZXIuZ2V0X3Bvc2l0aW9uKCksCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdldF90b2tlbl9zdHJpbmcoKSwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTAxLCBt X2xleGVyLmdldF9wb3NpdGlvbigpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbWVzc2FnZSh0b2tlbl90eXBlOjplbmRfb2Zf aW5wdXQsICJ2YWx1ZSIpLCBCYXNpY0pzb25UeXBlKCkpKTsKKy0gICAgICAgICAgICB9CistCist ICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBhbiBlcnJvciwgcmV0dXJuIGRpc2NhcmRlZCB2YWx1 ZQorLSAgICAgICAgICAgIGlmIChzZHAuaXNfZXJyb3JlZCgpKQorLSAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWVfdDo6ZGlzY2FyZGVkOworLSAgICAgICAgICAg ICAgICByZXR1cm47CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIC8vIHNldCB0b3At bGV2ZWwgdmFsdWUgdG8gbnVsbCBpZiBpdCB3YXMgZGlzY2FyZGVkIGJ5IHRoZSBjYWxsYmFjawor LSAgICAgICAgICAgIC8vIGZ1bmN0aW9uCistICAgICAgICAgICAgaWYgKHJlc3VsdC5pc19kaXNj YXJkZWQoKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGxw dHI7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAg eworLSAgICAgICAgICAgIGpzb25fc2F4X2RvbV9wYXJzZXI8QmFzaWNKc29uVHlwZT4gc2RwKHJl c3VsdCwgYWxsb3dfZXhjZXB0aW9ucyk7CistICAgICAgICAgICAgc2F4X3BhcnNlX2ludGVybmFs KCZzZHApOworLQorLSAgICAgICAgICAgIC8vIGluIHN0cmljdCBtb2RlLCBpbnB1dCBtdXN0IGJl IGNvbXBsZXRlbHkgcmVhZAorLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgKGdldF90b2tlbigp ICE9IHRva2VuX3R5cGU6OmVuZF9vZl9pbnB1dCkpCistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICBzZHAucGFyc2VfZXJyb3IobV9sZXhlci5nZXRfcG9zaXRpb24oKSwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIuZ2V0X3Rva2VuX3N0cmluZygpLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDEsIG1f bGV4ZXIuZ2V0X3Bvc2l0aW9uKCksIGV4Y2VwdGlvbl9tZXNzYWdlKHRva2VuX3R5cGU6OmVuZF9v Zl9pbnB1dCwgInZhbHVlIiksIEJhc2ljSnNvblR5cGUoKSkpOworLSAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGFuIGVycm9yLCByZXR1cm4gZGlzY2FyZGVkIHZh bHVlCistICAgICAgICAgICAgaWYgKHNkcC5pc19lcnJvcmVkKCkpCistICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZV90OjpkaXNjYXJkZWQ7CistICAgICAgICAg ICAgICAgIHJldHVybjsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistCistICAgICAgICBy ZXN1bHQuYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJp ZWYgcHVibGljIGFjY2VwdCBpbnRlcmZhY2UKKy0KKy0gICAgQHBhcmFtW2luXSBzdHJpY3QgIHdo ZXRoZXIgdG8gZXhwZWN0IHRoZSBsYXN0IHRva2VuIHRvIGJlIEVPRgorLSAgICBAcmV0dXJuIHdo ZXRoZXIgdGhlIGlucHV0IGlzIGEgcHJvcGVyIEpTT04gdGV4dAorLSAgICAqLworLSAgICBib29s IGFjY2VwdChjb25zdCBib29sIHN0cmljdCA9IHRydWUpCistICAgIHsKKy0gICAgICAgIGpzb25f c2F4X2FjY2VwdG9yPEJhc2ljSnNvblR5cGU+IHNheF9hY2NlcHRvcjsKKy0gICAgICAgIHJldHVy biBzYXhfcGFyc2UoJnNheF9hY2NlcHRvciwgc3RyaWN0KTsKKy0gICAgfQorLQorLSAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBTQVg+CistICAgIEpTT05fSEVETEVZX05PTl9OVUxMKDIpCistICAgIGJv b2wgc2F4X3BhcnNlKFNBWCogc2F4LCBjb25zdCBib29sIHN0cmljdCA9IHRydWUpCistICAgIHsK Ky0gICAgICAgICh2b2lkKWRldGFpbDo6aXNfc2F4X3N0YXRpY19hc3NlcnRzPFNBWCwgQmFzaWNK c29uVHlwZT4ge307CistICAgICAgICBjb25zdCBib29sIHJlc3VsdCA9IHNheF9wYXJzZV9pbnRl cm5hbChzYXgpOworLQorLSAgICAgICAgLy8gc3RyaWN0IG1vZGU6IG5leHQgYnl0ZSBtdXN0IGJl IEVPRgorLSAgICAgICAgaWYgKHJlc3VsdCAmJiBzdHJpY3QgJiYgKGdldF90b2tlbigpICE9IHRv a2VuX3R5cGU6OmVuZF9vZl9pbnB1dCkpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJu IHNheC0+cGFyc2VfZXJyb3IobV9sZXhlci5nZXRfcG9zaXRpb24oKSwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdldF90b2tlbl9zdHJpbmcoKSwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9lcnJvcjo6Y3JlYXRlKDEwMSwg bV9sZXhlci5nZXRfcG9zaXRpb24oKSwgZXhjZXB0aW9uX21lc3NhZ2UodG9rZW5fdHlwZTo6ZW5k X29mX2lucHV0LCAidmFsdWUiKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICB9CistCist ICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICBwcml2YXRlOgorLSAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBTQVg+CistICAgIEpTT05fSEVETEVZX05PTl9OVUxMKDIpCistICAgIGJv b2wgc2F4X3BhcnNlX2ludGVybmFsKFNBWCogc2F4KQorLSAgICB7CistICAgICAgICAvLyBzdGFj ayB0byByZW1lbWJlciB0aGUgaGllcmFyY2h5IG9mIHN0cnVjdHVyZWQgdmFsdWVzIHdlIGFyZSBw YXJzaW5nCistICAgICAgICAvLyB0cnVlID0gYXJyYXk7IGZhbHNlID0gb2JqZWN0CistICAgICAg ICBzdGQ6OnZlY3Rvcjxib29sPiBzdGF0ZXM7CistICAgICAgICAvLyB2YWx1ZSB0byBhdm9pZCBh IGdvdG8gKHNlZSBjb21tZW50IHdoZXJlIHNldCB0byB0cnVlKQorLSAgICAgICAgYm9vbCBza2lw X3RvX3N0YXRlX2V2YWx1YXRpb24gPSBmYWxzZTsKKy0KKy0gICAgICAgIHdoaWxlICh0cnVlKQor LSAgICAgICAgeworLSAgICAgICAgICAgIGlmICghc2tpcF90b19zdGF0ZV9ldmFsdWF0aW9uKQor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gaW52YXJpYW50OiBnZXRfdG9rZW4o KSB3YXMgY2FsbGVkIGJlZm9yZSBlYWNoIGl0ZXJhdGlvbgorLSAgICAgICAgICAgICAgICBzd2l0 Y2ggKGxhc3RfdG9rZW4pCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IGNhc2UgdG9rZW5fdHlwZTo6YmVnaW5fb2JqZWN0OgorLSAgICAgICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghc2F4LT5z dGFydF9vYmplY3Qoc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSkpKQorLSAgICAgICAgICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAg ICAvLyBjbG9zaW5nIH0gLT4gd2UgYXJlIGRvbmUKKy0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAoZ2V0X3Rva2VuKCkgPT0gdG9rZW5fdHlwZTo6ZW5kX29iamVjdCkKKy0gICAgICAgICAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExF WV9VTkxJS0VMWSghc2F4LT5lbmRfb2JqZWN0KCkpKQorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cist ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAg ICAgICAgICAgIC8vIHBhcnNlIGtleQorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09O X0hFRExFWV9VTkxJS0VMWShsYXN0X3Rva2VuICE9IHRva2VuX3R5cGU6OnZhbHVlX3N0cmluZykp CistICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gc2F4LT5wYXJzZV9lcnJvcihtX2xleGVyLmdldF9wb3NpdGlvbigpLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdl dF90b2tlbl9zdHJpbmcoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDEsIG1fbGV4ZXIuZ2V0X3Bvc2l0 aW9uKCksIGV4Y2VwdGlvbl9tZXNzYWdlKHRva2VuX3R5cGU6OnZhbHVlX3N0cmluZywgIm9iamVj dCBrZXkiKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgfQor LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghc2F4LT5r ZXkobV9sZXhlci5nZXRfc3RyaW5nKCkpKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAg ICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2Ugc2VwYXJh dG9yICg6KQorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VM WShnZXRfdG9rZW4oKSAhPSB0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRvcikpCistICAgICAgICAg ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2F4 LT5wYXJzZV9lcnJvcihtX2xleGVyLmdldF9wb3NpdGlvbigpLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdldF90b2tlbl9zdHJp bmcoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDEsIG1fbGV4ZXIuZ2V0X3Bvc2l0aW9uKCksIGV4Y2Vw dGlvbl9tZXNzYWdlKHRva2VuX3R5cGU6Om5hbWVfc2VwYXJhdG9yLCAib2JqZWN0IHNlcGFyYXRv ciIpLCBCYXNpY0pzb25UeXBlKCkpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB9CistCist ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtZW1iZXIgd2UgYXJlIG5vdyBpbnNpZGUgYW4g b2JqZWN0CistICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzLnB1c2hfYmFjayhmYWxzZSk7 CistCistICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgdmFsdWVzCistICAgICAgICAg ICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CistICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICBj YXNlIHRva2VuX3R5cGU6OmJlZ2luX2FycmF5OgorLSAgICAgICAgICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghc2F4LT5zdGFy dF9hcnJheShzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpKSkpCistICAgICAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cist ICAgICAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgICAgIC8v IGNsb3NpbmcgXSAtPiB3ZSBhcmUgZG9uZQorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChn ZXRfdG9rZW4oKSA9PSB0b2tlbl90eXBlOjplbmRfYXJyYXkpCistICAgICAgICAgICAgICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5M SUtFTFkoIXNheC0+ZW5kX2FycmF5KCkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CistICAgICAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAg ICAgIC8vIHJlbWVtYmVyIHdlIGFyZSBub3cgaW5zaWRlIGFuIGFycmF5CistICAgICAgICAgICAg ICAgICAgICAgICAgc3RhdGVzLnB1c2hfYmFjayh0cnVlKTsKKy0KKy0gICAgICAgICAgICAgICAg ICAgICAgICAvLyBwYXJzZSB2YWx1ZXMgKG5vIG5lZWQgdG8gY2FsbCBnZXRfdG9rZW4pCistICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CistICAgICAgICAgICAgICAgICAgICB9Cist CistICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnZhbHVlX2Zsb2F0OgorLSAg ICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8g cmVzID0gbV9sZXhlci5nZXRfbnVtYmVyX2Zsb2F0KCk7CistCistICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFzdGQ6OmlzZmluaXRlKHJlcykpKQorLSAg ICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHNheC0+cGFyc2VfZXJyb3IobV9sZXhlci5nZXRfcG9zaXRpb24oKSwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sZXhlci5nZXRfdG9r ZW5fc3RyaW5nKCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG91dF9vZl9yYW5nZTo6Y3JlYXRlKDQwNiwgIm51bWJlciBvdmVyZmxvdyBwYXJz aW5nICciICsgbV9sZXhlci5nZXRfdG9rZW5fc3RyaW5nKCkgKyAiJyIsIEJhc2ljSnNvblR5cGUo KSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXNheC0+bnVtYmVyX2Zsb2F0KHJlcywgbV9s ZXhlci5nZXRfc3RyaW5nKCkpKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAg ICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAg ICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVy YWxfZmFsc2U6CistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFzYXgtPmJvb2xlYW4oZmFsc2UpKSkKKy0gICAg ICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAg ICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfbnVsbDoKKy0gICAgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXNh eC0+bnVsbCgpKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB9Cist ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICB9Cist CistICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfdHJ1ZToKKy0g ICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9I RURMRVlfVU5MSUtFTFkoIXNheC0+Ym9vbGVhbih0cnVlKSkpCistICAgICAgICAgICAgICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAg ICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor LSAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgY2FzZSB0b2tl bl90eXBlOjp2YWx1ZV9pbnRlZ2VyOgorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghc2F4LT5udW1iZXJfaW50 ZWdlcihtX2xleGVyLmdldF9udW1iZXJfaW50ZWdlcigpKSkpCistICAgICAgICAgICAgICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAg ICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor LSAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgY2FzZSB0b2tl bl90eXBlOjp2YWx1ZV9zdHJpbmc6CistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFzYXgtPnN0cmluZyhtX2xl eGVyLmdldF9zdHJpbmcoKSkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgICAgICAgICAg ICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6dmFsdWVfdW5z aWduZWQ6CistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAg aWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFzYXgtPm51bWJlcl91bnNpZ25lZChtX2xleGVyLmdl dF9udW1iZXJfdW5zaWduZWQoKSkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6cGFyc2Vf ZXJyb3I6CistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAg Ly8gdXNpbmcgInVuaW5pdGlhbGl6ZWQiIHRvIGF2b2lkICJleHBlY3RlZCIgbWVzc2FnZQorLSAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKG1fbGV4ZXIuZ2V0 X3Bvc2l0aW9uKCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbV9sZXhlci5nZXRfdG9rZW5fc3RyaW5nKCksCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDEsIG1fbGV4 ZXIuZ2V0X3Bvc2l0aW9uKCksIGV4Y2VwdGlvbl9tZXNzYWdlKHRva2VuX3R5cGU6OnVuaW5pdGlh bGl6ZWQsICJ2YWx1ZSIpLCBCYXNpY0pzb25UeXBlKCkpKTsKKy0gICAgICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6dW5pbml0aWFsaXpl ZDoKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6ZW5kX2FycmF5OgorLSAg ICAgICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjplbmRfb2JqZWN0OgorLSAgICAgICAg ICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRvcjoKKy0gICAgICAgICAg ICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJhdG9yOgorLSAgICAgICAgICAg ICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjplbmRfb2ZfaW5wdXQ6CistICAgICAgICAgICAgICAg ICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfb3JfdmFsdWU6CistICAgICAgICAgICAgICAg ICAgICBkZWZhdWx0OiAvLyB0aGUgbGFzdCB0b2tlbiB3YXMgdW5leHBlY3RlZAorLSAgICAgICAg ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNl X2Vycm9yKG1fbGV4ZXIuZ2V0X3Bvc2l0aW9uKCksCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbV9sZXhlci5nZXRfdG9rZW5fc3RyaW5nKCksCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZXJyb3I6 OmNyZWF0ZSgxMDEsIG1fbGV4ZXIuZ2V0X3Bvc2l0aW9uKCksIGV4Y2VwdGlvbl9tZXNzYWdlKHRv a2VuX3R5cGU6OmxpdGVyYWxfb3JfdmFsdWUsICJ2YWx1ZSIpLCBCYXNpY0pzb25UeXBlKCkpKTsK Ky0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg IH0KKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBz a2lwX3RvX3N0YXRlX2V2YWx1YXRpb24gPSBmYWxzZTsKKy0gICAgICAgICAgICB9CistCistICAg ICAgICAgICAgLy8gd2UgcmVhY2hlZCB0aGlzIGxpbmUgYWZ0ZXIgd2Ugc3VjY2Vzc2Z1bGx5IHBh cnNlZCBhIHZhbHVlCistICAgICAgICAgICAgaWYgKHN0YXRlcy5lbXB0eSgpKQorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gZW1wdHkgc3RhY2s6IHdlIHJlYWNoZWQgdGhlIGVu ZCBvZiB0aGUgaGllcmFyY2h5OiBkb25lCistICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor LSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBpZiAoc3RhdGVzLmJhY2soKSkgIC8vIGFy cmF5CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBjb21tYSAtPiBuZXh0IHZh bHVlCistICAgICAgICAgICAgICAgIGlmIChnZXRfdG9rZW4oKSA9PSB0b2tlbl90eXBlOjp2YWx1 ZV9zZXBhcmF0b3IpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8v IHBhcnNlIGEgbmV3IHZhbHVlCistICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKy0g ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworLSAgICAgICAgICAgICAgICB9CistCistICAg ICAgICAgICAgICAgIC8vIGNsb3NpbmcgXQorLSAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURM RVlfTElLRUxZKGxhc3RfdG9rZW4gPT0gdG9rZW5fdHlwZTo6ZW5kX2FycmF5KSkKKy0gICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZ KCFzYXgtPmVuZF9hcnJheSgpKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgICAgICB9CistCist ICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoaXMgYXJyYXkuIEJlZm9y ZSB3ZSBjYW4gcGFyc2UgYQorLSAgICAgICAgICAgICAgICAgICAgLy8gbmV3IHZhbHVlLCB3ZSBu ZWVkIHRvIGV2YWx1YXRlIHRoZSBuZXcgc3RhdGUgZmlyc3QuCistICAgICAgICAgICAgICAgICAg ICAvLyBCeSBzZXR0aW5nIHNraXBfdG9fc3RhdGVfZXZhbHVhdGlvbiB0byBmYWxzZSwgd2UKKy0g ICAgICAgICAgICAgICAgICAgIC8vIGFyZSBlZmZlY3RpdmVseSBqdW1waW5nIHRvIHRoZSBiZWdp bm5pbmcgb2YgdGhpcyBpZi4KKy0gICAgICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKCFzdGF0 ZXMuZW1wdHkoKSk7CistICAgICAgICAgICAgICAgICAgICBzdGF0ZXMucG9wX2JhY2soKTsKKy0g ICAgICAgICAgICAgICAgICAgIHNraXBfdG9fc3RhdGVfZXZhbHVhdGlvbiA9IHRydWU7CistICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAg ICAgICAgICAgICByZXR1cm4gc2F4LT5wYXJzZV9lcnJvcihtX2xleGVyLmdldF9wb3NpdGlvbigp LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdldF90 b2tlbl9zdHJpbmcoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDEsIG1fbGV4ZXIuZ2V0X3Bvc2l0aW9uKCksIGV4Y2VwdGlv bl9tZXNzYWdlKHRva2VuX3R5cGU6OmVuZF9hcnJheSwgImFycmF5IiksIEJhc2ljSnNvblR5cGUo KSkpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBzdGF0ZXMuYmFjaygpIGlz IGZhbHNlIC0+IG9iamVjdAorLQorLSAgICAgICAgICAgIC8vIGNvbW1hIC0+IG5leHQgdmFsdWUK Ky0gICAgICAgICAgICBpZiAoZ2V0X3Rva2VuKCkgPT0gdG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJh dG9yKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gcGFyc2Uga2V5CistICAg ICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShnZXRfdG9rZW4oKSAhPSB0b2tl bl90eXBlOjp2YWx1ZV9zdHJpbmcpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgICAgICByZXR1cm4gc2F4LT5wYXJzZV9lcnJvcihtX2xleGVyLmdldF9wb3NpdGlvbigpLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sZXhlci5nZXRf dG9rZW5fc3RyaW5nKCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXJzZV9lcnJvcjo6Y3JlYXRlKDEwMSwgbV9sZXhlci5nZXRfcG9zaXRpb24oKSwgZXhj ZXB0aW9uX21lc3NhZ2UodG9rZW5fdHlwZTo6dmFsdWVfc3RyaW5nLCAib2JqZWN0IGtleSIpLCBC YXNpY0pzb25UeXBlKCkpKTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAg ICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXNheC0+a2V5KG1fbGV4ZXIuZ2V0X3N0cmluZygp KSkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAvLyBwYXJzZSBzZXBh cmF0b3IgKDopCistICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShnZXRf dG9rZW4oKSAhPSB0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRvcikpCistICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXgtPnBhcnNlX2Vycm9yKG1fbGV4ZXIu Z2V0X3Bvc2l0aW9uKCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtX2xleGVyLmdldF90b2tlbl9zdHJpbmcoKSwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2Vycm9yOjpjcmVhdGUoMTAxLCBtX2xleGVyLmdl dF9wb3NpdGlvbigpLCBleGNlcHRpb25fbWVzc2FnZSh0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRv ciwgIm9iamVjdCBzZXBhcmF0b3IiKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgLy8gcGFyc2UgdmFsdWVzCistICAgICAgICAgICAg ICAgIGdldF90b2tlbigpOworLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAg ICB9CistCistICAgICAgICAgICAgLy8gY2xvc2luZyB9CistICAgICAgICAgICAgaWYgKEpTT05f SEVETEVZX0xJS0VMWShsYXN0X3Rva2VuID09IHRva2VuX3R5cGU6OmVuZF9vYmplY3QpKQorLSAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFz YXgtPmVuZF9vYmplY3QoKSkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAg ICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoaXMgb2JqZWN0LiBCZWZvcmUgd2UgY2FuIHBhcnNlIGEK Ky0gICAgICAgICAgICAgICAgLy8gbmV3IHZhbHVlLCB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBu ZXcgc3RhdGUgZmlyc3QuCistICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgc2tpcF90b19z dGF0ZV9ldmFsdWF0aW9uIHRvIGZhbHNlLCB3ZQorLSAgICAgICAgICAgICAgICAvLyBhcmUgZWZm ZWN0aXZlbHkganVtcGluZyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgaWYuCistICAgICAgICAg ICAgICAgIEpTT05fQVNTRVJUKCFzdGF0ZXMuZW1wdHkoKSk7CistICAgICAgICAgICAgICAgIHN0 YXRlcy5wb3BfYmFjaygpOworLSAgICAgICAgICAgICAgICBza2lwX3RvX3N0YXRlX2V2YWx1YXRp b24gPSB0cnVlOworLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAgICB9Cist CistICAgICAgICAgICAgcmV0dXJuIHNheC0+cGFyc2VfZXJyb3IobV9sZXhlci5nZXRfcG9zaXRp b24oKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdldF90 b2tlbl9zdHJpbmcoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJz ZV9lcnJvcjo6Y3JlYXRlKDEwMSwgbV9sZXhlci5nZXRfcG9zaXRpb24oKSwgZXhjZXB0aW9uX21l c3NhZ2UodG9rZW5fdHlwZTo6ZW5kX29iamVjdCwgIm9iamVjdCIpLCBCYXNpY0pzb25UeXBlKCkp KTsKKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvLy8gZ2V0IG5leHQgdG9rZW4gZnJvbSBs ZXhlcgorLSAgICB0b2tlbl90eXBlIGdldF90b2tlbigpCistICAgIHsKKy0gICAgICAgIHJldHVy biBsYXN0X3Rva2VuID0gbV9sZXhlci5zY2FuKCk7CistICAgIH0KKy0KKy0gICAgc3RkOjpzdHJp bmcgZXhjZXB0aW9uX21lc3NhZ2UoY29uc3QgdG9rZW5fdHlwZSBleHBlY3RlZCwgY29uc3Qgc3Rk OjpzdHJpbmcmIGNvbnRleHQpCistICAgIHsKKy0gICAgICAgIHN0ZDo6c3RyaW5nIGVycm9yX21z ZyA9ICJzeW50YXggZXJyb3IgIjsKKy0KKy0gICAgICAgIGlmICghY29udGV4dC5lbXB0eSgpKQor LSAgICAgICAgeworLSAgICAgICAgICAgIGVycm9yX21zZyArPSAid2hpbGUgcGFyc2luZyAiICsg Y29udGV4dCArICIgIjsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIGVycm9yX21zZyArPSAiLSAi OworLQorLSAgICAgICAgaWYgKGxhc3RfdG9rZW4gPT0gdG9rZW5fdHlwZTo6cGFyc2VfZXJyb3Ip CistICAgICAgICB7CistICAgICAgICAgICAgZXJyb3JfbXNnICs9IHN0ZDo6c3RyaW5nKG1fbGV4 ZXIuZ2V0X2Vycm9yX21lc3NhZ2UoKSkgKyAiOyBsYXN0IHJlYWQ6ICciICsKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgbV9sZXhlci5nZXRfdG9rZW5fc3RyaW5nKCkgKyAiJyI7CistICAgICAg ICB9CistICAgICAgICBlbHNlCistICAgICAgICB7CistICAgICAgICAgICAgZXJyb3JfbXNnICs9 ICJ1bmV4cGVjdGVkICIgKyBzdGQ6OnN0cmluZyhsZXhlcl90Ojp0b2tlbl90eXBlX25hbWUobGFz dF90b2tlbikpOworLSAgICAgICAgfQorLQorLSAgICAgICAgaWYgKGV4cGVjdGVkICE9IHRva2Vu X3R5cGU6OnVuaW5pdGlhbGl6ZWQpCistICAgICAgICB7CistICAgICAgICAgICAgZXJyb3JfbXNn ICs9ICI7IGV4cGVjdGVkICIgKyBzdGQ6OnN0cmluZyhsZXhlcl90Ojp0b2tlbl90eXBlX25hbWUo ZXhwZWN0ZWQpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiBlcnJvcl9tc2c7Cist ICAgIH0KKy0KKy0gIHByaXZhdGU6CistICAgIC8vLyBjYWxsYmFjayBmdW5jdGlvbgorLSAgICBj b25zdCBwYXJzZXJfY2FsbGJhY2tfdDxCYXNpY0pzb25UeXBlPiBjYWxsYmFjayA9IG51bGxwdHI7 CistICAgIC8vLyB0aGUgdHlwZSBvZiB0aGUgbGFzdCByZWFkIHRva2VuCistICAgIHRva2VuX3R5 cGUgbGFzdF90b2tlbiA9IHRva2VuX3R5cGU6OnVuaW5pdGlhbGl6ZWQ7CistICAgIC8vLyB0aGUg bGV4ZXIKKy0gICAgbGV4ZXJfdCBtX2xleGVyOworLSAgICAvLy8gd2hldGhlciB0byB0aHJvdyBl eGNlcHRpb25zIGluIGNhc2Ugb2YgZXJyb3JzCistICAgIGNvbnN0IGJvb2wgYWxsb3dfZXhjZXB0 aW9ucyA9IHRydWU7CistfTsKKy0KKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFt ZXNwYWNlIG5sb2htYW5uCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9pdGVyYXRv cnMvaW50ZXJuYWxfaXRlcmF0b3IuaHBwPgorLQorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9k ZXRhaWwvaXRlcmF0b3JzL3ByaW1pdGl2ZV9pdGVyYXRvci5ocHA+CistCistCistI2luY2x1ZGUg PGNzdGRkZWY+IC8vIHB0cmRpZmZfdAorLSNpbmNsdWRlIDxsaW1pdHM+ICAvLyBudW1lcmljX2xp bWl0cworLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWFjcm9fc2NvcGUuaHBwPgor LQorLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCisteworLS8q CistQGJyaWVmIGFuIGl0ZXJhdG9yIGZvciBwcmltaXRpdmUgSlNPTiB0eXBlcworLQorLVRoaXMg Y2xhc3MgbW9kZWxzIGFuIGl0ZXJhdG9yIGZvciBwcmltaXRpdmUgSlNPTiB0eXBlcyAoYm9vbGVh biwgbnVtYmVyLAorLXN0cmluZykuIEl0J3Mgb25seSBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBp dGVyYXRvci9jb25zdF9pdGVyYXRvciBjbGFzc2VzCistdG8gIml0ZXJhdGUiIG92ZXIgcHJpbWl0 aXZlIHZhbHVlcy4gSW50ZXJuYWxseSwgdGhlIGl0ZXJhdG9yIGlzIG1vZGVsZWQgYnkKKy1hIGBk aWZmZXJlbmNlX3R5cGVgIHZhcmlhYmxlLiBWYWx1ZSBiZWdpbl92YWx1ZSAoYDBgKSBtb2RlbHMg dGhlIGJlZ2luLAorLWVuZF92YWx1ZSAoYDFgKSBtb2RlbHMgcGFzdCB0aGUgZW5kLgorLSovCist Y2xhc3MgcHJpbWl0aXZlX2l0ZXJhdG9yX3QKKy17CistICBwcml2YXRlOgorLSAgICB1c2luZyBk aWZmZXJlbmNlX3R5cGUgPSBzdGQ6OnB0cmRpZmZfdDsKKy0gICAgc3RhdGljIGNvbnN0ZXhwciBk aWZmZXJlbmNlX3R5cGUgYmVnaW5fdmFsdWUgPSAwOworLSAgICBzdGF0aWMgY29uc3RleHByIGRp ZmZlcmVuY2VfdHlwZSBlbmRfdmFsdWUgPSBiZWdpbl92YWx1ZSArIDE7CistCistICBKU09OX1BS SVZBVEVfVU5MRVNTX1RFU1RFRDoKKy0gICAgLy8vIGl0ZXJhdG9yIGFzIHNpZ25lZCBpbnRlZ2Vy IHR5cGUKKy0gICAgZGlmZmVyZW5jZV90eXBlIG1faXQgPSAoc3RkOjpudW1lcmljX2xpbWl0czxz dGQ6OnB0cmRpZmZfdD46Om1pbikoKTsKKy0KKy0gIHB1YmxpYzoKKy0gICAgY29uc3RleHByIGRp ZmZlcmVuY2VfdHlwZSBnZXRfdmFsdWUoKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAg ICByZXR1cm4gbV9pdDsKKy0gICAgfQorLQorLSAgICAvLy8gc2V0IGl0ZXJhdG9yIHRvIGEgZGVm aW5lZCBiZWdpbm5pbmcKKy0gICAgdm9pZCBzZXRfYmVnaW4oKSBub2V4Y2VwdAorLSAgICB7Cist ICAgICAgICBtX2l0ID0gYmVnaW5fdmFsdWU7CistICAgIH0KKy0KKy0gICAgLy8vIHNldCBpdGVy YXRvciB0byBhIGRlZmluZWQgcGFzdCB0aGUgZW5kCistICAgIHZvaWQgc2V0X2VuZCgpIG5vZXhj ZXB0CistICAgIHsKKy0gICAgICAgIG1faXQgPSBlbmRfdmFsdWU7CistICAgIH0KKy0KKy0gICAg Ly8vIHJldHVybiB3aGV0aGVyIHRoZSBpdGVyYXRvciBjYW4gYmUgZGVyZWZlcmVuY2VkCistICAg IGNvbnN0ZXhwciBib29sIGlzX2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAg ICAgcmV0dXJuIG1faXQgPT0gYmVnaW5fdmFsdWU7CistICAgIH0KKy0KKy0gICAgLy8vIHJldHVy biB3aGV0aGVyIHRoZSBpdGVyYXRvciBpcyBhdCBlbmQKKy0gICAgY29uc3RleHByIGJvb2wgaXNf ZW5kKCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIG1faXQgPT0gZW5k X3ZhbHVlOworLSAgICB9CistCistICAgIGZyaWVuZCBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09 KHByaW1pdGl2ZV9pdGVyYXRvcl90IGxocywgcHJpbWl0aXZlX2l0ZXJhdG9yX3QgcmhzKSBub2V4 Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gbGhzLm1faXQgPT0gcmhzLm1faXQ7CistICAg IH0KKy0KKy0gICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChwcmltaXRpdmVfaXRl cmF0b3JfdCBsaHMsIHByaW1pdGl2ZV9pdGVyYXRvcl90IHJocykgbm9leGNlcHQKKy0gICAgewor LSAgICAgICAgcmV0dXJuIGxocy5tX2l0IDwgcmhzLm1faXQ7CistICAgIH0KKy0KKy0gICAgcHJp bWl0aXZlX2l0ZXJhdG9yX3Qgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBuKSBub2V4Y2VwdAor LSAgICB7CistICAgICAgICBhdXRvIHJlc3VsdCA9ICp0aGlzOworLSAgICAgICAgcmVzdWx0ICs9 IG47CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIGZyaWVuZCBjb25z dGV4cHIgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShwcmltaXRpdmVfaXRlcmF0b3JfdCBsaHMs IHByaW1pdGl2ZV9pdGVyYXRvcl90IHJocykgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0 dXJuIGxocy5tX2l0IC0gcmhzLm1faXQ7CistICAgIH0KKy0KKy0gICAgcHJpbWl0aXZlX2l0ZXJh dG9yX3QmIG9wZXJhdG9yKysoKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICArK21faXQ7Cist ICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgcHJpbWl0aXZlX2l0ZXJhdG9y X3QgY29uc3Qgb3BlcmF0b3IrKyhpbnQpIG5vZXhjZXB0IC8vIE5PTElOVChyZWFkYWJpbGl0eS1j b25zdC1yZXR1cm4tdHlwZSkKKy0gICAgeworLSAgICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsK Ky0gICAgICAgICsrbV9pdDsKKy0gICAgICAgIHJldHVybiByZXN1bHQ7CistICAgIH0KKy0KKy0g ICAgcHJpbWl0aXZlX2l0ZXJhdG9yX3QmIG9wZXJhdG9yLS0oKSBub2V4Y2VwdAorLSAgICB7Cist ICAgICAgICAtLW1faXQ7CistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAg cHJpbWl0aXZlX2l0ZXJhdG9yX3QgY29uc3Qgb3BlcmF0b3ItLShpbnQpIG5vZXhjZXB0IC8vIE5P TElOVChyZWFkYWJpbGl0eS1jb25zdC1yZXR1cm4tdHlwZSkKKy0gICAgeworLSAgICAgICAgYXV0 byByZXN1bHQgPSAqdGhpczsKKy0gICAgICAgIC0tbV9pdDsKKy0gICAgICAgIHJldHVybiByZXN1 bHQ7CistICAgIH0KKy0KKy0gICAgcHJpbWl0aXZlX2l0ZXJhdG9yX3QmIG9wZXJhdG9yKz0oZGlm ZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIG1faXQgKz0gbjsKKy0g ICAgICAgIHJldHVybiAqdGhpczsKKy0gICAgfQorLQorLSAgICBwcmltaXRpdmVfaXRlcmF0b3Jf dCYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNlcHQKKy0gICAgeworLSAgICAg ICAgbV9pdCAtPSBuOworLSAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICB9CistfTsKKy19ICAv LyBuYW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCistCistCistbmFt ZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRhaWwKKy17CistLyohCistQGJyaWVm IGFuIGl0ZXJhdG9yIHZhbHVlCistCistQG5vdGUgVGhpcyBzdHJ1Y3R1cmUgY291bGQgZWFzaWx5 IGJlIGEgdW5pb24sIGJ1dCBNU1ZDIGN1cnJlbnRseSBkb2VzIG5vdCBhbGxvdworLXVuaW9ucyBt ZW1iZXJzIHdpdGggY29tcGxleCBjb25zdHJ1Y3RvcnMsIHNlZSBodHRwczovL2dpdGh1Yi5jb20v bmxvaG1hbm4vanNvbi9wdWxsLzEwNS4KKy0qLworLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNv blR5cGU+IHN0cnVjdCBpbnRlcm5hbF9pdGVyYXRvcgorLXsKKy0gICAgLy8vIGl0ZXJhdG9yIGZv ciBKU09OIG9iamVjdHMKKy0gICAgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0X3Q6Oml0 ZXJhdG9yIG9iamVjdF9pdGVyYXRvciB7fTsKKy0gICAgLy8vIGl0ZXJhdG9yIGZvciBKU09OIGFy cmF5cworLSAgICB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjphcnJheV90OjppdGVyYXRvciBhcnJh eV9pdGVyYXRvciB7fTsKKy0gICAgLy8vIGdlbmVyaWMgaXRlcmF0b3IgZm9yIGFsbCBvdGhlciB0 eXBlcworLSAgICBwcmltaXRpdmVfaXRlcmF0b3JfdCBwcmltaXRpdmVfaXRlcmF0b3Ige307Cist fTsKKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCist CistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9pdGVyYXRvcnMvaXRlcl9pbXBsLmhwcD4K Ky0KKy0KKy0jaW5jbHVkZSA8aXRlcmF0b3I+IC8vIGl0ZXJhdG9yLCByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGFkdmFuY2UsIG5leHQKKy0j aW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIGNvbmRpdGlvbmFsLCBpc19jb25zdCwgcmVtb3ZlX2Nv bnN0CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9leGNlcHRpb25zLmhwcD4KKy0K Ky0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL2l0ZXJhdG9ycy9pbnRlcm5hbF9pdGVyYXRv ci5ocHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9pdGVyYXRvcnMvcHJpbWl0 aXZlX2l0ZXJhdG9yLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21hY3Jv X3Njb3BlLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21ldGEvY3BwX2Z1 dHVyZS5ocHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tZXRhL3R5cGVfdHJh aXRzLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL3ZhbHVlX3QuaHBwPgor LQorLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCisteworLS8v IGZvcndhcmQgZGVjbGFyZSwgdG8gYmUgYWJsZSB0byBmcmllbmQgaXQgbGF0ZXIgb24KKy10ZW1w bGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+IGNsYXNzIGl0ZXJhdGlvbl9wcm94eTsKKy10ZW1w bGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+IGNsYXNzIGl0ZXJhdGlvbl9wcm94eV92YWx1ZTsK Ky0KKy0vKiEKKy1AYnJpZWYgYSB0ZW1wbGF0ZSBmb3IgYSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9y IGZvciB0aGUgQHJlZiBiYXNpY19qc29uIGNsYXNzCistVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEg Ym90aCBpdGVyYXRvcnMgKGl0ZXJhdG9yIGFuZCBjb25zdF9pdGVyYXRvcikgZm9yIHRoZQorLUBy ZWYgYmFzaWNfanNvbiBjbGFzcy4KKy1Abm90ZSBBbiBpdGVyYXRvciBpcyBjYWxsZWQgKmluaXRp YWxpemVkKiB3aGVuIGEgcG9pbnRlciB0byBhIEpTT04gdmFsdWUgaGFzCistICAgICAgYmVlbiBz ZXQgKGUuZy4sIGJ5IGEgY29uc3RydWN0b3Igb3IgYSBjb3B5IGFzc2lnbm1lbnQpLiBJZiB0aGUg aXRlcmF0b3IgaXMKKy0gICAgICBkZWZhdWx0LWNvbnN0cnVjdGVkLCBpdCBpcyAqdW5pbml0aWFs aXplZCogYW5kIG1vc3QgbWV0aG9kcyBhcmUgdW5kZWZpbmVkLgorLSAgICAgICoqVGhlIGxpYnJh cnkgdXNlcyBhc3NlcnRpb25zIHRvIGRldGVjdCBjYWxscyBvbiB1bmluaXRpYWxpemVkIGl0ZXJh dG9ycy4qKgorLUByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcg Y29uY2VwdCByZXF1aXJlbWVudHM6CistLQorLVtCaWRpcmVjdGlvbmFsSXRlcmF0b3JdKGh0dHBz Oi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9uYW1lZF9yZXEvQmlkaXJlY3Rpb25hbEl0ZXJh dG9yKToKKy0gIFRoZSBpdGVyYXRvciB0aGF0IGNhbiBiZSBtb3ZlZCBjYW4gYmUgbW92ZWQgaW4g Ym90aCBkaXJlY3Rpb25zIChpLmUuCistICBpbmNyZW1lbnRlZCBhbmQgZGVjcmVtZW50ZWQpLgor LUBzaW5jZSB2ZXJzaW9uIDEuMC4wLCBzaW1wbGlmaWVkIGluIHZlcnNpb24gMi4wLjksIGNoYW5n ZSB0byBiaWRpcmVjdGlvbmFsCistICAgICAgIGl0ZXJhdG9ycyBpbiB2ZXJzaW9uIDMuMC4wIChz ZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzU5MykKKy0qLworLXRl bXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistY2xhc3MgaXRlcl9pbXBsIC8vIE5PTElO VChjcHBjb3JlZ3VpZGVsaW5lcy1zcGVjaWFsLW1lbWJlci1mdW5jdGlvbnMsaGljcHAtc3BlY2lh bC1tZW1iZXItZnVuY3Rpb25zKQorLXsKKy0gICAgLy8vIHRoZSBpdGVyYXRvciB3aXRoIEJhc2lj SnNvblR5cGUgb2YgZGlmZmVyZW50IGNvbnN0LW5lc3MKKy0gICAgdXNpbmcgb3RoZXJfaXRlcl9p bXBsID0gaXRlcl9pbXBsPHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxC YXNpY0pzb25UeXBlPjo6dmFsdWUsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PEJhc2ljSnNv blR5cGU+Ojp0eXBlLCBjb25zdCBCYXNpY0pzb25UeXBlPjo6dHlwZT47CistICAgIC8vLyBhbGxv dyBiYXNpY19qc29uIHRvIGFjY2VzcyBwcml2YXRlIG1lbWJlcnMKKy0gICAgZnJpZW5kIG90aGVy X2l0ZXJfaW1wbDsKKy0gICAgZnJpZW5kIEJhc2ljSnNvblR5cGU7CistICAgIGZyaWVuZCBpdGVy YXRpb25fcHJveHk8aXRlcl9pbXBsPjsKKy0gICAgZnJpZW5kIGl0ZXJhdGlvbl9wcm94eV92YWx1 ZTxpdGVyX2ltcGw+OworLQorLSAgICB1c2luZyBvYmplY3RfdCA9IHR5cGVuYW1lIEJhc2ljSnNv blR5cGU6Om9iamVjdF90OworLSAgICB1c2luZyBhcnJheV90ID0gdHlwZW5hbWUgQmFzaWNKc29u VHlwZTo6YXJyYXlfdDsKKy0gICAgLy8gbWFrZSBzdXJlIEJhc2ljSnNvblR5cGUgaXMgYmFzaWNf anNvbiBvciBjb25zdCBiYXNpY19qc29uCistICAgIHN0YXRpY19hc3NlcnQoaXNfYmFzaWNfanNv bjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxCYXNpY0pzb25UeXBlPjo6dHlwZT46OnZhbHVl LAorLSAgICAgICAgICAgICAgICAgICJpdGVyX2ltcGwgb25seSBhY2NlcHRzIChjb25zdCkgYmFz aWNfanNvbiIpOworLQorLSAgcHVibGljOgorLQorLSAgICAvLy8gVGhlIHN0ZDo6aXRlcmF0b3Ig Y2xhc3MgdGVtcGxhdGUgKHVzZWQgYXMgYSBiYXNlIGNsYXNzIHRvIHByb3ZpZGUgdHlwZWRlZnMp IGlzIGRlcHJlY2F0ZWQgaW4gQysrMTcuCistICAgIC8vLyBUaGUgQysrIFN0YW5kYXJkIGhhcyBu ZXZlciByZXF1aXJlZCB1c2VyLWRlZmluZWQgaXRlcmF0b3JzIHRvIGRlcml2ZSBmcm9tIHN0ZDo6 aXRlcmF0b3IuCistICAgIC8vLyBBIHVzZXItZGVmaW5lZCBpdGVyYXRvciBzaG91bGQgcHJvdmlk ZSBwdWJsaWNseSBhY2Nlc3NpYmxlIHR5cGVkZWZzIG5hbWVkCistICAgIC8vLyBpdGVyYXRvcl9j YXRlZ29yeSwgdmFsdWVfdHlwZSwgZGlmZmVyZW5jZV90eXBlLCBwb2ludGVyLCBhbmQgcmVmZXJl bmNlLgorLSAgICAvLy8gTm90ZSB0aGF0IHZhbHVlX3R5cGUgaXMgcmVxdWlyZWQgdG8gYmUgbm9u LWNvbnN0LCBldmVuIGZvciBjb25zdGFudCBpdGVyYXRvcnMuCistICAgIHVzaW5nIGl0ZXJhdG9y X2NhdGVnb3J5ID0gc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZzsKKy0KKy0gICAgLy8v IHRoZSB0eXBlIG9mIHRoZSB2YWx1ZXMgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZGVyZWZlcmVuY2Vk CistICAgIHVzaW5nIHZhbHVlX3R5cGUgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjp2YWx1ZV90 eXBlOworLSAgICAvLy8gYSB0eXBlIHRvIHJlcHJlc2VudCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGl0 ZXJhdG9ycworLSAgICB1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSB0eXBlbmFtZSBCYXNpY0pzb25U eXBlOjpkaWZmZXJlbmNlX3R5cGU7CistICAgIC8vLyBkZWZpbmVzIGEgcG9pbnRlciB0byB0aGUg dHlwZSBpdGVyYXRlZCBvdmVyICh2YWx1ZV90eXBlKQorLSAgICB1c2luZyBwb2ludGVyID0gdHlw ZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX2NvbnN0PEJhc2ljSnNvblR5cGU+Ojp2YWx1 ZSwKKy0gICAgICAgICAgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6Y29uc3RfcG9pbnRlciwKKy0g ICAgICAgICAgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6cG9pbnRlcj46OnR5cGU7CistICAgIC8v LyBkZWZpbmVzIGEgcmVmZXJlbmNlIHRvIHRoZSB0eXBlIGl0ZXJhdGVkIG92ZXIgKHZhbHVlX3R5 cGUpCistICAgIHVzaW5nIHJlZmVyZW5jZSA9CistICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRp dGlvbmFsPHN0ZDo6aXNfY29uc3Q8QmFzaWNKc29uVHlwZT46OnZhbHVlLAorLSAgICAgICAgdHlw ZW5hbWUgQmFzaWNKc29uVHlwZTo6Y29uc3RfcmVmZXJlbmNlLAorLSAgICAgICAgdHlwZW5hbWUg QmFzaWNKc29uVHlwZTo6cmVmZXJlbmNlPjo6dHlwZTsKKy0KKy0gICAgaXRlcl9pbXBsKCkgPSBk ZWZhdWx0OworLSAgICB+aXRlcl9pbXBsKCkgPSBkZWZhdWx0OworLSAgICBpdGVyX2ltcGwoaXRl cl9pbXBsJiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0gICAgaXRlcl9pbXBsJiBvcGVyYXRvcj0o aXRlcl9pbXBsJiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0KKy0gICAgLyohCistICAgIEBicmll ZiBjb25zdHJ1Y3RvciBmb3IgYSBnaXZlbiBKU09OIGluc3RhbmNlCistICAgIEBwYXJhbVtpbl0g b2JqZWN0ICBwb2ludGVyIHRvIGEgSlNPTiBvYmplY3QgZm9yIHRoaXMgaXRlcmF0b3IKKy0gICAg QHByZSBvYmplY3QgIT0gbnVsbHB0cgorLSAgICBAcG9zdCBUaGUgaXRlcmF0b3IgaXMgaW5pdGlh bGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorLSAgICAqLworLSAgICBleHBsaWNp dCBpdGVyX2ltcGwocG9pbnRlciBvYmplY3QpIG5vZXhjZXB0IDogbV9vYmplY3Qob2JqZWN0KQor LSAgICB7CistICAgICAgICBKU09OX0FTU0VSVChtX29iamVjdCAhPSBudWxscHRyKTsKKy0KKy0g ICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAg IG1faXQub2JqZWN0X2l0ZXJhdG9yID0gdHlwZW5hbWUgb2JqZWN0X3Q6Oml0ZXJhdG9yKCk7Cist ICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBj YXNlIHZhbHVlX3Q6OmFycmF5OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV9p dC5hcnJheV9pdGVyYXRvciA9IHR5cGVuYW1lIGFycmF5X3Q6Oml0ZXJhdG9yKCk7CistICAgICAg ICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZh bHVlX3Q6Om51bGw6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6 bnVtYmVyX2ludGVnZXI6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWdu ZWQ6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAgICAgICAg ICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpkaXNj YXJkZWQ6CistICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yID0gcHJpbWl0aXZlX2l0ZXJhdG9yX3QoKTsK Ky0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAg ICB9CistCistICAgIC8qIQorLSAgICBAbm90ZSBUaGUgY29udmVudGlvbmFsIGNvcHkgY29uc3Ry dWN0b3IgYW5kIGNvcHkgYXNzaWdubWVudCBhcmUgaW1wbGljaXRseQorLSAgICAgICAgICBkZWZp bmVkLiBDb21iaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29udmVydGluZyBjb25zdHJ1Y3RvciBh bmQKKy0gICAgICAgICAgYXNzaWdubWVudCwgdGhleSBzdXBwb3J0OiAoMSkgY29weSBmcm9tIGl0 ZXJhdG9yIHRvIGl0ZXJhdG9yLCAoMikKKy0gICAgICAgICAgY29weSBmcm9tIGNvbnN0IGl0ZXJh dG9yIHRvIGNvbnN0IGl0ZXJhdG9yLCBhbmQgKDMpIGNvbnZlcnNpb24gZnJvbQorLSAgICAgICAg ICBpdGVyYXRvciB0byBjb25zdCBpdGVyYXRvci4gSG93ZXZlciBjb252ZXJzaW9uIGZyb20gY29u c3QgaXRlcmF0b3IKKy0gICAgICAgICAgdG8gaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuCistICAg ICovCistCistICAgIC8qIQorLSAgICBAYnJpZWYgY29uc3QgY29weSBjb25zdHJ1Y3RvcgorLSAg ICBAcGFyYW1baW5dIG90aGVyIGNvbnN0IGl0ZXJhdG9yIHRvIGNvcHkgZnJvbQorLSAgICBAbm90 ZSBUaGlzIGNvcHkgY29uc3RydWN0b3IgaGFkIHRvIGJlIGRlZmluZWQgZXhwbGljaXRseSB0byBj aXJjdW12ZW50IGEgYnVnCistICAgICAgICAgIG9jY3VycmluZyBvbiBtc3ZjIHYxOS4wIGNvbXBp bGVyIChWUyAyMDE1KSBkZWJ1ZyBidWlsZC4gRm9yIG1vcmUKKy0gICAgICAgICAgaW5mb3JtYXRp b24gcmVmZXIgdG86IGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL2lzc3Vlcy8xNjA4 CistICAgICovCistICAgIGl0ZXJfaW1wbChjb25zdCBpdGVyX2ltcGw8Y29uc3QgQmFzaWNKc29u VHlwZT4mIG90aGVyKSBub2V4Y2VwdAorLSAgICAgICAgOiBtX29iamVjdChvdGhlci5tX29iamVj dCksIG1faXQob3RoZXIubV9pdCkKKy0gICAge30KKy0KKy0gICAgLyohCistICAgIEBicmllZiBj b252ZXJ0aW5nIGFzc2lnbm1lbnQKKy0gICAgQHBhcmFtW2luXSBvdGhlciBjb25zdCBpdGVyYXRv ciB0byBjb3B5IGZyb20KKy0gICAgQHJldHVybiBjb25zdC9ub24tY29uc3QgaXRlcmF0b3IKKy0g ICAgQG5vdGUgSXQgaXMgbm90IGNoZWNrZWQgd2hldGhlciBAYSBvdGhlciBpcyBpbml0aWFsaXpl ZC4KKy0gICAgKi8KKy0gICAgaXRlcl9pbXBsJiBvcGVyYXRvcj0oY29uc3QgaXRlcl9pbXBsPGNv bnN0IEJhc2ljSnNvblR5cGU+JiBvdGhlcikgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgaWYg KCZvdGhlciAhPSB0aGlzKQorLSAgICAgICAgeworLSAgICAgICAgICAgIG1fb2JqZWN0ID0gb3Ro ZXIubV9vYmplY3Q7CistICAgICAgICAgICAgbV9pdCA9IG90aGVyLm1faXQ7CistICAgICAgICB9 CistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmll ZiBjb252ZXJ0aW5nIGNvbnN0cnVjdG9yCistICAgIEBwYXJhbVtpbl0gb3RoZXIgIG5vbi1jb25z dCBpdGVyYXRvciB0byBjb3B5IGZyb20KKy0gICAgQG5vdGUgSXQgaXMgbm90IGNoZWNrZWQgd2hl dGhlciBAYSBvdGhlciBpcyBpbml0aWFsaXplZC4KKy0gICAgKi8KKy0gICAgaXRlcl9pbXBsKGNv bnN0IGl0ZXJfaW1wbDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxCYXNpY0pzb25UeXBlPjo6 dHlwZT4mIG90aGVyKSBub2V4Y2VwdAorLSAgICAgICAgOiBtX29iamVjdChvdGhlci5tX29iamVj dCksIG1faXQob3RoZXIubV9pdCkKKy0gICAge30KKy0KKy0gICAgLyohCistICAgIEBicmllZiBj b252ZXJ0aW5nIGFzc2lnbm1lbnQKKy0gICAgQHBhcmFtW2luXSBvdGhlciAgbm9uLWNvbnN0IGl0 ZXJhdG9yIHRvIGNvcHkgZnJvbQorLSAgICBAcmV0dXJuIGNvbnN0L25vbi1jb25zdCBpdGVyYXRv cgorLSAgICBAbm90ZSBJdCBpcyBub3QgY2hlY2tlZCB3aGV0aGVyIEBhIG90aGVyIGlzIGluaXRp YWxpemVkLgorLSAgICAqLworLSAgICBpdGVyX2ltcGwmIG9wZXJhdG9yPShjb25zdCBpdGVyX2lt cGw8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8QmFzaWNKc29uVHlwZT46OnR5cGU+JiBvdGhl cikgbm9leGNlcHQgLy8gTk9MSU5UKGNlcnQtb29wNTQtY3BwKQorLSAgICB7CistICAgICAgICBt X29iamVjdCA9IG90aGVyLm1fb2JqZWN0OworLSAgICAgICAgbV9pdCA9IG90aGVyLm1faXQ7Cist ICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gIEpTT05fUFJJVkFURV9VTkxFU1Nf VEVTVEVEOgorLSAgICAvKiEKKy0gICAgQGJyaWVmIHNldCB0aGUgaXRlcmF0b3IgdG8gdGhlIGZp cnN0IHZhbHVlCistICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBt X29iamVjdCAhPSBudWxscHRyYC4KKy0gICAgKi8KKy0gICAgdm9pZCBzZXRfYmVnaW4oKSBub2V4 Y2VwdAorLSAgICB7CistICAgICAgICBKU09OX0FTU0VSVChtX29iamVjdCAhPSBudWxscHRyKTsK Ky0KKy0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIG1faXQub2JqZWN0X2l0ZXJhdG9yID0gbV9vYmplY3QtPm1fdmFsdWUub2JqZWN0LT5i ZWdpbigpOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIG1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX29iamVjdC0+bV92YWx1ZS5hcnJheS0+YmVn aW4oKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIC8vIHNldCB0byBlbmQgc28gYmVnaW4oKT09ZW5kKCkgaXMgdHJ1ZTogbnVsbCBpcyBlbXB0 eQorLSAgICAgICAgICAgICAgICBtX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5zZXRfZW5kKCk7Cist ICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBj YXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46 CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAg ICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0g ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICBkZWZhdWx0 OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV9pdC5wcmltaXRpdmVfaXRlcmF0 b3Iuc2V0X2JlZ2luKCk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0K Ky0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIHNldCB0aGUgaXRl cmF0b3IgcGFzdCB0aGUgbGFzdCB2YWx1ZQorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0 aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAgIHZvaWQg c2V0X2VuZCgpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIEpTT05fQVNTRVJUKG1fb2JqZWN0 ICE9IG51bGxwdHIpOworLQorLSAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorLSAg ICAgICAgeworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgbV9pdC5vYmplY3RfaXRlcmF0b3IgPSBtX29iamVjdC0+bV92 YWx1ZS5vYmplY3QtPmVuZCgpOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAg ICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIG1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX29iamVjdC0+bV92YWx1 ZS5hcnJheS0+ZW5kKCk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0K Ky0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CistICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpzdHJpbmc6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CistICAgICAgICAgICAgY2Fz ZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpu dW1iZXJfZmxvYXQ6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpkaXNjYXJkZWQ6CistICAgICAgICAgICAgZGVmYXVsdDoKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLnNl dF9lbmQoKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLSAgICAg ICAgfQorLSAgICB9CistCistICBwdWJsaWM6CistICAgIC8qIQorLSAgICBAYnJpZWYgcmV0dXJu IGEgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IHRoZSBpdGVyYXRvcgorLSAg ICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVs bHB0cmAuCistICAgICovCistICAgIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdAorLSAgICB7 CistICAgICAgICBKU09OX0FTU0VSVChtX29iamVjdCAhPSBudWxscHRyKTsKKy0KKy0gICAgICAg IHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIEpTT05f QVNTRVJUKG1faXQub2JqZWN0X2l0ZXJhdG9yICE9IG1fb2JqZWN0LT5tX3ZhbHVlLm9iamVjdC0+ ZW5kKCkpOworLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pdC5vYmplY3RfaXRlcmF0b3ItPnNl Y29uZDsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJh eToKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKG1faXQuYXJy YXlfaXRlcmF0b3IgIT0gbV9vYmplY3QtPm1fdmFsdWUuYXJyYXktPmVuZCgpKTsKKy0gICAgICAg ICAgICAgICAgcmV0dXJuICptX2l0LmFycmF5X2l0ZXJhdG9yOworLSAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CistICAgICAgICAgICAgICAgIEpTT05f VEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIxNCwgImNhbm5vdCBnZXQgdmFsdWUiLCAq bV9vYmplY3QpKTsKKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAg ICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90 OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNp Z25lZDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAg ICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRp c2NhcmRlZDoKKy0gICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJS0VMWShtX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5p c19iZWdpbigpKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuICptX29iamVjdDsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBK U09OX1RIUk9XKGludmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMTQsICJjYW5ub3QgZ2V0IHZhbHVl IiwgKm1fb2JqZWN0KSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICB9CistCist ICAgIC8qIQorLSAgICBAYnJpZWYgZGVyZWZlcmVuY2UgdGhlIGl0ZXJhdG9yCistICAgIEBwcmUg VGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4K Ky0gICAgKi8KKy0gICAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QKKy0gICAgeworLSAgICAg ICAgSlNPTl9BU1NFUlQobV9vYmplY3QgIT0gbnVsbHB0cik7CistCistICAgICAgICBzd2l0Y2gg KG1fb2JqZWN0LT5tX3R5cGUpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90 OjpvYmplY3Q6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBKU09OX0FTU0VSVCht X2l0Lm9iamVjdF9pdGVyYXRvciAhPSBtX29iamVjdC0+bV92YWx1ZS5vYmplY3QtPmVuZCgpKTsK Ky0gICAgICAgICAgICAgICAgcmV0dXJuICYobV9pdC5vYmplY3RfaXRlcmF0b3ItPnNlY29uZCk7 CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6Cist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBKU09OX0FTU0VSVChtX2l0LmFycmF5X2l0 ZXJhdG9yICE9IG1fb2JqZWN0LT5tX3ZhbHVlLmFycmF5LT5lbmQoKSk7CistICAgICAgICAgICAg ICAgIHJldHVybiAmKm1faXQuYXJyYXlfaXRlcmF0b3I7CistICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 OnN0cmluZzoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CistICAgICAgICAg ICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9m bG9hdDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICBj YXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJS0VMWShtX2l0LnByaW1p dGl2ZV9pdGVyYXRvci5pc19iZWdpbigpKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0OworLSAgICAgICAgICAgICAgICB9CistCistICAg ICAgICAgICAgICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIxNCwgImNh bm5vdCBnZXQgdmFsdWUiLCAqbV9vYmplY3QpKTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9 CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBwb3N0LWluY3JlbWVudCAoaXQrKykK Ky0gICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9 IG51bGxwdHJgLgorLSAgICAqLworLSAgICBpdGVyX2ltcGwgY29uc3Qgb3BlcmF0b3IrKyhpbnQp IC8vIE5PTElOVChyZWFkYWJpbGl0eS1jb25zdC1yZXR1cm4tdHlwZSkKKy0gICAgeworLSAgICAg ICAgYXV0byByZXN1bHQgPSAqdGhpczsKKy0gICAgICAgICsrKCp0aGlzKTsKKy0gICAgICAgIHJl dHVybiByZXN1bHQ7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBwcmUtaW5jcmVt ZW50ICgrK2l0KQorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBg bV9vYmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAgIGl0ZXJfaW1wbCYgb3BlcmF0b3Ir KygpCistICAgIHsKKy0gICAgICAgIEpTT05fQVNTRVJUKG1fb2JqZWN0ICE9IG51bGxwdHIpOwor LQorLSAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorLSAgICAgICAgeworLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgc3RkOjphZHZhbmNlKG1faXQub2JqZWN0X2l0ZXJhdG9yLCAxKTsKKy0gICAgICAgICAg ICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6YXJyYXk6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OmFkdmFuY2Uo bV9pdC5hcnJheV9pdGVyYXRvciwgMSk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CistICAgICAgICAg ICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29s ZWFuOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6 CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpkaXNjYXJkZWQ6CistICAgICAgICAgICAgZGVm YXVsdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICsrbV9pdC5wcmltaXRpdmVf aXRlcmF0b3I7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0gICAg ICAgIH0KKy0KKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAgfQorLQorLSAgICAvKiEKKy0g ICAgQGJyaWVmIHBvc3QtZGVjcmVtZW50IChpdC0tKQorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBp cyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAg IGl0ZXJfaW1wbCBjb25zdCBvcGVyYXRvci0tKGludCkgLy8gTk9MSU5UKHJlYWRhYmlsaXR5LWNv bnN0LXJldHVybi10eXBlKQorLSAgICB7CistICAgICAgICBhdXRvIHJlc3VsdCA9ICp0aGlzOwor LSAgICAgICAgLS0oKnRoaXMpOworLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLQor LSAgICAvKiEKKy0gICAgQGJyaWVmIHByZS1kZWNyZW1lbnQgKC0taXQpCistICAgIEBwcmUgVGhl IGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKy0g ICAgKi8KKy0gICAgaXRlcl9pbXBsJiBvcGVyYXRvci0tKCkKKy0gICAgeworLSAgICAgICAgSlNP Tl9BU1NFUlQobV9vYmplY3QgIT0gbnVsbHB0cik7CistCistICAgICAgICBzd2l0Y2ggKG1fb2Jq ZWN0LT5tX3R5cGUpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmpl Y3Q6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBzdGQ6OmFkdmFuY2UobV9pdC5v YmplY3RfaXRlcmF0b3IsIC0xKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBzdGQ6OmFkdmFuY2UobV9pdC5hcnJheV9pdGVyYXRvciwgLTEp OworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAg ICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5n OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVt YmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0Ogor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAgIGNhc2UgdmFs dWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAtLW1faXQucHJpbWl0aXZlX2l0ZXJhdG9yOworLSAgICAgICAgICAg ICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistCistICAgICAgICByZXR1 cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBjb21wYXJpc29uOiBl cXVhbAorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmpl Y3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgSXRlcklt cGwsIGRldGFpbDo6ZW5hYmxlX2lmX3QgPCAoc3RkOjppc19zYW1lPEl0ZXJJbXBsLCBpdGVyX2lt cGw+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8SXRlckltcGwsIG90aGVyX2l0ZXJfaW1wbD46OnZh bHVlKSwgc3RkOjpudWxscHRyX3QgPiA9IG51bGxwdHIgPgorLSAgICBib29sIG9wZXJhdG9yPT0o Y29uc3QgSXRlckltcGwmIG90aGVyKSBjb25zdAorLSAgICB7CistICAgICAgICAvLyBpZiBvYmpl Y3RzIGFyZSBub3QgdGhlIHNhbWUsIHRoZSBjb21wYXJpc29uIGlzIHVuZGVmaW5lZAorLSAgICAg ICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKG1fb2JqZWN0ICE9IG90aGVyLm1fb2JqZWN0KSkK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKGludmFsaWRfaXRlcmF0b3I6OmNy ZWF0ZSgyMTIsICJjYW5ub3QgY29tcGFyZSBpdGVyYXRvcnMgb2YgZGlmZmVyZW50IGNvbnRhaW5l cnMiLCAqbV9vYmplY3QpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05fQVNTRVJUKG1f b2JqZWN0ICE9IG51bGxwdHIpOworLQorLSAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBl KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAg ICAgICAgICAgICByZXR1cm4gKG1faXQub2JqZWN0X2l0ZXJhdG9yID09IG90aGVyLm1faXQub2Jq ZWN0X2l0ZXJhdG9yKTsKKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorLSAg ICAgICAgICAgICAgICByZXR1cm4gKG1faXQuYXJyYXlfaXRlcmF0b3IgPT0gb3RoZXIubV9pdC5h cnJheV9pdGVyYXRvcik7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6 YmluYXJ5OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAg ICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgIHJldHVybiAobV9pdC5wcmltaXRpdmVfaXRl cmF0b3IgPT0gb3RoZXIubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IpOworLSAgICAgICAgfQorLSAg ICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgY29tcGFyaXNvbjogbm90IGVxdWFsCistICAg IEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxs cHRyYC4KKy0gICAgKi8KKy0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBJdGVySW1wbCwgZGV0YWls OjplbmFibGVfaWZfdCA8IChzdGQ6OmlzX3NhbWU8SXRlckltcGwsIGl0ZXJfaW1wbD46OnZhbHVl IHx8IHN0ZDo6aXNfc2FtZTxJdGVySW1wbCwgb3RoZXJfaXRlcl9pbXBsPjo6dmFsdWUpLCBzdGQ6 Om51bGxwdHJfdCA+ID0gbnVsbHB0ciA+CistICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVy SW1wbCYgb3RoZXIpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShv dGhlcik7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBjb21wYXJpc29uOiBzbWFs bGVyCistICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVj dCAhPSBudWxscHRyYC4KKy0gICAgKi8KKy0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgaXRlcl9p bXBsJiBvdGhlcikgY29uc3QKKy0gICAgeworLSAgICAgICAgLy8gaWYgb2JqZWN0cyBhcmUgbm90 IHRoZSBzYW1lLCB0aGUgY29tcGFyaXNvbiBpcyB1bmRlZmluZWQKKy0gICAgICAgIGlmIChKU09O X0hFRExFWV9VTkxJS0VMWShtX29iamVjdCAhPSBvdGhlci5tX29iamVjdCkpCistICAgICAgICB7 CistICAgICAgICAgICAgSlNPTl9USFJPVyhpbnZhbGlkX2l0ZXJhdG9yOjpjcmVhdGUoMjEyLCAi Y2Fubm90IGNvbXBhcmUgaXRlcmF0b3JzIG9mIGRpZmZlcmVudCBjb250YWluZXJzIiwgKm1fb2Jq ZWN0KSk7CistICAgICAgICB9CistCistICAgICAgICBKU09OX0FTU0VSVChtX29iamVjdCAhPSBu dWxscHRyKTsKKy0KKy0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKy0gICAgICAg IHsKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICAgICAg SlNPTl9USFJPVyhpbnZhbGlkX2l0ZXJhdG9yOjpjcmVhdGUoMjEzLCAiY2Fubm90IGNvbXBhcmUg b3JkZXIgb2Ygb2JqZWN0IGl0ZXJhdG9ycyIsICptX29iamVjdCkpOworLQorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgICAgIHJldHVybiAobV9pdC5hcnJh eV9pdGVyYXRvciA8IG90aGVyLm1faXQuYXJyYXlfaXRlcmF0b3IpOworLQorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoK Ky0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CistICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJl cl91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0g ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICBy ZXR1cm4gKG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yIDwgb3RoZXIubV9pdC5wcmltaXRpdmVfaXRl cmF0b3IpOworLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgY29t cGFyaXNvbjogbGVzcyB0aGFuIG9yIGVxdWFsCistICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGlu aXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKy0gICAgKi8KKy0gICAgYm9v bCBvcGVyYXRvcjw9KGNvbnN0IGl0ZXJfaW1wbCYgb3RoZXIpIGNvbnN0CistICAgIHsKKy0gICAg ICAgIHJldHVybiAhb3RoZXIub3BlcmF0b3IgPCAoKnRoaXMpOworLSAgICB9CistCistICAgIC8q IQorLSAgICBAYnJpZWYgY29tcGFyaXNvbjogZ3JlYXRlciB0aGFuCistICAgIEBwcmUgVGhlIGl0 ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKy0gICAg Ki8KKy0gICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgaXRlcl9pbXBsJiBvdGhlcikgY29uc3QKKy0g ICAgeworLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcjw9KG90aGVyKTsKKy0gICAgfQorLQorLSAg ICAvKiEKKy0gICAgQGJyaWVmIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorLSAg ICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVs bHB0cmAuCistICAgICovCistICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBpdGVyX2ltcGwmIG90 aGVyKSBjb25zdAorLSAgICB7CistICAgICAgICByZXR1cm4gIW9wZXJhdG9yPChvdGhlcik7Cist ICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBhZGQgdG8gaXRlcmF0b3IKKy0gICAgQHBy ZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJg LgorLSAgICAqLworLSAgICBpdGVyX2ltcGwmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIGkp CistICAgIHsKKy0gICAgICAgIEpTT05fQVNTRVJUKG1fb2JqZWN0ICE9IG51bGxwdHIpOworLQor LSAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorLSAgICAgICAgeworLSAgICAgICAg ICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKGlu dmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMDksICJjYW5ub3QgdXNlIG9mZnNldHMgd2l0aCBvYmpl Y3QgaXRlcmF0b3JzIiwgKm1fb2JqZWN0KSk7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90 OjphcnJheToKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHN0ZDo6YWR2YW5jZSht X2l0LmFycmF5X2l0ZXJhdG9yLCBpKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAg ICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xl YW46CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAg ICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNlIHZh bHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToK Ky0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICBkZWZh dWx0OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV9pdC5wcmltaXRpdmVfaXRl cmF0b3IgKz0gaTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLSAg ICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICB9CistCistICAgIC8qIQor LSAgICBAYnJpZWYgc3VidHJhY3QgZnJvbSBpdGVyYXRvcgorLSAgICBAcHJlIFRoZSBpdGVyYXRv ciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCist ICAgIGl0ZXJfaW1wbCYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgaSkKKy0gICAgeworLSAg ICAgICAgcmV0dXJuIG9wZXJhdG9yKz0oLWkpOworLSAgICB9CistCistICAgIC8qIQorLSAgICBA YnJpZWYgYWRkIHRvIGl0ZXJhdG9yCistICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxp emVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKy0gICAgKi8KKy0gICAgaXRlcl9pbXBs IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgaSkgY29uc3QKKy0gICAgeworLSAgICAgICAgYXV0 byByZXN1bHQgPSAqdGhpczsKKy0gICAgICAgIHJlc3VsdCArPSBpOworLSAgICAgICAgcmV0dXJu IHJlc3VsdDsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGFkZGl0aW9uIG9mIGRp c3RhbmNlIGFuZCBpdGVyYXRvcgorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXpl ZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAgIGZyaWVuZCBpdGVy X2ltcGwgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBpLCBjb25zdCBpdGVyX2ltcGwmIGl0KQor LSAgICB7CistICAgICAgICBhdXRvIHJlc3VsdCA9IGl0OworLSAgICAgICAgcmVzdWx0ICs9IGk7 CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJp ZWYgc3VidHJhY3QgZnJvbSBpdGVyYXRvcgorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0 aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAgIGl0ZXJf aW1wbCBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIGkpIGNvbnN0CistICAgIHsKKy0gICAgICAg IGF1dG8gcmVzdWx0ID0gKnRoaXM7CistICAgICAgICByZXN1bHQgLT0gaTsKKy0gICAgICAgIHJl dHVybiByZXN1bHQ7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiByZXR1cm4gZGlm ZmVyZW5jZQorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9v YmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAgIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRv ci0oY29uc3QgaXRlcl9pbXBsJiBvdGhlcikgY29uc3QKKy0gICAgeworLSAgICAgICAgSlNPTl9B U1NFUlQobV9vYmplY3QgIT0gbnVsbHB0cik7CistCistICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0 LT5tX3R5cGUpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6 CistICAgICAgICAgICAgICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIw OSwgImNhbm5vdCB1c2Ugb2Zmc2V0cyB3aXRoIG9iamVjdCBpdGVyYXRvcnMiLCAqbV9vYmplY3Qp KTsKKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorLSAgICAgICAgICAgICAg ICByZXR1cm4gbV9pdC5hcnJheV9pdGVyYXRvciAtIG90aGVyLm1faXQuYXJyYXlfaXRlcmF0b3I7 CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2Ug dmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0g ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIGNh c2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6 bnVtYmVyX2Zsb2F0OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6Cist ICAgICAgICAgICAgICAgIHJldHVybiBtX2l0LnByaW1pdGl2ZV9pdGVyYXRvciAtIG90aGVyLm1f aXQucHJpbWl0aXZlX2l0ZXJhdG9yOworLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8qIQor LSAgICBAYnJpZWYgYWNjZXNzIHRvIHN1Y2Nlc3NvcgorLSAgICBAcHJlIFRoZSBpdGVyYXRvciBp cyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCistICAgICovCistICAg IHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdAorLSAgICB7Cist ICAgICAgICBKU09OX0FTU0VSVChtX29iamVjdCAhPSBudWxscHRyKTsKKy0KKy0gICAgICAgIHN3 aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIHZh bHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICAgICAgSlNPTl9USFJPVyhpbnZhbGlkX2l0ZXJh dG9yOjpjcmVhdGUoMjA4LCAiY2Fubm90IHVzZSBvcGVyYXRvcltdIGZvciBvYmplY3QgaXRlcmF0 b3JzIiwgKm1fb2JqZWN0KSk7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToK Ky0gICAgICAgICAgICAgICAgcmV0dXJuICpzdGQ6Om5leHQobV9pdC5hcnJheV9pdGVyYXRvciwg bik7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgICAg ICBKU09OX1RIUk9XKGludmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMTQsICJjYW5ub3QgZ2V0IHZh bHVlIiwgKm1fb2JqZWN0KSk7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6 CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgICAgIGNhc2Ug dmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1i ZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6Cist ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAgICAgICAgY2FzZSB2YWx1 ZV90OjpkaXNjYXJkZWQ6CistICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9MSUtFTFkobV9pdC5wcmltaXRpdmVfaXRl cmF0b3IuZ2V0X3ZhbHVlKCkgPT0gLW4pKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICByZXR1cm4gKm1fb2JqZWN0OworLSAgICAgICAgICAgICAgICB9CistCistICAg ICAgICAgICAgICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIxNCwgImNh bm5vdCBnZXQgdmFsdWUiLCAqbV9vYmplY3QpKTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9 CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiByZXR1cm4gdGhlIGtleSBvZiBhbiBv YmplY3QgaXRlcmF0b3IKKy0gICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGku ZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorLSAgICAqLworLSAgICBjb25zdCB0eXBlbmFtZSBv YmplY3RfdDo6a2V5X3R5cGUmIGtleSgpIGNvbnN0CistICAgIHsKKy0gICAgICAgIEpTT05fQVNT RVJUKG1fb2JqZWN0ICE9IG51bGxwdHIpOworLQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJ S0VMWShtX29iamVjdC0+aXNfb2JqZWN0KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJl dHVybiBtX2l0Lm9iamVjdF9pdGVyYXRvci0+Zmlyc3Q7CistICAgICAgICB9CistCistICAgICAg ICBKU09OX1RIUk9XKGludmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMDcsICJjYW5ub3QgdXNlIGtl eSgpIGZvciBub24tb2JqZWN0IGl0ZXJhdG9ycyIsICptX29iamVjdCkpOworLSAgICB9CistCist ICAgIC8qIQorLSAgICBAYnJpZWYgcmV0dXJuIHRoZSB2YWx1ZSBvZiBhbiBpdGVyYXRvcgorLSAg ICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVs bHB0cmAuCistICAgICovCistICAgIHJlZmVyZW5jZSB2YWx1ZSgpIGNvbnN0CistICAgIHsKKy0g ICAgICAgIHJldHVybiBvcGVyYXRvciooKTsKKy0gICAgfQorLQorLSAgSlNPTl9QUklWQVRFX1VO TEVTU19URVNURUQ6CistICAgIC8vLyBhc3NvY2lhdGVkIEpTT04gaW5zdGFuY2UKKy0gICAgcG9p bnRlciBtX29iamVjdCA9IG51bGxwdHI7CistICAgIC8vLyB0aGUgYWN0dWFsIGl0ZXJhdG9yIG9m IHRoZSBhc3NvY2lhdGVkIGluc3RhbmNlCistICAgIGludGVybmFsX2l0ZXJhdG9yPHR5cGVuYW1l IHN0ZDo6cmVtb3ZlX2NvbnN0PEJhc2ljSnNvblR5cGU+Ojp0eXBlPiBtX2l0IHt9OworLX07Cist fSAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAj aW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL2l0ZXJhdG9ycy9pdGVyYXRpb25fcHJveHkuaHBwPgor LQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvaXRlcmF0b3JzL2pzb25fcmV2ZXJzZV9p dGVyYXRvci5ocHA+CistCistCistI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHB0cmRpZmZfdAorLSNp bmNsdWRlIDxpdGVyYXRvcj4gLy8gcmV2ZXJzZV9pdGVyYXRvcgorLSNpbmNsdWRlIDx1dGlsaXR5 PiAvLyBkZWNsdmFsCistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRh aWwKKy17CistLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLS8vIHJldmVyc2VfaXRlcmF0b3IgLy8K Ky0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistCistLyohCistQGJyaWVmIGEgdGVtcGxhdGUgZm9y IGEgcmV2ZXJzZSBpdGVyYXRvciBjbGFzcworLQorLUB0cGFyYW0gQmFzZSB0aGUgYmFzZSBpdGVy YXRvciB0eXBlIHRvIHJldmVyc2UuIFZhbGlkIHR5cGVzIGFyZSBAcmVmCistaXRlcmF0b3IgKHRv IGNyZWF0ZSBAcmVmIHJldmVyc2VfaXRlcmF0b3IpIGFuZCBAcmVmIGNvbnN0X2l0ZXJhdG9yICh0 bworLWNyZWF0ZSBAcmVmIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IpLgorLQorLUByZXF1aXJlbWVu dCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29uY2VwdCByZXF1aXJlbWVudHM6 CistLQorLVtCaWRpcmVjdGlvbmFsSXRlcmF0b3JdKGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNv bS93L2NwcC9uYW1lZF9yZXEvQmlkaXJlY3Rpb25hbEl0ZXJhdG9yKToKKy0gIFRoZSBpdGVyYXRv ciB0aGF0IGNhbiBiZSBtb3ZlZCBjYW4gYmUgbW92ZWQgaW4gYm90aCBkaXJlY3Rpb25zIChpLmUu CistICBpbmNyZW1lbnRlZCBhbmQgZGVjcmVtZW50ZWQpLgorLS0gW091dHB1dEl0ZXJhdG9yXSho dHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbmFtZWRfcmVxL091dHB1dEl0ZXJhdG9y KToKKy0gIEl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIHRvIHRoZSBwb2ludGVkLXRvIGVsZW1lbnQg KG9ubHkgaWYgQGEgQmFzZSBpcworLSAgQHJlZiBpdGVyYXRvcikuCistCistQHNpbmNlIHZlcnNp b24gMS4wLjAKKy0qLworLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2U+CistY2xhc3MganNvbl9yZXZl cnNlX2l0ZXJhdG9yIDogcHVibGljIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxCYXNlPgorLXsKKy0g IHB1YmxpYzoKKy0gICAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7Cist ICAgIC8vLyBzaG9ydGN1dCB0byB0aGUgcmV2ZXJzZSBpdGVyYXRvciBhZGFwdGVyCistICAgIHVz aW5nIGJhc2VfaXRlcmF0b3IgPSBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8QmFzZT47CistICAgIC8v LyB0aGUgcmVmZXJlbmNlIHR5cGUgZm9yIHRoZSBwb2ludGVkLXRvIGVsZW1lbnQKKy0gICAgdXNp bmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgQmFzZTo6cmVmZXJlbmNlOworLQorLSAgICAvLy8gY3Jl YXRlIHJldmVyc2UgaXRlcmF0b3IgZnJvbSBpdGVyYXRvcgorLSAgICBleHBsaWNpdCBqc29uX3Jl dmVyc2VfaXRlcmF0b3IoY29uc3QgdHlwZW5hbWUgYmFzZV9pdGVyYXRvcjo6aXRlcmF0b3JfdHlw ZSYgaXQpIG5vZXhjZXB0CistICAgICAgICA6IGJhc2VfaXRlcmF0b3IoaXQpIHt9CistCistICAg IC8vLyBjcmVhdGUgcmV2ZXJzZSBpdGVyYXRvciBmcm9tIGJhc2UgY2xhc3MKKy0gICAgZXhwbGlj aXQganNvbl9yZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IGJhc2VfaXRlcmF0b3ImIGl0KSBub2V4Y2Vw dCA6IGJhc2VfaXRlcmF0b3IoaXQpIHt9CistCistICAgIC8vLyBwb3N0LWluY3JlbWVudCAoaXQr KykKKy0gICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0IG9wZXJhdG9yKysoaW50KSAvLyBO T0xJTlQocmVhZGFiaWxpdHktY29uc3QtcmV0dXJuLXR5cGUpCistICAgIHsKKy0gICAgICAgIHJl dHVybiBzdGF0aWNfY2FzdDxqc29uX3JldmVyc2VfaXRlcmF0b3I+KGJhc2VfaXRlcmF0b3I6Om9w ZXJhdG9yKysoMSkpOworLSAgICB9CistCistICAgIC8vLyBwcmUtaW5jcmVtZW50ICgrK2l0KQor LSAgICBqc29uX3JldmVyc2VfaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorLSAgICB7CistICAgICAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8anNvbl9yZXZlcnNlX2l0ZXJhdG9yJj4oYmFzZV9pdGVyYXRv cjo6b3BlcmF0b3IrKygpKTsKKy0gICAgfQorLQorLSAgICAvLy8gcG9zdC1kZWNyZW1lbnQgKGl0 LS0pCistICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvciBjb25zdCBvcGVyYXRvci0tKGludCkgLy8g Tk9MSU5UKHJlYWRhYmlsaXR5LWNvbnN0LXJldHVybi10eXBlKQorLSAgICB7CistICAgICAgICBy ZXR1cm4gc3RhdGljX2Nhc3Q8anNvbl9yZXZlcnNlX2l0ZXJhdG9yPihiYXNlX2l0ZXJhdG9yOjpv cGVyYXRvci0tKDEpKTsKKy0gICAgfQorLQorLSAgICAvLy8gcHJlLWRlY3JlbWVudCAoLS1pdCkK Ky0gICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkKKy0gICAgeworLSAgICAg ICAgcmV0dXJuIHN0YXRpY19jYXN0PGpzb25fcmV2ZXJzZV9pdGVyYXRvciY+KGJhc2VfaXRlcmF0 b3I6Om9wZXJhdG9yLS0oKSk7CistICAgIH0KKy0KKy0gICAgLy8vIGFkZCB0byBpdGVyYXRvcgor LSAgICBqc29uX3JldmVyc2VfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIGkp CistICAgIHsKKy0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxqc29uX3JldmVyc2VfaXRlcmF0 b3ImPihiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvcis9KGkpKTsKKy0gICAgfQorLQorLSAgICAvLy8g YWRkIHRvIGl0ZXJhdG9yCistICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvcisoZGlm ZmVyZW5jZV90eXBlIGkpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz dDxqc29uX3JldmVyc2VfaXRlcmF0b3I+KGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yKyhpKSk7Cist ICAgIH0KKy0KKy0gICAgLy8vIHN1YnRyYWN0IGZyb20gaXRlcmF0b3IKKy0gICAganNvbl9yZXZl cnNlX2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgaSkgY29uc3QKKy0gICAgewor LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGpzb25fcmV2ZXJzZV9pdGVyYXRvcj4oYmFzZV9p dGVyYXRvcjo6b3BlcmF0b3ItKGkpKTsKKy0gICAgfQorLQorLSAgICAvLy8gcmV0dXJuIGRpZmZl cmVuY2UKKy0gICAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdCBqc29uX3JldmVyc2Vf aXRlcmF0b3ImIG90aGVyKSBjb25zdAorLSAgICB7CistICAgICAgICByZXR1cm4gYmFzZV9pdGVy YXRvcigqdGhpcykgLSBiYXNlX2l0ZXJhdG9yKG90aGVyKTsKKy0gICAgfQorLQorLSAgICAvLy8g YWNjZXNzIHRvIHN1Y2Nlc3NvcgorLSAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNl X3R5cGUgbikgY29uc3QKKy0gICAgeworLSAgICAgICAgcmV0dXJuICoodGhpcy0+b3BlcmF0b3Ir KG4pKTsKKy0gICAgfQorLQorLSAgICAvLy8gcmV0dXJuIHRoZSBrZXkgb2YgYW4gb2JqZWN0IGl0 ZXJhdG9yCistICAgIGF1dG8ga2V5KCkgY29uc3QgLT4gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEJh c2U+KCkua2V5KCkpCistICAgIHsKKy0gICAgICAgIGF1dG8gaXQgPSAtLXRoaXMtPmJhc2UoKTsK Ky0gICAgICAgIHJldHVybiBpdC5rZXkoKTsKKy0gICAgfQorLQorLSAgICAvLy8gcmV0dXJuIHRo ZSB2YWx1ZSBvZiBhbiBpdGVyYXRvcgorLSAgICByZWZlcmVuY2UgdmFsdWUoKSBjb25zdAorLSAg ICB7CistICAgICAgICBhdXRvIGl0ID0gLS10aGlzLT5iYXNlKCk7CistICAgICAgICByZXR1cm4g aXQub3BlcmF0b3IgKiAoKTsKKy0gICAgfQorLX07CistfSAgLy8gbmFtZXNwYWNlIGRldGFpbAor LX0gIC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRh aWwvaXRlcmF0b3JzL3ByaW1pdGl2ZV9pdGVyYXRvci5ocHA+CistCistLy8gI2luY2x1ZGUgPG5s b2htYW5uL2RldGFpbC9qc29uX3BvaW50ZXIuaHBwPgorLQorLQorLSNpbmNsdWRlIDxhbGdvcml0 aG0+IC8vIGFsbF9vZgorLSNpbmNsdWRlIDxjY3R5cGU+IC8vIGlzZGlnaXQKKy0jaW5jbHVkZSA8 bGltaXRzPiAvLyBtYXgKKy0jaW5jbHVkZSA8bnVtZXJpYz4gLy8gYWNjdW11bGF0ZQorLSNpbmNs dWRlIDxzdHJpbmc+IC8vIHN0cmluZworLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBtb3ZlCistI2lu Y2x1ZGUgPHZlY3Rvcj4gLy8gdmVjdG9yCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFp bC9leGNlcHRpb25zLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21hY3Jv X3Njb3BlLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL3N0cmluZ19lc2Nh cGUuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvdmFsdWVfdC5ocHA+Cist CistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLQorLS8vLyBAYnJpZWYgSlNPTiBQb2ludGVy IGRlZmluZXMgYSBzdHJpbmcgc3ludGF4IGZvciBpZGVudGlmeWluZyBhIHNwZWNpZmljIHZhbHVl IHdpdGhpbiBhIEpTT04gZG9jdW1lbnQKKy0vLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5t ZS9hcGkvanNvbl9wb2ludGVyLworLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+Cist Y2xhc3MganNvbl9wb2ludGVyCisteworLSAgICAvLyBhbGxvdyBiYXNpY19qc29uIHRvIGFjY2Vz cyBwcml2YXRlIG1lbWJlcnMKKy0gICAgTkxPSE1BTk5fQkFTSUNfSlNPTl9UUExfREVDTEFSQVRJ T04KKy0gICAgZnJpZW5kIGNsYXNzIGJhc2ljX2pzb247CistCistICBwdWJsaWM6CistICAgIC8v LyBAYnJpZWYgY3JlYXRlIEpTT04gcG9pbnRlcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5u bG9obWFubi5tZS9hcGkvanNvbl9wb2ludGVyL2pzb25fcG9pbnRlci8KKy0gICAgZXhwbGljaXQg anNvbl9wb2ludGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBzID0gIiIpCistICAgICAgICA6IHJlZmVy ZW5jZV90b2tlbnMoc3BsaXQocykpCistICAgIHt9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJu IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBKU09OIHBvaW50ZXIKKy0gICAgLy8vIEBz YSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2pzb25fcG9pbnRlci90b19zdHJpbmcvCist ICAgIHN0ZDo6c3RyaW5nIHRvX3N0cmluZygpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVy biBzdGQ6OmFjY3VtdWxhdGUocmVmZXJlbmNlX3Rva2Vucy5iZWdpbigpLCByZWZlcmVuY2VfdG9r ZW5zLmVuZCgpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3t9 LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyAm IGEsIGNvbnN0IHN0ZDo6c3RyaW5nICYgYikKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1 cm4gYSArICIvIiArIGRldGFpbDo6ZXNjYXBlKGIpOworLSAgICAgICAgfSk7CistICAgIH0KKy0K Ky0gICAgLy8vIEBicmllZiByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEpT T04gcG9pbnRlcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvanNv bl9wb2ludGVyL29wZXJhdG9yX3N0cmluZy8KKy0gICAgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBj b25zdAorLSAgICB7CistICAgICAgICByZXR1cm4gdG9fc3RyaW5nKCk7CistICAgIH0KKy0KKy0g ICAgLy8vIEBicmllZiBhcHBlbmQgYW5vdGhlciBKU09OIHBvaW50ZXIgYXQgdGhlIGVuZCBvZiB0 aGlzIEpTT04gcG9pbnRlcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvanNvbl9wb2ludGVyL29wZXJhdG9yX3NsYXNoZXEvCistICAgIGpzb25fcG9pbnRlciYgb3Bl cmF0b3IvPShjb25zdCBqc29uX3BvaW50ZXImIHB0cikKKy0gICAgeworLSAgICAgICAgcmVmZXJl bmNlX3Rva2Vucy5pbnNlcnQocmVmZXJlbmNlX3Rva2Vucy5lbmQoKSwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHB0ci5yZWZlcmVuY2VfdG9rZW5zLmJlZ2luKCksCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIucmVmZXJlbmNlX3Rva2Vucy5lbmQoKSk7Cist ICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhcHBlbmQg YW4gdW5lc2NhcGVkIHJlZmVyZW5jZSB0b2tlbiBhdCB0aGUgZW5kIG9mIHRoaXMgSlNPTiBwb2lu dGVyCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9qc29uX3BvaW50 ZXIvb3BlcmF0b3Jfc2xhc2hlcS8KKy0gICAganNvbl9wb2ludGVyJiBvcGVyYXRvci89KHN0ZDo6 c3RyaW5nIHRva2VuKQorLSAgICB7CistICAgICAgICBwdXNoX2JhY2soc3RkOjptb3ZlKHRva2Vu KSk7CistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBh cHBlbmQgYW4gYXJyYXkgaW5kZXggYXQgdGhlIGVuZCBvZiB0aGlzIEpTT04gcG9pbnRlcgorLSAg ICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvanNvbl9wb2ludGVyL29wZXJh dG9yX3NsYXNoZXEvCistICAgIGpzb25fcG9pbnRlciYgb3BlcmF0b3IvPShzdGQ6OnNpemVfdCBh cnJheV9pZHgpCistICAgIHsKKy0gICAgICAgIHJldHVybiAqdGhpcyAvPSBzdGQ6OnRvX3N0cmlu ZyhhcnJheV9pZHgpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgY3JlYXRlIGEgbmV3IEpT T04gcG9pbnRlciBieSBhcHBlbmRpbmcgdGhlIHJpZ2h0IEpTT04gcG9pbnRlciBhdCB0aGUgZW5k IG9mIHRoZSBsZWZ0IEpTT04gcG9pbnRlcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9o bWFubi5tZS9hcGkvanNvbl9wb2ludGVyL29wZXJhdG9yX3NsYXNoLworLSAgICBmcmllbmQganNv bl9wb2ludGVyIG9wZXJhdG9yLyhjb25zdCBqc29uX3BvaW50ZXImIGxocywKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganNvbl9wb2ludGVyJiByaHMpCistICAgIHsK Ky0gICAgICAgIHJldHVybiBqc29uX3BvaW50ZXIobGhzKSAvPSByaHM7CistICAgIH0KKy0KKy0g ICAgLy8vIEBicmllZiBjcmVhdGUgYSBuZXcgSlNPTiBwb2ludGVyIGJ5IGFwcGVuZGluZyB0aGUg dW5lc2NhcGVkIHRva2VuIGF0IHRoZSBlbmQgb2YgdGhlIEpTT04gcG9pbnRlcgorLSAgICAvLy8g QHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvanNvbl9wb2ludGVyL29wZXJhdG9yX3Ns YXNoLworLSAgICBmcmllbmQganNvbl9wb2ludGVyIG9wZXJhdG9yLyhjb25zdCBqc29uX3BvaW50 ZXImIGxocywgc3RkOjpzdHJpbmcgdG9rZW4pIC8vIE5PTElOVChwZXJmb3JtYW5jZS11bm5lY2Vz c2FyeS12YWx1ZS1wYXJhbSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGpzb25fcG9pbnRlcihs aHMpIC89IHN0ZDo6bW92ZSh0b2tlbik7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBjcmVh dGUgYSBuZXcgSlNPTiBwb2ludGVyIGJ5IGFwcGVuZGluZyB0aGUgYXJyYXktaW5kZXgtdG9rZW4g YXQgdGhlIGVuZCBvZiB0aGUgSlNPTiBwb2ludGVyCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29u Lm5sb2htYW5uLm1lL2FwaS9qc29uX3BvaW50ZXIvb3BlcmF0b3Jfc2xhc2gvCistICAgIGZyaWVu ZCBqc29uX3BvaW50ZXIgb3BlcmF0b3IvKGNvbnN0IGpzb25fcG9pbnRlciYgbGhzLCBzdGQ6OnNp emVfdCBhcnJheV9pZHgpCistICAgIHsKKy0gICAgICAgIHJldHVybiBqc29uX3BvaW50ZXIobGhz KSAvPSBhcnJheV9pZHg7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm5zIHRoZSBw YXJlbnQgb2YgdGhpcyBKU09OIHBvaW50ZXIKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxv aG1hbm4ubWUvYXBpL2pzb25fcG9pbnRlci9wYXJlbnRfcG9pbnRlci8KKy0gICAganNvbl9wb2lu dGVyIHBhcmVudF9wb2ludGVyKCkgY29uc3QKKy0gICAgeworLSAgICAgICAgaWYgKGVtcHR5KCkp CistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICAgICAgfQorLQor LSAgICAgICAganNvbl9wb2ludGVyIHJlcyA9ICp0aGlzOworLSAgICAgICAgcmVzLnBvcF9iYWNr KCk7CistICAgICAgICByZXR1cm4gcmVzOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmVt b3ZlIGxhc3QgcmVmZXJlbmNlIHRva2VuCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2ht YW5uLm1lL2FwaS9qc29uX3BvaW50ZXIvcG9wX2JhY2svCistICAgIHZvaWQgcG9wX2JhY2soKQor LSAgICB7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoZW1wdHkoKSkpCistICAg ICAgICB7CistICAgICAgICAgICAgSlNPTl9USFJPVyhkZXRhaWw6Om91dF9vZl9yYW5nZTo6Y3Jl YXRlKDQwNSwgIkpTT04gcG9pbnRlciBoYXMgbm8gcGFyZW50IiwgQmFzaWNKc29uVHlwZSgpKSk7 CistICAgICAgICB9CistCistICAgICAgICByZWZlcmVuY2VfdG9rZW5zLnBvcF9iYWNrKCk7Cist ICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm4gbGFzdCByZWZlcmVuY2UgdG9rZW4KKy0g ICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2pzb25fcG9pbnRlci9iYWNr LworLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmFjaygpIGNvbnN0CistICAgIHsKKy0gICAgICAg IGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShlbXB0eSgpKSkKKy0gICAgICAgIHsKKy0gICAgICAg ICAgICBKU09OX1RIUk9XKGRldGFpbDo6b3V0X29mX3JhbmdlOjpjcmVhdGUoNDA1LCAiSlNPTiBw b2ludGVyIGhhcyBubyBwYXJlbnQiLCBCYXNpY0pzb25UeXBlKCkpKTsKKy0gICAgICAgIH0KKy0K Ky0gICAgICAgIHJldHVybiByZWZlcmVuY2VfdG9rZW5zLmJhY2soKTsKKy0gICAgfQorLQorLSAg ICAvLy8gQGJyaWVmIGFwcGVuZCBhbiB1bmVzY2FwZWQgdG9rZW4gYXQgdGhlIGVuZCBvZiB0aGUg cmVmZXJlbmNlIHBvaW50ZXIKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUv YXBpL2pzb25fcG9pbnRlci9wdXNoX2JhY2svCistICAgIHZvaWQgcHVzaF9iYWNrKGNvbnN0IHN0 ZDo6c3RyaW5nJiB0b2tlbikKKy0gICAgeworLSAgICAgICAgcmVmZXJlbmNlX3Rva2Vucy5wdXNo X2JhY2sodG9rZW4pOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgYXBwZW5kIGFuIHVuZXNj YXBlZCB0b2tlbiBhdCB0aGUgZW5kIG9mIHRoZSByZWZlcmVuY2UgcG9pbnRlcgorLSAgICAvLy8g QHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvanNvbl9wb2ludGVyL3B1c2hfYmFjay8K Ky0gICAgdm9pZCBwdXNoX2JhY2soc3RkOjpzdHJpbmcmJiB0b2tlbikKKy0gICAgeworLSAgICAg ICAgcmVmZXJlbmNlX3Rva2Vucy5wdXNoX2JhY2soc3RkOjptb3ZlKHRva2VuKSk7CistICAgIH0K Ky0KKy0gICAgLy8vIEBicmllZiByZXR1cm4gd2hldGhlciBwb2ludGVyIHBvaW50cyB0byB0aGUg cm9vdCBkb2N1bWVudAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv anNvbl9wb2ludGVyL2VtcHR5LworLSAgICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQKKy0g ICAgeworLSAgICAgICAgcmV0dXJuIHJlZmVyZW5jZV90b2tlbnMuZW1wdHkoKTsKKy0gICAgfQor LQorLSAgcHJpdmF0ZToKKy0gICAgLyohCistICAgIEBwYXJhbVtpbl0gcyAgcmVmZXJlbmNlIHRv a2VuIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGFycmF5IGluZGV4CistCistICAgIEByZXR1cm4g aW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiBAYSBzCistCistICAgIEB0aHJvdyBwYXJzZV9lcnJv ci4xMDYgIGlmIGFuIGFycmF5IGluZGV4IGJlZ2lucyB3aXRoICcwJworLSAgICBAdGhyb3cgcGFy c2VfZXJyb3IuMTA5ICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgbm90IHdpdGggYSBkaWdpdAor LSAgICBAdGhyb3cgb3V0X29mX3JhbmdlLjQwNCBpZiBzdHJpbmcgQGEgcyBjb3VsZCBub3QgYmUg Y29udmVydGVkIHRvIGFuIGludGVnZXIKKy0gICAgQHRocm93IG91dF9vZl9yYW5nZS40MTAgaWYg YW4gYXJyYXkgaW5kZXggZXhjZWVkcyBzaXplX3R5cGUKKy0gICAgKi8KKy0gICAgc3RhdGljIHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU6OnNpemVfdHlwZSBhcnJheV9pbmRleChjb25zdCBzdGQ6OnN0 cmluZyYgcykKKy0gICAgeworLSAgICAgICAgdXNpbmcgc2l6ZV90eXBlID0gdHlwZW5hbWUgQmFz aWNKc29uVHlwZTo6c2l6ZV90eXBlOworLQorLSAgICAgICAgLy8gZXJyb3IgY29uZGl0aW9uIChj Zi4gUkZDIDY5MDEsIFNlY3QuIDQpCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFko cy5zaXplKCkgPiAxICYmIHNbMF0gPT0gJzAnKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBK U09OX1RIUk9XKGRldGFpbDo6cGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDYsIDAsICJhcnJheSBpbmRl eCAnIiArIHMgKyAiJyBtdXN0IG5vdCBiZWdpbiB3aXRoICcwJyIsIEJhc2ljSnNvblR5cGUoKSkp OworLSAgICAgICAgfQorLQorLSAgICAgICAgLy8gZXJyb3IgY29uZGl0aW9uIChjZi4gUkZDIDY5 MDEsIFNlY3QuIDQpCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkocy5zaXplKCkg PiAxICYmICEoc1swXSA+PSAnMScgJiYgc1swXSA8PSAnOScpKSkKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICBKU09OX1RIUk9XKGRldGFpbDo6cGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDksIDAsICJh cnJheSBpbmRleCAnIiArIHMgKyAiJyBpcyBub3QgYSBudW1iZXIiLCBCYXNpY0pzb25UeXBlKCkp KTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHN0ZDo6c2l6ZV90IHByb2Nlc3NlZF9jaGFycyA9 IDA7CistICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmVzID0gMDsgIC8vIE5PTElOVChydW50 aW1lL2ludCkKKy0gICAgICAgIEpTT05fVFJZCistICAgICAgICB7CistICAgICAgICAgICAgcmVz ID0gc3RkOjpzdG91bGwocywgJnByb2Nlc3NlZF9jaGFycyk7CistICAgICAgICB9CistICAgICAg ICBKU09OX0NBVENIKHN0ZDo6b3V0X29mX3JhbmdlJikKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICBKU09OX1RIUk9XKGRldGFpbDo6b3V0X29mX3JhbmdlOjpjcmVhdGUoNDA0LCAidW5yZXNvbHZl ZCByZWZlcmVuY2UgdG9rZW4gJyIgKyBzICsgIiciLCBCYXNpY0pzb25UeXBlKCkpKTsKKy0gICAg ICAgIH0KKy0KKy0gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBzdHJpbmcgd2FzIGNvbXBsZXRlbHkg cmVhZAorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKHByb2Nlc3NlZF9jaGFycyAh PSBzLnNpemUoKSkpCistICAgICAgICB7CistICAgICAgICAgICAgSlNPTl9USFJPVyhkZXRhaWw6 Om91dF9vZl9yYW5nZTo6Y3JlYXRlKDQwNCwgInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2VuICci ICsgcyArICInIiwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICB9CistCistICAgICAgICAv LyBvbmx5IHRyaWdnZXJlZCBvbiBzcGVjaWFsIHBsYXRmb3JtcyAobGlrZSAzMmJpdCksIHNlZSBh bHNvCistICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbi9wdWxsLzIy MDMKKy0gICAgICAgIGlmIChyZXMgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigo c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3R5cGU+OjptYXgpKCkpKSAgLy8gTk9MSU5UKHJ1bnRp bWUvaW50KQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjpvdXRf b2ZfcmFuZ2U6OmNyZWF0ZSg0MTAsICJhcnJheSBpbmRleCAiICsgcyArICIgZXhjZWVkcyBzaXpl X3R5cGUiLCBCYXNpY0pzb25UeXBlKCkpKTsgLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgIH0K Ky0KKy0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHJlcyk7CistICAgIH0K Ky0KKy0gIEpTT05fUFJJVkFURV9VTkxFU1NfVEVTVEVEOgorLSAgICBqc29uX3BvaW50ZXIgdG9w KCkgY29uc3QKKy0gICAgeworLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKGVtcHR5 KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjpvdXRfb2Zf cmFuZ2U6OmNyZWF0ZSg0MDUsICJKU09OIHBvaW50ZXIgaGFzIG5vIHBhcmVudCIsIEJhc2ljSnNv blR5cGUoKSkpOworLSAgICAgICAgfQorLQorLSAgICAgICAganNvbl9wb2ludGVyIHJlc3VsdCA9 ICp0aGlzOworLSAgICAgICAgcmVzdWx0LnJlZmVyZW5jZV90b2tlbnMgPSB7cmVmZXJlbmNlX3Rv a2Vuc1swXX07CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICBwcml2YXRl OgorLSAgICAvKiEKKy0gICAgQGJyaWVmIGNyZWF0ZSBhbmQgcmV0dXJuIGEgcmVmZXJlbmNlIHRv IHRoZSBwb2ludGVkIHRvIHZhbHVlCistCistICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUg bnVtYmVyIG9mIHJlZmVyZW5jZSB0b2tlbnMuCistCistICAgIEB0aHJvdyBwYXJzZV9lcnJvci4x MDkgaWYgYXJyYXkgaW5kZXggaXMgbm90IGEgbnVtYmVyCistICAgIEB0aHJvdyB0eXBlX2Vycm9y LjMxMyBpZiB2YWx1ZSBjYW5ub3QgYmUgdW5mbGF0dGVuZWQKKy0gICAgKi8KKy0gICAgQmFzaWNK c29uVHlwZSYgZ2V0X2FuZF9jcmVhdGUoQmFzaWNKc29uVHlwZSYgaikgY29uc3QKKy0gICAgewor LSAgICAgICAgYXV0byogcmVzdWx0ID0gJmo7CistCistICAgICAgICAvLyBpbiBjYXNlIG5vIHJl ZmVyZW5jZSB0b2tlbnMgZXhpc3QsIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgSlNPTiB2YWx1 ZQorLSAgICAgICAgLy8gaiB3aGljaCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGEgcHJpbWl0aXZl IHZhbHVlCistICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZmVyZW5jZV90b2tlbiA6IHJlZmVy ZW5jZV90b2tlbnMpCistICAgICAgICB7CistICAgICAgICAgICAgc3dpdGNoIChyZXN1bHQtPnR5 cGUoKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1 ZV90OjpudWxsOgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBpZiAo cmVmZXJlbmNlX3Rva2VuID09ICIwIikKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgICAgICAvLyBzdGFydCBhIG5ldyBhcnJheSBpZiByZWZlcmVuY2UgdG9rZW4g aXMgMAorLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZyZXN1bHQtPm9wZXJhdG9y W10oMCk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNl CistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Rh cnQgYSBuZXcgb2JqZWN0IG90aGVyd2lzZQorLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs dCA9ICZyZXN1bHQtPm9wZXJhdG9yW10ocmVmZXJlbmNlX3Rva2VuKTsKKy0gICAgICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9 CistCistICAgICAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpvYmplY3Q6CistICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbnRyeSBp biB0aGUgb2JqZWN0CistICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAmcmVzdWx0LT5vcGVy YXRvcltdKHJlZmVyZW5jZV90b2tlbik7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0g ICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVf dDo6YXJyYXk6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGNy ZWF0ZSBhbiBlbnRyeSBpbiB0aGUgYXJyYXkKKy0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9 ICZyZXN1bHQtPm9wZXJhdG9yW10oYXJyYXlfaW5kZXgocmVmZXJlbmNlX3Rva2VuKSk7CistICAg ICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAg ICAgICAgICAvKgorLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvZGUgaXMgb25seSBy ZWFjaGVkIGlmIHRoZXJlIGV4aXN0cyBhIHJlZmVyZW5jZQorLSAgICAgICAgICAgICAgICB0b2tl biBfYW5kXyB0aGUgY3VycmVudCB2YWx1ZSBpcyBwcmltaXRpdmUuIEluIHRoaXMgY2FzZSwgd2Ug aGF2ZQorLSAgICAgICAgICAgICAgICBhbiBlcnJvciBzaXR1YXRpb24sIGJlY2F1c2UgcHJpbWl0 aXZlIHZhbHVlcyBtYXkgb25seSBvY2N1ciBhcworLSAgICAgICAgICAgICAgICBzaW5nbGUgdmFs dWU7IHRoYXQgaXMsIHdpdGggYW4gZW1wdHkgbGlzdCBvZiByZWZlcmVuY2UgdG9rZW5zLgorLSAg ICAgICAgICAgICAgICAqLworLSAgICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6 c3RyaW5nOgorLSAgICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6Ym9vbGVhbjoK Ky0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgor LSAgICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgor LSAgICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorLSAg ICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAg ICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgICAgICBk ZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhkZXRhaWw6OnR5cGVfZXJy b3I6OmNyZWF0ZSgzMTMsICJpbnZhbGlkIHZhbHVlIHRvIHVuZmxhdHRlbiIsIGopKTsKKy0gICAg ICAgICAgICB9CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4gKnJlc3VsdDsKKy0gICAg fQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcG9p bnRlZCB0byB2YWx1ZQorLQorLSAgICBAbm90ZSBUaGlzIHZlcnNpb24gZG9lcyBub3QgdGhyb3cg aWYgYSB2YWx1ZSBpcyBub3QgcHJlc2VudCwgYnV0IHRyaWVzIHRvCistICAgICAgICAgIGNyZWF0 ZSBuZXN0ZWQgdmFsdWVzIGluc3RlYWQuIEZvciBpbnN0YW5jZSwgY2FsbGluZyB0aGlzIGZ1bmN0 aW9uCistICAgICAgICAgIHdpdGggcG9pbnRlciBgIi90aGlzL3RoYXQiYCBvbiBhIG51bGwgdmFs dWUgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCistICAgICAgICAgIGBvcGVyYXRvcltdKCJ0aGlz Iikub3BlcmF0b3JbXSgidGhhdCIpYCBvbiB0aGF0IHZhbHVlLCBlZmZlY3RpdmVseQorLSAgICAg ICAgICBjaGFuZ2luZyB0aGUgbnVsbCB2YWx1ZSB0byBhbiBvYmplY3QuCistCistICAgIEBwYXJh bVtpbl0gcHRyICBhIEpTT04gdmFsdWUKKy0KKy0gICAgQHJldHVybiByZWZlcmVuY2UgdG8gdGhl IEpTT04gdmFsdWUgcG9pbnRlZCB0byBieSB0aGUgSlNPTiBwb2ludGVyCistCistICAgIEBjb21w bGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBKU09OIHBvaW50ZXIuCistCistICAg IEB0aHJvdyBwYXJzZV9lcnJvci4xMDYgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAn MCcKKy0gICAgQHRocm93IHBhcnNlX2Vycm9yLjEwOSAgIGlmIGFuIGFycmF5IGluZGV4IHdhcyBu b3QgYSBudW1iZXIKKy0gICAgQHRocm93IG91dF9vZl9yYW5nZS40MDQgIGlmIHRoZSBKU09OIHBv aW50ZXIgY2FuIG5vdCBiZSByZXNvbHZlZAorLSAgICAqLworLSAgICBCYXNpY0pzb25UeXBlJiBn ZXRfdW5jaGVja2VkKEJhc2ljSnNvblR5cGUqIHB0cikgY29uc3QKKy0gICAgeworLSAgICAgICAg Zm9yIChjb25zdCBhdXRvJiByZWZlcmVuY2VfdG9rZW4gOiByZWZlcmVuY2VfdG9rZW5zKQorLSAg ICAgICAgeworLSAgICAgICAgICAgIC8vIGNvbnZlcnQgbnVsbCB2YWx1ZXMgdG8gYXJyYXlzIG9y IG9iamVjdHMgYmVmb3JlIGNvbnRpbnVpbmcKKy0gICAgICAgICAgICBpZiAocHRyLT5pc19udWxs KCkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiByZWZlcmVu Y2UgdG9rZW4gaXMgYSBudW1iZXIKKy0gICAgICAgICAgICAgICAgY29uc3QgYm9vbCBudW1zID0K Ky0gICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsX29mKHJlZmVyZW5jZV90b2tlbi5iZWdpbigp LCByZWZlcmVuY2VfdG9rZW4uZW5kKCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbXShjb25zdCB1bnNpZ25lZCBjaGFyIHgpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgIHJldHVybiBzdGQ6OmlzZGlnaXQoeCk7CistICAgICAgICAgICAgICAgIH0p OworLQorLSAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdmFsdWUgdG8gYXJyYXkgZm9yIG51bWJl cnMgb3IgIi0iIG9yIHRvIG9iamVjdCBvdGhlcndpc2UKKy0gICAgICAgICAgICAgICAgKnB0ciA9 IChudW1zIHx8IHJlZmVyZW5jZV90b2tlbiA9PSAiLSIpCistICAgICAgICAgICAgICAgICAgICAg ICA/IGRldGFpbDo6dmFsdWVfdDo6YXJyYXkKKy0gICAgICAgICAgICAgICAgICAgICAgIDogZGV0 YWlsOjp2YWx1ZV90OjpvYmplY3Q7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIHN3 aXRjaCAocHRyLT50eXBlKCkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBjYXNl IGRldGFpbDo6dmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICAvLyB1c2UgdW5jaGVja2VkIG9iamVjdCBhY2Nlc3MKKy0gICAgICAgICAgICAg ICAgICAgIHB0ciA9ICZwdHItPm9wZXJhdG9yW10ocmVmZXJlbmNlX3Rva2VuKTsKKy0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAg ICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjphcnJheToKKy0gICAgICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbiA9PSAiLSIpCistICAgICAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSB0cmVh dCAiLSIgYXMgaW5kZXggYmV5b25kIHRoZSBlbmQKKy0gICAgICAgICAgICAgICAgICAgICAgICBw dHIgPSAmcHRyLT5vcGVyYXRvcltdKHB0ci0+bV92YWx1ZS5hcnJheS0+c2l6ZSgpKTsKKy0gICAg ICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGFycmF5IGlu ZGV4IHRvIG51bWJlcjsgdW5jaGVja2VkIGFjY2VzcworLSAgICAgICAgICAgICAgICAgICAgICAg IHB0ciA9ICZwdHItPm9wZXJhdG9yW10oYXJyYXlfaW5kZXgocmVmZXJlbmNlX3Rva2VuKSk7Cist ICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAg ICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6 bnVsbDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OnN0cmluZzoKKy0g ICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJvb2xlYW46CistICAgICAgICAg ICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAg ICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAg ICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICAg ICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICAgICAgY2FzZSBk ZXRhaWw6OnZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICAgICAgZGVmYXVsdDoKKy0g ICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjpvdXRfb2ZfcmFuZ2U6OmNyZWF0 ZSg0MDQsICJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAnIiArIHJlZmVyZW5jZV90b2tlbiAr ICInIiwgKnB0cikpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJl dHVybiAqcHRyOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAdGhyb3cgcGFyc2VfZXJyb3Iu MTA2ICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCistICAgIEB0aHJvdyBwYXJz ZV9lcnJvci4xMDkgICBpZiBhbiBhcnJheSBpbmRleCB3YXMgbm90IGEgbnVtYmVyCistICAgIEB0 aHJvdyBvdXRfb2ZfcmFuZ2UuNDAyICBpZiB0aGUgYXJyYXkgaW5kZXggJy0nIGlzIHVzZWQKKy0g ICAgQHRocm93IG91dF9vZl9yYW5nZS40MDQgIGlmIHRoZSBKU09OIHBvaW50ZXIgY2FuIG5vdCBi ZSByZXNvbHZlZAorLSAgICAqLworLSAgICBCYXNpY0pzb25UeXBlJiBnZXRfY2hlY2tlZChCYXNp Y0pzb25UeXBlKiBwdHIpIGNvbnN0CistICAgIHsKKy0gICAgICAgIGZvciAoY29uc3QgYXV0byYg cmVmZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rva2VucykKKy0gICAgICAgIHsKKy0gICAgICAg ICAgICBzd2l0Y2ggKHB0ci0+dHlwZSgpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICAgICAgLy8gbm90ZTogYXQgcGVyZm9ybXMgcmFuZ2UgY2hlY2sKKy0gICAg ICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPmF0KHJlZmVyZW5jZV90b2tlbik7CistICAgICAg ICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAg ICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShyZWZlcmVuY2VfdG9r ZW4gPT0gIi0iKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg ICAgICAvLyAiLSIgYWx3YXlzIGZhaWxzIHRoZSByYW5nZSBjaGVjaworLSAgICAgICAgICAgICAg ICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjpvdXRfb2ZfcmFuZ2U6OmNyZWF0ZSg0MDIsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJhcnJheSBpbmRleCAnLScgKCIgKyBzdGQ6OnRvX3N0cmluZyhwdHItPm1fdmFsdWUu YXJyYXktPnNpemUoKSkgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBvdXQgb2YgcmFuZ2UiLCAqcHRyKSk7Cist ICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiBh dCBwZXJmb3JtcyByYW5nZSBjaGVjaworLSAgICAgICAgICAgICAgICAgICAgcHRyID0gJnB0ci0+ YXQoYXJyYXlfaW5kZXgocmVmZXJlbmNlX3Rva2VuKSk7CistICAgICAgICAgICAgICAgICAgICBi cmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIGRldGFp bDo6dmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6 OnN0cmluZzoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJvb2xlYW46 CistICAgICAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoK Ky0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoK Ky0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0g ICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAg ICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICAgICAg ZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjpvdXRfb2Zf cmFuZ2U6OmNyZWF0ZSg0MDQsICJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAnIiArIHJlZmVy ZW5jZV90b2tlbiArICInIiwgKnB0cikpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0K Ky0gICAgICAgIHJldHVybiAqcHRyOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYg cmV0dXJuIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBwb2ludGVkIHRvIHZhbHVlCistCistICAg IEBwYXJhbVtpbl0gcHRyICBhIEpTT04gdmFsdWUKKy0KKy0gICAgQHJldHVybiBjb25zdCByZWZl cmVuY2UgdG8gdGhlIEpTT04gdmFsdWUgcG9pbnRlZCB0byBieSB0aGUgSlNPTgorLSAgICBwb2lu dGVyCistCistICAgIEB0aHJvdyBwYXJzZV9lcnJvci4xMDYgICBpZiBhbiBhcnJheSBpbmRleCBi ZWdpbnMgd2l0aCAnMCcKKy0gICAgQHRocm93IHBhcnNlX2Vycm9yLjEwOSAgIGlmIGFuIGFycmF5 IGluZGV4IHdhcyBub3QgYSBudW1iZXIKKy0gICAgQHRocm93IG91dF9vZl9yYW5nZS40MDIgIGlm IHRoZSBhcnJheSBpbmRleCAnLScgaXMgdXNlZAorLSAgICBAdGhyb3cgb3V0X29mX3JhbmdlLjQw NCAgaWYgdGhlIEpTT04gcG9pbnRlciBjYW4gbm90IGJlIHJlc29sdmVkCistICAgICovCistICAg IGNvbnN0IEJhc2ljSnNvblR5cGUmIGdldF91bmNoZWNrZWQoY29uc3QgQmFzaWNKc29uVHlwZSog cHRyKSBjb25zdAorLSAgICB7CistICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZmVyZW5jZV90 b2tlbiA6IHJlZmVyZW5jZV90b2tlbnMpCistICAgICAgICB7CistICAgICAgICAgICAgc3dpdGNo IChwdHItPnR5cGUoKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNhc2UgZGV0 YWlsOjp2YWx1ZV90OjpvYmplY3Q6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgICAgIC8vIHVzZSB1bmNoZWNrZWQgb2JqZWN0IGFjY2VzcworLSAgICAgICAgICAgICAgICAg ICAgcHRyID0gJnB0ci0+b3BlcmF0b3JbXShyZWZlcmVuY2VfdG9rZW4pOworLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAg Y2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmFycmF5OgorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkocmVmZXJlbmNlX3Rva2VuID09 ICItIikpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAg Ly8gIi0iIGNhbm5vdCBiZSB1c2VkIGZvciBjb25zdCBhY2Nlc3MKKy0gICAgICAgICAgICAgICAg ICAgICAgICBKU09OX1RIUk9XKGRldGFpbDo6b3V0X29mX3JhbmdlOjpjcmVhdGUoNDAyLCAiYXJy YXkgaW5kZXggJy0nICgiICsgc3RkOjp0b19zdHJpbmcocHRyLT5tX3ZhbHVlLmFycmF5LT5zaXpl KCkpICsgIikgaXMgb3V0IG9mIHJhbmdlIiwgKnB0cikpOworLSAgICAgICAgICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHVuY2hlY2tlZCBhcnJheSBhY2Nlc3MK Ky0gICAgICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPm9wZXJhdG9yW10oYXJyYXlfaW5kZXgo cmVmZXJlbmNlX3Rva2VuKSk7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6bnVs bDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OnN0cmluZzoKKy0gICAg ICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJvb2xlYW46CistICAgICAgICAgICAg ICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICAg ICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICAg ICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICAgICAg Y2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRh aWw6OnZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAg ICAgICAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjpvdXRfb2ZfcmFuZ2U6OmNyZWF0ZSg0 MDQsICJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAnIiArIHJlZmVyZW5jZV90b2tlbiArICIn IiwgKnB0cikpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVy biAqcHRyOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAdGhyb3cgcGFyc2VfZXJyb3IuMTA2 ICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCistICAgIEB0aHJvdyBwYXJzZV9l cnJvci4xMDkgICBpZiBhbiBhcnJheSBpbmRleCB3YXMgbm90IGEgbnVtYmVyCistICAgIEB0aHJv dyBvdXRfb2ZfcmFuZ2UuNDAyICBpZiB0aGUgYXJyYXkgaW5kZXggJy0nIGlzIHVzZWQKKy0gICAg QHRocm93IG91dF9vZl9yYW5nZS40MDQgIGlmIHRoZSBKU09OIHBvaW50ZXIgY2FuIG5vdCBiZSBy ZXNvbHZlZAorLSAgICAqLworLSAgICBjb25zdCBCYXNpY0pzb25UeXBlJiBnZXRfY2hlY2tlZChj b25zdCBCYXNpY0pzb25UeXBlKiBwdHIpIGNvbnN0CistICAgIHsKKy0gICAgICAgIGZvciAoY29u c3QgYXV0byYgcmVmZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rva2VucykKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICBzd2l0Y2ggKHB0ci0+dHlwZSgpKQorLSAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gbm90ZTogYXQgcGVyZm9ybXMgcmFuZ2UgY2hl Y2sKKy0gICAgICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPmF0KHJlZmVyZW5jZV90b2tlbik7 CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShyZWZl cmVuY2VfdG9rZW4gPT0gIi0iKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgICAgICAvLyAiLSIgYWx3YXlzIGZhaWxzIHRoZSByYW5nZSBjaGVjaworLSAgICAg ICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjpvdXRfb2ZfcmFuZ2U6OmNyZWF0 ZSg0MDIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJhcnJheSBpbmRleCAnLScgKCIgKyBzdGQ6OnRvX3N0cmluZyhwdHIt Pm1fdmFsdWUuYXJyYXktPnNpemUoKSkgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBvdXQgb2YgcmFuZ2UiLCAq cHRyKSk7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAv LyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjaworLSAgICAgICAgICAgICAgICAgICAgcHRy ID0gJnB0ci0+YXQoYXJyYXlfaW5kZXgocmVmZXJlbmNlX3Rva2VuKSk7CistICAgICAgICAgICAg ICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBj YXNlIGRldGFpbDo6dmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6 OnZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6 OmJvb2xlYW46CistICAgICAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpudW1iZXJf aW50ZWdlcjoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl91 bnNpZ25lZDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl9m bG9hdDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJpbmFyeToKKy0g ICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAg ICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWls OjpvdXRfb2ZfcmFuZ2U6OmNyZWF0ZSg0MDQsICJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAn IiArIHJlZmVyZW5jZV90b2tlbiArICInIiwgKnB0cikpOworLSAgICAgICAgICAgIH0KKy0gICAg ICAgIH0KKy0KKy0gICAgICAgIHJldHVybiAqcHRyOworLSAgICB9CistCistICAgIC8qIQorLSAg ICBAdGhyb3cgcGFyc2VfZXJyb3IuMTA2ICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGgg JzAnCistICAgIEB0aHJvdyBwYXJzZV9lcnJvci4xMDkgICBpZiBhbiBhcnJheSBpbmRleCB3YXMg bm90IGEgbnVtYmVyCistICAgICovCistICAgIGJvb2wgY29udGFpbnMoY29uc3QgQmFzaWNKc29u VHlwZSogcHRyKSBjb25zdAorLSAgICB7CistICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZmVy ZW5jZV90b2tlbiA6IHJlZmVyZW5jZV90b2tlbnMpCistICAgICAgICB7CistICAgICAgICAgICAg c3dpdGNoIChwdHItPnR5cGUoKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNh c2UgZGV0YWlsOjp2YWx1ZV90OjpvYmplY3Q6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgIGlmICghcHRyLT5jb250YWlucyhyZWZlcmVuY2VfdG9rZW4pKQorLSAgICAg ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZCBub3Qg ZmluZCB0aGUga2V5IGluIHRoZSBvYmplY3QKKy0gICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAg ICBwdHIgPSAmcHRyLT5vcGVyYXRvcltdKHJlZmVyZW5jZV90b2tlbik7CistICAgICAgICAgICAg ICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBj YXNlIGRldGFpbDo6dmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShyZWZlcmVuY2VfdG9rZW4gPT0g Ii0iKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAv LyAiLSIgYWx3YXlzIGZhaWxzIHRoZSByYW5nZSBjaGVjaworLSAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShyZWZlcmVuY2VfdG9rZW4uc2l6ZSgpID09 IDEgJiYgISgiMCIgPD0gcmVmZXJlbmNlX3Rva2VuICYmIHJlZmVyZW5jZV90b2tlbiA8PSAiOSIp KSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAvLyBp bnZhbGlkIGNoYXIKKy0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAg ICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlf VU5MSUtFTFkocmVmZXJlbmNlX3Rva2VuLnNpemUoKSA+IDEpKQorLSAgICAgICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSgh KCcxJyA8PSByZWZlcmVuY2VfdG9rZW5bMF0gJiYgcmVmZXJlbmNlX3Rva2VuWzBdIDw9ICc5Jykp KQorLSAgICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gZmlyc3QgY2hhciBzaG91bGQgYmUgYmV0d2VlbiAnMScgYW5kICc5JworLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDE7IGkg PCByZWZlcmVuY2VfdG9rZW4uc2l6ZSgpOyBpKyspCistICAgICAgICAgICAgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFko ISgnMCcgPD0gcmVmZXJlbmNlX3Rva2VuW2ldICYmIHJlZmVyZW5jZV90b2tlbltpXSA8PSAnOScp KSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gb3RoZXIgY2hhciBzaG91bGQgYmUgYmV0d2VlbiAnMCcgYW5kICc5Jwor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBpZHgg PSBhcnJheV9pbmRleChyZWZlcmVuY2VfdG9rZW4pOworLSAgICAgICAgICAgICAgICAgICAgaWYg KGlkeCA+PSBwdHItPnNpemUoKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgICAgICAvLyBpbmRleCBvdXQgb2YgcmFuZ2UKKy0gICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAg ICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVyYXRvcltdKGlkeCk7CistICAgICAgICAgICAgICAg ICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNl IGRldGFpbDo6dmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZh bHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJv b2xlYW46CistICAgICAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpudW1iZXJfaW50 ZWdlcjoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl91bnNp Z25lZDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om51bWJlcl9mbG9h dDoKKy0gICAgICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJpbmFyeToKKy0gICAg ICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAg ICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg Ly8gd2UgZG8gbm90IGV4cGVjdCBwcmltaXRpdmUgdmFsdWVzIGlmIHRoZXJlIGlzIHN0aWxsIGEK Ky0gICAgICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0b2tlbiB0byBwcm9jZXNzCistICAg ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICB9CistICAgICAgICB9CistCistICAgICAgICAvLyBubyByZWZlcmVuY2UgdG9rZW4g bGVmdCBtZWFucyB3ZSBmb3VuZCBhIHByaW1pdGl2ZSB2YWx1ZQorLSAgICAgICAgcmV0dXJuIHRy dWU7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBzcGxpdCB0aGUgc3RyaW5nIGlu cHV0IHRvIHJlZmVyZW5jZSB0b2tlbnMKKy0KKy0gICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBpcyBv bmx5IGNhbGxlZCBieSB0aGUganNvbl9wb2ludGVyIGNvbnN0cnVjdG9yLgorLSAgICAgICAgICBB bGwgZXhjZXB0aW9ucyBiZWxvdyBhcmUgZG9jdW1lbnRlZCB0aGVyZS4KKy0KKy0gICAgQHRocm93 IHBhcnNlX2Vycm9yLjEwNyAgaWYgdGhlIHBvaW50ZXIgaXMgbm90IGVtcHR5IG9yIGJlZ2lucyB3 aXRoICcvJworLSAgICBAdGhyb3cgcGFyc2VfZXJyb3IuMTA4ICBpZiBjaGFyYWN0ZXIgJ34nIGlz IG5vdCBmb2xsb3dlZCBieSAnMCcgb3IgJzEnCistICAgICovCistICAgIHN0YXRpYyBzdGQ6OnZl Y3RvcjxzdGQ6OnN0cmluZz4gc3BsaXQoY29uc3Qgc3RkOjpzdHJpbmcmIHJlZmVyZW5jZV9zdHJp bmcpCistICAgIHsKKy0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXN1bHQ7Cist CistICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGVtcHR5IHJlZmVyZW5jZSBzdHJpbmcgLT4gbm8g cmVmZXJlbmNlIHRva2VucworLSAgICAgICAgaWYgKHJlZmVyZW5jZV9zdHJpbmcuZW1wdHkoKSkK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICAgICAgfQorLQor LSAgICAgICAgLy8gY2hlY2sgaWYgbm9uZW1wdHkgcmVmZXJlbmNlIHN0cmluZyBiZWdpbnMgd2l0 aCBzbGFzaAorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKHJlZmVyZW5jZV9zdHJp bmdbMF0gIT0gJy8nKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKGRldGFp bDo6cGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDcsIDEsICJKU09OIHBvaW50ZXIgbXVzdCBiZSBlbXB0 eSBvciBiZWdpbiB3aXRoICcvJyAtIHdhczogJyIgKyByZWZlcmVuY2Vfc3RyaW5nICsgIiciLCBC YXNpY0pzb25UeXBlKCkpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIGV4dHJhY3QgdGhl IHJlZmVyZW5jZSB0b2tlbnM6CistICAgICAgICAvLyAtIHNsYXNoOiBwb3NpdGlvbiBvZiB0aGUg bGFzdCByZWFkIHNsYXNoIChvciBlbmQgb2Ygc3RyaW5nKQorLSAgICAgICAgLy8gLSBzdGFydDog cG9zaXRpb24gYWZ0ZXIgdGhlIHByZXZpb3VzIHNsYXNoCistICAgICAgICBmb3IgKAorLSAgICAg ICAgICAgIC8vIHNlYXJjaCBmb3IgdGhlIGZpcnN0IHNsYXNoIGFmdGVyIHRoZSBmaXJzdCBjaGFy YWN0ZXIKKy0gICAgICAgICAgICBzdGQ6OnNpemVfdCBzbGFzaCA9IHJlZmVyZW5jZV9zdHJpbmcu ZmluZF9maXJzdF9vZignLycsIDEpLAorLSAgICAgICAgICAgIC8vIHNldCB0aGUgYmVnaW5uaW5n IG9mIHRoZSBmaXJzdCByZWZlcmVuY2UgdG9rZW4KKy0gICAgICAgICAgICBzdGFydCA9IDE7Cist ICAgICAgICAgICAgLy8gd2UgY2FuIHN0b3AgaWYgc3RhcnQgPT0gMCAoaWYgc2xhc2ggPT0gc3Rk OjpzdHJpbmc6Om5wb3MpCistICAgICAgICAgICAgc3RhcnQgIT0gMDsKKy0gICAgICAgICAgICAv LyBzZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCByZWZlcmVuY2UgdG9rZW4KKy0gICAgICAg ICAgICAvLyAod2lsbCBldmVudHVhbGx5IGJlIDAgaWYgc2xhc2ggPT0gc3RkOjpzdHJpbmc6Om5w b3MpCistICAgICAgICAgICAgc3RhcnQgPSAoc2xhc2ggPT0gc3RkOjpzdHJpbmc6Om5wb3MpID8g MCA6IHNsYXNoICsgMSwKKy0gICAgICAgICAgICAvLyBmaW5kIG5leHQgc2xhc2gKKy0gICAgICAg ICAgICBzbGFzaCA9IHJlZmVyZW5jZV9zdHJpbmcuZmluZF9maXJzdF9vZignLycsIHN0YXJ0KSkK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyB1c2UgdGhlIHRleHQgYmV0d2VlbiB0aGUgYmVn aW5uaW5nIG9mIHRoZSByZWZlcmVuY2UgdG9rZW4KKy0gICAgICAgICAgICAvLyAoc3RhcnQpIGFu ZCB0aGUgbGFzdCBzbGFzaCAoc2xhc2gpLgorLSAgICAgICAgICAgIGF1dG8gcmVmZXJlbmNlX3Rv a2VuID0gcmVmZXJlbmNlX3N0cmluZy5zdWJzdHIoc3RhcnQsIHNsYXNoIC0gc3RhcnQpOworLQor LSAgICAgICAgICAgIC8vIGNoZWNrIHJlZmVyZW5jZSB0b2tlbnMgYXJlIHByb3Blcmx5IGVzY2Fw ZWQKKy0gICAgICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IHBvcyA9IHJlZmVyZW5jZV90b2tlbi5m aW5kX2ZpcnN0X29mKCd+Jyk7CistICAgICAgICAgICAgICAgICAgICBwb3MgIT0gc3RkOjpzdHJp bmc6Om5wb3M7CistICAgICAgICAgICAgICAgICAgICBwb3MgPSByZWZlcmVuY2VfdG9rZW4uZmlu ZF9maXJzdF9vZignficsIHBvcyArIDEpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgSlNPTl9BU1NFUlQocmVmZXJlbmNlX3Rva2VuW3Bvc10gPT0gJ34nKTsKKy0KKy0gICAgICAg ICAgICAgICAgLy8gfiBtdXN0IGJlIGZvbGxvd2VkIGJ5IDAgb3IgMQorLSAgICAgICAgICAgICAg ICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkocG9zID09IHJlZmVyZW5jZV90b2tlbi5zaXplKCkg LSAxIHx8CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVmZXJl bmNlX3Rva2VuW3BvcyArIDFdICE9ICcwJyAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlZmVyZW5jZV90b2tlbltwb3MgKyAxXSAhPSAnMScpKSkKKy0gICAg ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhkZXRhaWw6OnBh cnNlX2Vycm9yOjpjcmVhdGUoMTA4LCAwLCAiZXNjYXBlIGNoYXJhY3RlciAnficgbXVzdCBiZSBm b2xsb3dlZCB3aXRoICcwJyBvciAnMSciLCBCYXNpY0pzb25UeXBlKCkpKTsKKy0gICAgICAgICAg ICAgICAgfQorLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAvLyBmaW5hbGx5LCBzdG9y ZSB0aGUgcmVmZXJlbmNlIHRva2VuCistICAgICAgICAgICAgZGV0YWlsOjp1bmVzY2FwZShyZWZl cmVuY2VfdG9rZW4pOworLSAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2socmVmZXJlbmNlX3Rv a2VuKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiByZXN1bHQ7CistICAgIH0KKy0K Ky0gIHByaXZhdGU6CistICAgIC8qIQorLSAgICBAcGFyYW1baW5dIHJlZmVyZW5jZV9zdHJpbmcg IHRoZSByZWZlcmVuY2Ugc3RyaW5nIHRvIHRoZSBjdXJyZW50IHZhbHVlCistICAgIEBwYXJhbVtp bl0gdmFsdWUgICAgICAgICAgICAgdGhlIHZhbHVlIHRvIGNvbnNpZGVyCistICAgIEBwYXJhbVtp bixvdXRdIHJlc3VsdCAgICAgICAgdGhlIHJlc3VsdCBvYmplY3QgdG8gaW5zZXJ0IHZhbHVlcyB0 bworLQorLSAgICBAbm90ZSBFbXB0eSBvYmplY3RzIG9yIGFycmF5cyBhcmUgZmxhdHRlbmVkIHRv IGBudWxsYC4KKy0gICAgKi8KKy0gICAgc3RhdGljIHZvaWQgZmxhdHRlbihjb25zdCBzdGQ6OnN0 cmluZyYgcmVmZXJlbmNlX3N0cmluZywKKy0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBC YXNpY0pzb25UeXBlJiB2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0pzb25U eXBlJiByZXN1bHQpCistICAgIHsKKy0gICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpKQorLSAg ICAgICAgeworLSAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjphcnJheToKKy0gICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlLmFycmF5LT5lbXB0 eSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAvLyBmbGF0dGVu IGVtcHR5IGFycmF5IGFzIG51bGwKKy0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtyZWZlcmVu Y2Vfc3RyaW5nXSA9IG51bGxwdHI7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgZWxzZQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAvLyBpdGVy YXRlIGFycmF5IGFuZCB1c2UgaW5kZXggYXMgcmVmZXJlbmNlIHN0cmluZworLSAgICAgICAgICAg ICAgICAgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHZhbHVlLm1fdmFsdWUuYXJyYXkt PnNpemUoKTsgKytpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAg ICAgICAgIGZsYXR0ZW4ocmVmZXJlbmNlX3N0cmluZyArICIvIiArIHN0ZDo6dG9fc3RyaW5nKGkp LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubV92YWx1ZS5hcnJheS0+ b3BlcmF0b3JbXShpKSwgcmVzdWx0KTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAg ICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCist ICAgICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlLm9iamVjdC0+ZW1wdHkoKSkKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gZmxhdHRlbiBlbXB0eSBv YmplY3QgYXMgbnVsbAorLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3JlZmVyZW5jZV9zdHJp bmddID0gbnVsbHB0cjsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNl CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGUgb2Jq ZWN0IGFuZCB1c2Uga2V5cyBhcyByZWZlcmVuY2Ugc3RyaW5nCistICAgICAgICAgICAgICAgICAg ICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiAqdmFsdWUubV92YWx1ZS5vYmplY3QpCistICAg ICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbihyZWZl cmVuY2Vfc3RyaW5nICsgIi8iICsgZGV0YWlsOjplc2NhcGUoZWxlbWVudC5maXJzdCksIGVsZW1l bnQuc2Vjb25kLCByZXN1bHQpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICBjYXNlIGRl dGFpbDo6dmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90 Ojpib29sZWFuOgorLSAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpudW1iZXJfaW50 ZWdlcjoKKy0gICAgICAgICAgICBjYXNlIGRldGFpbDo6dmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVk OgorLSAgICAgICAgICAgIGNhc2UgZGV0YWlsOjp2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAg ICAgICAgICAgY2FzZSBkZXRhaWw6OnZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICBjYXNl IGRldGFpbDo6dmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBhZGQgcHJpbWl0aXZlIHZhbHVlIHdpdGgg aXRzIHJlZmVyZW5jZSBzdHJpbmcKKy0gICAgICAgICAgICAgICAgcmVzdWx0W3JlZmVyZW5jZV9z dHJpbmddID0gdmFsdWU7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0K Ky0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQHBhcmFtW2luXSB2YWx1ZSAg ZmxhdHRlbmVkIEpTT04KKy0KKy0gICAgQHJldHVybiB1bmZsYXR0ZW5lZCBKU09OCistCistICAg IEB0aHJvdyBwYXJzZV9lcnJvci4xMDkgaWYgYXJyYXkgaW5kZXggaXMgbm90IGEgbnVtYmVyCist ICAgIEB0aHJvdyB0eXBlX2Vycm9yLjMxNCAgaWYgdmFsdWUgaXMgbm90IGFuIG9iamVjdAorLSAg ICBAdGhyb3cgdHlwZV9lcnJvci4zMTUgIGlmIG9iamVjdCB2YWx1ZXMgYXJlIG5vdCBwcmltaXRp dmUKKy0gICAgQHRocm93IHR5cGVfZXJyb3IuMzEzICBpZiB2YWx1ZSBjYW5ub3QgYmUgdW5mbGF0 dGVuZWQKKy0gICAgKi8KKy0gICAgc3RhdGljIEJhc2ljSnNvblR5cGUKKy0gICAgdW5mbGF0dGVu KGNvbnN0IEJhc2ljSnNvblR5cGUmIHZhbHVlKQorLSAgICB7CistICAgICAgICBpZiAoSlNPTl9I RURMRVlfVU5MSUtFTFkoIXZhbHVlLmlzX29iamVjdCgpKSkKKy0gICAgICAgIHsKKy0gICAgICAg ICAgICBKU09OX1RIUk9XKGRldGFpbDo6dHlwZV9lcnJvcjo6Y3JlYXRlKDMxNCwgIm9ubHkgb2Jq ZWN0cyBjYW4gYmUgdW5mbGF0dGVuZWQiLCB2YWx1ZSkpOworLSAgICAgICAgfQorLQorLSAgICAg ICAgQmFzaWNKc29uVHlwZSByZXN1bHQ7CistCistICAgICAgICAvLyBpdGVyYXRlIHRoZSBKU09O IG9iamVjdCB2YWx1ZXMKKy0gICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6ICp2YWx1 ZS5tX3ZhbHVlLm9iamVjdCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURM RVlfVU5MSUtFTFkoIWVsZW1lbnQuc2Vjb25kLmlzX3ByaW1pdGl2ZSgpKSkKKy0gICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgIEpTT05fVEhST1coZGV0YWlsOjp0eXBlX2Vycm9yOjpjcmVh dGUoMzE1LCAidmFsdWVzIGluIG9iamVjdCBtdXN0IGJlIHByaW1pdGl2ZSIsIGVsZW1lbnQuc2Vj b25kKSk7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIC8vIGFzc2lnbiB2YWx1ZSB0 byByZWZlcmVuY2UgcG9pbnRlZCB0byBieSBKU09OIHBvaW50ZXI7IE5vdGUgdGhhdCBpZgorLSAg ICAgICAgICAgIC8vIHRoZSBKU09OIHBvaW50ZXIgaXMgIiIgKGkuZS4sIHBvaW50cyB0byB0aGUg d2hvbGUgdmFsdWUpLCBmdW5jdGlvbgorLSAgICAgICAgICAgIC8vIGdldF9hbmRfY3JlYXRlIHJl dHVybnMgYSByZWZlcmVuY2UgdG8gcmVzdWx0IGl0c2VsZi4gQW4gYXNzaWdubWVudAorLSAgICAg ICAgICAgIC8vIHdpbGwgdGhlbiBjcmVhdGUgYSBwcmltaXRpdmUgdmFsdWUuCistICAgICAgICAg ICAganNvbl9wb2ludGVyKGVsZW1lbnQuZmlyc3QpLmdldF9hbmRfY3JlYXRlKHJlc3VsdCkgPSBl bGVtZW50LnNlY29uZDsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiByZXN1bHQ7Cist ICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBjb21wYXJlcyB0d28gSlNPTiBwb2ludGVy cyBmb3IgZXF1YWxpdHkKKy0KKy0gICAgQHBhcmFtW2luXSBsaHMgIEpTT04gcG9pbnRlciB0byBj b21wYXJlCistICAgIEBwYXJhbVtpbl0gcmhzICBKU09OIHBvaW50ZXIgdG8gY29tcGFyZQorLSAg ICBAcmV0dXJuIHdoZXRoZXIgQGEgbGhzIGlzIGVxdWFsIHRvIEBhIHJocworLQorLSAgICBAY29t cGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgSlNPTiBwb2ludGVyCistCistICAg IEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIGZ1bmN0aW9uIG5ldmVy IHRocm93cyBleGNlcHRpb25zLgorLSAgICAqLworLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09 KGpzb25fcG9pbnRlciBjb25zdCYgbGhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpz b25fcG9pbnRlciBjb25zdCYgcmhzKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4g bGhzLnJlZmVyZW5jZV90b2tlbnMgPT0gcmhzLnJlZmVyZW5jZV90b2tlbnM7CistICAgIH0KKy0K Ky0gICAgLyohCistICAgIEBicmllZiBjb21wYXJlcyB0d28gSlNPTiBwb2ludGVycyBmb3IgaW5l cXVhbGl0eQorLQorLSAgICBAcGFyYW1baW5dIGxocyAgSlNPTiBwb2ludGVyIHRvIGNvbXBhcmUK Ky0gICAgQHBhcmFtW2luXSByaHMgIEpTT04gcG9pbnRlciB0byBjb21wYXJlCistICAgIEByZXR1 cm4gd2hldGhlciBAYSBsaHMgaXMgbm90IGVxdWFsIEBhIHJocworLQorLSAgICBAY29tcGxleGl0 eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgSlNPTiBwb2ludGVyCistCistICAgIEBleGNl cHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIGZ1bmN0aW9uIG5ldmVyIHRocm93 cyBleGNlcHRpb25zLgorLSAgICAqLworLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGpzb25f cG9pbnRlciBjb25zdCYgbGhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25fcG9p bnRlciBjb25zdCYgcmhzKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gIShsaHMg PT0gcmhzKTsKKy0gICAgfQorLQorLSAgICAvLy8gdGhlIHJlZmVyZW5jZSB0b2tlbnMKKy0gICAg c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlZmVyZW5jZV90b2tlbnM7CistfTsKKy19ICAvLyBu YW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL2pzb25f cmVmLmhwcD4KKy0KKy0KKy0jaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKy0jaW5jbHVkZSA8 dXRpbGl0eT4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21ldGEvdHlwZV90cmFp dHMuaHBwPgorLQorLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWls CisteworLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistY2xhc3MganNvbl9yZWYK Ky17CistICBwdWJsaWM6CistICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBCYXNpY0pzb25UeXBlOwor LQorLSAgICBqc29uX3JlZih2YWx1ZV90eXBlJiYgdmFsdWUpCistICAgICAgICA6IG93bmVkX3Zh bHVlKHN0ZDo6bW92ZSh2YWx1ZSkpCistICAgIHt9CistCistICAgIGpzb25fcmVmKGNvbnN0IHZh bHVlX3R5cGUmIHZhbHVlKQorLSAgICAgICAgOiB2YWx1ZV9yZWYoJnZhbHVlKQorLSAgICB7fQor LQorLSAgICBqc29uX3JlZihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8anNvbl9yZWY+IGluaXQpCist ICAgICAgICA6IG93bmVkX3ZhbHVlKGluaXQpCistICAgIHt9CistCistICAgIHRlbXBsYXRlIDwK Ky0gICAgICAgIGNsYXNzLi4uIEFyZ3MsCistICAgICAgICBlbmFibGVfaWZfdDxzdGQ6OmlzX2Nv bnN0cnVjdGlibGU8dmFsdWVfdHlwZSwgQXJncy4uLj46OnZhbHVlLCBpbnQ+ID0gMCA+CistICAg IGpzb25fcmVmKEFyZ3MgJiYgLi4uIGFyZ3MpCistICAgICAgICA6IG93bmVkX3ZhbHVlKHN0ZDo6 Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikKKy0gICAge30KKy0KKy0gICAgLy8gY2xhc3Mgc2hvdWxk IGJlIG1vdmFibGUgb25seQorLSAgICBqc29uX3JlZihqc29uX3JlZiYmKSBub2V4Y2VwdCA9IGRl ZmF1bHQ7CistICAgIGpzb25fcmVmKGNvbnN0IGpzb25fcmVmJikgPSBkZWxldGU7CistICAgIGpz b25fcmVmJiBvcGVyYXRvcj0oY29uc3QganNvbl9yZWYmKSA9IGRlbGV0ZTsKKy0gICAganNvbl9y ZWYmIG9wZXJhdG9yPShqc29uX3JlZiYmKSA9IGRlbGV0ZTsKKy0gICAgfmpzb25fcmVmKCkgPSBk ZWZhdWx0OworLQorLSAgICB2YWx1ZV90eXBlIG1vdmVkX29yX2NvcGllZCgpIGNvbnN0CistICAg IHsKKy0gICAgICAgIGlmICh2YWx1ZV9yZWYgPT0gbnVsbHB0cikKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICByZXR1cm4gc3RkOjptb3ZlKG93bmVkX3ZhbHVlKTsKKy0gICAgICAgIH0KKy0gICAg ICAgIHJldHVybiAqdmFsdWVfcmVmOworLSAgICB9CistCistICAgIHZhbHVlX3R5cGUgY29uc3Qm IG9wZXJhdG9yKigpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiB2YWx1ZV9yZWYgPyAq dmFsdWVfcmVmIDogb3duZWRfdmFsdWU7CistICAgIH0KKy0KKy0gICAgdmFsdWVfdHlwZSBjb25z dCogb3BlcmF0b3ItPigpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiAmKiogdGhpczsK Ky0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0gICAgbXV0YWJsZSB2YWx1ZV90eXBlIG93bmVkX3Zh bHVlID0gbnVsbHB0cjsKKy0gICAgdmFsdWVfdHlwZSBjb25zdCogdmFsdWVfcmVmID0gbnVsbHB0 cjsKKy19OworLX0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1h bm4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0K Ky0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL3N0cmluZ19lc2NhcGUuaHBwPgorLQorLS8v ICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWV0YS9jcHBfZnV0dXJlLmhwcD4KKy0KKy0vLyAj aW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21ldGEvdHlwZV90cmFpdHMuaHBwPgorLQorLS8vICNp bmNsdWRlIDxubG9obWFubi9kZXRhaWwvb3V0cHV0L2JpbmFyeV93cml0ZXIuaHBwPgorLQorLQor LSNpbmNsdWRlIDxhbGdvcml0aG0+IC8vIHJldmVyc2UKKy0jaW5jbHVkZSA8YXJyYXk+IC8vIGFy cmF5CistI2luY2x1ZGUgPGNtYXRoPiAvLyBpc25hbiwgaXNpbmYKKy0jaW5jbHVkZSA8Y3N0ZGlu dD4gLy8gdWludDhfdCwgdWludDE2X3QsIHVpbnQzMl90LCB1aW50NjRfdAorLSNpbmNsdWRlIDxj c3RyaW5nPiAvLyBtZW1jcHkKKy0jaW5jbHVkZSA8bGltaXRzPiAvLyBudW1lcmljX2xpbWl0cwor LSNpbmNsdWRlIDxzdHJpbmc+IC8vIHN0cmluZworLSNpbmNsdWRlIDx1dGlsaXR5PiAvLyBtb3Zl CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9pbnB1dC9iaW5hcnlfcmVhZGVyLmhw cD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL21hY3JvX3Njb3BlLmhwcD4KKy0K Ky0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0YWlsL291dHB1dC9vdXRwdXRfYWRhcHRlcnMuaHBw PgorLQorLQorLSNpbmNsdWRlIDxhbGdvcml0aG0+IC8vIGNvcHkKKy0jaW5jbHVkZSA8Y3N0ZGRl Zj4gLy8gc2l6ZV90CistI2luY2x1ZGUgPGl0ZXJhdG9yPiAvLyBiYWNrX2luc2VydGVyCistI2lu Y2x1ZGUgPG1lbW9yeT4gLy8gc2hhcmVkX3B0ciwgbWFrZV9zaGFyZWQKKy0jaW5jbHVkZSA8c3Ry aW5nPiAvLyBiYXNpY19zdHJpbmcKKy0jaW5jbHVkZSA8dmVjdG9yPiAvLyB2ZWN0b3IKKy0KKy0j aWZuZGVmIEpTT05fTk9fSU8KKy0gICAgI2luY2x1ZGUgPGlvcz4gICAgICAvLyBzdHJlYW1zaXpl CistICAgICNpbmNsdWRlIDxvc3RyZWFtPiAgLy8gYmFzaWNfb3N0cmVhbQorLSNlbmRpZiAgLy8g SlNPTl9OT19JTworLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvbWFjcm9fc2NvcGUu aHBwPgorLQorLQorLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy1uYW1lc3BhY2UgZGV0YWlsCist eworLS8vLyBhYnN0cmFjdCBvdXRwdXQgYWRhcHRlciBpbnRlcmZhY2UKKy10ZW1wbGF0ZTx0eXBl bmFtZSBDaGFyVHlwZT4gc3RydWN0IG91dHB1dF9hZGFwdGVyX3Byb3RvY29sCisteworLSAgICB2 aXJ0dWFsIHZvaWQgd3JpdGVfY2hhcmFjdGVyKENoYXJUeXBlIGMpID0gMDsKKy0gICAgdmlydHVh bCB2b2lkIHdyaXRlX2NoYXJhY3RlcnMoY29uc3QgQ2hhclR5cGUqIHMsIHN0ZDo6c2l6ZV90IGxl bmd0aCkgPSAwOworLSAgICB2aXJ0dWFsIH5vdXRwdXRfYWRhcHRlcl9wcm90b2NvbCgpID0gZGVm YXVsdDsKKy0KKy0gICAgb3V0cHV0X2FkYXB0ZXJfcHJvdG9jb2woKSA9IGRlZmF1bHQ7CistICAg IG91dHB1dF9hZGFwdGVyX3Byb3RvY29sKGNvbnN0IG91dHB1dF9hZGFwdGVyX3Byb3RvY29sJikg PSBkZWZhdWx0OworLSAgICBvdXRwdXRfYWRhcHRlcl9wcm90b2NvbChvdXRwdXRfYWRhcHRlcl9w cm90b2NvbCYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CistICAgIG91dHB1dF9hZGFwdGVyX3Byb3Rv Y29sJiBvcGVyYXRvcj0oY29uc3Qgb3V0cHV0X2FkYXB0ZXJfcHJvdG9jb2wmKSA9IGRlZmF1bHQ7 CistICAgIG91dHB1dF9hZGFwdGVyX3Byb3RvY29sJiBvcGVyYXRvcj0ob3V0cHV0X2FkYXB0ZXJf cHJvdG9jb2wmJikgbm9leGNlcHQgPSBkZWZhdWx0OworLX07CistCistLy8vIGEgdHlwZSB0byBz aW1wbGlmeSBpbnRlcmZhY2VzCistdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CistdXNpbmcg b3V0cHV0X2FkYXB0ZXJfdCA9IHN0ZDo6c2hhcmVkX3B0cjxvdXRwdXRfYWRhcHRlcl9wcm90b2Nv bDxDaGFyVHlwZT4+OworLQorLS8vLyBvdXRwdXQgYWRhcHRlciBmb3IgYnl0ZSB2ZWN0b3JzCist dGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIEFsbG9jYXRvclR5cGUgPSBzdGQ6 OmFsbG9jYXRvcjxDaGFyVHlwZT4+CistY2xhc3Mgb3V0cHV0X3ZlY3Rvcl9hZGFwdGVyIDogcHVi bGljIG91dHB1dF9hZGFwdGVyX3Byb3RvY29sPENoYXJUeXBlPgorLXsKKy0gIHB1YmxpYzoKKy0g ICAgZXhwbGljaXQgb3V0cHV0X3ZlY3Rvcl9hZGFwdGVyKHN0ZDo6dmVjdG9yPENoYXJUeXBlLCBB bGxvY2F0b3JUeXBlPiYgdmVjKSBub2V4Y2VwdAorLSAgICAgICAgOiB2KHZlYykKKy0gICAge30K Ky0KKy0gICAgdm9pZCB3cml0ZV9jaGFyYWN0ZXIoQ2hhclR5cGUgYykgb3ZlcnJpZGUKKy0gICAg eworLSAgICAgICAgdi5wdXNoX2JhY2soYyk7CistICAgIH0KKy0KKy0gICAgSlNPTl9IRURMRVlf Tk9OX05VTEwoMikKKy0gICAgdm9pZCB3cml0ZV9jaGFyYWN0ZXJzKGNvbnN0IENoYXJUeXBlKiBz LCBzdGQ6OnNpemVfdCBsZW5ndGgpIG92ZXJyaWRlCistICAgIHsKKy0gICAgICAgIHN0ZDo6Y29w eShzLCBzICsgbGVuZ3RoLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIodikpOworLSAgICB9CistCistICBw cml2YXRlOgorLSAgICBzdGQ6OnZlY3RvcjxDaGFyVHlwZSwgQWxsb2NhdG9yVHlwZT4mIHY7Cist fTsKKy0KKy0jaWZuZGVmIEpTT05fTk9fSU8KKy0vLy8gb3V0cHV0IGFkYXB0ZXIgZm9yIG91dHB1 dCBzdHJlYW1zCistdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CistY2xhc3Mgb3V0cHV0X3N0 cmVhbV9hZGFwdGVyIDogcHVibGljIG91dHB1dF9hZGFwdGVyX3Byb3RvY29sPENoYXJUeXBlPgor LXsKKy0gIHB1YmxpYzoKKy0gICAgZXhwbGljaXQgb3V0cHV0X3N0cmVhbV9hZGFwdGVyKHN0ZDo6 YmFzaWNfb3N0cmVhbTxDaGFyVHlwZT4mIHMpIG5vZXhjZXB0CistICAgICAgICA6IHN0cmVhbShz KQorLSAgICB7fQorLQorLSAgICB2b2lkIHdyaXRlX2NoYXJhY3RlcihDaGFyVHlwZSBjKSBvdmVy cmlkZQorLSAgICB7CistICAgICAgICBzdHJlYW0ucHV0KGMpOworLSAgICB9CistCistICAgIEpT T05fSEVETEVZX05PTl9OVUxMKDIpCistICAgIHZvaWQgd3JpdGVfY2hhcmFjdGVycyhjb25zdCBD aGFyVHlwZSogcywgc3RkOjpzaXplX3QgbGVuZ3RoKSBvdmVycmlkZQorLSAgICB7CistICAgICAg ICBzdHJlYW0ud3JpdGUocywgc3RhdGljX2Nhc3Q8c3RkOjpzdHJlYW1zaXplPihsZW5ndGgpKTsK Ky0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0gICAgc3RkOjpiYXNpY19vc3RyZWFtPENoYXJUeXBl PiYgc3RyZWFtOworLX07CistI2VuZGlmICAvLyBKU09OX05PX0lPCistCistLy8vIG91dHB1dCBh ZGFwdGVyIGZvciBiYXNpY19zdHJpbmcKKy10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlw ZW5hbWUgU3RyaW5nVHlwZSA9IHN0ZDo6YmFzaWNfc3RyaW5nPENoYXJUeXBlPj4KKy1jbGFzcyBv dXRwdXRfc3RyaW5nX2FkYXB0ZXIgOiBwdWJsaWMgb3V0cHV0X2FkYXB0ZXJfcHJvdG9jb2w8Q2hh clR5cGU+CisteworLSAgcHVibGljOgorLSAgICBleHBsaWNpdCBvdXRwdXRfc3RyaW5nX2FkYXB0 ZXIoU3RyaW5nVHlwZSYgcykgbm9leGNlcHQKKy0gICAgICAgIDogc3RyKHMpCistICAgIHt9Cist CistICAgIHZvaWQgd3JpdGVfY2hhcmFjdGVyKENoYXJUeXBlIGMpIG92ZXJyaWRlCistICAgIHsK Ky0gICAgICAgIHN0ci5wdXNoX2JhY2soYyk7CistICAgIH0KKy0KKy0gICAgSlNPTl9IRURMRVlf Tk9OX05VTEwoMikKKy0gICAgdm9pZCB3cml0ZV9jaGFyYWN0ZXJzKGNvbnN0IENoYXJUeXBlKiBz LCBzdGQ6OnNpemVfdCBsZW5ndGgpIG92ZXJyaWRlCistICAgIHsKKy0gICAgICAgIHN0ci5hcHBl bmQocywgbGVuZ3RoKTsKKy0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0gICAgU3RyaW5nVHlwZSYg c3RyOworLX07CistCistdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIHR5cGVuYW1lIFN0cmlu Z1R5cGUgPSBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyVHlwZT4+CistY2xhc3Mgb3V0cHV0X2FkYXB0 ZXIKKy17CistICBwdWJsaWM6CistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFsbG9jYXRvclR5cGUg PSBzdGQ6OmFsbG9jYXRvcjxDaGFyVHlwZT4+CistICAgIG91dHB1dF9hZGFwdGVyKHN0ZDo6dmVj dG9yPENoYXJUeXBlLCBBbGxvY2F0b3JUeXBlPiYgdmVjKQorLSAgICAgICAgOiBvYShzdGQ6Om1h a2Vfc2hhcmVkPG91dHB1dF92ZWN0b3JfYWRhcHRlcjxDaGFyVHlwZSwgQWxsb2NhdG9yVHlwZT4+ KHZlYykpIHt9CistCistI2lmbmRlZiBKU09OX05PX0lPCistICAgIG91dHB1dF9hZGFwdGVyKHN0 ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVHlwZT4mIHMpCistICAgICAgICA6IG9hKHN0ZDo6bWFrZV9z aGFyZWQ8b3V0cHV0X3N0cmVhbV9hZGFwdGVyPENoYXJUeXBlPj4ocykpIHt9CistI2VuZGlmICAv LyBKU09OX05PX0lPCistCistICAgIG91dHB1dF9hZGFwdGVyKFN0cmluZ1R5cGUmIHMpCistICAg ICAgICA6IG9hKHN0ZDo6bWFrZV9zaGFyZWQ8b3V0cHV0X3N0cmluZ19hZGFwdGVyPENoYXJUeXBl LCBTdHJpbmdUeXBlPj4ocykpIHt9CistCistICAgIG9wZXJhdG9yIG91dHB1dF9hZGFwdGVyX3Q8 Q2hhclR5cGU+KCkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIG9hOworLSAgICB9CistCistICBw cml2YXRlOgorLSAgICBvdXRwdXRfYWRhcHRlcl90PENoYXJUeXBlPiBvYSA9IG51bGxwdHI7Cist fTsKKy19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCistfSAgLy8gbmFtZXNwYWNlIG5sb2htYW5uCist CistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBkZXRhaWwKKy17CistLy8v Ly8vLy8vLy8vLy8vLy8vLworLS8vIGJpbmFyeSB3cml0ZXIgLy8KKy0vLy8vLy8vLy8vLy8vLy8v Ly8vCistCistLyohCistQGJyaWVmIHNlcmlhbGl6YXRpb24gdG8gQ0JPUiBhbmQgTWVzc2FnZVBh Y2sgdmFsdWVzCistKi8KKy10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFt ZSBDaGFyVHlwZT4KKy1jbGFzcyBiaW5hcnlfd3JpdGVyCisteworLSAgICB1c2luZyBzdHJpbmdf dCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0cmluZ190OworLSAgICB1c2luZyBiaW5hcnlf dCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmJpbmFyeV90OworLSAgICB1c2luZyBudW1iZXJf ZmxvYXRfdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9mbG9hdF90OworLQorLSAg cHVibGljOgorLSAgICAvKiEKKy0gICAgQGJyaWVmIGNyZWF0ZSBhIGJpbmFyeSB3cml0ZXIKKy0K Ky0gICAgQHBhcmFtW2luXSBhZGFwdGVyICBvdXRwdXQgYWRhcHRlciB0byB3cml0ZSB0bworLSAg ICAqLworLSAgICBleHBsaWNpdCBiaW5hcnlfd3JpdGVyKG91dHB1dF9hZGFwdGVyX3Q8Q2hhclR5 cGU+IGFkYXB0ZXIpIDogb2Eoc3RkOjptb3ZlKGFkYXB0ZXIpKQorLSAgICB7CistICAgICAgICBK U09OX0FTU0VSVChvYSk7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBwYXJhbVtpbl0gaiAg SlNPTiB2YWx1ZSB0byBzZXJpYWxpemUKKy0gICAgQHByZSAgICAgICBqLnR5cGUoKSA9PSB2YWx1 ZV90OjpvYmplY3QKKy0gICAgKi8KKy0gICAgdm9pZCB3cml0ZV9ic29uKGNvbnN0IEJhc2ljSnNv blR5cGUmIGopCistICAgIHsKKy0gICAgICAgIHN3aXRjaCAoai50eXBlKCkpCistICAgICAgICB7 CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICB3cml0ZV9ic29uX29iamVjdCgqai5tX3ZhbHVlLm9iamVjdCk7CistICAg ICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6Om51bGw6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAg ICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 OmJvb2xlYW46CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0g ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICBj YXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJp bmFyeToKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAg ICBkZWZhdWx0OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgSlNPTl9USFJPVyh0 eXBlX2Vycm9yOjpjcmVhdGUoMzE3LCAidG8gc2VyaWFsaXplIHRvIEJTT04sIHRvcC1sZXZlbCB0 eXBlIG11c3QgYmUgb2JqZWN0LCBidXQgaXMgIiArIHN0ZDo6c3RyaW5nKGoudHlwZV9uYW1lKCkp LCBqKSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8qIQor LSAgICBAcGFyYW1baW5dIGogIEpTT04gdmFsdWUgdG8gc2VyaWFsaXplCistICAgICovCistICAg IHZvaWQgd3JpdGVfY2Jvcihjb25zdCBCYXNpY0pzb25UeXBlJiBqKQorLSAgICB7CistICAgICAg ICBzd2l0Y2ggKGoudHlwZSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6bnVsbDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFy YWN0ZXIodG9fY2hhcl90eXBlKDB4RjYpKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIoai5tX3ZhbHVl LmJvb2xlYW4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRvX2NoYXJf dHlwZSgweEY1KQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdG9fY2hh cl90eXBlKDB4RjQpKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CistICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID49IDAp CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIENCT1IgZG9lcyBu b3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHBvc2l0aXZlIHNpZ25lZAorLSAgICAgICAgICAgICAg ICAgICAgLy8gaW50ZWdlcnMgYW5kIHVuc2lnbmVkIGludGVnZXJzLiBUaGVyZWZvcmUsIHdlIHVz ZWQgdGhlCistICAgICAgICAgICAgICAgICAgICAvLyBjb2RlIGZyb20gdGhlIHZhbHVlX3Q6Om51 bWJlcl91bnNpZ25lZCBjYXNlIGhlcmUuCistICAgICAgICAgICAgICAgICAgICBpZiAoai5tX3Zh bHVlLm51bWJlcl9pbnRlZ2VyIDw9IDB4MTcpCistICAgICAgICAgICAgICAgICAgICB7CistICAg ICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDhf dD4oai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKSk7CistICAgICAgICAgICAgICAgICAgICB9Cist ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0g KHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50OF90Pjo6bWF4KSgpKQorLSAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIo dG9fY2hhcl90eXBlKDB4MTgpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1i ZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpKTsK Ky0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGou bV92YWx1ZS5udW1iZXJfaW50ZWdlciA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnVpbnQx Nl90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAg ICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4MTkpKTsKKy0gICAgICAg ICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4o ai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAg ICAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0gKHN0 ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50MzJfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRv X2NoYXJfdHlwZSgweDFBKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVy KHN0YXRpY19jYXN0PHN0ZDo6dWludDMyX3Q+KGoubV92YWx1ZS5udW1iZXJfaW50ZWdlcikpOwor LSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAg ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFy YWN0ZXIodG9fY2hhcl90eXBlKDB4MUIpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB3cml0 ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4oai5tX3ZhbHVlLm51bWJlcl9pbnRl Z2VyKSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICAvLyBUaGUgY29udmVyc2lvbnMgYmVsb3cgZW5jb2RlIHRoZSBzaWduIGluIHRoZSBmaXJzdAor LSAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZSwgYW5kIHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQg dG8gYSBwb3NpdGl2ZSBudW1iZXIuCistICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIHBv c2l0aXZlX251bWJlciA9IC0xIC0gai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyOworLSAgICAgICAg ICAgICAgICAgICAgaWYgKGoubV92YWx1ZS5udW1iZXJfaW50ZWdlciA+PSAtMjQpCistICAgICAg ICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0 YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oMHgyMCArIHBvc2l0aXZlX251bWJlcikpOworLSAgICAg ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocG9zaXRpdmVf bnVtYmVyIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDhfdD46Om1heCkoKSkKKy0g ICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVf Y2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDM4KSk7CistICAgICAgICAgICAgICAgICAgICAgICAg d3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4ocG9zaXRpdmVfbnVtYmVyKSk7 CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChw b3NpdGl2ZV9udW1iZXIgPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50MTZfdD46Om1h eCkoKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBv YS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDM5KSk7CistICAgICAgICAgICAgICAg ICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDE2X3Q+KHBvc2l0aXZl X251bWJlcikpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAocG9zaXRpdmVfbnVtYmVyIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWlu dDMyX3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHgzQSkpOworLSAgICAg ICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQzMl90 Pihwb3NpdGl2ZV9udW1iZXIpKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDNCKSk7CistICAgICAg ICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+ KHBvc2l0aXZlX251bWJlcikpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IDB4MTcpCist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0 aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpKTsKKy0gICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVy X3Vuc2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDhfdD46Om1heCkoKSkK Ky0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgb2EtPndyaXRlX2NoYXJh Y3Rlcih0b19jaGFyX3R5cGUoMHgxOCkpOworLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVt YmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkp OworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKGoubV92YWx1 ZS5udW1iZXJfdW5zaWduZWQgPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50MTZfdD46 Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgb2EtPndy aXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHgxOSkpOworLSAgICAgICAgICAgICAgICAgICAg d3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDE2X3Q+KGoubV92YWx1ZS5udW1iZXJf dW5zaWduZWQpKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlm IChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6 dWludDMyX3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4MUEpKTsKKy0gICAgICAgICAg ICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQzMl90PihqLm1fdmFs dWUubnVtYmVyX3Vuc2lnbmVkKSk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgZWxzZQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3Jp dGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDFCKSk7CistICAgICAgICAgICAgICAgICAgICB3 cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4oai5tX3ZhbHVlLm51bWJlcl91 bnNpZ25lZCkpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGJyZWFrOwor LSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9h dDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGoubV92 YWx1ZS5udW1iZXJfZmxvYXQpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAvLyBOYU4gaXMgMHhmOTdlMDAgaW4gQ0JPUgorLSAgICAgICAgICAgICAgICAgICAgb2Et PndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHhGOSkpOworLSAgICAgICAgICAgICAgICAg ICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHg3RSkpOworLSAgICAgICAgICAg ICAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHgwMCkpOworLSAgICAg ICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNpbmYoai5tX3Zh bHVlLm51bWJlcl9mbG9hdCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgIC8vIEluZmluaXR5IGlzIDB4Zjk3YzAwLCAtSW5maW5pdHkgaXMgMHhmOWZjMDAKKy0gICAg ICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4ZjkpKTsK Ky0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIoai5tX3ZhbHVlLm51bWJl cl9mbG9hdCA+IDAgPyB0b19jaGFyX3R5cGUoMHg3QykgOiB0b19jaGFyX3R5cGUoMHhGQykpOwor LSAgICAgICAgICAgICAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHgw MCkpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfY29tcGFjdF9mbG9hdChqLm1f dmFsdWUubnVtYmVyX2Zsb2F0LCBkZXRhaWw6OmlucHV0X2Zvcm1hdF90OjpjYm9yKTsKKy0gICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9Cist CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICAvLyBzdGVwIDE6IHdyaXRlIGNvbnRyb2wgYnl0ZSBhbmQgdGhlIHN0cmlu ZyBsZW5ndGgKKy0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBOID0gai5tX3ZhbHVlLnN0cmlu Zy0+c2l6ZSgpOworLSAgICAgICAgICAgICAgICBpZiAoTiA8PSAweDE3KQorLSAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3Rk Ojp1aW50OF90PigweDYwICsgTikpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAg ICAgIGVsc2UgaWYgKE4gPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50OF90Pjo6bWF4 KSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVf Y2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDc4KSk7CistICAgICAgICAgICAgICAgICAgICB3cml0 ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihOKSk7CistICAgICAgICAgICAgICAg IH0KKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxz dGQ6OnVpbnQxNl90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDc5KSk7CistICAgICAg ICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4oTikp OworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gKHN0 ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50MzJfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5 cGUoMHg3QSkpOworLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0 PHN0ZDo6dWludDMyX3Q+KE4pKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAg ICAvLyBMQ09WX0VYQ0xfU1RBUlQKKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAoc3Rk OjpudW1lcmljX2xpbWl0czxzdGQ6OnVpbnQ2NF90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlw ZSgweDdCKSk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8 c3RkOjp1aW50NjRfdD4oTikpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAg IC8vIExDT1ZfRVhDTF9TVE9QCistCistICAgICAgICAgICAgICAgIC8vIHN0ZXAgMjogd3JpdGUg dGhlIHN0cmluZworLSAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVycygKKy0gICAg ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2hhclR5cGUqPihqLm1fdmFs dWUuc3RyaW5nLT5jX3N0cigpKSwKKy0gICAgICAgICAgICAgICAgICAgIGoubV92YWx1ZS5zdHJp bmctPnNpemUoKSk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorLSAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgLy8gc3RlcCAxOiB3cml0ZSBjb250cm9sIGJ5dGUgYW5kIHRoZSBhcnJheSBz aXplCistICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gTiA9IGoubV92YWx1ZS5hcnJheS0+c2l6 ZSgpOworLSAgICAgICAgICAgICAgICBpZiAoTiA8PSAweDE3KQorLSAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50 OF90PigweDgwICsgTikpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVs c2UgaWYgKE4gPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50OF90Pjo6bWF4KSgpKQor LSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFj dGVyKHRvX2NoYXJfdHlwZSgweDk4KSk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1i ZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihOKSk7CistICAgICAgICAgICAgICAgIH0KKy0g ICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnVp bnQxNl90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDk5KSk7CistICAgICAgICAgICAg ICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4oTikpOworLSAg ICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gKHN0ZDo6bnVt ZXJpY19saW1pdHM8c3RkOjp1aW50MzJfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHg5 QSkpOworLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6 dWludDMyX3Q+KE4pKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAvLyBM Q09WX0VYQ0xfU1RBUlQKKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1l cmljX2xpbWl0czxzdGQ6OnVpbnQ2NF90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDlC KSk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1 aW50NjRfdD4oTikpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIC8vIExD T1ZfRVhDTF9TVE9QCistCistICAgICAgICAgICAgICAgIC8vIHN0ZXAgMjogd3JpdGUgZWFjaCBl bGVtZW50CistICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWwgOiAqai5tX3ZhbHVl LmFycmF5KQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9j Ym9yKGVsKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBicmVhazsKKy0g ICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAoai5tX3ZhbHVlLmJpbmFyeS0+aGFzX3N1 YnR5cGUoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKGou bV92YWx1ZS5iaW5hcnktPnN1YnR5cGUoKSA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnVp bnQ4X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oMHhkOCkpOwor LSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVp bnQ4X3Q+KGoubV92YWx1ZS5iaW5hcnktPnN1YnR5cGUoKSkpOworLSAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLmJpbmFyeS0+c3Vi dHlwZSgpIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDE2X3Q+OjptYXgpKCkpCist ICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVt YmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oMHhkOSkpOworLSAgICAgICAgICAgICAgICAg ICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQxNl90PihqLm1fdmFsdWUu YmluYXJ5LT5zdWJ0eXBlKCkpKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgICAgIGVsc2UgaWYgKGoubV92YWx1ZS5iaW5hcnktPnN1YnR5cGUoKSA8PSAoc3RkOjpu dW1lcmljX2xpbWl0czxzdGQ6OnVpbnQzMl90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxz dGQ6OnVpbnQ4X3Q+KDB4ZGEpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1i ZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MzJfdD4oai5tX3ZhbHVlLmJpbmFyeS0+c3VidHlwZSgp KSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNlIGlm IChqLm1fdmFsdWUuYmluYXJ5LT5zdWJ0eXBlKCkgPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3Rk Ojp1aW50NjRfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PigweGRi KSk7CistICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0 ZDo6dWludDY0X3Q+KGoubV92YWx1ZS5iaW5hcnktPnN1YnR5cGUoKSkpOworLSAgICAgICAgICAg ICAgICAgICAgfQorLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIC8vIHN0 ZXAgMTogd3JpdGUgY29udHJvbCBieXRlIGFuZCB0aGUgYmluYXJ5IGFycmF5IHNpemUKKy0gICAg ICAgICAgICAgICAgY29uc3QgYXV0byBOID0gai5tX3ZhbHVlLmJpbmFyeS0+c2l6ZSgpOworLSAg ICAgICAgICAgICAgICBpZiAoTiA8PSAweDE3KQorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PigweDQw ICsgTikpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4g PD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50OF90Pjo6bWF4KSgpKQorLSAgICAgICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2No YXJfdHlwZSgweDU4KSk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGlj X2Nhc3Q8c3RkOjp1aW50OF90PihOKSk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnVpbnQxNl90Pjo6 bWF4KSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3Jp dGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDU5KSk7CistICAgICAgICAgICAgICAgICAgICB3 cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4oTikpOworLSAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gKHN0ZDo6bnVtZXJpY19saW1p dHM8c3RkOjp1aW50MzJfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHg1QSkpOworLSAg ICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDMyX3Q+ KE4pKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAvLyBMQ09WX0VYQ0xf U1RBUlQKKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1lcmljX2xpbWl0 czxzdGQ6OnVpbnQ2NF90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDVCKSk7CistICAg ICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4o TikpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9T VE9QCistCistICAgICAgICAgICAgICAgIC8vIHN0ZXAgMjogd3JpdGUgZWFjaCBlbGVtZW50Cist ICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXJzKAorLSAgICAgICAgICAgICAgICAg ICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDaGFyVHlwZSo+KGoubV92YWx1ZS5iaW5hcnktPmRh dGEoKSksCistICAgICAgICAgICAgICAgICAgICBOKTsKKy0KKy0gICAgICAgICAgICAgICAgYnJl YWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0 OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gc3RlcCAxOiB3cml0ZSBjb250 cm9sIGJ5dGUgYW5kIHRoZSBvYmplY3Qgc2l6ZQorLSAgICAgICAgICAgICAgICBjb25zdCBhdXRv IE4gPSBqLm1fdmFsdWUub2JqZWN0LT5zaXplKCk7CistICAgICAgICAgICAgICAgIGlmIChOIDw9 IDB4MTcpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX251 bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KDB4QTAgKyBOKSk7CistICAgICAgICAgICAg ICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1lcmljX2xpbWl0 czxzdGQ6OnVpbnQ4X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4QjgpKTsKKy0gICAg ICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KE4p KTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChOIDw9IChz dGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDE2X3Q+OjptYXgpKCkpCistICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90 eXBlKDB4QjkpKTsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2Fz dDxzdGQ6OnVpbnQxNl90PihOKSk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnVpbnQzMl90Pjo6bWF4 KSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVf Y2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweEJBKSk7CistICAgICAgICAgICAgICAgICAgICB3cml0 ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MzJfdD4oTikpOworLSAgICAgICAgICAgICAg ICB9CistICAgICAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9TVEFSVAorLSAgICAgICAgICAgICAg ICBlbHNlIGlmIChOIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDY0X3Q+OjptYXgp KCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9j aGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4QkIpKTsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRl X251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihOKSk7CistICAgICAgICAgICAgICAg IH0KKy0gICAgICAgICAgICAgICAgLy8gTENPVl9FWENMX1NUT1AKKy0KKy0gICAgICAgICAgICAg ICAgLy8gc3RlcCAyOiB3cml0ZSBlYWNoIGVsZW1lbnQKKy0gICAgICAgICAgICAgICAgZm9yIChj b25zdCBhdXRvJiBlbCA6ICpqLm1fdmFsdWUub2JqZWN0KQorLSAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICB3cml0ZV9jYm9yKGVsLmZpcnN0KTsKKy0gICAgICAgICAgICAg ICAgICAgIHdyaXRlX2Nib3IoZWwuc2Vjb25kKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpkaXNjYXJkZWQ6CistICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAg ICAgYnJlYWs7CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBwYXJhbVtp bl0gaiAgSlNPTiB2YWx1ZSB0byBzZXJpYWxpemUKKy0gICAgKi8KKy0gICAgdm9pZCB3cml0ZV9t c2dwYWNrKGNvbnN0IEJhc2ljSnNvblR5cGUmIGopCistICAgIHsKKy0gICAgICAgIHN3aXRjaCAo ai50eXBlKCkpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOiAv LyBuaWwKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0 ZXIodG9fY2hhcl90eXBlKDB4QzApKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjogLy8gdHJ1ZSBh bmQgZmFsc2UKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFy YWN0ZXIoai5tX3ZhbHVlLmJvb2xlYW4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IHRvX2NoYXJfdHlwZSgweEMzKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogdG9fY2hhcl90eXBlKDB4QzIpKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7Cist ICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVn ZXI6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJl cl9pbnRlZ2VyID49IDApCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IC8vIE1lc3NhZ2VQYWNrIGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBwb3NpdGl2ZQor LSAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmVkIGludGVnZXJzIGFuZCB1bnNpZ25lZCBpbnRl Z2Vycy4gVGhlcmVmb3JlLCB3ZSB1c2VkCistICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY29k ZSBmcm9tIHRoZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQgY2FzZSBoZXJlLgorLSAgICAgICAg ICAgICAgICAgICAgaWYgKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPCAxMjgpCistICAgICAg ICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpdmUgZml4 bnVtCistICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0 ZDo6dWludDhfdD4oai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKSk7CistICAgICAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vu c2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDhfdD46Om1heCkoKSkKKy0g ICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1aW50IDgK Ky0gICAgICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlw ZSgweENDKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19j YXN0PHN0ZDo6dWludDhfdD4oai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKSk7CistICAgICAgICAg ICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVt YmVyX3Vuc2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDE2X3Q+OjptYXgp KCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgLy8g dWludCAxNgorLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9f Y2hhcl90eXBlKDB4Q0QpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIo c3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4oai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKSk7Cist ICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1f dmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDMy X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICAgICAgLy8gdWludCAzMgorLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFy YWN0ZXIodG9fY2hhcl90eXBlKDB4Q0UpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB3cml0 ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MzJfdD4oai5tX3ZhbHVlLm51bWJlcl9pbnRl Z2VyKSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNl IGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0 ZDo6dWludDY0X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICAgICAgLy8gdWludCA2NAorLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53 cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4Q0YpKTsKKy0gICAgICAgICAgICAgICAgICAg ICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4oai5tX3ZhbHVlLm51 bWJlcl9pbnRlZ2VyKSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAg IH0KKy0gICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID49IC0zMikKKy0gICAgICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWdhdGl2ZSBmaXhu dW0KKy0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3Rk OjppbnQ4X3Q+KGoubV92YWx1ZS5udW1iZXJfaW50ZWdlcikpOworLSAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRl Z2VyID49IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6aW50OF90Pjo6bWluKSgpICYmCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0gKHN0 ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQ4X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50IDgKKy0gICAgICAgICAgICAg ICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweEQwKSk7CistICAg ICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6aW50OF90 PihqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0g ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGoubV92YWx1ZS5udW1iZXJfaW50ZWdlciA+PSAo c3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OmludDE2X3Q+OjptaW4pKCkgJiYKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGoubV92YWx1ZS5udW1iZXJfaW50ZWdlciA8PSAoc3RkOjpudW1l cmljX2xpbWl0czxzdGQ6OmludDE2X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50IDE2CistICAgICAgICAgICAgICAgICAg ICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHhEMSkpOworLSAgICAgICAg ICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OmludDE2X3Q+KGou bV92YWx1ZS5udW1iZXJfaW50ZWdlcikpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID49IChzdGQ6 Om51bWVyaWNfbGltaXRzPHN0ZDo6aW50MzJfdD46Om1pbikoKSAmJgorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDw9IChzdGQ6Om51bWVyaWNf bGltaXRzPHN0ZDo6aW50MzJfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnQgMzIKKy0gICAgICAgICAgICAgICAgICAgICAg ICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweEQyKSk7CistICAgICAgICAgICAg ICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6aW50MzJfdD4oai5tX3Zh bHVlLm51bWJlcl9pbnRlZ2VyKSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAg ICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPj0gKHN0ZDo6bnVt ZXJpY19saW1pdHM8c3RkOjppbnQ2NF90Pjo6bWluKSgpICYmCistICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0gKHN0ZDo6bnVtZXJpY19saW1p dHM8c3RkOjppbnQ2NF90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGludCA2NAorLSAgICAgICAgICAgICAgICAgICAgICAgIG9h LT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4RDMpKTsKKy0gICAgICAgICAgICAgICAg ICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjppbnQ2NF90PihqLm1fdmFsdWUu bnVtYmVyX2ludGVnZXIpKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA8IDEyOCkKKy0gICAg ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpdmUgZml4bnVtCist ICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90 PihqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IChzdGQ6Om51 bWVyaWNfbGltaXRzPHN0ZDo6dWludDhfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgLy8gdWludCA4CistICAgICAgICAgICAgICAgICAgICBvYS0+ d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweENDKSk7CistICAgICAgICAgICAgICAgICAg ICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihqLm1fdmFsdWUubnVtYmVy X2ludGVnZXIpKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlm IChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6 dWludDE2X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgIC8vIHVpbnQgMTYKKy0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIo dG9fY2hhcl90eXBlKDB4Q0QpKTsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihz dGF0aWNfY2FzdDxzdGQ6OnVpbnQxNl90PihqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpKTsKKy0g ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVt YmVyX3Vuc2lnbmVkIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDMyX3Q+OjptYXgp KCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIHVpbnQgMzIK Ky0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4 Q0UpKTsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6 OnVpbnQzMl90PihqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpKTsKKy0gICAgICAgICAgICAgICAg fQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9 IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDY0X3Q+OjptYXgpKCkpCistICAgICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIHVpbnQgNjQKKy0gICAgICAgICAgICAg ICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKDB4Q0YpKTsKKy0gICAgICAg ICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihqLm1f dmFsdWUubnVtYmVyX2ludGVnZXIpKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg ICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90 OjpudW1iZXJfZmxvYXQ6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICB3cml0ZV9j b21wYWN0X2Zsb2F0KGoubV92YWx1ZS5udW1iZXJfZmxvYXQsIGRldGFpbDo6aW5wdXRfZm9ybWF0 X3Q6Om1zZ3BhY2spOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9Cist CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICAvLyBzdGVwIDE6IHdyaXRlIGNvbnRyb2wgYnl0ZSBhbmQgdGhlIHN0cmlu ZyBsZW5ndGgKKy0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBOID0gai5tX3ZhbHVlLnN0cmlu Zy0+c2l6ZSgpOworLSAgICAgICAgICAgICAgICBpZiAoTiA8PSAzMSkKKy0gICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gZml4c3RyCistICAgICAgICAgICAgICAgICAg ICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PigweEEwIHwgTikpOworLSAg ICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gKHN0ZDo6bnVt ZXJpY19saW1pdHM8c3RkOjp1aW50OF90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICAvLyBzdHIgOAorLSAgICAgICAgICAgICAgICAgICAgb2EtPndy aXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoMHhEOSkpOworLSAgICAgICAgICAgICAgICAgICAg d3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oTikpOworLSAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gKHN0ZDo6bnVtZXJpY19saW1p dHM8c3RkOjp1aW50MTZfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgLy8gc3RyIDE2CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hh cmFjdGVyKHRvX2NoYXJfdHlwZSgweERBKSk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9u dW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4oTikpOworLSAgICAgICAgICAgICAgICB9 CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3Rk Ojp1aW50MzJfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgLy8gc3RyIDMyCistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVy KHRvX2NoYXJfdHlwZSgweERCKSk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIo c3RhdGljX2Nhc3Q8c3RkOjp1aW50MzJfdD4oTikpOworLSAgICAgICAgICAgICAgICB9CistCist ICAgICAgICAgICAgICAgIC8vIHN0ZXAgMjogd3JpdGUgdGhlIHN0cmluZworLSAgICAgICAgICAg ICAgICBvYS0+d3JpdGVfY2hhcmFjdGVycygKKy0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw cmV0X2Nhc3Q8Y29uc3QgQ2hhclR5cGUqPihqLm1fdmFsdWUuc3RyaW5nLT5jX3N0cigpKSwKKy0g ICAgICAgICAgICAgICAgICAgIGoubV92YWx1ZS5zdHJpbmctPnNpemUoKSk7CistICAgICAgICAg ICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6OmFycmF5OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gc3RlcCAxOiB3 cml0ZSBjb250cm9sIGJ5dGUgYW5kIHRoZSBhcnJheSBzaXplCistICAgICAgICAgICAgICAgIGNv bnN0IGF1dG8gTiA9IGoubV92YWx1ZS5hcnJheS0+c2l6ZSgpOworLSAgICAgICAgICAgICAgICBp ZiAoTiA8PSAxNSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8g Zml4YXJyYXkKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxz dGQ6OnVpbnQ4X3Q+KDB4OTAgfCBOKSk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgZWxzZSBpZiAoTiA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnVpbnQxNl90Pjo6 bWF4KSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAvLyBhcnJh eSAxNgorLSAgICAgICAgICAgICAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5 cGUoMHhEQykpOworLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0 PHN0ZDo6dWludDE2X3Q+KE4pKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAg ICBlbHNlIGlmIChOIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDMyX3Q+OjptYXgp KCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IDMy CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgw eEREKSk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3Rk Ojp1aW50MzJfdD4oTikpOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAg IC8vIHN0ZXAgMjogd3JpdGUgZWFjaCBlbGVtZW50CistICAgICAgICAgICAgICAgIGZvciAoY29u c3QgYXV0byYgZWwgOiAqai5tX3ZhbHVlLmFycmF5KQorLSAgICAgICAgICAgICAgICB7CistICAg ICAgICAgICAgICAgICAgICB3cml0ZV9tc2dwYWNrKGVsKTsKKy0gICAgICAgICAgICAgICAgfQor LSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAg Y2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAv LyBzdGVwIDA6IGRldGVybWluZSBpZiB0aGUgYmluYXJ5IHR5cGUgaGFzIGEgc2V0IHN1YnR5cGUg dG8KKy0gICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHVzZSB0 aGUgZXh0IG9yIGZpeGV4dCB0eXBlcworLSAgICAgICAgICAgICAgICBjb25zdCBib29sIHVzZV9l eHQgPSBqLm1fdmFsdWUuYmluYXJ5LT5oYXNfc3VidHlwZSgpOworLQorLSAgICAgICAgICAgICAg ICAvLyBzdGVwIDE6IHdyaXRlIGNvbnRyb2wgYnl0ZSBhbmQgdGhlIGJ5dGUgc3RyaW5nIGxlbmd0 aAorLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIE4gPSBqLm1fdmFsdWUuYmluYXJ5LT5zaXpl KCk7CistICAgICAgICAgICAgICAgIGlmIChOIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6 dWludDhfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAg ICAgc3RkOjp1aW50OF90IG91dHB1dF90eXBle307CistICAgICAgICAgICAgICAgICAgICBib29s IGZpeGVkID0gdHJ1ZTsKKy0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VfZXh0KQorLSAgICAg ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoTikKKy0g ICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgMToKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF90eXBlID0gMHhE NDsgLy8gZml4ZXh0IDEKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CistICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvdXRwdXRfdHlwZSA9IDB4RDU7IC8vIGZpeGV4dCAyCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSA0OgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3R5cGUg PSAweEQ2OyAvLyBmaXhleHQgNAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dHB1dF90eXBlID0gMHhENzsgLy8gZml4ZXh0IDgKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDE2OgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0 X3R5cGUgPSAweEQ4OyAvLyBmaXhleHQgMTYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3R5cGUgPSAweEM3OyAvLyBleHQgOAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBmYWxzZTsKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGVsc2UK Ky0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRf dHlwZSA9IDB4QzQ7IC8vIGJpbiA4CistICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBm YWxzZTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIG9h LT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKG91dHB1dF90eXBlKSk7CistICAgICAgICAg ICAgICAgICAgICBpZiAoIWZpeGVkKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KE4p KTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAg ICAgICAgICBlbHNlIGlmIChOIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDE2X3Q+ OjptYXgpKCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHN0ZDo6 dWludDhfdCBvdXRwdXRfdHlwZSA9IHVzZV9leHQKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID8gMHhDOCAvLyBleHQgMTYKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHhDNTsgLy8gYmluIDE2CistCistICAg ICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZShvdXRwdXRf dHlwZSkpOworLSAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0 ZDo6dWludDE2X3Q+KE4pKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBl bHNlIGlmIChOIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDMyX3Q+OjptYXgpKCkp CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dWludDhfdCBv dXRwdXRfdHlwZSA9IHVzZV9leHQKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gMHhDOSAvLyBleHQgMzIKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogMHhDNjsgLy8gYmluIDMyCistCistICAgICAgICAgICAg ICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZShvdXRwdXRfdHlwZSkpOwor LSAgICAgICAgICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDMy X3Q+KE4pKTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAvLyBzdGVw IDEuNTogaWYgdGhpcyBpcyBhbiBleHQgdHlwZSwgd3JpdGUgdGhlIHN1YnR5cGUKKy0gICAgICAg ICAgICAgICAgaWYgKHVzZV9leHQpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OmludDhfdD4oai5tX3ZhbHVlLmJp bmFyeS0+c3VidHlwZSgpKSk7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAg ICAgLy8gc3RlcCAyOiB3cml0ZSB0aGUgYnl0ZSBzdHJpbmcKKy0gICAgICAgICAgICAgICAgb2Et PndyaXRlX2NoYXJhY3RlcnMoCistICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0 PGNvbnN0IENoYXJUeXBlKj4oai5tX3ZhbHVlLmJpbmFyeS0+ZGF0YSgpKSwKKy0gICAgICAgICAg ICAgICAgICAgIE4pOworLQorLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9 CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CistICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAvLyBzdGVwIDE6IHdyaXRlIGNvbnRyb2wgYnl0ZSBhbmQgdGhlIG9i amVjdCBzaXplCistICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gTiA9IGoubV92YWx1ZS5vYmpl Y3QtPnNpemUoKTsKKy0gICAgICAgICAgICAgICAgaWYgKE4gPD0gMTUpCistICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGZpeG1hcAorLSAgICAgICAgICAgICAgICAg ICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oMHg4MCB8IChOICYgMHhG KSkpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0g KHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50MTZfdD46Om1heCkoKSkKKy0gICAgICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gbWFwIDE2CistICAgICAgICAgICAgICAg ICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweERFKSk7CistICAgICAgICAg ICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4oTikpOwor LSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gKHN0ZDo6 bnVtZXJpY19saW1pdHM8c3RkOjp1aW50MzJfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAgICAgLy8gbWFwIDMyCistICAgICAgICAgICAgICAgICAgICBv YS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweERGKSk7CistICAgICAgICAgICAgICAg ICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50MzJfdD4oTikpOworLSAgICAg ICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIC8vIHN0ZXAgMjogd3JpdGUgZWFjaCBl bGVtZW50CistICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWwgOiAqai5tX3ZhbHVl Lm9iamVjdCkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgd3JpdGVf bXNncGFjayhlbC5maXJzdCk7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9tc2dwYWNrKGVs LnNlY29uZCk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgYnJlYWs7Cist ICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgor LSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAg fQorLSAgICB9CistCistICAgIC8qIQorLSAgICBAcGFyYW1baW5dIGogIEpTT04gdmFsdWUgdG8g c2VyaWFsaXplCistICAgIEBwYXJhbVtpbl0gdXNlX2NvdW50ICAgd2hldGhlciB0byB1c2UgJyMn IHByZWZpeGVzIChvcHRpbWl6ZWQgZm9ybWF0KQorLSAgICBAcGFyYW1baW5dIHVzZV90eXBlICAg IHdoZXRoZXIgdG8gdXNlICckJyBwcmVmaXhlcyAob3B0aW1pemVkIGZvcm1hdCkKKy0gICAgQHBh cmFtW2luXSBhZGRfcHJlZml4ICB3aGV0aGVyIHByZWZpeGVzIG5lZWQgdG8gYmUgdXNlZCBmb3Ig dGhpcyB2YWx1ZQorLSAgICAqLworLSAgICB2b2lkIHdyaXRlX3VianNvbihjb25zdCBCYXNpY0pz b25UeXBlJiBqLCBjb25zdCBib29sIHVzZV9jb3VudCwKKy0gICAgICAgICAgICAgICAgICAgICAg Y29uc3QgYm9vbCB1c2VfdHlwZSwgY29uc3QgYm9vbCBhZGRfcHJlZml4ID0gdHJ1ZSkKKy0gICAg eworLSAgICAgICAgc3dpdGNoIChqLnR5cGUoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBj YXNlIHZhbHVlX3Q6Om51bGw6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAo YWRkX3ByZWZpeCkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgb2Et PndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoJ1onKSk7CistICAgICAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAg IGlmIChhZGRfcHJlZml4KQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBvYS0+d3JpdGVfY2hhcmFjdGVyKGoubV92YWx1ZS5ib29sZWFuCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gdG9fY2hhcl90eXBlKCdUJykKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0b19jaGFyX3R5cGUoJ0YnKSk7CistICAg ICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CistICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXJfd2l0aF91Ympzb25fcHJlZml4KGou bV92YWx1ZS5udW1iZXJfaW50ZWdlciwgYWRkX3ByZWZpeCk7CistICAgICAgICAgICAgICAgIGJy ZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJl cl91bnNpZ25lZDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHdyaXRlX251bWJl cl93aXRoX3VianNvbl9wcmVmaXgoai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCwgYWRkX3ByZWZp eCk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAg ICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgIHdyaXRlX251bWJlcl93aXRoX3VianNvbl9wcmVmaXgoai5tX3ZhbHVlLm51bWJl cl9mbG9hdCwgYWRkX3ByZWZpeCk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgIGlmIChhZGRfcHJlZml4KQorLSAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgn UycpKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXJf d2l0aF91Ympzb25fcHJlZml4KGoubV92YWx1ZS5zdHJpbmctPnNpemUoKSwgdHJ1ZSk7CistICAg ICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXJzKAorLSAgICAgICAgICAgICAgICAgICAg cmVpbnRlcnByZXRfY2FzdDxjb25zdCBDaGFyVHlwZSo+KGoubV92YWx1ZS5zdHJpbmctPmNfc3Ry KCkpLAorLSAgICAgICAgICAgICAgICAgICAgai5tX3ZhbHVlLnN0cmluZy0+c2l6ZSgpKTsKKy0g ICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNh c2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAo YWRkX3ByZWZpeCkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgb2Et PndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoJ1snKSk7CistICAgICAgICAgICAgICAgIH0K Ky0KKy0gICAgICAgICAgICAgICAgYm9vbCBwcmVmaXhfcmVxdWlyZWQgPSB0cnVlOworLSAgICAg ICAgICAgICAgICBpZiAodXNlX3R5cGUgJiYgIWoubV92YWx1ZS5hcnJheS0+ZW1wdHkoKSkKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgSlNPTl9BU1NFUlQodXNlX2Nv dW50KTsKKy0gICAgICAgICAgICAgICAgICAgIGNvbnN0IENoYXJUeXBlIGZpcnN0X3ByZWZpeCA9 IHVianNvbl9wcmVmaXgoai5mcm9udCgpKTsKKy0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJv b2wgc2FtZV9wcmVmaXggPSBzdGQ6OmFsbF9vZihqLmJlZ2luKCkgKyAxLCBqLmVuZCgpLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0 aGlzLCBmaXJzdF9wcmVmaXhdKGNvbnN0IEJhc2ljSnNvblR5cGUgJiB2KQorLSAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1Ympzb25fcHJlZml4 KHYpID09IGZpcnN0X3ByZWZpeDsKKy0gICAgICAgICAgICAgICAgICAgIH0pOworLQorLSAgICAg ICAgICAgICAgICAgICAgaWYgKHNhbWVfcHJlZml4KQorLSAgICAgICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9yZXF1aXJlZCA9IGZhbHNlOworLSAgICAg ICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKCckJykp OworLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIoZmlyc3RfcHJl Zml4KTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgICAgICBpZiAodXNlX2NvdW50KQorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgnIycpKTsKKy0g ICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcl93aXRoX3VianNvbl9wcmVmaXgoai5tX3Zh bHVlLmFycmF5LT5zaXplKCksIHRydWUpOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAg ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWwgOiAqai5tX3ZhbHVlLmFycmF5KQorLSAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV91Ympzb24oZWwsIHVzZV9j b3VudCwgdXNlX3R5cGUsIHByZWZpeF9yZXF1aXJlZCk7CistICAgICAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICAgICAgaWYgKCF1c2VfY291bnQpCistICAgICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKCddJykp OworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgIGlmIChhZGRfcHJlZml4KQorLSAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlw ZSgnWycpKTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBpZiAodXNl X3R5cGUgJiYgIWoubV92YWx1ZS5iaW5hcnktPmVtcHR5KCkpCistICAgICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKHVzZV9jb3VudCk7CistICAgICAgICAg ICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgnJCcpKTsKKy0gICAg ICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIoJ1UnKTsKKy0gICAgICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgICAgICBpZiAodXNlX2NvdW50KQorLSAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlw ZSgnIycpKTsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX251bWJlcl93aXRoX3VianNvbl9w cmVmaXgoai5tX3ZhbHVlLmJpbmFyeS0+c2l6ZSgpLCB0cnVlKTsKKy0gICAgICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgICAgICBpZiAodXNlX3R5cGUpCistICAgICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXJzKAorLSAgICAgICAgICAg ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2hhclR5cGUqPihqLm1fdmFsdWUu YmluYXJ5LT5kYXRhKCkpLAorLSAgICAgICAgICAgICAgICAgICAgICAgIGoubV92YWx1ZS5iaW5h cnktPnNpemUoKSk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZQor LSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g MDsgaSA8IGoubV92YWx1ZS5iaW5hcnktPnNpemUoKTsgKytpKQorLSAgICAgICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hh cl90eXBlKCdVJykpOworLSAgICAgICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0 ZXIoai5tX3ZhbHVlLmJpbmFyeS0+ZGF0YSgpW2ldKTsKKy0gICAgICAgICAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBpZiAoIXVzZV9jb3VudCkK Ky0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgb2EtPndyaXRlX2NoYXJh Y3Rlcih0b19jaGFyX3R5cGUoJ10nKSk7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAg ICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFs dWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKGFkZF9w cmVmaXgpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0 ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKCd7JykpOworLSAgICAgICAgICAgICAgICB9CistCist ICAgICAgICAgICAgICAgIGJvb2wgcHJlZml4X3JlcXVpcmVkID0gdHJ1ZTsKKy0gICAgICAgICAg ICAgICAgaWYgKHVzZV90eXBlICYmICFqLm1fdmFsdWUub2JqZWN0LT5lbXB0eSgpKQorLSAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBKU09OX0FTU0VSVCh1c2VfY291bnQp OworLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclR5cGUgZmlyc3RfcHJlZml4ID0gdWJq c29uX3ByZWZpeChqLmZyb250KCkpOworLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBz YW1lX3ByZWZpeCA9IHN0ZDo6YWxsX29mKGouYmVnaW4oKSwgai5lbmQoKSwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpcywgZmly c3RfcHJlZml4XShjb25zdCBCYXNpY0pzb25UeXBlICYgdikKKy0gICAgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdWJqc29uX3ByZWZpeCh2KSA9PSBm aXJzdF9wcmVmaXg7CistICAgICAgICAgICAgICAgICAgICB9KTsKKy0KKy0gICAgICAgICAgICAg ICAgICAgIGlmIChzYW1lX3ByZWZpeCkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgICAgICBwcmVmaXhfcmVxdWlyZWQgPSBmYWxzZTsKKy0gICAgICAgICAgICAg ICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgnJCcpKTsKKy0gICAg ICAgICAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKGZpcnN0X3ByZWZpeCk7Cist ICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICAgICAgaWYgKHVzZV9jb3VudCkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoJyMnKSk7CistICAgICAgICAg ICAgICAgICAgICB3cml0ZV9udW1iZXJfd2l0aF91Ympzb25fcHJlZml4KGoubV92YWx1ZS5vYmpl Y3QtPnNpemUoKSwgdHJ1ZSk7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAg ICAgZm9yIChjb25zdCBhdXRvJiBlbCA6ICpqLm1fdmFsdWUub2JqZWN0KQorLSAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICB3cml0ZV9udW1iZXJfd2l0aF91Ympzb25fcHJl Zml4KGVsLmZpcnN0LnNpemUoKSwgdHJ1ZSk7CistICAgICAgICAgICAgICAgICAgICBvYS0+d3Jp dGVfY2hhcmFjdGVycygKKy0gICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0 PGNvbnN0IENoYXJUeXBlKj4oZWwuZmlyc3QuY19zdHIoKSksCistICAgICAgICAgICAgICAgICAg ICAgICAgZWwuZmlyc3Quc2l6ZSgpKTsKKy0gICAgICAgICAgICAgICAgICAgIHdyaXRlX3VianNv bihlbC5zZWNvbmQsIHVzZV9jb3VudCwgdXNlX3R5cGUsIHByZWZpeF9yZXF1aXJlZCk7CistICAg ICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgaWYgKCF1c2VfY291bnQpCistICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIo dG9fY2hhcl90eXBlKCd9JykpOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAg ICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICBicmVh azsKKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgcHJpdmF0ZToKKy0gICAgLy8vLy8vLy8vLwor LSAgICAvLyBCU09OIC8vCistICAgIC8vLy8vLy8vLy8KKy0KKy0gICAgLyohCistICAgIEByZXR1 cm4gVGhlIHNpemUgb2YgYSBCU09OIGRvY3VtZW50IGVudHJ5IGhlYWRlciwgaW5jbHVkaW5nIHRo ZSBpZCBtYXJrZXIKKy0gICAgICAgICAgICBhbmQgdGhlIGVudHJ5IG5hbWUgc2l6ZSAoYW5kIGl0 cyBudWxsLXRlcm1pbmF0b3IpLgorLSAgICAqLworLSAgICBzdGF0aWMgc3RkOjpzaXplX3QgY2Fs Y19ic29uX2VudHJ5X2hlYWRlcl9zaXplKGNvbnN0IHN0cmluZ190JiBuYW1lLCBjb25zdCBCYXNp Y0pzb25UeXBlJiBqKQorLSAgICB7CistICAgICAgICBjb25zdCBhdXRvIGl0ID0gbmFtZS5maW5k KHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPigwKSk7CistICAgICAg ICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoaXQgIT0gQmFzaWNKc29uVHlwZTo6c3RyaW5nX3Q6 Om5wb3MpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fVEhST1cob3V0X29mX3Jhbmdl OjpjcmVhdGUoNDA5LCAiQlNPTiBrZXkgY2Fubm90IGNvbnRhaW4gY29kZSBwb2ludCBVKzAwMDAg KGF0IGJ5dGUgIiArIHN0ZDo6dG9fc3RyaW5nKGl0KSArICIpIiwgaikpOworLSAgICAgICAgICAg IHN0YXRpY19jYXN0PHZvaWQ+KGopOworLSAgICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIC8q aWQqLyAxdWwgKyBuYW1lLnNpemUoKSArIC8qemVyby10ZXJtaW5hdG9yKi8xdTsKKy0gICAgfQor LQorLSAgICAvKiEKKy0gICAgQGJyaWVmIFdyaXRlcyB0aGUgZ2l2ZW4gQGEgZWxlbWVudF90eXBl IGFuZCBAYSBuYW1lIHRvIHRoZSBvdXRwdXQgYWRhcHRlcgorLSAgICAqLworLSAgICB2b2lkIHdy aXRlX2Jzb25fZW50cnlfaGVhZGVyKGNvbnN0IHN0cmluZ190JiBuYW1lLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dWludDhfdCBlbGVtZW50X3R5cGUpCist ICAgIHsKKy0gICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKGVsZW1lbnRf dHlwZSkpOyAvLyBib29sZWFuCistICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVycygKKy0gICAg ICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENoYXJUeXBlKj4obmFtZS5jX3N0cigpKSwK Ky0gICAgICAgICAgICBuYW1lLnNpemUoKSArIDF1KTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0g ICAgQGJyaWVmIFdyaXRlcyBhIEJTT04gZWxlbWVudCB3aXRoIGtleSBAYSBuYW1lIGFuZCBib29s ZWFuIHZhbHVlIEBhIHZhbHVlCistICAgICovCistICAgIHZvaWQgd3JpdGVfYnNvbl9ib29sZWFu KGNvbnN0IHN0cmluZ190JiBuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBib29sIHZhbHVlKQorLSAgICB7CistICAgICAgICB3cml0ZV9ic29uX2VudHJ5X2hlYWRlcihu YW1lLCAweDA4KTsKKy0gICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodmFsdWUgPyB0b19jaGFy X3R5cGUoMHgwMSkgOiB0b19jaGFyX3R5cGUoMHgwMCkpOworLSAgICB9CistCistICAgIC8qIQor LSAgICBAYnJpZWYgV3JpdGVzIGEgQlNPTiBlbGVtZW50IHdpdGgga2V5IEBhIG5hbWUgYW5kIGRv dWJsZSB2YWx1ZSBAYSB2YWx1ZQorLSAgICAqLworLSAgICB2b2lkIHdyaXRlX2Jzb25fZG91Ymxl KGNvbnN0IHN0cmluZ190JiBuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGRvdWJsZSB2YWx1ZSkKKy0gICAgeworLSAgICAgICAgd3JpdGVfYnNvbl9lbnRyeV9oZWFkZXIo bmFtZSwgMHgwMSk7CistICAgICAgICB3cml0ZV9udW1iZXI8ZG91YmxlLCB0cnVlPih2YWx1ZSk7 CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEByZXR1cm4gVGhlIHNpemUgb2YgdGhlIEJTT04t ZW5jb2RlZCBzdHJpbmcgaW4gQGEgdmFsdWUKKy0gICAgKi8KKy0gICAgc3RhdGljIHN0ZDo6c2l6 ZV90IGNhbGNfYnNvbl9zdHJpbmdfc2l6ZShjb25zdCBzdHJpbmdfdCYgdmFsdWUpCistICAgIHsK Ky0gICAgICAgIHJldHVybiBzaXplb2Yoc3RkOjppbnQzMl90KSArIHZhbHVlLnNpemUoKSArIDF1 bDsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIFdyaXRlcyBhIEJTT04gZWxlbWVu dCB3aXRoIGtleSBAYSBuYW1lIGFuZCBzdHJpbmcgdmFsdWUgQGEgdmFsdWUKKy0gICAgKi8KKy0g ICAgdm9pZCB3cml0ZV9ic29uX3N0cmluZyhjb25zdCBzdHJpbmdfdCYgbmFtZSwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdCYgdmFsdWUpCistICAgIHsKKy0gICAg ICAgIHdyaXRlX2Jzb25fZW50cnlfaGVhZGVyKG5hbWUsIDB4MDIpOworLQorLSAgICAgICAgd3Jp dGVfbnVtYmVyPHN0ZDo6aW50MzJfdCwgdHJ1ZT4oc3RhdGljX2Nhc3Q8c3RkOjppbnQzMl90Pih2 YWx1ZS5zaXplKCkgKyAxdWwpKTsKKy0gICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXJzKAorLSAg ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2hhclR5cGUqPih2YWx1ZS5jX3N0cigp KSwKKy0gICAgICAgICAgICB2YWx1ZS5zaXplKCkgKyAxKTsKKy0gICAgfQorLQorLSAgICAvKiEK Ky0gICAgQGJyaWVmIFdyaXRlcyBhIEJTT04gZWxlbWVudCB3aXRoIGtleSBAYSBuYW1lIGFuZCBu dWxsIHZhbHVlCistICAgICovCistICAgIHZvaWQgd3JpdGVfYnNvbl9udWxsKGNvbnN0IHN0cmlu Z190JiBuYW1lKQorLSAgICB7CistICAgICAgICB3cml0ZV9ic29uX2VudHJ5X2hlYWRlcihuYW1l LCAweDBBKTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQHJldHVybiBUaGUgc2l6ZSBvZiB0 aGUgQlNPTi1lbmNvZGVkIGludGVnZXIgQGEgdmFsdWUKKy0gICAgKi8KKy0gICAgc3RhdGljIHN0 ZDo6c2l6ZV90IGNhbGNfYnNvbl9pbnRlZ2VyX3NpemUoY29uc3Qgc3RkOjppbnQ2NF90IHZhbHVl KQorLSAgICB7CistICAgICAgICByZXR1cm4gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQz Ml90Pjo6bWluKSgpIDw9IHZhbHVlICYmIHZhbHVlIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0 ZDo6aW50MzJfdD46Om1heCkoKQorLSAgICAgICAgICAgICAgID8gc2l6ZW9mKHN0ZDo6aW50MzJf dCkKKy0gICAgICAgICAgICAgICA6IHNpemVvZihzdGQ6OmludDY0X3QpOworLSAgICB9CistCist ICAgIC8qIQorLSAgICBAYnJpZWYgV3JpdGVzIGEgQlNPTiBlbGVtZW50IHdpdGgga2V5IEBhIG5h bWUgYW5kIGludGVnZXIgQGEgdmFsdWUKKy0gICAgKi8KKy0gICAgdm9pZCB3cml0ZV9ic29uX2lu dGVnZXIoY29uc3Qgc3RyaW5nX3QmIG5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0ZDo6aW50NjRfdCB2YWx1ZSkKKy0gICAgeworLSAgICAgICAgaWYgKChzdGQ6Om51 bWVyaWNfbGltaXRzPHN0ZDo6aW50MzJfdD46Om1pbikoKSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAo c3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OmludDMyX3Q+OjptYXgpKCkpCistICAgICAgICB7Cist ICAgICAgICAgICAgd3JpdGVfYnNvbl9lbnRyeV9oZWFkZXIobmFtZSwgMHgxMCk7IC8vIGludDMy CistICAgICAgICAgICAgd3JpdGVfbnVtYmVyPHN0ZDo6aW50MzJfdCwgdHJ1ZT4oc3RhdGljX2Nh c3Q8c3RkOjppbnQzMl90Pih2YWx1ZSkpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAg ICAgICAgeworLSAgICAgICAgICAgIHdyaXRlX2Jzb25fZW50cnlfaGVhZGVyKG5hbWUsIDB4MTIp OyAvLyBpbnQ2NAorLSAgICAgICAgICAgIHdyaXRlX251bWJlcjxzdGQ6OmludDY0X3QsIHRydWU+ KHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4odmFsdWUpKTsKKy0gICAgICAgIH0KKy0gICAgfQor LQorLSAgICAvKiEKKy0gICAgQHJldHVybiBUaGUgc2l6ZSBvZiB0aGUgQlNPTi1lbmNvZGVkIHVu c2lnbmVkIGludGVnZXIgaW4gQGEgagorLSAgICAqLworLSAgICBzdGF0aWMgY29uc3RleHByIHN0 ZDo6c2l6ZV90IGNhbGNfYnNvbl91bnNpZ25lZF9zaXplKGNvbnN0IHN0ZDo6dWludDY0X3QgdmFs dWUpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJldHVybiAodmFsdWUgPD0gc3RhdGljX2Nh c3Q8c3RkOjp1aW50NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQzMl90Pjo6bWF4 KSgpKSkKKy0gICAgICAgICAgICAgICA/IHNpemVvZihzdGQ6OmludDMyX3QpCistICAgICAgICAg ICAgICAgOiBzaXplb2Yoc3RkOjppbnQ2NF90KTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAg QGJyaWVmIFdyaXRlcyBhIEJTT04gZWxlbWVudCB3aXRoIGtleSBAYSBuYW1lIGFuZCB1bnNpZ25l ZCBAYSB2YWx1ZQorLSAgICAqLworLSAgICB2b2lkIHdyaXRlX2Jzb25fdW5zaWduZWQoY29uc3Qg c3RyaW5nX3QmIG5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNp Y0pzb25UeXBlJiBqKQorLSAgICB7CistICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJlcl91bnNp Z25lZCA8PSBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90Pigoc3RkOjpudW1lcmljX2xpbWl0czxz dGQ6OmludDMyX3Q+OjptYXgpKCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHdyaXRlX2Jz b25fZW50cnlfaGVhZGVyKG5hbWUsIDB4MTAgLyogaW50MzIgKi8pOworLSAgICAgICAgICAgIHdy aXRlX251bWJlcjxzdGQ6OmludDMyX3QsIHRydWU+KHN0YXRpY19jYXN0PHN0ZDo6aW50MzJfdD4o ai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZSBp ZiAoai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA8PSBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90 Pigoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OmludDY0X3Q+OjptYXgpKCkpKQorLSAgICAgICAg eworLSAgICAgICAgICAgIHdyaXRlX2Jzb25fZW50cnlfaGVhZGVyKG5hbWUsIDB4MTIgLyogaW50 NjQgKi8pOworLSAgICAgICAgICAgIHdyaXRlX251bWJlcjxzdGQ6OmludDY0X3QsIHRydWU+KHN0 YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4oai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkpOworLSAg ICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fVEhS T1cob3V0X29mX3JhbmdlOjpjcmVhdGUoNDA3LCAiaW50ZWdlciBudW1iZXIgIiArIHN0ZDo6dG9f c3RyaW5nKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpICsgIiBjYW5ub3QgYmUgcmVwcmVzZW50 ZWQgYnkgQlNPTiBhcyBpdCBkb2VzIG5vdCBmaXQgaW50NjQiLCBqKSk7CistICAgICAgICB9Cist ICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBXcml0ZXMgYSBCU09OIGVsZW1lbnQgd2l0 aCBrZXkgQGEgbmFtZSBhbmQgb2JqZWN0IEBhIHZhbHVlCistICAgICovCistICAgIHZvaWQgd3Jp dGVfYnNvbl9vYmplY3RfZW50cnkoY29uc3Qgc3RyaW5nX3QmIG5hbWUsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0 X3QmIHZhbHVlKQorLSAgICB7CistICAgICAgICB3cml0ZV9ic29uX2VudHJ5X2hlYWRlcihuYW1l LCAweDAzKTsgLy8gb2JqZWN0CistICAgICAgICB3cml0ZV9ic29uX29iamVjdCh2YWx1ZSk7Cist ICAgIH0KKy0KKy0gICAgLyohCistICAgIEByZXR1cm4gVGhlIHNpemUgb2YgdGhlIEJTT04tZW5j b2RlZCBhcnJheSBAYSB2YWx1ZQorLSAgICAqLworLSAgICBzdGF0aWMgc3RkOjpzaXplX3QgY2Fs Y19ic29uX2FycmF5X3NpemUoY29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6YXJyYXlfdCYg dmFsdWUpCistICAgIHsKKy0gICAgICAgIHN0ZDo6c2l6ZV90IGFycmF5X2luZGV4ID0gMHVsOwor LQorLSAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgZW1iZWRkZWRfZG9jdW1lbnRfc2l6ZSA9IHN0 ZDo6YWNjdW11bGF0ZShzdGQ6OmJlZ2luKHZhbHVlKSwgc3RkOjplbmQodmFsdWUpLCBzdGF0aWNf Y2FzdDxzdGQ6OnNpemVfdD4oMCksIFsmYXJyYXlfaW5kZXhdKHN0ZDo6c2l6ZV90IHJlc3VsdCwg Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6YXJyYXlfdDo6dmFsdWVfdHlwZSAmIGVsKQor LSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBjYWxjX2Jzb25fZWxlbWVu dF9zaXplKHN0ZDo6dG9fc3RyaW5nKGFycmF5X2luZGV4KyspLCBlbCk7CistICAgICAgICB9KTsK Ky0KKy0gICAgICAgIHJldHVybiBzaXplb2Yoc3RkOjppbnQzMl90KSArIGVtYmVkZGVkX2RvY3Vt ZW50X3NpemUgKyAxdWw7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEByZXR1cm4gVGhlIHNp emUgb2YgdGhlIEJTT04tZW5jb2RlZCBiaW5hcnkgYXJyYXkgQGEgdmFsdWUKKy0gICAgKi8KKy0g ICAgc3RhdGljIHN0ZDo6c2l6ZV90IGNhbGNfYnNvbl9iaW5hcnlfc2l6ZShjb25zdCB0eXBlbmFt ZSBCYXNpY0pzb25UeXBlOjpiaW5hcnlfdCYgdmFsdWUpCistICAgIHsKKy0gICAgICAgIHJldHVy biBzaXplb2Yoc3RkOjppbnQzMl90KSArIHZhbHVlLnNpemUoKSArIDF1bDsKKy0gICAgfQorLQor LSAgICAvKiEKKy0gICAgQGJyaWVmIFdyaXRlcyBhIEJTT04gZWxlbWVudCB3aXRoIGtleSBAYSBu YW1lIGFuZCBhcnJheSBAYSB2YWx1ZQorLSAgICAqLworLSAgICB2b2lkIHdyaXRlX2Jzb25fYXJy YXkoY29uc3Qgc3RyaW5nX3QmIG5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjphcnJheV90JiB2YWx1ZSkKKy0gICAgeworLSAgICAg ICAgd3JpdGVfYnNvbl9lbnRyeV9oZWFkZXIobmFtZSwgMHgwNCk7IC8vIGFycmF5CistICAgICAg ICB3cml0ZV9udW1iZXI8c3RkOjppbnQzMl90LCB0cnVlPihzdGF0aWNfY2FzdDxzdGQ6OmludDMy X3Q+KGNhbGNfYnNvbl9hcnJheV9zaXplKHZhbHVlKSkpOworLQorLSAgICAgICAgc3RkOjpzaXpl X3QgYXJyYXlfaW5kZXggPSAwdWw7CistCistICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsIDog dmFsdWUpCistICAgICAgICB7CistICAgICAgICAgICAgd3JpdGVfYnNvbl9lbGVtZW50KHN0ZDo6 dG9fc3RyaW5nKGFycmF5X2luZGV4KyspLCBlbCk7CistICAgICAgICB9CistCistICAgICAgICBv YS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgweDAwKSk7CistICAgIH0KKy0KKy0gICAg LyohCistICAgIEBicmllZiBXcml0ZXMgYSBCU09OIGVsZW1lbnQgd2l0aCBrZXkgQGEgbmFtZSBh bmQgYmluYXJ5IHZhbHVlIEBhIHZhbHVlCistICAgICovCistICAgIHZvaWQgd3JpdGVfYnNvbl9i aW5hcnkoY29uc3Qgc3RyaW5nX3QmIG5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgYmluYXJ5X3QmIHZhbHVlKQorLSAgICB7CistICAgICAgICB3cml0ZV9ic29uX2VudHJ5 X2hlYWRlcihuYW1lLCAweDA1KTsKKy0KKy0gICAgICAgIHdyaXRlX251bWJlcjxzdGQ6OmludDMy X3QsIHRydWU+KHN0YXRpY19jYXN0PHN0ZDo6aW50MzJfdD4odmFsdWUuc2l6ZSgpKSk7CistICAg ICAgICB3cml0ZV9udW1iZXIodmFsdWUuaGFzX3N1YnR5cGUoKSA/IHN0YXRpY19jYXN0PHN0ZDo6 dWludDhfdD4odmFsdWUuc3VidHlwZSgpKSA6IHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oMHgw MCkpOworLQorLSAgICAgICAgb2EtPndyaXRlX2NoYXJhY3RlcnMocmVpbnRlcnByZXRfY2FzdDxj b25zdCBDaGFyVHlwZSo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSk7CistICAgIH0KKy0K Ky0gICAgLyohCistICAgIEBicmllZiBDYWxjdWxhdGVzIHRoZSBzaXplIG5lY2Vzc2FyeSB0byBz ZXJpYWxpemUgdGhlIEpTT04gdmFsdWUgQGEgaiB3aXRoIGl0cyBAYSBuYW1lCistICAgIEByZXR1 cm4gVGhlIGNhbGN1bGF0ZWQgc2l6ZSBmb3IgdGhlIEJTT04gZG9jdW1lbnQgZW50cnkgZm9yIEBh IGogd2l0aCB0aGUgZ2l2ZW4gQGEgbmFtZS4KKy0gICAgKi8KKy0gICAgc3RhdGljIHN0ZDo6c2l6 ZV90IGNhbGNfYnNvbl9lbGVtZW50X3NpemUoY29uc3Qgc3RyaW5nX3QmIG5hbWUsCistICAgICAg ICAgICAgY29uc3QgQmFzaWNKc29uVHlwZSYgaikKKy0gICAgeworLSAgICAgICAgY29uc3QgYXV0 byBoZWFkZXJfc2l6ZSA9IGNhbGNfYnNvbl9lbnRyeV9oZWFkZXJfc2l6ZShuYW1lLCBqKTsKKy0g ICAgICAgIHN3aXRjaCAoai50eXBlKCkpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpvYmplY3Q6CistICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJfc2l6ZSArIGNh bGNfYnNvbl9vYmplY3Rfc2l6ZSgqai5tX3ZhbHVlLm9iamVjdCk7CistCistICAgICAgICAgICAg Y2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlcl9zaXpl ICsgY2FsY19ic29uX2FycmF5X3NpemUoKmoubV92YWx1ZS5hcnJheSk7CistCistICAgICAgICAg ICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJf c2l6ZSArIGNhbGNfYnNvbl9iaW5hcnlfc2l6ZSgqai5tX3ZhbHVlLmJpbmFyeSk7CistCistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgICAgICAgICByZXR1cm4g aGVhZGVyX3NpemUgKyAxdWw7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJf ZmxvYXQ6CistICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJfc2l6ZSArIDh1bDsKKy0KKy0g ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgICAg ICByZXR1cm4gaGVhZGVyX3NpemUgKyBjYWxjX2Jzb25faW50ZWdlcl9zaXplKGoubV92YWx1ZS5u dW1iZXJfaW50ZWdlcik7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5z aWduZWQ6CistICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJfc2l6ZSArIGNhbGNfYnNvbl91 bnNpZ25lZF9zaXplKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpOworLQorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgICAgICByZXR1cm4gaGVhZGVyX3Np emUgKyBjYWxjX2Jzb25fc3RyaW5nX3NpemUoKmoubV92YWx1ZS5zdHJpbmcpOworLQorLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRl cl9zaXplICsgMHVsOworLQorLSAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9TVEFSVAorLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6Cist ICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKGZhbHNlKTsgLy8gTk9MSU5UKGNlcnQtZGNsMDMt YyxoaWNwcC1zdGF0aWMtYXNzZXJ0LG1pc2Mtc3RhdGljLWFzc2VydCkKKy0gICAgICAgICAgICAg ICAgcmV0dXJuIDB1bDsKKy0gICAgICAgICAgICAgICAgLy8gTENPVl9FWENMX1NUT1AKKy0gICAg ICAgIH0KKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIFNlcmlhbGl6ZXMgdGhlIEpT T04gdmFsdWUgQGEgaiB0byBCU09OIGFuZCBhc3NvY2lhdGVzIGl0IHdpdGggdGhlCistICAgICAg ICAgICBrZXkgQGEgbmFtZS4KKy0gICAgQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gYXNzb2NpYXRl IHdpdGggdGhlIEpTT04gZW50aXR5IEBhIGogd2l0aGluIHRoZQorLSAgICAgICAgICAgICAgICBj dXJyZW50IEJTT04gZG9jdW1lbnQKKy0gICAgKi8KKy0gICAgdm9pZCB3cml0ZV9ic29uX2VsZW1l bnQoY29uc3Qgc3RyaW5nX3QmIG5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEJhc2ljSnNvblR5cGUmIGopCistICAgIHsKKy0gICAgICAgIHN3aXRjaCAoai50eXBlKCkp CistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CistICAgICAg ICAgICAgICAgIHJldHVybiB3cml0ZV9ic29uX29iamVjdF9lbnRyeShuYW1lLCAqai5tX3ZhbHVl Lm9iamVjdCk7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAgICAg ICAgICAgICAgcmV0dXJuIHdyaXRlX2Jzb25fYXJyYXkobmFtZSwgKmoubV92YWx1ZS5hcnJheSk7 CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAgICAgICAgICAg IHJldHVybiB3cml0ZV9ic29uX2JpbmFyeShuYW1lLCAqai5tX3ZhbHVlLmJpbmFyeSk7CistCist ICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgICAgICAgICByZXR1 cm4gd3JpdGVfYnNvbl9ib29sZWFuKG5hbWUsIGoubV92YWx1ZS5ib29sZWFuKTsKKy0KKy0gICAg ICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICAgICAgcmV0 dXJuIHdyaXRlX2Jzb25fZG91YmxlKG5hbWUsIGoubV92YWx1ZS5udW1iZXJfZmxvYXQpOworLQor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CistICAgICAgICAgICAg ICAgIHJldHVybiB3cml0ZV9ic29uX2ludGVnZXIobmFtZSwgai5tX3ZhbHVlLm51bWJlcl9pbnRl Z2VyKTsKKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlX2Jzb25fdW5zaWduZWQobmFtZSwgaik7CistCist ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CistICAgICAgICAgICAgICAgIHJldHVy biB3cml0ZV9ic29uX3N0cmluZyhuYW1lLCAqai5tX3ZhbHVlLnN0cmluZyk7CistCistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVf YnNvbl9udWxsKG5hbWUpOworLQorLSAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9TVEFSVAorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6 CistICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKGZhbHNlKTsgLy8gTk9MSU5UKGNlcnQtZGNs MDMtYyxoaWNwcC1zdGF0aWMtYXNzZXJ0LG1pc2Mtc3RhdGljLWFzc2VydCkKKy0gICAgICAgICAg ICAgICAgcmV0dXJuOworLSAgICAgICAgICAgICAgICAvLyBMQ09WX0VYQ0xfU1RPUAorLSAgICAg ICAgfQorLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgQ2FsY3VsYXRlcyB0aGUgc2l6 ZSBvZiB0aGUgQlNPTiBzZXJpYWxpemF0aW9uIG9mIHRoZSBnaXZlbgorLSAgICAgICAgICAgSlNP Ti1vYmplY3QgQGEgai4KKy0gICAgQHBhcmFtW2luXSB2YWx1ZSAgSlNPTiB2YWx1ZSB0byBzZXJp YWxpemUKKy0gICAgQHByZSAgICAgICB2YWx1ZS50eXBlKCkgPT0gdmFsdWVfdDo6b2JqZWN0Cist ICAgICovCistICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBjYWxjX2Jzb25fb2JqZWN0X3NpemUoY29u c3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0X3QmIHZhbHVlKQorLSAgICB7CistICAg ICAgICBzdGQ6OnNpemVfdCBkb2N1bWVudF9zaXplID0gc3RkOjphY2N1bXVsYXRlKHZhbHVlLmJl Z2luKCksIHZhbHVlLmVuZCgpLCBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oMCksCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10oc2l6ZV90IHJlc3VsdCwgY29uc3QgdHlw ZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0X3Q6OnZhbHVlX3R5cGUgJiBlbCkKKy0gICAgICAg IHsKKy0gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICs9IGNhbGNfYnNvbl9lbGVtZW50X3NpemUo ZWwuZmlyc3QsIGVsLnNlY29uZCk7CistICAgICAgICB9KTsKKy0KKy0gICAgICAgIHJldHVybiBz aXplb2Yoc3RkOjppbnQzMl90KSArIGRvY3VtZW50X3NpemUgKyAxdWw7CistICAgIH0KKy0KKy0g ICAgLyohCistICAgIEBwYXJhbVtpbl0gdmFsdWUgIEpTT04gdmFsdWUgdG8gc2VyaWFsaXplCist ICAgIEBwcmUgICAgICAgdmFsdWUudHlwZSgpID09IHZhbHVlX3Q6Om9iamVjdAorLSAgICAqLwor LSAgICB2b2lkIHdyaXRlX2Jzb25fb2JqZWN0KGNvbnN0IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6 Om9iamVjdF90JiB2YWx1ZSkKKy0gICAgeworLSAgICAgICAgd3JpdGVfbnVtYmVyPHN0ZDo6aW50 MzJfdCwgdHJ1ZT4oc3RhdGljX2Nhc3Q8c3RkOjppbnQzMl90PihjYWxjX2Jzb25fb2JqZWN0X3Np emUodmFsdWUpKSk7CistCistICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsIDogdmFsdWUpCist ICAgICAgICB7CistICAgICAgICAgICAgd3JpdGVfYnNvbl9lbGVtZW50KGVsLmZpcnN0LCBlbC5z ZWNvbmQpOworLSAgICAgICAgfQorLQorLSAgICAgICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19j aGFyX3R5cGUoMHgwMCkpOworLSAgICB9CistCistICAgIC8vLy8vLy8vLy8KKy0gICAgLy8gQ0JP UiAvLworLSAgICAvLy8vLy8vLy8vCistCistICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhclR5cGUg Z2V0X2Nib3JfZmxvYXRfcHJlZml4KGZsb2F0IC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAg IHJldHVybiB0b19jaGFyX3R5cGUoMHhGQSk7ICAvLyBTaW5nbGUtUHJlY2lzaW9uIEZsb2F0Cist ICAgIH0KKy0KKy0gICAgc3RhdGljIGNvbnN0ZXhwciBDaGFyVHlwZSBnZXRfY2Jvcl9mbG9hdF9w cmVmaXgoZG91YmxlIC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAgIHJldHVybiB0b19jaGFy X3R5cGUoMHhGQik7ICAvLyBEb3VibGUtUHJlY2lzaW9uIEZsb2F0CistICAgIH0KKy0KKy0gICAg Ly8vLy8vLy8vLy8vLworLSAgICAvLyBNc2dQYWNrIC8vCistICAgIC8vLy8vLy8vLy8vLy8KKy0K Ky0gICAgc3RhdGljIGNvbnN0ZXhwciBDaGFyVHlwZSBnZXRfbXNncGFja19mbG9hdF9wcmVmaXgo ZmxvYXQgLyp1bnVzZWQqLykKKy0gICAgeworLSAgICAgICAgcmV0dXJuIHRvX2NoYXJfdHlwZSgw eENBKTsgIC8vIGZsb2F0IDMyCistICAgIH0KKy0KKy0gICAgc3RhdGljIGNvbnN0ZXhwciBDaGFy VHlwZSBnZXRfbXNncGFja19mbG9hdF9wcmVmaXgoZG91YmxlIC8qdW51c2VkKi8pCistICAgIHsK Ky0gICAgICAgIHJldHVybiB0b19jaGFyX3R5cGUoMHhDQik7ICAvLyBmbG9hdCA2NAorLSAgICB9 CistCistICAgIC8vLy8vLy8vLy8vLworLSAgICAvLyBVQkpTT04gLy8KKy0gICAgLy8vLy8vLy8v Ly8vCistCistICAgIC8vIFVCSlNPTjogd3JpdGUgbnVtYmVyIChmbG9hdGluZyBwb2ludCkKKy0g ICAgdGVtcGxhdGU8dHlwZW5hbWUgTnVtYmVyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8 CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PE51bWJlclR5cGU+Ojp2 YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CistICAgIHZvaWQgd3JpdGVfbnVtYmVyX3dpdGhfdWJqc29u X3ByZWZpeChjb25zdCBOdW1iZXJUeXBlIG4sCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBib29sIGFkZF9wcmVmaXgpCistICAgIHsKKy0gICAgICAgIGlm IChhZGRfcHJlZml4KQorLSAgICAgICAgeworLSAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0 ZXIoZ2V0X3VianNvbl9mbG9hdF9wcmVmaXgobikpOworLSAgICAgICAgfQorLSAgICAgICAgd3Jp dGVfbnVtYmVyKG4pOworLSAgICB9CistCistICAgIC8vIFVCSlNPTjogd3JpdGUgbnVtYmVyICh1 bnNpZ25lZCBpbnRlZ2VyKQorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBlLCB0eXBl bmFtZSBzdGQ6OmVuYWJsZV9pZjwKKy0gICAgICAgICAgICAgICAgIHN0ZDo6aXNfdW5zaWduZWQ8 TnVtYmVyVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKy0gICAgdm9pZCB3cml0ZV9udW1i ZXJfd2l0aF91Ympzb25fcHJlZml4KGNvbnN0IE51bWJlclR5cGUgbiwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYWRkX3ByZWZpeCkKKy0gICAg eworLSAgICAgICAgaWYgKG4gPD0gc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4oKHN0ZDo6bnVt ZXJpY19saW1pdHM8c3RkOjppbnQ4X3Q+OjptYXgpKCkpKQorLSAgICAgICAgeworLSAgICAgICAg ICAgIGlmIChhZGRfcHJlZml4KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgb2Et PndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoJ2knKSk7ICAvLyBpbnQ4CistICAgICAgICAg ICAgfQorLSAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+ KG4pKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKG4gPD0gKHN0ZDo6bnVtZXJpY19s aW1pdHM8c3RkOjp1aW50OF90Pjo6bWF4KSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGlm IChhZGRfcHJlZml4KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgb2EtPndyaXRl X2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoJ1UnKSk7ICAvLyB1aW50OAorLSAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PihuKSk7 CistICAgICAgICB9CistICAgICAgICBlbHNlIGlmIChuIDw9IHN0YXRpY19jYXN0PHN0ZDo6dWlu dDY0X3Q+KChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6aW50MTZfdD46Om1heCkoKSkpCistICAg ICAgICB7CistICAgICAgICAgICAgaWYgKGFkZF9wcmVmaXgpCistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgnSScpKTsgIC8v IGludDE2CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNf Y2FzdDxzdGQ6OmludDE2X3Q+KG4pKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKG4g PD0gc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpp bnQzMl90Pjo6bWF4KSgpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoYWRkX3ByZWZp eCkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIo dG9fY2hhcl90eXBlKCdsJykpOyAgLy8gaW50MzIKKy0gICAgICAgICAgICB9CistICAgICAgICAg ICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6aW50MzJfdD4obikpOworLSAgICAgICAg fQorLSAgICAgICAgZWxzZSBpZiAobiA8PSBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90Pigoc3Rk OjpudW1lcmljX2xpbWl0czxzdGQ6OmludDY0X3Q+OjptYXgpKCkpKQorLSAgICAgICAgeworLSAg ICAgICAgICAgIGlmIChhZGRfcHJlZml4KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgb2EtPndyaXRlX2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoJ0wnKSk7ICAvLyBpbnQ2NAorLSAg ICAgICAgICAgIH0KKy0gICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjpp bnQ2NF90PihuKSk7CistICAgICAgICB9CistICAgICAgICBlbHNlCistICAgICAgICB7CistICAg ICAgICAgICAgaWYgKGFkZF9wcmVmaXgpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgnSCcpKTsgIC8vIGhpZ2gtcHJlY2lz aW9uIG51bWJlcgorLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjb25zdCBhdXRvIG51 bWJlciA9IEJhc2ljSnNvblR5cGUobikuZHVtcCgpOworLSAgICAgICAgICAgIHdyaXRlX251bWJl cl93aXRoX3VianNvbl9wcmVmaXgobnVtYmVyLnNpemUoKSwgdHJ1ZSk7CistICAgICAgICAgICAg Zm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG51bWJlci5zaXplKCk7ICsraSkKKy0gICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBl KHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4obnVtYmVyW2ldKSkpOworLSAgICAgICAgICAgIH0K Ky0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvLyBVQkpTT046IHdyaXRlIG51bWJlciAoc2ln bmVkIGludGVnZXIpCistICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgTnVtYmVyVHlwZSwgdHlwZW5h bWUgc3RkOjplbmFibGVfaWYgPAorLSAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NpZ25lZDxO dW1iZXJUeXBlPjo6dmFsdWUmJgorLSAgICAgICAgICAgICAgICAgICAhc3RkOjppc19mbG9hdGlu Z19wb2ludDxOdW1iZXJUeXBlPjo6dmFsdWUsIGludCA+Ojp0eXBlID0gMCA+CistICAgIHZvaWQg d3JpdGVfbnVtYmVyX3dpdGhfdWJqc29uX3ByZWZpeChjb25zdCBOdW1iZXJUeXBlIG4sCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFkZF9wcmVm aXgpCistICAgIHsKKy0gICAgICAgIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OmludDhf dD46Om1pbikoKSA8PSBuICYmIG4gPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQ4X3Q+ OjptYXgpKCkpCistICAgICAgICB7CistICAgICAgICAgICAgaWYgKGFkZF9wcmVmaXgpCistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJf dHlwZSgnaScpKTsgIC8vIGludDgKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgd3JpdGVf bnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6aW50OF90PihuKSk7CistICAgICAgICB9CistICAgICAg ICBlbHNlIGlmIChzdGF0aWNfY2FzdDxzdGQ6OmludDY0X3Q+KChzdGQ6Om51bWVyaWNfbGltaXRz PHN0ZDo6dWludDhfdD46Om1pbikoKSkgPD0gbiAmJiBuIDw9IHN0YXRpY19jYXN0PHN0ZDo6aW50 NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjp1aW50OF90Pjo6bWF4KSgpKSkKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICBpZiAoYWRkX3ByZWZpeCkKKy0gICAgICAgICAgICB7CistICAg ICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hhcl90eXBlKCdVJykpOyAgLy8g dWludDgKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgd3JpdGVfbnVtYmVyKHN0YXRpY19j YXN0PHN0ZDo6dWludDhfdD4obikpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZSBpZiAoKHN0 ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQxNl90Pjo6bWluKSgpIDw9IG4gJiYgbiA8PSAoc3Rk OjpudW1lcmljX2xpbWl0czxzdGQ6OmludDE2X3Q+OjptYXgpKCkpCistICAgICAgICB7CistICAg ICAgICAgICAgaWYgKGFkZF9wcmVmaXgpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgnSScpKTsgIC8vIGludDE2CistICAg ICAgICAgICAgfQorLSAgICAgICAgICAgIHdyaXRlX251bWJlcihzdGF0aWNfY2FzdDxzdGQ6Omlu dDE2X3Q+KG4pKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKChzdGQ6Om51bWVyaWNf bGltaXRzPHN0ZDo6aW50MzJfdD46Om1pbikoKSA8PSBuICYmIG4gPD0gKHN0ZDo6bnVtZXJpY19s aW1pdHM8c3RkOjppbnQzMl90Pjo6bWF4KSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGlm IChhZGRfcHJlZml4KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgb2EtPndyaXRl X2NoYXJhY3Rlcih0b19jaGFyX3R5cGUoJ2wnKSk7ICAvLyBpbnQzMgorLSAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICB3cml0ZV9udW1iZXIoc3RhdGljX2Nhc3Q8c3RkOjppbnQzMl90PihuKSk7 CistICAgICAgICB9CistICAgICAgICBlbHNlIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6 OmludDY0X3Q+OjptaW4pKCkgPD0gbiAmJiBuIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6 aW50NjRfdD46Om1heCkoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoYWRkX3ByZWZp eCkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIo dG9fY2hhcl90eXBlKCdMJykpOyAgLy8gaW50NjQKKy0gICAgICAgICAgICB9CistICAgICAgICAg ICAgd3JpdGVfbnVtYmVyKHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4obikpOworLSAgICAgICAg fQorLSAgICAgICAgLy8gTENPVl9FWENMX1NUQVJUCistICAgICAgICBlbHNlCistICAgICAgICB7 CistICAgICAgICAgICAgaWYgKGFkZF9wcmVmaXgpCistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVyKHRvX2NoYXJfdHlwZSgnSCcpKTsgIC8vIGhpZ2gt cHJlY2lzaW9uIG51bWJlcgorLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjb25zdCBh dXRvIG51bWJlciA9IEJhc2ljSnNvblR5cGUobikuZHVtcCgpOworLSAgICAgICAgICAgIHdyaXRl X251bWJlcl93aXRoX3VianNvbl9wcmVmaXgobnVtYmVyLnNpemUoKSwgdHJ1ZSk7CistICAgICAg ICAgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG51bWJlci5zaXplKCk7ICsraSkKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIodG9fY2hh cl90eXBlKHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4obnVtYmVyW2ldKSkpOworLSAgICAgICAg ICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIC8vIExDT1ZfRVhDTF9TVE9QCistICAgIH0KKy0K Ky0gICAgLyohCistICAgIEBicmllZiBkZXRlcm1pbmUgdGhlIHR5cGUgcHJlZml4IG9mIGNvbnRh aW5lciB2YWx1ZXMKKy0gICAgKi8KKy0gICAgQ2hhclR5cGUgdWJqc29uX3ByZWZpeChjb25zdCBC YXNpY0pzb25UeXBlJiBqKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAgICBzd2l0Y2gg KGoudHlwZSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoK Ky0gICAgICAgICAgICAgICAgcmV0dXJuICdaJzsKKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6OmJvb2xlYW46CistICAgICAgICAgICAgICAgIHJldHVybiBqLm1fdmFsdWUuYm9vbGVhbiA/ ICdUJyA6ICdGJzsKKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2Vy OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGlt aXRzPHN0ZDo6aW50OF90Pjo6bWluKSgpIDw9IGoubV92YWx1ZS5udW1iZXJfaW50ZWdlciAmJiBq Lm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQ4 X3Q+OjptYXgpKCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJl dHVybiAnaSc7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgaWYgKChzdGQ6 Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDhfdD46Om1pbikoKSA8PSBqLm1fdmFsdWUubnVtYmVy X2ludGVnZXIgJiYgai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDw9IChzdGQ6Om51bWVyaWNfbGlt aXRzPHN0ZDo6dWludDhfdD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgcmV0dXJuICdVJzsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg ICAgICBpZiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQxNl90Pjo6bWluKSgpIDw9IGou bV92YWx1ZS5udW1iZXJfaW50ZWdlciAmJiBqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0gKHN0 ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQxNl90Pjo6bWF4KSgpKQorLSAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0knOworLSAgICAgICAgICAgICAgICB9 CistICAgICAgICAgICAgICAgIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OmludDMyX3Q+ OjptaW4pKCkgPD0gai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyICYmIGoubV92YWx1ZS5udW1iZXJf aW50ZWdlciA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OmludDMyX3Q+OjptYXgpKCkpCist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbCc7CistICAg ICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGltaXRz PHN0ZDo6aW50NjRfdD46Om1pbikoKSA8PSBqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgJiYgai5t X3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6aW50NjRf dD46Om1heCkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuICdMJzsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAvLyBhbnl0aGlu ZyBlbHNlIGlzIHRyZWF0ZWQgYXMgaGlnaC1wcmVjaXNpb24gbnVtYmVyCistICAgICAgICAgICAg ICAgIHJldHVybiAnSCc7IC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgaWYgKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPD0gc3RhdGlj X2Nhc3Q8c3RkOjp1aW50NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQ4X3Q+Ojpt YXgpKCkpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICByZXR1cm4g J2knOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGlmIChqLm1fdmFsdWUu bnVtYmVyX3Vuc2lnbmVkIDw9IHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KChzdGQ6Om51bWVy aWNfbGltaXRzPHN0ZDo6dWludDhfdD46Om1heCkoKSkpCistICAgICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgICAgIHJldHVybiAnVSc7CistICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICAgICAgaWYgKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPD0gc3RhdGljX2Nhc3Q8 c3RkOjp1aW50NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjppbnQxNl90Pjo6bWF4KSgp KSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdJJzsK Ky0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJl cl91bnNpZ25lZCA8PSBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90Pigoc3RkOjpudW1lcmljX2xp bWl0czxzdGQ6OmludDMyX3Q+OjptYXgpKCkpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICByZXR1cm4gJ2wnOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAg ICAgICAgIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IHN0YXRpY19jYXN0PHN0ZDo6 dWludDY0X3Q+KChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6aW50NjRfdD46Om1heCkoKSkpCist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnTCc7CistICAg ICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgLy8gYW55dGhpbmcgZWxzZSBpcyB0cmVh dGVkIGFzIGhpZ2gtcHJlY2lzaW9uIG51bWJlcgorLSAgICAgICAgICAgICAgICByZXR1cm4gJ0gn OyAvLyBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGdldF91Ympz b25fZmxvYXRfcHJlZml4KGoubV92YWx1ZS5udW1iZXJfZmxvYXQpOworLQorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgICAgICByZXR1cm4gJ1MnOworLQor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6IC8vIGZhbGx0aHJvdWdoCistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAgICAgICAgICAgIHJldHVybiAnWyc7 CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CistICAgICAgICAgICAgICAg IHJldHVybiAneyc7CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpkaXNjYXJkZWQ6Cist ICAgICAgICAgICAgZGVmYXVsdDogIC8vIGRpc2NhcmRlZCB2YWx1ZXMKKy0gICAgICAgICAgICAg ICAgcmV0dXJuICdOJzsKKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICBzdGF0aWMgY29uc3Rl eHByIENoYXJUeXBlIGdldF91Ympzb25fZmxvYXRfcHJlZml4KGZsb2F0IC8qdW51c2VkKi8pCist ICAgIHsKKy0gICAgICAgIHJldHVybiAnZCc7ICAvLyBmbG9hdCAzMgorLSAgICB9CistCistICAg IHN0YXRpYyBjb25zdGV4cHIgQ2hhclR5cGUgZ2V0X3VianNvbl9mbG9hdF9wcmVmaXgoZG91Ymxl IC8qdW51c2VkKi8pCistICAgIHsKKy0gICAgICAgIHJldHVybiAnRCc7ICAvLyBmbG9hdCA2NAor LSAgICB9CistCistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8vIFV0aWxpdHkg ZnVuY3Rpb25zIC8vCistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8qCist ICAgIEBicmllZiB3cml0ZSBhIG51bWJlciB0byBvdXRwdXQgaW5wdXQKKy0gICAgQHBhcmFtW2lu XSBuIG51bWJlciBvZiB0eXBlIEBhIE51bWJlclR5cGUKKy0gICAgQHRwYXJhbSBOdW1iZXJUeXBl IHRoZSB0eXBlIG9mIHRoZSBudW1iZXIKKy0gICAgQHRwYXJhbSBPdXRwdXRJc0xpdHRsZUVuZGlh biBTZXQgdG8gdHJ1ZSBpZiBvdXRwdXQgZGF0YSBpcworLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlcXVpcmVkIHRvIGJlIGxpdHRsZSBlbmRpYW4KKy0KKy0gICAgQG5vdGUgVGhp cyBmdW5jdGlvbiBuZWVkcyB0byByZXNwZWN0IHRoZSBzeXN0ZW0ncyBlbmRpYW5uZXNzLCBiZWNh dXNlIGJ5dGVzCistICAgICAgICAgIGluIENCT1IsIE1lc3NhZ2VQYWNrLCBhbmQgVUJKU09OIGFy ZSBzdG9yZWQgaW4gbmV0d29yayBvcmRlciAoYmlnCistICAgICAgICAgIGVuZGlhbikgYW5kIHRo ZXJlZm9yZSBuZWVkIHJlb3JkZXJpbmcgb24gbGl0dGxlIGVuZGlhbiBzeXN0ZW1zLgorLSAgICAq LworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBlLCBib29sIE91dHB1dElzTGl0dGxl RW5kaWFuID0gZmFsc2U+CistICAgIHZvaWQgd3JpdGVfbnVtYmVyKGNvbnN0IE51bWJlclR5cGUg bikKKy0gICAgeworLSAgICAgICAgLy8gc3RlcCAxOiB3cml0ZSBudW1iZXIgdG8gYXJyYXkgb2Yg bGVuZ3RoIE51bWJlclR5cGUKKy0gICAgICAgIHN0ZDo6YXJyYXk8Q2hhclR5cGUsIHNpemVvZihO dW1iZXJUeXBlKT4gdmVje307CistICAgICAgICBzdGQ6Om1lbWNweSh2ZWMuZGF0YSgpLCAmbiwg c2l6ZW9mKE51bWJlclR5cGUpKTsKKy0KKy0gICAgICAgIC8vIHN0ZXAgMjogd3JpdGUgYXJyYXkg dG8gb3V0cHV0ICh3aXRoIHBvc3NpYmxlIHJlb3JkZXJpbmcpCistICAgICAgICBpZiAoaXNfbGl0 dGxlX2VuZGlhbiAhPSBPdXRwdXRJc0xpdHRsZUVuZGlhbikKKy0gICAgICAgIHsKKy0gICAgICAg ICAgICAvLyByZXZlcnNlIGJ5dGUgb3JkZXIgcHJpb3IgdG8gY29udmVyc2lvbiBpZiBuZWNlc3Nh cnkKKy0gICAgICAgICAgICBzdGQ6OnJldmVyc2UodmVjLmJlZ2luKCksIHZlYy5lbmQoKSk7Cist ICAgICAgICB9CistCistICAgICAgICBvYS0+d3JpdGVfY2hhcmFjdGVycyh2ZWMuZGF0YSgpLCBz aXplb2YoTnVtYmVyVHlwZSkpOworLSAgICB9CistCistICAgIHZvaWQgd3JpdGVfY29tcGFjdF9m bG9hdChjb25zdCBudW1iZXJfZmxvYXRfdCBuLCBkZXRhaWw6OmlucHV0X2Zvcm1hdF90IGZvcm1h dCkKKy0gICAgeworLSNpZmRlZiBfX0dOVUNfXworLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz aAorLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmbG9hdC1lcXVhbCIKKy0jZW5k aWYKKy0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG4pID49IHN0YXRpY19jYXN0PGRv dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omxvd2VzdCgpKSAmJgorLSAgICAgICAg ICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG4pIDw9IHN0YXRpY19jYXN0PGRvdWJsZT4oKHN0 ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgpKCkpICYmCistICAgICAgICAgICAgICAgIHN0 YXRpY19jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG4pKSA9PSBzdGF0aWNfY2FzdDxk b3VibGU+KG4pKQorLSAgICAgICAgeworLSAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIo Zm9ybWF0ID09IGRldGFpbDo6aW5wdXRfZm9ybWF0X3Q6OmNib3IKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID8gZ2V0X2Nib3JfZmxvYXRfcHJlZml4KHN0YXRpY19jYXN0PGZsb2F0 PihuKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0X21zZ3BhY2tfZmxv YXRfcHJlZml4KHN0YXRpY19jYXN0PGZsb2F0PihuKSkpOworLSAgICAgICAgICAgIHdyaXRlX251 bWJlcihzdGF0aWNfY2FzdDxmbG9hdD4obikpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZQor LSAgICAgICAgeworLSAgICAgICAgICAgIG9hLT53cml0ZV9jaGFyYWN0ZXIoZm9ybWF0ID09IGRl dGFpbDo6aW5wdXRfZm9ybWF0X3Q6OmNib3IKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID8gZ2V0X2Nib3JfZmxvYXRfcHJlZml4KG4pCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IGdldF9tc2dwYWNrX2Zsb2F0X3ByZWZpeChuKSk7CistICAgICAgICAgICAgd3Jp dGVfbnVtYmVyKG4pOworLSAgICAgICAgfQorLSNpZmRlZiBfX0dOVUNfXworLSNwcmFnbWEgR0ND IGRpYWdub3N0aWMgcG9wCistI2VuZGlmCistICAgIH0KKy0KKy0gIHB1YmxpYzoKKy0gICAgLy8g VGhlIGZvbGxvd2luZyB0b19jaGFyX3R5cGUgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnQgdGhlIGNv bnZlcnNpb24KKy0gICAgLy8gYmV0d2VlbiB1aW50OF90IGFuZCBDaGFyVHlwZS4gSW4gY2FzZSBD aGFyVHlwZSBpcyBub3QgdW5zaWduZWQsCistICAgIC8vIHN1Y2ggYSBjb252ZXJzaW9uIGlzIHJl cXVpcmVkIHRvIGFsbG93IHZhbHVlcyBncmVhdGVyIHRoYW4gMTI4LgorLSAgICAvLyBTZWUgPGh0 dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL2lzc3Vlcy8xMjg2PiBmb3IgYSBkaXNjdXNz aW9uLgorLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIEMgPSBDaGFyVHlwZSwKKy0gICAgICAgICAg ICAgICBlbmFibGVfaWZfdCA8IHN0ZDo6aXNfc2lnbmVkPEM+Ojp2YWx1ZSAmJiBzdGQ6OmlzX3Np Z25lZDxjaGFyPjo6dmFsdWUgPiAqID0gbnVsbHB0ciA+CistICAgIHN0YXRpYyBjb25zdGV4cHIg Q2hhclR5cGUgdG9fY2hhcl90eXBlKHN0ZDo6dWludDhfdCB4KSBub2V4Y2VwdAorLSAgICB7Cist ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZ4KTsKKy0gICAgfQorLQor LSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIEMgPSBDaGFyVHlwZSwKKy0gICAgICAgICAgICAgICBl bmFibGVfaWZfdCA8IHN0ZDo6aXNfc2lnbmVkPEM+Ojp2YWx1ZSAmJiBzdGQ6OmlzX3Vuc2lnbmVk PGNoYXI+Ojp2YWx1ZSA+ICogPSBudWxscHRyID4KKy0gICAgc3RhdGljIENoYXJUeXBlIHRvX2No YXJfdHlwZShzdGQ6OnVpbnQ4X3QgeCkgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgc3RhdGlj X2Fzc2VydChzaXplb2Yoc3RkOjp1aW50OF90KSA9PSBzaXplb2YoQ2hhclR5cGUpLCAic2l6ZSBv ZiBDaGFyVHlwZSBtdXN0IGJlIGVxdWFsIHRvIHN0ZDo6dWludDhfdCIpOworLSAgICAgICAgc3Rh dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWw8Q2hhclR5cGU+Ojp2YWx1ZSwgIkNoYXJUeXBlIG11 c3QgYmUgdHJpdmlhbCIpOworLSAgICAgICAgQ2hhclR5cGUgcmVzdWx0OworLSAgICAgICAgc3Rk OjptZW1jcHkoJnJlc3VsdCwgJngsIHNpemVvZih4KSk7CistICAgICAgICByZXR1cm4gcmVzdWx0 OworLSAgICB9CistCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEMgPSBDaGFyVHlwZSwKKy0gICAg ICAgICAgICAgZW5hYmxlX2lmX3Q8c3RkOjppc191bnNpZ25lZDxDPjo6dmFsdWU+KiA9IG51bGxw dHI+CistICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhclR5cGUgdG9fY2hhcl90eXBlKHN0ZDo6dWlu dDhfdCB4KSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4geDsKKy0gICAgfQorLQor LSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIElucHV0Q2hhclR5cGUsIHR5cGVuYW1lIEMgPSBDaGFy VHlwZSwKKy0gICAgICAgICAgICAgICBlbmFibGVfaWZfdCA8CistICAgICAgICAgICAgICAgICAg IHN0ZDo6aXNfc2lnbmVkPEM+Ojp2YWx1ZSAmJgorLSAgICAgICAgICAgICAgICAgICBzdGQ6Omlz X3NpZ25lZDxjaGFyPjo6dmFsdWUgJiYKKy0gICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1l PGNoYXIsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2PElucHV0Q2hhclR5cGU+Ojp0eXBlPjo6dmFs dWUKKy0gICAgICAgICAgICAgICAgICAgPiAqID0gbnVsbHB0ciA+CistICAgIHN0YXRpYyBjb25z dGV4cHIgQ2hhclR5cGUgdG9fY2hhcl90eXBlKElucHV0Q2hhclR5cGUgeCkgbm9leGNlcHQKKy0g ICAgeworLSAgICAgICAgcmV0dXJuIHg7CistICAgIH0KKy0KKy0gIHByaXZhdGU6CistICAgIC8v LyB3aGV0aGVyIHdlIGNhbiBhc3N1bWUgbGl0dGxlIGVuZGlhbm5lc3MKKy0gICAgY29uc3QgYm9v bCBpc19saXR0bGVfZW5kaWFuID0gbGl0dGxlX2VuZGlhbm5lc3MoKTsKKy0KKy0gICAgLy8vIHRo ZSBvdXRwdXQKKy0gICAgb3V0cHV0X2FkYXB0ZXJfdDxDaGFyVHlwZT4gb2EgPSBudWxscHRyOwor LX07CistfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorLX0gIC8vIG5hbWVzcGFjZSBubG9obWFubgor LQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwvb3V0cHV0L291dHB1dF9hZGFwdGVycy5o cHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9vdXRwdXQvc2VyaWFsaXplci5o cHA+CistCistCistI2luY2x1ZGUgPGFsZ29yaXRobT4gLy8gcmV2ZXJzZSwgcmVtb3ZlLCBmaWxs LCBmaW5kLCBub25lX29mCistI2luY2x1ZGUgPGFycmF5PiAvLyBhcnJheQorLSNpbmNsdWRlIDxj bG9jYWxlPiAvLyBsb2NhbGVjb252LCBsY29udgorLSNpbmNsdWRlIDxjbWF0aD4gLy8gbGFicywg aXNmaW5pdGUsIGlzbmFuLCBzaWduYml0CistI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVfdCwg cHRyZGlmZl90CistI2luY2x1ZGUgPGNzdGRpbnQ+IC8vIHVpbnQ4X3QKKy0jaW5jbHVkZSA8Y3N0 ZGlvPiAvLyBzbnByaW50ZgorLSNpbmNsdWRlIDxsaW1pdHM+IC8vIG51bWVyaWNfbGltaXRzCist I2luY2x1ZGUgPHN0cmluZz4gLy8gc3RyaW5nLCBjaGFyX3RyYWl0cworLSNpbmNsdWRlIDxpb21h bmlwPiAvLyBzZXRmaWxsLCBzZXR3CistI2luY2x1ZGUgPHNzdHJlYW0+IC8vIHN0cmluZ3N0cmVh bQorLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4gLy8gaXNfc2FtZQorLSNpbmNsdWRlIDx1dGlsaXR5 PiAvLyBtb3ZlCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9jb252ZXJzaW9ucy90 b19jaGFycy5ocHA+CistCistCistI2luY2x1ZGUgPGFycmF5PiAvLyBhcnJheQorLSNpbmNsdWRl IDxjbWF0aD4gICAvLyBzaWduYml0LCBpc2Zpbml0ZQorLSNpbmNsdWRlIDxjc3RkaW50PiAvLyBp bnROX3QsIHVpbnROX3QKKy0jaW5jbHVkZSA8Y3N0cmluZz4gLy8gbWVtY3B5LCBtZW1tb3ZlCist I2luY2x1ZGUgPGxpbWl0cz4gLy8gbnVtZXJpY19saW1pdHMKKy0jaW5jbHVkZSA8dHlwZV90cmFp dHM+IC8vIGNvbmRpdGlvbmFsCistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2RldGFpbC9tYWNy b19zY29wZS5ocHA+CistCistCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLW5hbWVzcGFjZSBk ZXRhaWwKKy17CistCistLyohCistQGJyaWVmIGltcGxlbWVudHMgdGhlIEdyaXN1MiBhbGdvcml0 aG0gZm9yIGJpbmFyeSB0byBkZWNpbWFsIGZsb2F0aW5nLXBvaW50CistY29udmVyc2lvbi4KKy0K Ky1UaGlzIGltcGxlbWVudGF0aW9uIGlzIGEgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiB0 aGUgcmVmZXJlbmNlCistaW1wbGVtZW50YXRpb24gd2hpY2ggbWF5IGJlIG9idGFpbmVkIGZyb20K Ky1odHRwOi8vZmxvcmlhbi5sb2l0c2NoLmNvbS9wdWJsaWNhdGlvbnMgKGJlbmNoLnRhci5neiku CistCistVGhlIGNvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBDb3B5 cmlnaHQgKGMpIDIwMDkgRmxvcmlhbiBMb2l0c2NoLgorLQorLUZvciBhIGRldGFpbGVkIGRlc2Ny aXB0aW9uIG9mIHRoZSBhbGdvcml0aG0gc2VlOgorLQorLVsxXSBMb2l0c2NoLCAiUHJpbnRpbmcg RmxvYXRpbmctUG9pbnQgTnVtYmVycyBRdWlja2x5IGFuZCBBY2N1cmF0ZWx5IHdpdGgKKy0gICAg SW50ZWdlcnMiLCBQcm9jZWVkaW5ncyBvZiB0aGUgQUNNIFNJR1BMQU4gMjAxMCBDb25mZXJlbmNl IG9uIFByb2dyYW1taW5nCistICAgIExhbmd1YWdlIERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24s IFBMREkgMjAxMAorLVsyXSBCdXJnZXIsIER5YnZpZywgIlByaW50aW5nIEZsb2F0aW5nLVBvaW50 IE51bWJlcnMgUXVpY2tseSBhbmQgQWNjdXJhdGVseSIsCistICAgIFByb2NlZWRpbmdzIG9mIHRo ZSBBQ00gU0lHUExBTiAxOTk2IENvbmZlcmVuY2Ugb24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UKKy0g ICAgRGVzaWduIGFuZCBJbXBsZW1lbnRhdGlvbiwgUExESSAxOTk2CistKi8KKy1uYW1lc3BhY2Ug ZHRvYV9pbXBsCisteworLQorLXRlbXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291 cmNlPgorLVRhcmdldCByZWludGVycHJldF9iaXRzKGNvbnN0IFNvdXJjZSBzb3VyY2UpCistewor LSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUYXJnZXQpID09IHNpemVvZihTb3VyY2UpLCAic2l6 ZSBtaXNtYXRjaCIpOworLQorLSAgICBUYXJnZXQgdGFyZ2V0OworLSAgICBzdGQ6Om1lbWNweSgm dGFyZ2V0LCAmc291cmNlLCBzaXplb2YoU291cmNlKSk7CistICAgIHJldHVybiB0YXJnZXQ7Cist fQorLQorLXN0cnVjdCBkaXlmcCAvLyBmICogMl5lCisteworLSAgICBzdGF0aWMgY29uc3RleHBy IGludCBrUHJlY2lzaW9uID0gNjQ7IC8vID0gcQorLQorLSAgICBzdGQ6OnVpbnQ2NF90IGYgPSAw OworLSAgICBpbnQgZSA9IDA7CistCistICAgIGNvbnN0ZXhwciBkaXlmcChzdGQ6OnVpbnQ2NF90 IGZfLCBpbnQgZV8pIG5vZXhjZXB0IDogZihmXyksIGUoZV8pIHt9CistCistICAgIC8qIQorLSAg ICBAYnJpZWYgcmV0dXJucyB4IC0geQorLSAgICBAcHJlIHguZSA9PSB5LmUgYW5kIHguZiA+PSB5 LmYKKy0gICAgKi8KKy0gICAgc3RhdGljIGRpeWZwIHN1Yihjb25zdCBkaXlmcCYgeCwgY29uc3Qg ZGl5ZnAmIHkpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIEpTT05fQVNTRVJUKHguZSA9PSB5 LmUpOworLSAgICAgICAgSlNPTl9BU1NFUlQoeC5mID49IHkuZik7CistCistICAgICAgICByZXR1 cm4ge3guZiAtIHkuZiwgeC5lfTsKKy0gICAgfQorLQorLSAgICAvKiEKKy0gICAgQGJyaWVmIHJl dHVybnMgeCAqIHkKKy0gICAgQG5vdGUgVGhlIHJlc3VsdCBpcyByb3VuZGVkLiAoT25seSB0aGUg dXBwZXIgcSBiaXRzIGFyZSByZXR1cm5lZC4pCistICAgICovCistICAgIHN0YXRpYyBkaXlmcCBt dWwoY29uc3QgZGl5ZnAmIHgsIGNvbnN0IGRpeWZwJiB5KSBub2V4Y2VwdAorLSAgICB7CistICAg ICAgICBzdGF0aWNfYXNzZXJ0KGtQcmVjaXNpb24gPT0gNjQsICJpbnRlcm5hbCBlcnJvciIpOwor LQorLSAgICAgICAgLy8gQ29tcHV0ZXM6CistICAgICAgICAvLyAgZiA9IHJvdW5kKCh4LmYgKiB5 LmYpIC8gMl5xKQorLSAgICAgICAgLy8gIGUgPSB4LmUgKyB5LmUgKyBxCistCistICAgICAgICAv LyBFbXVsYXRlIHRoZSA2NC1iaXQgKiA2NC1iaXQgbXVsdGlwbGljYXRpb246CistICAgICAgICAv LworLSAgICAgICAgLy8gcCA9IHUgKiB2CistICAgICAgICAvLyAgID0gKHVfbG8gKyAyXjMyIHVf aGkpICh2X2xvICsgMl4zMiB2X2hpKQorLSAgICAgICAgLy8gICA9ICh1X2xvIHZfbG8gICAgICAg ICApICsgMl4zMiAoKHVfbG8gdl9oaSAgICAgICAgICkgKyAodV9oaSB2X2xvICAgICAgICAgKSkg KyAyXjY0ICh1X2hpIHZfaGkgICAgICAgICApCistICAgICAgICAvLyAgID0gKHAwICAgICAgICAg ICAgICAgICkgKyAyXjMyICgocDEgICAgICAgICAgICAgICAgKSArIChwMiAgICAgICAgICAgICAg ICApKSArIDJeNjQgKHAzICAgICAgICAgICAgICAgICkKKy0gICAgICAgIC8vICAgPSAocDBfbG8g KyAyXjMyIHAwX2hpKSArIDJeMzIgKChwMV9sbyArIDJeMzIgcDFfaGkpICsgKHAyX2xvICsgMl4z MiBwMl9oaSkpICsgMl42NCAocDMgICAgICAgICAgICAgICAgKQorLSAgICAgICAgLy8gICA9IChw MF9sbyAgICAgICAgICAgICApICsgMl4zMiAocDBfaGkgKyBwMV9sbyArIHAyX2xvICAgICAgICAg ICAgICAgICAgICAgICkgKyAyXjY0IChwMV9oaSArIHAyX2hpICsgcDMpCistICAgICAgICAvLyAg ID0gKHAwX2xvICAgICAgICAgICAgICkgKyAyXjMyIChRICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKSArIDJeNjQgKEggICAgICAgICAgICAgICAgICkKKy0gICAgICAg IC8vICAgPSAocDBfbG8gICAgICAgICAgICAgKSArIDJeMzIgKFFfbG8gKyAyXjMyIFFfaGkgICAg ICAgICAgICAgICAgICAgICAgICAgICApICsgMl42NCAoSCAgICAgICAgICAgICAgICAgKQorLSAg ICAgICAgLy8KKy0gICAgICAgIC8vIChTaW5jZSBRIG1pZ2h0IGJlIGxhcmdlciB0aGFuIDJeMzIg LSAxKQorLSAgICAgICAgLy8KKy0gICAgICAgIC8vICAgPSAocDBfbG8gKyAyXjMyIFFfbG8pICsg Ml42NCAoUV9oaSArIEgpCistICAgICAgICAvLworLSAgICAgICAgLy8gKFFfaGkgKyBIIGRvZXMg bm90IG92ZXJmbG93IGEgNjQtYml0IGludCkKKy0gICAgICAgIC8vCistICAgICAgICAvLyAgID0g cF9sbyArIDJeNjQgcF9oaQorLQorLSAgICAgICAgY29uc3Qgc3RkOjp1aW50NjRfdCB1X2xvID0g eC5mICYgMHhGRkZGRkZGRnU7CistICAgICAgICBjb25zdCBzdGQ6OnVpbnQ2NF90IHVfaGkgPSB4 LmYgPj4gMzJ1OworLSAgICAgICAgY29uc3Qgc3RkOjp1aW50NjRfdCB2X2xvID0geS5mICYgMHhG RkZGRkZGRnU7CistICAgICAgICBjb25zdCBzdGQ6OnVpbnQ2NF90IHZfaGkgPSB5LmYgPj4gMzJ1 OworLQorLSAgICAgICAgY29uc3Qgc3RkOjp1aW50NjRfdCBwMCA9IHVfbG8gKiB2X2xvOworLSAg ICAgICAgY29uc3Qgc3RkOjp1aW50NjRfdCBwMSA9IHVfbG8gKiB2X2hpOworLSAgICAgICAgY29u c3Qgc3RkOjp1aW50NjRfdCBwMiA9IHVfaGkgKiB2X2xvOworLSAgICAgICAgY29uc3Qgc3RkOjp1 aW50NjRfdCBwMyA9IHVfaGkgKiB2X2hpOworLQorLSAgICAgICAgY29uc3Qgc3RkOjp1aW50NjRf dCBwMF9oaSA9IHAwID4+IDMydTsKKy0gICAgICAgIGNvbnN0IHN0ZDo6dWludDY0X3QgcDFfbG8g PSBwMSAmIDB4RkZGRkZGRkZ1OworLSAgICAgICAgY29uc3Qgc3RkOjp1aW50NjRfdCBwMV9oaSA9 IHAxID4+IDMydTsKKy0gICAgICAgIGNvbnN0IHN0ZDo6dWludDY0X3QgcDJfbG8gPSBwMiAmIDB4 RkZGRkZGRkZ1OworLSAgICAgICAgY29uc3Qgc3RkOjp1aW50NjRfdCBwMl9oaSA9IHAyID4+IDMy dTsKKy0KKy0gICAgICAgIHN0ZDo6dWludDY0X3QgUSA9IHAwX2hpICsgcDFfbG8gKyBwMl9sbzsK Ky0KKy0gICAgICAgIC8vIFRoZSBmdWxsIHByb2R1Y3QgbWlnaHQgbm93IGJlIGNvbXB1dGVkIGFz CistICAgICAgICAvLworLSAgICAgICAgLy8gcF9oaSA9IHAzICsgcDJfaGkgKyBwMV9oaSArIChR ID4+IDMyKQorLSAgICAgICAgLy8gcF9sbyA9IHAwX2xvICsgKFEgPDwgMzIpCistICAgICAgICAv LworLSAgICAgICAgLy8gQnV0IGluIHRoaXMgcGFydGljdWxhciBjYXNlIGhlcmUsIHRoZSBmdWxs IHBfbG8gaXMgbm90IHJlcXVpcmVkLgorLSAgICAgICAgLy8gRWZmZWN0aXZlbHkgd2Ugb25seSBu ZWVkIHRvIGFkZCB0aGUgaGlnaGVzdCBiaXQgaW4gcF9sbyB0byBwX2hpIChhbmQKKy0gICAgICAg IC8vIFFfaGkgKyAxIGRvZXMgbm90IG92ZXJmbG93KS4KKy0KKy0gICAgICAgIFEgKz0gc3RkOjp1 aW50NjRfdHsxfSA8PCAoNjR1IC0gMzJ1IC0gMXUpOyAvLyByb3VuZCwgdGllcyB1cAorLQorLSAg ICAgICAgY29uc3Qgc3RkOjp1aW50NjRfdCBoID0gcDMgKyBwMl9oaSArIHAxX2hpICsgKFEgPj4g MzJ1KTsKKy0KKy0gICAgICAgIHJldHVybiB7aCwgeC5lICsgeS5lICsgNjR9OworLSAgICB9Cist CistICAgIC8qIQorLSAgICBAYnJpZWYgbm9ybWFsaXplIHggc3VjaCB0aGF0IHRoZSBzaWduaWZp Y2FuZCBpcyA+PSAyXihxLTEpCistICAgIEBwcmUgeC5mICE9IDAKKy0gICAgKi8KKy0gICAgc3Rh dGljIGRpeWZwIG5vcm1hbGl6ZShkaXlmcCB4KSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICBK U09OX0FTU0VSVCh4LmYgIT0gMCk7CistCistICAgICAgICB3aGlsZSAoKHguZiA+PiA2M3UpID09 IDApCistICAgICAgICB7CistICAgICAgICAgICAgeC5mIDw8PSAxdTsKKy0gICAgICAgICAgICB4 LmUtLTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiB4OworLSAgICB9CistCistICAg IC8qIQorLSAgICBAYnJpZWYgbm9ybWFsaXplIHggc3VjaCB0aGF0IHRoZSByZXN1bHQgaGFzIHRo ZSBleHBvbmVudCBFCistICAgIEBwcmUgZSA+PSB4LmUgYW5kIHRoZSB1cHBlciBlIC0geC5lIGJp dHMgb2YgeC5mIG11c3QgYmUgemVyby4KKy0gICAgKi8KKy0gICAgc3RhdGljIGRpeWZwIG5vcm1h bGl6ZV90byhjb25zdCBkaXlmcCYgeCwgY29uc3QgaW50IHRhcmdldF9leHBvbmVudCkgbm9leGNl cHQKKy0gICAgeworLSAgICAgICAgY29uc3QgaW50IGRlbHRhID0geC5lIC0gdGFyZ2V0X2V4cG9u ZW50OworLQorLSAgICAgICAgSlNPTl9BU1NFUlQoZGVsdGEgPj0gMCk7CistICAgICAgICBKU09O X0FTU0VSVCgoKHguZiA8PCBkZWx0YSkgPj4gZGVsdGEpID09IHguZik7CistCistICAgICAgICBy ZXR1cm4ge3guZiA8PCBkZWx0YSwgdGFyZ2V0X2V4cG9uZW50fTsKKy0gICAgfQorLX07CistCist c3RydWN0IGJvdW5kYXJpZXMKKy17CistICAgIGRpeWZwIHc7CistICAgIGRpeWZwIG1pbnVzOwor LSAgICBkaXlmcCBwbHVzOworLX07CistCistLyohCistQ29tcHV0ZSB0aGUgKG5vcm1hbGl6ZWQp IGRpeWZwIHJlcHJlc2VudGluZyB0aGUgaW5wdXQgbnVtYmVyICd2YWx1ZScgYW5kIGl0cworLWJv dW5kYXJpZXMuCistCistQHByZSB2YWx1ZSBtdXN0IGJlIGZpbml0ZSBhbmQgcG9zaXRpdmUKKy0q LworLXRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KKy1ib3VuZGFyaWVzIGNvbXB1dGVfYm91 bmRhcmllcyhGbG9hdFR5cGUgdmFsdWUpCisteworLSAgICBKU09OX0FTU0VSVChzdGQ6OmlzZmlu aXRlKHZhbHVlKSk7CistICAgIEpTT05fQVNTRVJUKHZhbHVlID4gMCk7CistCistICAgIC8vIENv bnZlcnQgdGhlIElFRUUgcmVwcmVzZW50YXRpb24gaW50byBhIGRpeWZwLgorLSAgICAvLworLSAg ICAvLyBJZiB2IGlzIGRlbm9ybWFsOgorLSAgICAvLyAgICAgIHZhbHVlID0gMC5GICogMl4oMSAt IGJpYXMpID0gKCAgICAgICAgICBGKSAqIDJeKDEgLSBiaWFzIC0gKHAtMSkpCistICAgIC8vIElm IHYgaXMgbm9ybWFsaXplZDoKKy0gICAgLy8gICAgICB2YWx1ZSA9IDEuRiAqIDJeKEUgLSBiaWFz KSA9ICgyXihwLTEpICsgRikgKiAyXihFIC0gYmlhcyAtIChwLTEpKQorLQorLSAgICBzdGF0aWNf YXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6aXNfaWVjNTU5LAorLSAgICAg ICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogZHRvYV9zaG9ydCByZXF1aXJlcyBhbiBJRUVF LTc1NCBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiIpOworLQorLSAgICBjb25zdGV4cHIg aW50ICAgICAga1ByZWNpc2lvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6ZGln aXRzOyAvLyA9IHAgKGluY2x1ZGVzIHRoZSBoaWRkZW4gYml0KQorLSAgICBjb25zdGV4cHIgaW50 ICAgICAga0JpYXMgICAgICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6bWF4X2V4 cG9uZW50IC0gMSArIChrUHJlY2lzaW9uIC0gMSk7CistICAgIGNvbnN0ZXhwciBpbnQgICAgICBr TWluRXhwICAgID0gMSAtIGtCaWFzOworLSAgICBjb25zdGV4cHIgc3RkOjp1aW50NjRfdCBrSGlk ZGVuQml0ID0gc3RkOjp1aW50NjRfdHsxfSA8PCAoa1ByZWNpc2lvbiAtIDEpOyAvLyA9IDJeKHAt MSkKKy0KKy0gICAgdXNpbmcgYml0c190eXBlID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxr UHJlY2lzaW9uID09IDI0LCBzdGQ6OnVpbnQzMl90LCBzdGQ6OnVpbnQ2NF90ID46OnR5cGU7Cist CistICAgIGNvbnN0IGF1dG8gYml0cyA9IHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KHJlaW50 ZXJwcmV0X2JpdHM8Yml0c190eXBlPih2YWx1ZSkpOworLSAgICBjb25zdCBzdGQ6OnVpbnQ2NF90 IEUgPSBiaXRzID4+IChrUHJlY2lzaW9uIC0gMSk7CistICAgIGNvbnN0IHN0ZDo6dWludDY0X3Qg RiA9IGJpdHMgJiAoa0hpZGRlbkJpdCAtIDEpOworLQorLSAgICBjb25zdCBib29sIGlzX2Rlbm9y bWFsID0gRSA9PSAwOworLSAgICBjb25zdCBkaXlmcCB2ID0gaXNfZGVub3JtYWwKKy0gICAgICAg ICAgICAgICAgICAgID8gZGl5ZnAoRiwga01pbkV4cCkKKy0gICAgICAgICAgICAgICAgICAgIDog ZGl5ZnAoRiArIGtIaWRkZW5CaXQsIHN0YXRpY19jYXN0PGludD4oRSkgLSBrQmlhcyk7CistCist ICAgIC8vIENvbXB1dGUgdGhlIGJvdW5kYXJpZXMgbS0gYW5kIG0rIG9mIHRoZSBmbG9hdGluZy1w b2ludCB2YWx1ZQorLSAgICAvLyB2ID0gZiAqIDJeZS4KKy0gICAgLy8KKy0gICAgLy8gRGV0ZXJt aW5lIHYtIGFuZCB2KywgdGhlIGZsb2F0aW5nLXBvaW50IHByZWRlY2Vzc29yIGFuZCBzdWNjZXNz b3IgaWYgdiwKKy0gICAgLy8gcmVzcGVjdGl2ZWx5LgorLSAgICAvLworLSAgICAvLyAgICAgIHYt ID0gdiAtIDJeZSAgICAgICAgaWYgZiAhPSAyXihwLTEpIG9yIGUgPT0gZV9taW4gICAgICAgICAg ICAgICAgKEEpCistICAgIC8vICAgICAgICAgPSB2IC0gMl4oZS0xKSAgICBpZiBmID09IDJeKHAt MSkgYW5kIGUgPiBlX21pbiAgICAgICAgICAgICAgICAoQikKKy0gICAgLy8KKy0gICAgLy8gICAg ICB2KyA9IHYgKyAyXmUKKy0gICAgLy8KKy0gICAgLy8gTGV0IG0tID0gKHYtICsgdikgLyAyIGFu ZCBtKyA9ICh2ICsgdispIC8gMi4gQWxsIHJlYWwgbnVtYmVycyBfc3RyaWN0bHlfCistICAgIC8v IGJldHdlZW4gbS0gYW5kIG0rIHJvdW5kIHRvIHYsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBpbnB1 dCByb3VuZGluZworLSAgICAvLyBhbGdvcml0aG0gYnJlYWtzIHRpZXMuCistICAgIC8vCistICAg IC8vICAgICAgLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tICAoQSkKKy0gICAgLy8gICAgICAgICB2LSAgICAgICAgICAgIG0tICAg ICAgICAgICAgdiAgICAgICAgICAgICBtKyAgICAgICAgICAgIHYrCistICAgIC8vCistICAgIC8v ICAgICAgLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tICAoQikKKy0gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHYtICAgICBt LSAgICAgdiAgICAgICAgICAgICBtKyAgICAgICAgICAgIHYrCistCistICAgIGNvbnN0IGJvb2wg bG93ZXJfYm91bmRhcnlfaXNfY2xvc2VyID0gRiA9PSAwICYmIEUgPiAxOworLSAgICBjb25zdCBk aXlmcCBtX3BsdXMgPSBkaXlmcCgyICogdi5mICsgMSwgdi5lIC0gMSk7CistICAgIGNvbnN0IGRp eWZwIG1fbWludXMgPSBsb3dlcl9ib3VuZGFyeV9pc19jbG9zZXIKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgID8gZGl5ZnAoNCAqIHYuZiAtIDEsIHYuZSAtIDIpICAvLyAoQikKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgIDogZGl5ZnAoMiAqIHYuZiAtIDEsIHYuZSAtIDEpOyAvLyAoQSkK Ky0KKy0gICAgLy8gRGV0ZXJtaW5lIHRoZSBub3JtYWxpemVkIHcrID0gbSsuCistICAgIGNvbnN0 IGRpeWZwIHdfcGx1cyA9IGRpeWZwOjpub3JtYWxpemUobV9wbHVzKTsKKy0KKy0gICAgLy8gRGV0 ZXJtaW5lIHctID0gbS0gc3VjaCB0aGF0IGVfKHctKSA9IGVfKHcrKS4KKy0gICAgY29uc3QgZGl5 ZnAgd19taW51cyA9IGRpeWZwOjpub3JtYWxpemVfdG8obV9taW51cywgd19wbHVzLmUpOworLQor LSAgICByZXR1cm4ge2RpeWZwOjpub3JtYWxpemUodiksIHdfbWludXMsIHdfcGx1c307CistfQor LQorLS8vIEdpdmVuIG5vcm1hbGl6ZWQgZGl5ZnAgdywgR3Jpc3UgbmVlZHMgdG8gZmluZCBhIChu b3JtYWxpemVkKSBjYWNoZWQKKy0vLyBwb3dlci1vZi10ZW4gYywgc3VjaCB0aGF0IHRoZSBleHBv bmVudCBvZiB0aGUgcHJvZHVjdCBjICogdyA9IGYgKiAyXmUgbGllcworLS8vIHdpdGhpbiBhIGNl cnRhaW4gcmFuZ2UgW2FscGhhLCBnYW1tYV0gKERlZmluaXRpb24gMy4yIGZyb20gWzFdKQorLS8v CistLy8gICAgICBhbHBoYSA8PSBlID0gZV9jICsgZV93ICsgcSA8PSBnYW1tYQorLS8vCistLy8g b3IKKy0vLworLS8vICAgICAgZl9jICogZl93ICogMl5hbHBoYSA8PSBmX2MgMl4oZV9jKSAqIGZf dyAyXihlX3cpICogMl5xCistLy8gICAgICAgICAgICAgICAgICAgICAgICAgIDw9IGZfYyAqIGZf dyAqIDJeZ2FtbWEKKy0vLworLS8vIFNpbmNlIGMgYW5kIHcgYXJlIG5vcm1hbGl6ZWQsIGkuZS4g Ml4ocS0xKSA8PSBmIDwgMl5xLCB0aGlzIGltcGxpZXMKKy0vLworLS8vICAgICAgMl4ocS0xKSAq IDJeKHEtMSkgKiAyXmFscGhhIDw9IGMgKiB3ICogMl5xIDwgMl5xICogMl5xICogMl5nYW1tYQor LS8vCistLy8gb3IKKy0vLworLS8vICAgICAgMl4ocSAtIDIgKyBhbHBoYSkgPD0gYyAqIHcgPCAy XihxICsgZ2FtbWEpCistLy8KKy0vLyBUaGUgY2hvaWNlIG9mIChhbHBoYSxnYW1tYSkgZGV0ZXJt aW5lcyB0aGUgc2l6ZSBvZiB0aGUgdGFibGUgYW5kIHRoZSBmb3JtIG9mCistLy8gdGhlIGRpZ2l0 IGdlbmVyYXRpb24gcHJvY2VkdXJlLiBVc2luZyAoYWxwaGEsZ2FtbWEpPSgtNjAsLTMyKSB3b3Jr cyBvdXQgd2VsbAorLS8vIGluIHByYWN0aWNlOgorLS8vCistLy8gVGhlIGlkZWEgaXMgdG8gY3V0 IHRoZSBudW1iZXIgYyAqIHcgPSBmICogMl5lIGludG8gdHdvIHBhcnRzLCB3aGljaCBjYW4gYmUK Ky0vLyBwcm9jZXNzZWQgaW5kZXBlbmRlbnRseTogQW4gaW50ZWdyYWwgcGFydCBwMSwgYW5kIGEg ZnJhY3Rpb25hbCBwYXJ0IHAyOgorLS8vCistLy8gICAgICBmICogMl5lID0gKCAoZiBkaXYgMl4t ZSkgKiAyXi1lICsgKGYgbW9kIDJeLWUpICkgKiAyXmUKKy0vLyAgICAgICAgICAgICAgPSAoZiBk aXYgMl4tZSkgKyAoZiBtb2QgMl4tZSkgKiAyXmUKKy0vLyAgICAgICAgICAgICAgPSBwMSArIHAy ICogMl5lCistLy8KKy0vLyBUaGUgY29udmVyc2lvbiBvZiBwMSBpbnRvIGRlY2ltYWwgZm9ybSBy ZXF1aXJlcyBhIHNlcmllcyBvZiBkaXZpc2lvbnMgYW5kCistLy8gbW9kdWxvcyBieSAoYSBwb3dl ciBvZikgMTAuIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGZhc3RlciBmb3IgMzItYml0IHRoYW4gZm9y CistLy8gNjQtYml0IGludGVnZXJzLCBzbyBwMSBzaG91bGQgaWRlYWxseSBmaXQgaW50byBhIDMy LWJpdCBpbnRlZ2VyLiBUaGlzIGNhbiBiZQorLS8vIGFjaGlldmVkIGJ5IGNob29zaW5nCistLy8K Ky0vLyAgICAgIC1lID49IDMyICAgb3IgICBlIDw9IC0zMiA6PSBnYW1tYQorLS8vCistLy8gSW4g b3JkZXIgdG8gY29udmVydCB0aGUgZnJhY3Rpb25hbCBwYXJ0CistLy8KKy0vLyAgICAgIHAyICog Ml5lID0gcDIgLyAyXi1lID0gZFstMV0gLyAxMF4xICsgZFstMl0gLyAxMF4yICsgLi4uCistLy8K Ky0vLyBpbnRvIGRlY2ltYWwgZm9ybSwgdGhlIGZyYWN0aW9uIGlzIHJlcGVhdGVkbHkgbXVsdGlw bGllZCBieSAxMCBhbmQgdGhlIGRpZ2l0cworLS8vIGRbLWldIGFyZSBleHRyYWN0ZWQgaW4gb3Jk ZXI6CistLy8KKy0vLyAgICAgICgxMCAqIHAyKSBkaXYgMl4tZSA9IGRbLTFdCistLy8gICAgICAo MTAgKiBwMikgbW9kIDJeLWUgPSBkWy0yXSAvIDEwXjEgKyAuLi4KKy0vLworLS8vIFRoZSBtdWx0 aXBsaWNhdGlvbiBieSAxMCBtdXN0IG5vdCBvdmVyZmxvdy4gSXQgaXMgc3VmZmljaWVudCB0byBj aG9vc2UKKy0vLworLS8vICAgICAgMTAgKiBwMiA8IDE2ICogcDIgPSAyXjQgKiBwMiA8PSAyXjY0 LgorLS8vCistLy8gU2luY2UgcDIgPSBmIG1vZCAyXi1lIDwgMl4tZSwKKy0vLworLS8vICAgICAg LWUgPD0gNjAgICBvciAgIGUgPj0gLTYwIDo9IGFscGhhCistCistY29uc3RleHByIGludCBrQWxw aGEgPSAtNjA7CistY29uc3RleHByIGludCBrR2FtbWEgPSAtMzI7CistCistc3RydWN0IGNhY2hl ZF9wb3dlciAvLyBjID0gZiAqIDJeZSB+PSAxMF5rCisteworLSAgICBzdGQ6OnVpbnQ2NF90IGY7 CistICAgIGludCBlOworLSAgICBpbnQgazsKKy19OworLQorLS8qIQorLUZvciBhIG5vcm1hbGl6 ZWQgZGl5ZnAgdyA9IGYgKiAyXmUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIChub3JtYWxpemVk KSBjYWNoZWQKKy1wb3dlci1vZi10ZW4gYyA9IGZfYyAqIDJeZV9jLCBzdWNoIHRoYXQgdGhlIGV4 cG9uZW50IG9mIHRoZSBwcm9kdWN0IHcgKiBjCistc2F0aXNmaWVzIChEZWZpbml0aW9uIDMuMiBm cm9tIFsxXSkKKy0KKy0gICAgIGFscGhhIDw9IGVfYyArIGUgKyBxIDw9IGdhbW1hLgorLSovCist aW5saW5lIGNhY2hlZF9wb3dlciBnZXRfY2FjaGVkX3Bvd2VyX2Zvcl9iaW5hcnlfZXhwb25lbnQo aW50IGUpCisteworLSAgICAvLyBOb3cKKy0gICAgLy8KKy0gICAgLy8gICAgICBhbHBoYSA8PSBl X2MgKyBlICsgcSA8PSBnYW1tYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgx KQorLSAgICAvLyAgICAgID09PiBmX2MgKiAyXmFscGhhIDw9IGMgKiAyXmUgKiAyXnEKKy0gICAg Ly8KKy0gICAgLy8gYW5kIHNpbmNlIHRoZSBjJ3MgYXJlIG5vcm1hbGl6ZWQsIDJeKHEtMSkgPD0g Zl9jLAorLSAgICAvLworLSAgICAvLyAgICAgID09PiAyXihxIC0gMSArIGFscGhhKSA8PSBjICog Ml4oZSArIHEpCistICAgIC8vICAgICAgPT0+IDJeKGFscGhhIC0gZSAtIDEpIDw9IGMKKy0gICAg Ly8KKy0gICAgLy8gSWYgYyB3ZXJlIGFuIGV4YWN0IHBvd2VyIG9mIHRlbiwgaS5lLiBjID0gMTBe aywgb25lIG1heSBkZXRlcm1pbmUgayBhcworLSAgICAvLworLSAgICAvLyAgICAgIGsgPSBjZWls KCBsb2dfMTAoIDJeKGFscGhhIC0gZSAtIDEpICkgKQorLSAgICAvLyAgICAgICAgPSBjZWlsKCAo YWxwaGEgLSBlIC0gMSkgKiBsb2dfMTAoMikgKQorLSAgICAvLworLSAgICAvLyBGcm9tIHRoZSBw YXBlcjoKKy0gICAgLy8gIkluIHRoZW9yeSB0aGUgcmVzdWx0IG9mIHRoZSBwcm9jZWR1cmUgY291 bGQgYmUgd3Jvbmcgc2luY2UgYyBpcyByb3VuZGVkLAorLSAgICAvLyAgYW5kIHRoZSBjb21wdXRh dGlvbiBpdHNlbGYgaXMgYXBwcm94aW1hdGVkIFsuLi5dLiBJbiBwcmFjdGljZSwgaG93ZXZlciwK Ky0gICAgLy8gIHRoaXMgc2ltcGxlIGZ1bmN0aW9uIGlzIHN1ZmZpY2llbnQuIgorLSAgICAvLwor LSAgICAvLyBGb3IgSUVFRSBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG51bWJlcnMg Y29udmVydGVkIGludG8KKy0gICAgLy8gbm9ybWFsaXplZCBkaXlmcCdzIHcgPSBmICogMl5lLCB3 aXRoIHEgPSA2NCwKKy0gICAgLy8KKy0gICAgLy8gICAgICBlID49IC0xMDIyICAgICAgKG1pbiBJ RUVFIGV4cG9uZW50KQorLSAgICAvLyAgICAgICAgICAgLTUyICAgICAgICAocCAtIDEpCistICAg IC8vICAgICAgICAgICAtNTIgICAgICAgIChwIC0gMSwgcG9zc2libHkgbm9ybWFsaXplIGRlbm9y bWFsIElFRUUgbnVtYmVycykKKy0gICAgLy8gICAgICAgICAgIC0xMSAgICAgICAgKG5vcm1hbGl6 ZSB0aGUgZGl5ZnApCistICAgIC8vICAgICAgICAgPSAtMTEzNworLSAgICAvLworLSAgICAvLyBh bmQKKy0gICAgLy8KKy0gICAgLy8gICAgICBlIDw9ICsxMDIzICAgICAgKG1heCBJRUVFIGV4cG9u ZW50KQorLSAgICAvLyAgICAgICAgICAgLTUyICAgICAgICAocCAtIDEpCistICAgIC8vICAgICAg ICAgICAtMTEgICAgICAgIChub3JtYWxpemUgdGhlIGRpeWZwKQorLSAgICAvLyAgICAgICAgID0g OTYwCistICAgIC8vCistICAgIC8vIFRoaXMgYmluYXJ5IGV4cG9uZW50IHJhbmdlIFstMTEzNyw5 NjBdIHJlc3VsdHMgaW4gYSBkZWNpbWFsIGV4cG9uZW50CistICAgIC8vIHJhbmdlIFstMzA3LDMy NF0uIE9uZSBkb2VzIG5vdCBuZWVkIHRvIHN0b3JlIGEgY2FjaGVkIHBvd2VyIGZvciBlYWNoCist ICAgIC8vIGsgaW4gdGhpcyByYW5nZS4gRm9yIGVhY2ggc3VjaCBrIGl0IHN1ZmZpY2VzIHRvIGZp bmQgYSBjYWNoZWQgcG93ZXIKKy0gICAgLy8gc3VjaCB0aGF0IHRoZSBleHBvbmVudCBvZiB0aGUg cHJvZHVjdCBsaWVzIGluIFthbHBoYSxnYW1tYV0uCistICAgIC8vIFRoaXMgaW1wbGllcyB0aGF0 IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBkZWNpbWFsIGV4cG9uZW50cyBvZiBhZGphY2VudAorLSAg ICAvLyB0YWJsZSBlbnRyaWVzIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCistICAgIC8v CistICAgIC8vICAgICAgZmxvb3IoIChnYW1tYSAtIGFscGhhKSAqIGxvZ18xMCgyKSApID0gOC4K Ky0gICAgLy8KKy0gICAgLy8gKEEgc21hbGxlciBkaXN0YW5jZSBnYW1tYS1hbHBoYSB3b3VsZCBy ZXF1aXJlIGEgbGFyZ2VyIHRhYmxlLikKKy0KKy0gICAgLy8gTkI6CistICAgIC8vIEFjdHVhbGx5 IHRoaXMgZnVuY3Rpb24gcmV0dXJucyBjLCBzdWNoIHRoYXQgLTYwIDw9IGVfYyArIGUgKyA2NCA8 PSAtMzQuCistCistICAgIGNvbnN0ZXhwciBpbnQga0NhY2hlZFBvd2Vyc01pbkRlY0V4cCA9IC0z MDA7CistICAgIGNvbnN0ZXhwciBpbnQga0NhY2hlZFBvd2Vyc0RlY1N0ZXAgPSA4OworLQorLSAg ICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Y2FjaGVkX3Bvd2VyLCA3OT4ga0NhY2hlZFBv d2VycyA9CistICAgIHsKKy0gICAgICAgIHsKKy0gICAgICAgICAgICB7IDB4QUI3MEZFMTdDNzlB QzZDQSwgLTEwNjAsIC0zMDAgfSwKKy0gICAgICAgICAgICB7IDB4RkY3N0IxRkNCRUJDREM0Riwg LTEwMzQsIC0yOTIgfSwKKy0gICAgICAgICAgICB7IDB4QkU1NjkxRUY0MTZCRDYwQywgLTEwMDcs IC0yODQgfSwKKy0gICAgICAgICAgICB7IDB4OEREMDFGQUQ5MDdGRkMzQywgIC05ODAsIC0yNzYg fSwKKy0gICAgICAgICAgICB7IDB4RDM1MTVDMjgzMTU1OUE4MywgIC05NTQsIC0yNjggfSwKKy0g ICAgICAgICAgICB7IDB4OUQ3MUFDOEZBREE2QzlCNSwgIC05MjcsIC0yNjAgfSwKKy0gICAgICAg ICAgICB7IDB4RUE5QzIyNzcyM0VFOEJDQiwgIC05MDEsIC0yNTIgfSwKKy0gICAgICAgICAgICB7 IDB4QUVDQzQ5OTE0MDc4NTM2RCwgIC04NzQsIC0yNDQgfSwKKy0gICAgICAgICAgICB7IDB4ODIz QzEyNzk1REI2Q0U1NywgIC04NDcsIC0yMzYgfSwKKy0gICAgICAgICAgICB7IDB4QzIxMDk0MzY0 REZCNTYzNywgIC04MjEsIC0yMjggfSwKKy0gICAgICAgICAgICB7IDB4OTA5NkVBNkYzODQ4OTg0 RiwgIC03OTQsIC0yMjAgfSwKKy0gICAgICAgICAgICB7IDB4RDc3NDg1Q0IyNTgyM0FDNywgIC03 NjgsIC0yMTIgfSwKKy0gICAgICAgICAgICB7IDB4QTA4NkNGQ0Q5N0JGOTdGNCwgIC03NDEsIC0y MDQgfSwKKy0gICAgICAgICAgICB7IDB4RUYzNDBBOTgxNzJBQUNFNSwgIC03MTUsIC0xOTYgfSwK Ky0gICAgICAgICAgICB7IDB4QjIzODY3RkIyQTM1QjI4RSwgIC02ODgsIC0xODggfSwKKy0gICAg ICAgICAgICB7IDB4ODRDOEQ0REZEMkM2M0YzQiwgIC02NjEsIC0xODAgfSwKKy0gICAgICAgICAg ICB7IDB4QzVERDQ0MjcxQUQzQ0RCQSwgIC02MzUsIC0xNzIgfSwKKy0gICAgICAgICAgICB7IDB4 OTM2QjlGQ0VCQjI1Qzk5NiwgIC02MDgsIC0xNjQgfSwKKy0gICAgICAgICAgICB7IDB4REJBQzZD MjQ3RDYyQTU4NCwgIC01ODIsIC0xNTYgfSwKKy0gICAgICAgICAgICB7IDB4QTNBQjY2NTgwRDVG REFGNiwgIC01NTUsIC0xNDggfSwKKy0gICAgICAgICAgICB7IDB4RjNFMkY4OTNERUMzRjEyNiwg IC01MjksIC0xNDAgfSwKKy0gICAgICAgICAgICB7IDB4QjVCNUFEQThBQUZGODBCOCwgIC01MDIs IC0xMzIgfSwKKy0gICAgICAgICAgICB7IDB4ODc2MjVGMDU2QzdDNEE4QiwgIC00NzUsIC0xMjQg fSwKKy0gICAgICAgICAgICB7IDB4QzlCQ0ZGNjAzNEMxMzA1MywgIC00NDksIC0xMTYgfSwKKy0g ICAgICAgICAgICB7IDB4OTY0RTg1OEM5MUJBMjY1NSwgIC00MjIsIC0xMDggfSwKKy0gICAgICAg ICAgICB7IDB4REZGOTc3MjQ3MDI5N0VCRCwgIC0zOTYsIC0xMDAgfSwKKy0gICAgICAgICAgICB7 IDB4QTZERkJEOUZCOEU1Qjg4RiwgIC0zNjksICAtOTIgfSwKKy0gICAgICAgICAgICB7IDB4RjhB OTVGQ0Y4ODc0N0Q5NCwgIC0zNDMsICAtODQgfSwKKy0gICAgICAgICAgICB7IDB4Qjk0NDcwOTM4 RkE4OUJDRiwgIC0zMTYsICAtNzYgfSwKKy0gICAgICAgICAgICB7IDB4OEEwOEYwRjhCRjBGMTU2 QiwgIC0yODksICAtNjggfSwKKy0gICAgICAgICAgICB7IDB4Q0RCMDI1NTU2NTMxMzFCNiwgIC0y NjMsICAtNjAgfSwKKy0gICAgICAgICAgICB7IDB4OTkzRkUyQzZEMDdCN0ZBQywgIC0yMzYsICAt NTIgfSwKKy0gICAgICAgICAgICB7IDB4RTQ1QzEwQzQyQTJCM0IwNiwgIC0yMTAsICAtNDQgfSwK Ky0gICAgICAgICAgICB7IDB4QUEyNDI0OTk2OTczOTJEMywgIC0xODMsICAtMzYgfSwKKy0gICAg ICAgICAgICB7IDB4RkQ4N0I1RjI4MzAwQ0EwRSwgIC0xNTcsICAtMjggfSwKKy0gICAgICAgICAg ICB7IDB4QkNFNTA4NjQ5MjExMUFFQiwgIC0xMzAsICAtMjAgfSwKKy0gICAgICAgICAgICB7IDB4 OENCQ0NDMDk2RjUwODhDQywgIC0xMDMsICAtMTIgfSwKKy0gICAgICAgICAgICB7IDB4RDFCNzE3 NThFMjE5NjUyQywgICAtNzcsICAgLTQgfSwKKy0gICAgICAgICAgICB7IDB4OUM0MDAwMDAwMDAw MDAwMCwgICAtNTAsICAgIDQgfSwKKy0gICAgICAgICAgICB7IDB4RThENEE1MTAwMDAwMDAwMCwg ICAtMjQsICAgMTIgfSwKKy0gICAgICAgICAgICB7IDB4QUQ3OEVCQzVBQzYyMDAwMCwgICAgIDMs ICAgMjAgfSwKKy0gICAgICAgICAgICB7IDB4ODEzRjM5NzhGODk0MDk4NCwgICAgMzAsICAgMjgg fSwKKy0gICAgICAgICAgICB7IDB4QzA5N0NFN0JDOTA3MTVCMywgICAgNTYsICAgMzYgfSwKKy0g ICAgICAgICAgICB7IDB4OEY3RTMyQ0U3QkVBNUM3MCwgICAgODMsICAgNDQgfSwKKy0gICAgICAg ICAgICB7IDB4RDVEMjM4QTRBQkU5ODA2OCwgICAxMDksICAgNTIgfSwKKy0gICAgICAgICAgICB7 IDB4OUY0RjI3MjYxNzlBMjI0NSwgICAxMzYsICAgNjAgfSwKKy0gICAgICAgICAgICB7IDB4RUQ2 M0EyMzFENEM0RkIyNywgICAxNjIsICAgNjggfSwKKy0gICAgICAgICAgICB7IDB4QjBERTY1Mzg4 Q0M4QURBOCwgICAxODksICAgNzYgfSwKKy0gICAgICAgICAgICB7IDB4ODNDNzA4OEUxQUFCNjVE QiwgICAyMTYsICAgODQgfSwKKy0gICAgICAgICAgICB7IDB4QzQ1RDFERjk0MjcxMUQ5QSwgICAy NDIsICAgOTIgfSwKKy0gICAgICAgICAgICB7IDB4OTI0RDY5MkNBNjFCRTc1OCwgICAyNjksICAx MDAgfSwKKy0gICAgICAgICAgICB7IDB4REEwMUVFNjQxQTcwOERFQSwgICAyOTUsICAxMDggfSwK Ky0gICAgICAgICAgICB7IDB4QTI2REEzOTk5QUVGNzc0QSwgICAzMjIsICAxMTYgfSwKKy0gICAg ICAgICAgICB7IDB4RjIwOTc4N0JCNDdENkI4NSwgICAzNDgsICAxMjQgfSwKKy0gICAgICAgICAg ICB7IDB4QjQ1NEU0QTE3OUREMTg3NywgICAzNzUsICAxMzIgfSwKKy0gICAgICAgICAgICB7IDB4 ODY1Qjg2OTI1QjlCQzVDMiwgICA0MDIsICAxNDAgfSwKKy0gICAgICAgICAgICB7IDB4QzgzNTUz QzVDODk2NUQzRCwgICA0MjgsICAxNDggfSwKKy0gICAgICAgICAgICB7IDB4OTUyQUI0NUNGQTk3 QTBCMywgICA0NTUsICAxNTYgfSwKKy0gICAgICAgICAgICB7IDB4REU0NjlGQkQ5OUEwNUZFMywg ICA0ODEsICAxNjQgfSwKKy0gICAgICAgICAgICB7IDB4QTU5QkMyMzREQjM5OEMyNSwgICA1MDgs ICAxNzIgfSwKKy0gICAgICAgICAgICB7IDB4RjZDNjlBNzJBMzk4OUY1QywgICA1MzQsICAxODAg fSwKKy0gICAgICAgICAgICB7IDB4QjdEQ0JGNTM1NEU5QkVDRSwgICA1NjEsICAxODggfSwKKy0g ICAgICAgICAgICB7IDB4ODhGQ0YzMTdGMjIyNDFFMiwgICA1ODgsICAxOTYgfSwKKy0gICAgICAg ICAgICB7IDB4Q0MyMENFOUJEMzVDNzhBNSwgICA2MTQsICAyMDQgfSwKKy0gICAgICAgICAgICB7 IDB4OTgxNjVBRjM3QjIxNTNERiwgICA2NDEsICAyMTIgfSwKKy0gICAgICAgICAgICB7IDB4RTJB MEI1REM5NzFGMzAzQSwgICA2NjcsICAyMjAgfSwKKy0gICAgICAgICAgICB7IDB4QThEOUQxNTM1 Q0UzQjM5NiwgICA2OTQsICAyMjggfSwKKy0gICAgICAgICAgICB7IDB4RkI5QjdDRDlBNEE3NDQz QywgICA3MjAsICAyMzYgfSwKKy0gICAgICAgICAgICB7IDB4QkI3NjRDNENBN0E0NDQxMCwgICA3 NDcsICAyNDQgfSwKKy0gICAgICAgICAgICB7IDB4OEJBQjhFRUZCNjQwOUMxQSwgICA3NzQsICAy NTIgfSwKKy0gICAgICAgICAgICB7IDB4RDAxRkVGMTBBNjU3ODQyQywgICA4MDAsICAyNjAgfSwK Ky0gICAgICAgICAgICB7IDB4OUIxMEE0RTVFOTkxMzEyOSwgICA4MjcsICAyNjggfSwKKy0gICAg ICAgICAgICB7IDB4RTcxMDlCRkJBMTlDMEM5RCwgICA4NTMsICAyNzYgfSwKKy0gICAgICAgICAg ICB7IDB4QUMyODIwRDk2MjNCRjQyOSwgICA4ODAsICAyODQgfSwKKy0gICAgICAgICAgICB7IDB4 ODA0NDRCNUU3QUE3Q0Y4NSwgICA5MDcsICAyOTIgfSwKKy0gICAgICAgICAgICB7IDB4QkYyMUU0 NDAwM0FDREQyRCwgICA5MzMsICAzMDAgfSwKKy0gICAgICAgICAgICB7IDB4OEU2NzlDMkY1RTQ0 RkY4RiwgICA5NjAsICAzMDggfSwKKy0gICAgICAgICAgICB7IDB4RDQzMzE3OUQ5QzhDQjg0MSwg ICA5ODYsICAzMTYgfSwKKy0gICAgICAgICAgICB7IDB4OUUxOURCOTJCNEUzMUJBOSwgIDEwMTMs ICAzMjQgfSwKKy0gICAgICAgIH0KKy0gICAgfTsKKy0KKy0gICAgLy8gVGhpcyBjb21wdXRhdGlv biBnaXZlcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdHMgZm9yIGsgYXMKKy0gICAgLy8gICAgICBr ID0gY2VpbCgoa0FscGhhIC0gZSAtIDEpICogMC4zMDEwMjk5OTU2NjM5ODExNCkKKy0gICAgLy8g Zm9yIHxlfCA8PSAxNTAwLCBidXQgZG9lc24ndCByZXF1aXJlIGZsb2F0aW5nLXBvaW50IG9wZXJh dGlvbnMuCistICAgIC8vIE5COiBsb2dfMTAoMikgfj0gNzg5MTMgLyAyXjE4CistICAgIEpTT05f QVNTRVJUKGUgPj0gLTE1MDApOworLSAgICBKU09OX0FTU0VSVChlIDw9ICAxNTAwKTsKKy0gICAg Y29uc3QgaW50IGYgPSBrQWxwaGEgLSBlIC0gMTsKKy0gICAgY29uc3QgaW50IGsgPSAoZiAqIDc4 OTEzKSAvICgxIDw8IDE4KSArIHN0YXRpY19jYXN0PGludD4oZiA+IDApOworLQorLSAgICBjb25z dCBpbnQgaW5kZXggPSAoLWtDYWNoZWRQb3dlcnNNaW5EZWNFeHAgKyBrICsgKGtDYWNoZWRQb3dl cnNEZWNTdGVwIC0gMSkpIC8ga0NhY2hlZFBvd2Vyc0RlY1N0ZXA7CistICAgIEpTT05fQVNTRVJU KGluZGV4ID49IDApOworLSAgICBKU09OX0FTU0VSVChzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4o aW5kZXgpIDwga0NhY2hlZFBvd2Vycy5zaXplKCkpOworLQorLSAgICBjb25zdCBjYWNoZWRfcG93 ZXIgY2FjaGVkID0ga0NhY2hlZFBvd2Vyc1tzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oaW5kZXgp XTsKKy0gICAgSlNPTl9BU1NFUlQoa0FscGhhIDw9IGNhY2hlZC5lICsgZSArIDY0KTsKKy0gICAg SlNPTl9BU1NFUlQoa0dhbW1hID49IGNhY2hlZC5lICsgZSArIDY0KTsKKy0KKy0gICAgcmV0dXJu IGNhY2hlZDsKKy19CistCistLyohCistRm9yIG4gIT0gMCwgcmV0dXJucyBrLCBzdWNoIHRoYXQg cG93MTAgOj0gMTBeKGstMSkgPD0gbiA8IDEwXmsuCistRm9yIG4gPT0gMCwgcmV0dXJucyAxIGFu ZCBzZXRzIHBvdzEwIDo9IDEuCistKi8KKy1pbmxpbmUgaW50IGZpbmRfbGFyZ2VzdF9wb3cxMChj b25zdCBzdGQ6OnVpbnQzMl90IG4sIHN0ZDo6dWludDMyX3QmIHBvdzEwKQorLXsKKy0gICAgLy8g TENPVl9FWENMX1NUQVJUCistICAgIGlmIChuID49IDEwMDAwMDAwMDApCistICAgIHsKKy0gICAg ICAgIHBvdzEwID0gMTAwMDAwMDAwMDsKKy0gICAgICAgIHJldHVybiAxMDsKKy0gICAgfQorLSAg ICAvLyBMQ09WX0VYQ0xfU1RPUAorLSAgICBpZiAobiA+PSAxMDAwMDAwMDApCistICAgIHsKKy0g ICAgICAgIHBvdzEwID0gMTAwMDAwMDAwOworLSAgICAgICAgcmV0dXJuICA5OworLSAgICB9Cist ICAgIGlmIChuID49IDEwMDAwMDAwKQorLSAgICB7CistICAgICAgICBwb3cxMCA9IDEwMDAwMDAw OworLSAgICAgICAgcmV0dXJuICA4OworLSAgICB9CistICAgIGlmIChuID49IDEwMDAwMDApCist ICAgIHsKKy0gICAgICAgIHBvdzEwID0gMTAwMDAwMDsKKy0gICAgICAgIHJldHVybiAgNzsKKy0g ICAgfQorLSAgICBpZiAobiA+PSAxMDAwMDApCistICAgIHsKKy0gICAgICAgIHBvdzEwID0gMTAw MDAwOworLSAgICAgICAgcmV0dXJuICA2OworLSAgICB9CistICAgIGlmIChuID49IDEwMDAwKQor LSAgICB7CistICAgICAgICBwb3cxMCA9IDEwMDAwOworLSAgICAgICAgcmV0dXJuICA1OworLSAg ICB9CistICAgIGlmIChuID49IDEwMDApCistICAgIHsKKy0gICAgICAgIHBvdzEwID0gMTAwMDsK Ky0gICAgICAgIHJldHVybiAgNDsKKy0gICAgfQorLSAgICBpZiAobiA+PSAxMDApCistICAgIHsK Ky0gICAgICAgIHBvdzEwID0gMTAwOworLSAgICAgICAgcmV0dXJuICAzOworLSAgICB9CistICAg IGlmIChuID49IDEwKQorLSAgICB7CistICAgICAgICBwb3cxMCA9IDEwOworLSAgICAgICAgcmV0 dXJuICAyOworLSAgICB9CistCistICAgIHBvdzEwID0gMTsKKy0gICAgcmV0dXJuIDE7CistfQor LQorLWlubGluZSB2b2lkIGdyaXN1Ml9yb3VuZChjaGFyKiBidWYsIGludCBsZW4sIHN0ZDo6dWlu dDY0X3QgZGlzdCwgc3RkOjp1aW50NjRfdCBkZWx0YSwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgc3RkOjp1aW50NjRfdCByZXN0LCBzdGQ6OnVpbnQ2NF90IHRlbl9rKQorLXsKKy0gICAgSlNP Tl9BU1NFUlQobGVuID49IDEpOworLSAgICBKU09OX0FTU0VSVChkaXN0IDw9IGRlbHRhKTsKKy0g ICAgSlNPTl9BU1NFUlQocmVzdCA8PSBkZWx0YSk7CistICAgIEpTT05fQVNTRVJUKHRlbl9rID4g MCk7CistCistICAgIC8vICAgICAgICAgICAgICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSBkZWx0YSAtLS0tPgorLSAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 LS0tLSBkaXN0IC0tLS0tLS0tLT4KKy0gICAgLy8gLS0tLS0tLS0tLS0tLS1bLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS1dLS0tLS0tLS0tLS0tLS0KKy0gICAgLy8gICAgICAg ICAgICAgICBNLSAgICAgICAgICAgICAgICAgdyAgICAgICAgICAgICAgICAgICBNKworLSAgICAv LworLSAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5faworLSAgICAv LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0tLT4KKy0gICAgLy8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LS0tLSByZXN0IC0tLS0+CistICAgIC8v IC0tLS0tLS0tLS0tLS0tWy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0tXS0t LS0tLS0tLS0tLS0tCistICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcg ICAgVgorLSAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYnVm ICogMTBeaworLSAgICAvLworLSAgICAvLyB0ZW5fayByZXByZXNlbnRzIGEgdW5pdC1pbi10aGUt bGFzdC1wbGFjZSBpbiB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbgorLSAgICAvLyBzdG9yZWQg aW4gYnVmLgorLSAgICAvLyBEZWNyZW1lbnQgYnVmIGJ5IHRlbl9rIHdoaWxlIHRoaXMgdGFrZXMg YnVmIGNsb3NlciB0byB3LgorLQorLSAgICAvLyBUaGUgdGVzdHMgYXJlIHdyaXR0ZW4gaW4gdGhp cyBvcmRlciB0byBhdm9pZCBvdmVyZmxvdyBpbiB1bnNpZ25lZAorLSAgICAvLyBpbnRlZ2VyIGFy aXRobWV0aWMuCistCistICAgIHdoaWxlIChyZXN0IDwgZGlzdAorLSAgICAgICAgICAgICYmIGRl bHRhIC0gcmVzdCA+PSB0ZW5faworLSAgICAgICAgICAgICYmIChyZXN0ICsgdGVuX2sgPCBkaXN0 IHx8IGRpc3QgLSByZXN0ID4gcmVzdCArIHRlbl9rIC0gZGlzdCkpCistICAgIHsKKy0gICAgICAg IEpTT05fQVNTRVJUKGJ1ZltsZW4gLSAxXSAhPSAnMCcpOworLSAgICAgICAgYnVmW2xlbiAtIDFd LS07CistICAgICAgICByZXN0ICs9IHRlbl9rOworLSAgICB9CistfQorLQorLS8qIQorLUdlbmVy YXRlcyBWID0gYnVmZmVyICogMTBeZGVjaW1hbF9leHBvbmVudCwgc3VjaCB0aGF0IE0tIDw9IFYg PD0gTSsuCistTS0gYW5kIE0rIG11c3QgYmUgbm9ybWFsaXplZCBhbmQgc2hhcmUgdGhlIHNhbWUg ZXhwb25lbnQgLTYwIDw9IGUgPD0gLTMyLgorLSovCistaW5saW5lIHZvaWQgZ3Jpc3UyX2RpZ2l0 X2dlbihjaGFyKiBidWZmZXIsIGludCYgbGVuZ3RoLCBpbnQmIGRlY2ltYWxfZXhwb25lbnQsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXlmcCBNX21pbnVzLCBkaXlmcCB3LCBkaXlm cCBNX3BsdXMpCisteworLSAgICBzdGF0aWNfYXNzZXJ0KGtBbHBoYSA+PSAtNjAsICJpbnRlcm5h bCBlcnJvciIpOworLSAgICBzdGF0aWNfYXNzZXJ0KGtHYW1tYSA8PSAtMzIsICJpbnRlcm5hbCBl cnJvciIpOworLQorLSAgICAvLyBHZW5lcmF0ZXMgdGhlIGRpZ2l0cyAoYW5kIHRoZSBleHBvbmVu dCkgb2YgYSBkZWNpbWFsIGZsb2F0aW5nLXBvaW50CistICAgIC8vIG51bWJlciBWID0gYnVmZmVy ICogMTBeZGVjaW1hbF9leHBvbmVudCBpbiB0aGUgcmFuZ2UgW00tLCBNK10uIFRoZSBkaXlmcCdz CistICAgIC8vIHcsIE0tIGFuZCBNKyBzaGFyZSB0aGUgc2FtZSBleHBvbmVudCBlLCB3aGljaCBz YXRpc2ZpZXMgYWxwaGEgPD0gZSA8PSBnYW1tYS4KKy0gICAgLy8KKy0gICAgLy8gICAgICAgICAg ICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlbHRhIC0tLS0+CistICAgIC8vICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIGRpc3QgLS0tLS0tLS0tPgorLSAg ICAvLyAtLS0tLS0tLS0tLS0tLVstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LV0tLS0tLS0tLS0tLS0tLQorLSAgICAvLyAgICAgICAgICAgICAgIE0tICAgICAgICAgICAgICAg ICB3ICAgICAgICAgICAgICAgICAgIE0rCistICAgIC8vCistICAgIC8vIEdyaXN1MiBnZW5lcmF0 ZXMgdGhlIGRpZ2l0cyBvZiBNKyBmcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHN0b3BzIGFzIHNvb24g YXMKKy0gICAgLy8gViBpcyBpbiBbTS0sTStdLgorLQorLSAgICBKU09OX0FTU0VSVChNX3BsdXMu ZSA+PSBrQWxwaGEpOworLSAgICBKU09OX0FTU0VSVChNX3BsdXMuZSA8PSBrR2FtbWEpOworLQor LSAgICBzdGQ6OnVpbnQ2NF90IGRlbHRhID0gZGl5ZnA6OnN1YihNX3BsdXMsIE1fbWludXMpLmY7 IC8vIChzaWduaWZpY2FuZCBvZiAoTSsgLSBNLSksIGltcGxpY2l0IGV4cG9uZW50IGlzIGUpCist ICAgIHN0ZDo6dWludDY0X3QgZGlzdCAgPSBkaXlmcDo6c3ViKE1fcGx1cywgdyAgICAgICkuZjsg Ly8gKHNpZ25pZmljYW5kIG9mIChNKyAtIHcgKSwgaW1wbGljaXQgZXhwb25lbnQgaXMgZSkKKy0K Ky0gICAgLy8gU3BsaXQgTSsgPSBmICogMl5lIGludG8gdHdvIHBhcnRzIHAxIGFuZCBwMiAobm90 ZTogZSA8IDApOgorLSAgICAvLworLSAgICAvLyAgICAgIE0rID0gZiAqIDJeZQorLSAgICAvLyAg ICAgICAgID0gKChmIGRpdiAyXi1lKSAqIDJeLWUgKyAoZiBtb2QgMl4tZSkpICogMl5lCistICAg IC8vICAgICAgICAgPSAoKHAxICAgICAgICApICogMl4tZSArIChwMiAgICAgICAgKSkgKiAyXmUK Ky0gICAgLy8gICAgICAgICA9IHAxICsgcDIgKiAyXmUKKy0KKy0gICAgY29uc3QgZGl5ZnAgb25l KHN0ZDo6dWludDY0X3R7MX0gPDwgLU1fcGx1cy5lLCBNX3BsdXMuZSk7CistCistICAgIGF1dG8g cDEgPSBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQzMl90PihNX3BsdXMuZiA+PiAtb25lLmUpOyAvLyBw MSA9IGYgZGl2IDJeLWUgKFNpbmNlIC1lID49IDMyLCBwMSBmaXRzIGludG8gYSAzMi1iaXQgaW50 LikKKy0gICAgc3RkOjp1aW50NjRfdCBwMiA9IE1fcGx1cy5mICYgKG9uZS5mIC0gMSk7ICAgICAg ICAgICAgICAgICAgICAvLyBwMiA9IGYgbW9kIDJeLWUKKy0KKy0gICAgLy8gMSkKKy0gICAgLy8K Ky0gICAgLy8gR2VuZXJhdGUgdGhlIGRpZ2l0cyBvZiB0aGUgaW50ZWdyYWwgcGFydCBwMSA9IGRb bi0xXS4uLmRbMV1kWzBdCistCistICAgIEpTT05fQVNTRVJUKHAxID4gMCk7CistCistICAgIHN0 ZDo6dWludDMyX3QgcG93MTB7fTsKKy0gICAgY29uc3QgaW50IGsgPSBmaW5kX2xhcmdlc3RfcG93 MTAocDEsIHBvdzEwKTsKKy0KKy0gICAgLy8gICAgICAxMF4oay0xKSA8PSBwMSA8IDEwXmssIHBv dzEwID0gMTBeKGstMSkKKy0gICAgLy8KKy0gICAgLy8gICAgICBwMSA9IChwMSBkaXYgMTBeKGst MSkpICogMTBeKGstMSkgKyAocDEgbW9kIDEwXihrLTEpKQorLSAgICAvLyAgICAgICAgID0gKGRb ay0xXSAgICAgICAgICkgKiAxMF4oay0xKSArIChwMSBtb2QgMTBeKGstMSkpCistICAgIC8vCist ICAgIC8vICAgICAgTSsgPSBwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgcDIgKiAyXmUKKy0gICAgLy8gICAgICAgICA9IGRbay0xXSAqIDEwXihrLTEpICsg KHAxIG1vZCAxMF4oay0xKSkgICAgICAgICAgKyBwMiAqIDJeZQorLSAgICAvLyAgICAgICAgID0g ZFtrLTFdICogMTBeKGstMSkgKyAoKHAxIG1vZCAxMF4oay0xKSkgKiAyXi1lICsgcDIpICogMl5l CistICAgIC8vICAgICAgICAgPSBkW2stMV0gKiAxMF4oay0xKSArICggICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdCkgKiAyXmUKKy0gICAgLy8KKy0gICAgLy8gTm93IGdlbmVyYXRlIHRoZSBk aWdpdHMgZFtuXSBvZiBwMSBmcm9tIGxlZnQgdG8gcmlnaHQgKG4gPSBrLTEsLi4uLDApCistICAg IC8vCistICAgIC8vICAgICAgcDEgPSBkW2stMV0uLi5kW25dICogMTBebiArIGRbbi0xXS4uLmRb MF0KKy0gICAgLy8KKy0gICAgLy8gYnV0IHN0b3AgYXMgc29vbiBhcworLSAgICAvLworLSAgICAv LyAgICAgIHJlc3QgKiAyXmUgPSAoZFtuLTFdLi4uZFswXSAqIDJeLWUgKyBwMikgKiAyXmUgPD0g ZGVsdGEgKiAyXmUKKy0KKy0gICAgaW50IG4gPSBrOworLSAgICB3aGlsZSAobiA+IDApCistICAg IHsKKy0gICAgICAgIC8vIEludmFyaWFudHM6CistICAgICAgICAvLyAgICAgIE0rID0gYnVmZmVy ICogMTBebiArIChwMSArIHAyICogMl5lKSAgICAoYnVmZmVyID0gMCBmb3IgbiA9IGspCistICAg ICAgICAvLyAgICAgIHBvdzEwID0gMTBeKG4tMSkgPD0gcDEgPCAxMF5uCistICAgICAgICAvLwor LSAgICAgICAgY29uc3Qgc3RkOjp1aW50MzJfdCBkID0gcDEgLyBwb3cxMDsgIC8vIGQgPSBwMSBk aXYgMTBeKG4tMSkKKy0gICAgICAgIGNvbnN0IHN0ZDo6dWludDMyX3QgciA9IHAxICUgcG93MTA7 ICAvLyByID0gcDEgbW9kIDEwXihuLTEpCistICAgICAgICAvLworLSAgICAgICAgLy8gICAgICBN KyA9IGJ1ZmZlciAqIDEwXm4gKyAoZCAqIDEwXihuLTEpICsgcikgKyBwMiAqIDJeZQorLSAgICAg ICAgLy8gICAgICAgICA9IChidWZmZXIgKiAxMCArIGQpICogMTBeKG4tMSkgKyAociArIHAyICog Ml5lKQorLSAgICAgICAgLy8KKy0gICAgICAgIEpTT05fQVNTRVJUKGQgPD0gOSk7CistICAgICAg ICBidWZmZXJbbGVuZ3RoKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZCk7IC8vIGJ1ZmZl ciA6PSBidWZmZXIgKiAxMCArIGQKKy0gICAgICAgIC8vCistICAgICAgICAvLyAgICAgIE0rID0g YnVmZmVyICogMTBeKG4tMSkgKyAociArIHAyICogMl5lKQorLSAgICAgICAgLy8KKy0gICAgICAg IHAxID0gcjsKKy0gICAgICAgIG4tLTsKKy0gICAgICAgIC8vCistICAgICAgICAvLyAgICAgIE0r ID0gYnVmZmVyICogMTBebiArIChwMSArIHAyICogMl5lKQorLSAgICAgICAgLy8gICAgICBwb3cx MCA9IDEwXm4KKy0gICAgICAgIC8vCistCistICAgICAgICAvLyBOb3cgY2hlY2sgaWYgZW5vdWdo IGRpZ2l0cyBoYXZlIGJlZW4gZ2VuZXJhdGVkLgorLSAgICAgICAgLy8gQ29tcHV0ZQorLSAgICAg ICAgLy8KKy0gICAgICAgIC8vICAgICAgcDEgKyBwMiAqIDJeZSA9IChwMSAqIDJeLWUgKyBwMikg KiAyXmUgPSByZXN0ICogMl5lCistICAgICAgICAvLworLSAgICAgICAgLy8gTm90ZToKKy0gICAg ICAgIC8vIFNpbmNlIHJlc3QgYW5kIGRlbHRhIHNoYXJlIHRoZSBzYW1lIGV4cG9uZW50IGUsIGl0 IHN1ZmZpY2VzIHRvCistICAgICAgICAvLyBjb21wYXJlIHRoZSBzaWduaWZpY2FuZHMuCistICAg ICAgICBjb25zdCBzdGQ6OnVpbnQ2NF90IHJlc3QgPSAoc3RkOjp1aW50NjRfdHtwMX0gPDwgLW9u ZS5lKSArIHAyOworLSAgICAgICAgaWYgKHJlc3QgPD0gZGVsdGEpCistICAgICAgICB7CistICAg ICAgICAgICAgLy8gViA9IGJ1ZmZlciAqIDEwXm4sIHdpdGggTS0gPD0gViA8PSBNKy4KKy0KKy0g ICAgICAgICAgICBkZWNpbWFsX2V4cG9uZW50ICs9IG47CistCistICAgICAgICAgICAgLy8gV2Ug bWF5IG5vdyBqdXN0IHN0b3AuIEJ1dCBpbnN0ZWFkIGxvb2sgaWYgdGhlIGJ1ZmZlciBjb3VsZCBi ZQorLSAgICAgICAgICAgIC8vIGRlY3JlbWVudGVkIHRvIGJyaW5nIFYgY2xvc2VyIHRvIHcuCist ICAgICAgICAgICAgLy8KKy0gICAgICAgICAgICAvLyBwb3cxMCA9IDEwXm4gaXMgbm93IDEgdWxw IGluIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIFYuCistICAgICAgICAgICAgLy8gVGhlIHJv dW5kaW5nIHByb2NlZHVyZSB3b3JrcyB3aXRoIGRpeWZwJ3Mgd2l0aCBhbiBpbXBsaWNpdAorLSAg ICAgICAgICAgIC8vIGV4cG9uZW50IG9mIGUuCistICAgICAgICAgICAgLy8KKy0gICAgICAgICAg ICAvLyAgICAgIDEwXm4gPSAoMTBebiAqIDJeLWUpICogMl5lID0gdWxwICogMl5lCistICAgICAg ICAgICAgLy8KKy0gICAgICAgICAgICBjb25zdCBzdGQ6OnVpbnQ2NF90IHRlbl9uID0gc3RkOjp1 aW50NjRfdHtwb3cxMH0gPDwgLW9uZS5lOworLSAgICAgICAgICAgIGdyaXN1Ml9yb3VuZChidWZm ZXIsIGxlbmd0aCwgZGlzdCwgZGVsdGEsIHJlc3QsIHRlbl9uKTsKKy0KKy0gICAgICAgICAgICBy ZXR1cm47CistICAgICAgICB9CistCistICAgICAgICBwb3cxMCAvPSAxMDsKKy0gICAgICAgIC8v CistICAgICAgICAvLyAgICAgIHBvdzEwID0gMTBeKG4tMSkgPD0gcDEgPCAxMF5uCistICAgICAg ICAvLyBJbnZhcmlhbnRzIHJlc3RvcmVkLgorLSAgICB9CistCistICAgIC8vIDIpCistICAgIC8v CistICAgIC8vIFRoZSBkaWdpdHMgb2YgdGhlIGludGVncmFsIHBhcnQgaGF2ZSBiZWVuIGdlbmVy YXRlZDoKKy0gICAgLy8KKy0gICAgLy8gICAgICBNKyA9IGRbay0xXS4uLmRbMV1kWzBdICsgcDIg KiAyXmUKKy0gICAgLy8gICAgICAgICA9IGJ1ZmZlciAgICAgICAgICAgICsgcDIgKiAyXmUKKy0g ICAgLy8KKy0gICAgLy8gTm93IGdlbmVyYXRlIHRoZSBkaWdpdHMgb2YgdGhlIGZyYWN0aW9uYWwg cGFydCBwMiAqIDJeZS4KKy0gICAgLy8KKy0gICAgLy8gTm90ZToKKy0gICAgLy8gTm8gZGVjaW1h bCBwb2ludCBpcyBnZW5lcmF0ZWQ6IHRoZSBleHBvbmVudCBpcyBhZGp1c3RlZCBpbnN0ZWFkLgor LSAgICAvLworLSAgICAvLyBwMiBhY3R1YWxseSByZXByZXNlbnRzIHRoZSBmcmFjdGlvbgorLSAg ICAvLworLSAgICAvLyAgICAgIHAyICogMl5lCistICAgIC8vICAgICAgICAgID0gcDIgLyAyXi1l CistICAgIC8vICAgICAgICAgID0gZFstMV0gLyAxMF4xICsgZFstMl0gLyAxMF4yICsgLi4uCist ICAgIC8vCistICAgIC8vIE5vdyBnZW5lcmF0ZSB0aGUgZGlnaXRzIGRbLW1dIG9mIHAxIGZyb20g bGVmdCB0byByaWdodCAobSA9IDEsMiwuLi4pCistICAgIC8vCistICAgIC8vICAgICAgcDIgKiAy XmUgPSBkWy0xXWRbLTJdLi4uZFstbV0gKiAxMF4tbQorLSAgICAvLyAgICAgICAgICAgICAgICAg ICAgICArIDEwXi1tICogKGRbLW0tMV0gLyAxMF4xICsgZFstbS0yXSAvIDEwXjIgKyAuLi4pCist ICAgIC8vCistICAgIC8vIHVzaW5nCistICAgIC8vCistICAgIC8vICAgICAgMTBebSAqIHAyID0g KCgxMF5tICogcDIpIGRpdiAyXi1lKSAqIDJeLWUgKyAoKDEwXm0gKiBwMikgbW9kIDJeLWUpCist ICAgIC8vICAgICAgICAgICAgICAgID0gKCAgICAgICAgICAgICAgICAgICBkKSAqIDJeLWUgKyAo ICAgICAgICAgICAgICAgICAgIHIpCistICAgIC8vCistICAgIC8vIG9yCistICAgIC8vICAgICAg MTBebSAqIHAyICogMl5lID0gZCArIHIgKiAyXmUKKy0gICAgLy8KKy0gICAgLy8gaS5lLgorLSAg ICAvLworLSAgICAvLyAgICAgIE0rID0gYnVmZmVyICsgcDIgKiAyXmUKKy0gICAgLy8gICAgICAg ICA9IGJ1ZmZlciArIDEwXi1tICogKGQgKyByICogMl5lKQorLSAgICAvLyAgICAgICAgID0gKGJ1 ZmZlciAqIDEwXm0gKyBkKSAqIDEwXi1tICsgMTBeLW0gKiByICogMl5lCistICAgIC8vCistICAg IC8vIGFuZCBzdG9wIGFzIHNvb24gYXMgMTBeLW0gKiByICogMl5lIDw9IGRlbHRhICogMl5lCist CistICAgIEpTT05fQVNTRVJUKHAyID4gZGVsdGEpOworLQorLSAgICBpbnQgbSA9IDA7CistICAg IGZvciAoOzspCistICAgIHsKKy0gICAgICAgIC8vIEludmFyaWFudDoKKy0gICAgICAgIC8vICAg ICAgTSsgPSBidWZmZXIgKiAxMF4tbSArIDEwXi1tICogKGRbLW0tMV0gLyAxMCArIGRbLW0tMl0g LyAxMF4yICsgLi4uKSAqIDJeZQorLSAgICAgICAgLy8gICAgICAgICA9IGJ1ZmZlciAqIDEwXi1t ICsgMTBeLW0gKiAocDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICogMl5lCist ICAgICAgICAvLyAgICAgICAgID0gYnVmZmVyICogMTBeLW0gKyAxMF4tbSAqICgxLzEwICogKDEw ICogcDIpICAgICAgICAgICAgICAgICAgICkgKiAyXmUKKy0gICAgICAgIC8vICAgICAgICAgPSBi dWZmZXIgKiAxMF4tbSArIDEwXi1tICogKDEvMTAgKiAoKDEwKnAyIGRpdiAyXi1lKSAqIDJeLWUg KyAoMTAqcDIgbW9kIDJeLWUpKSAqIDJeZQorLSAgICAgICAgLy8KKy0gICAgICAgIEpTT05fQVNT RVJUKHAyIDw9IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dWludDY0X3Q+OjptYXgpKCkgLyAx MCk7CistICAgICAgICBwMiAqPSAxMDsKKy0gICAgICAgIGNvbnN0IHN0ZDo6dWludDY0X3QgZCA9 IHAyID4+IC1vbmUuZTsgICAgIC8vIGQgPSAoMTAgKiBwMikgZGl2IDJeLWUKKy0gICAgICAgIGNv bnN0IHN0ZDo6dWludDY0X3QgciA9IHAyICYgKG9uZS5mIC0gMSk7IC8vIHIgPSAoMTAgKiBwMikg bW9kIDJeLWUKKy0gICAgICAgIC8vCistICAgICAgICAvLyAgICAgIE0rID0gYnVmZmVyICogMTBe LW0gKyAxMF4tbSAqICgxLzEwICogKGQgKiAyXi1lICsgcikgKiAyXmUKKy0gICAgICAgIC8vICAg ICAgICAgPSBidWZmZXIgKiAxMF4tbSArIDEwXi1tICogKDEvMTAgKiAoZCArIHIgKiAyXmUpKQor LSAgICAgICAgLy8gICAgICAgICA9IChidWZmZXIgKiAxMCArIGQpICogMTBeKC1tLTEpICsgMTBe KC1tLTEpICogciAqIDJeZQorLSAgICAgICAgLy8KKy0gICAgICAgIEpTT05fQVNTRVJUKGQgPD0g OSk7CistICAgICAgICBidWZmZXJbbGVuZ3RoKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsg ZCk7IC8vIGJ1ZmZlciA6PSBidWZmZXIgKiAxMCArIGQKKy0gICAgICAgIC8vCistICAgICAgICAv LyAgICAgIE0rID0gYnVmZmVyICogMTBeKC1tLTEpICsgMTBeKC1tLTEpICogciAqIDJeZQorLSAg ICAgICAgLy8KKy0gICAgICAgIHAyID0gcjsKKy0gICAgICAgIG0rKzsKKy0gICAgICAgIC8vCist ICAgICAgICAvLyAgICAgIE0rID0gYnVmZmVyICogMTBeLW0gKyAxMF4tbSAqIHAyICogMl5lCist ICAgICAgICAvLyBJbnZhcmlhbnQgcmVzdG9yZWQuCistCistICAgICAgICAvLyBDaGVjayBpZiBl bm91Z2ggZGlnaXRzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuCistICAgICAgICAvLworLSAgICAgICAg Ly8gICAgICAxMF4tbSAqIHAyICogMl5lIDw9IGRlbHRhICogMl5lCistICAgICAgICAvLyAgICAg ICAgICAgICAgcDIgKiAyXmUgPD0gMTBebSAqIGRlbHRhICogMl5lCistICAgICAgICAvLyAgICAg ICAgICAgICAgICAgICAgcDIgPD0gMTBebSAqIGRlbHRhCistICAgICAgICBkZWx0YSAqPSAxMDsK Ky0gICAgICAgIGRpc3QgICo9IDEwOworLSAgICAgICAgaWYgKHAyIDw9IGRlbHRhKQorLSAgICAg ICAgeworLSAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8v IFYgPSBidWZmZXIgKiAxMF4tbSwgd2l0aCBNLSA8PSBWIDw9IE0rLgorLQorLSAgICBkZWNpbWFs X2V4cG9uZW50IC09IG07CistCistICAgIC8vIDEgdWxwIGluIHRoZSBkZWNpbWFsIHJlcHJlc2Vu dGF0aW9uIGlzIG5vdyAxMF4tbS4KKy0gICAgLy8gU2luY2UgZGVsdGEgYW5kIGRpc3QgYXJlIG5v dyBzY2FsZWQgYnkgMTBebSwgd2UgbmVlZCB0byBkbyB0aGUKKy0gICAgLy8gc2FtZSB3aXRoIHVs cCBpbiBvcmRlciB0byBrZWVwIHRoZSB1bml0cyBpbiBzeW5jLgorLSAgICAvLworLSAgICAvLyAg ICAgIDEwXm0gKiAxMF4tbSA9IDEgPSAyXi1lICogMl5lID0gdGVuX20gKiAyXmUKKy0gICAgLy8K Ky0gICAgY29uc3Qgc3RkOjp1aW50NjRfdCB0ZW5fbSA9IG9uZS5mOworLSAgICBncmlzdTJfcm91 bmQoYnVmZmVyLCBsZW5ndGgsIGRpc3QsIGRlbHRhLCBwMiwgdGVuX20pOworLQorLSAgICAvLyBC eSBjb25zdHJ1Y3Rpb24gdGhpcyBhbGdvcml0aG0gZ2VuZXJhdGVzIHRoZSBzaG9ydGVzdCBwb3Nz aWJsZSBkZWNpbWFsCistICAgIC8vIG51bWJlciAoTG9pdHNjaCwgVGhlb3JlbSA2LjIpIHdoaWNo IHJvdW5kcyBiYWNrIHRvIHcuCistICAgIC8vIEZvciBhbiBpbnB1dCBudW1iZXIgb2YgcHJlY2lz aW9uIHAsIGF0IGxlYXN0CistICAgIC8vCistICAgIC8vICAgICAgTiA9IDEgKyBjZWlsKHAgKiBs b2dfMTAoMikpCistICAgIC8vCistICAgIC8vIGRlY2ltYWwgZGlnaXRzIGFyZSBzdWZmaWNpZW50 IHRvIGlkZW50aWZ5IGFsbCBiaW5hcnkgZmxvYXRpbmctcG9pbnQKKy0gICAgLy8gbnVtYmVycyAo TWF0dWxhLCAiSW4tYW5kLU91dCBjb252ZXJzaW9ucyIpLgorLSAgICAvLyBUaGlzIGltcGxpZXMg dGhhdCB0aGUgYWxnb3JpdGhtIGRvZXMgbm90IHByb2R1Y2UgbW9yZSB0aGFuIE4gZGVjaW1hbAor LSAgICAvLyBkaWdpdHMuCistICAgIC8vCistICAgIC8vICAgICAgTiA9IDE3IGZvciBwID0gNTMg KElFRUUgZG91YmxlIHByZWNpc2lvbikKKy0gICAgLy8gICAgICBOID0gOSAgZm9yIHAgPSAyNCAo SUVFRSBzaW5nbGUgcHJlY2lzaW9uKQorLX0KKy0KKy0vKiEKKy12ID0gYnVmICogMTBeZGVjaW1h bF9leHBvbmVudAorLWxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBk ZWNpbWFsIGRpZ2l0cykKKy1UaGUgYnVmZmVyIG11c3QgYmUgbGFyZ2UgZW5vdWdoLCBpLmUuID49 IG1heF9kaWdpdHMxMC4KKy0qLworLUpTT05fSEVETEVZX05PTl9OVUxMKDEpCistaW5saW5lIHZv aWQgZ3Jpc3UyKGNoYXIqIGJ1ZiwgaW50JiBsZW4sIGludCYgZGVjaW1hbF9leHBvbmVudCwKKy0g ICAgICAgICAgICAgICAgICAgZGl5ZnAgbV9taW51cywgZGl5ZnAgdiwgZGl5ZnAgbV9wbHVzKQor LXsKKy0gICAgSlNPTl9BU1NFUlQobV9wbHVzLmUgPT0gbV9taW51cy5lKTsKKy0gICAgSlNPTl9B U1NFUlQobV9wbHVzLmUgPT0gdi5lKTsKKy0KKy0gICAgLy8gIC0tLS0tLS0tKC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKS0tLS0tLS0tICAgIChBKQorLSAg ICAvLyAgICAgICAgICBtLSAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICAgICAgICAg ICAgICBtKworLSAgICAvLworLSAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0oLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0pLS0tLS0tLS0gICAgKEIpCistICAgIC8vICAgICAg ICAgICAgICAgICAgICAgIG0tICAgICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgIG0rCist ICAgIC8vCistICAgIC8vIEZpcnN0IHNjYWxlIHYgKGFuZCBtLSBhbmQgbSspIHN1Y2ggdGhhdCB0 aGUgZXhwb25lbnQgaXMgaW4gdGhlIHJhbmdlCistICAgIC8vIFthbHBoYSwgZ2FtbWFdLgorLQor LSAgICBjb25zdCBjYWNoZWRfcG93ZXIgY2FjaGVkID0gZ2V0X2NhY2hlZF9wb3dlcl9mb3JfYmlu YXJ5X2V4cG9uZW50KG1fcGx1cy5lKTsKKy0KKy0gICAgY29uc3QgZGl5ZnAgY19taW51c19rKGNh Y2hlZC5mLCBjYWNoZWQuZSk7IC8vID0gYyB+PSAxMF4taworLQorLSAgICAvLyBUaGUgZXhwb25l bnQgb2YgdGhlIHByb2R1Y3RzIGlzID0gdi5lICsgY19taW51c19rLmUgKyBxIGFuZCBpcyBpbiB0 aGUgcmFuZ2UgW2FscGhhLGdhbW1hXQorLSAgICBjb25zdCBkaXlmcCB3ICAgICAgID0gZGl5ZnA6 Om11bCh2LCAgICAgICBjX21pbnVzX2spOworLSAgICBjb25zdCBkaXlmcCB3X21pbnVzID0gZGl5 ZnA6Om11bChtX21pbnVzLCBjX21pbnVzX2spOworLSAgICBjb25zdCBkaXlmcCB3X3BsdXMgID0g ZGl5ZnA6Om11bChtX3BsdXMsICBjX21pbnVzX2spOworLQorLSAgICAvLyAgLS0tLSgtLS0rLS0t KS0tLS0tLS0tLS0tLS0tLSgtLS0rLS0tKS0tLS0tLS0tLS0tLS0tLSgtLS0rLS0tKS0tLS0KKy0g ICAgLy8gICAgICAgICAgdy0gICAgICAgICAgICAgICAgICAgICAgdyAgICAgICAgICAgICAgICAg ICAgICAgdysKKy0gICAgLy8gICAgICAgICAgPSBjKm0tICAgICAgICAgICAgICAgICAgPSBjKnYg ICAgICAgICAgICAgICAgICAgPSBjKm0rCistICAgIC8vCistICAgIC8vIGRpeWZwOjptdWwgcm91 bmRzIGl0cyByZXN1bHQgYW5kIGNfbWludXNfayBpcyBhcHByb3hpbWF0ZWQgdG9vLiB3LCB3LSBh bmQKKy0gICAgLy8gdysgYXJlIG5vdyBvZmYgYnkgYSBzbWFsbCBhbW91bnQuCistICAgIC8vIElu IGZhY3Q6CistICAgIC8vCistICAgIC8vICAgICAgdyAtIHYgKiAxMF5rIDwgMSB1bHAKKy0gICAg Ly8KKy0gICAgLy8gVG8gYWNjb3VudCBmb3IgdGhpcyBpbmFjY3VyYWN5LCBhZGQgcmVzcC4gc3Vi dHJhY3QgMSB1bHAuCistICAgIC8vCistICAgIC8vICAtLS0tLS0tLSstLS1bLS0tLS0tLS0tLS0t LS0tKC0tLSstLS0pLS0tLS0tLS0tLS0tLS0tXS0tLSstLS0tLS0tLQorLSAgICAvLyAgICAgICAg ICB3LSAgTS0gICAgICAgICAgICAgICAgICB3ICAgICAgICAgICAgICAgICAgIE0rICB3KworLSAg ICAvLworLSAgICAvLyBOb3cgYW55IG51bWJlciBpbiBbTS0sIE0rXSAoYm91bmRzIGluY2x1ZGVk KSB3aWxsIHJvdW5kIHRvIHcgd2hlbiBpbnB1dCwKKy0gICAgLy8gcmVnYXJkbGVzcyBvZiBob3cg dGhlIGlucHV0IHJvdW5kaW5nIGFsZ29yaXRobSBicmVha3MgdGllcy4KKy0gICAgLy8KKy0gICAg Ly8gQW5kIGRpZ2l0X2dlbiBnZW5lcmF0ZXMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIHN1Y2ggbnVt YmVyIGluIFtNLSwgTStdLgorLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBtZWFuIHRo YXQgR3Jpc3UyIGFsd2F5cyBnZW5lcmF0ZXMgdGhlIHNob3J0ZXN0CistICAgIC8vIHBvc3NpYmxl IG51bWJlciBpbiB0aGUgaW50ZXJ2YWwgKG0tLCBtKykuCistICAgIGNvbnN0IGRpeWZwIE1fbWlu dXMod19taW51cy5mICsgMSwgd19taW51cy5lKTsKKy0gICAgY29uc3QgZGl5ZnAgTV9wbHVzICh3 X3BsdXMuZiAgLSAxLCB3X3BsdXMuZSApOworLQorLSAgICBkZWNpbWFsX2V4cG9uZW50ID0gLWNh Y2hlZC5rOyAvLyA9IC0oLWspID0gaworLQorLSAgICBncmlzdTJfZGlnaXRfZ2VuKGJ1ZiwgbGVu LCBkZWNpbWFsX2V4cG9uZW50LCBNX21pbnVzLCB3LCBNX3BsdXMpOworLX0KKy0KKy0vKiEKKy12 ID0gYnVmICogMTBeZGVjaW1hbF9leHBvbmVudAorLWxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBi dWZmZXIgKG51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cykKKy1UaGUgYnVmZmVyIG11c3QgYmUgbGFy Z2UgZW5vdWdoLCBpLmUuID49IG1heF9kaWdpdHMxMC4KKy0qLworLXRlbXBsYXRlPHR5cGVuYW1l IEZsb2F0VHlwZT4KKy1KU09OX0hFRExFWV9OT05fTlVMTCgxKQorLXZvaWQgZ3Jpc3UyKGNoYXIq IGJ1ZiwgaW50JiBsZW4sIGludCYgZGVjaW1hbF9leHBvbmVudCwgRmxvYXRUeXBlIHZhbHVlKQor LXsKKy0gICAgc3RhdGljX2Fzc2VydChkaXlmcDo6a1ByZWNpc2lvbiA+PSBzdGQ6Om51bWVyaWNf bGltaXRzPEZsb2F0VHlwZT46OmRpZ2l0cyArIDMsCistICAgICAgICAgICAgICAgICAgImludGVy bmFsIGVycm9yOiBub3QgZW5vdWdoIHByZWNpc2lvbiIpOworLQorLSAgICBKU09OX0FTU0VSVChz dGQ6OmlzZmluaXRlKHZhbHVlKSk7CistICAgIEpTT05fQVNTRVJUKHZhbHVlID4gMCk7CistCist ICAgIC8vIElmIHRoZSBuZWlnaGJvcnMgKGFuZCBib3VuZGFyaWVzKSBvZiAndmFsdWUnIGFyZSBh bHdheXMgY29tcHV0ZWQgZm9yIGRvdWJsZS1wcmVjaXNpb24KKy0gICAgLy8gbnVtYmVycywgYWxs IGZsb2F0J3MgY2FuIGJlIHJlY292ZXJlZCB1c2luZyBzdHJ0b2QgKGFuZCBzdHJ0b2YpLiBIb3dl dmVyLCB0aGUgcmVzdWx0aW5nCistICAgIC8vIGRlY2ltYWwgcmVwcmVzZW50YXRpb25zIGFyZSBu b3QgZXhhY3RseSAic2hvcnQiLgorLSAgICAvLworLSAgICAvLyBUaGUgZG9jdW1lbnRhdGlvbiBm b3IgJ3N0ZDo6dG9fY2hhcnMnIChodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvdXRp bGl0eS90b19jaGFycykKKy0gICAgLy8gc2F5cyAidmFsdWUgaXMgY29udmVydGVkIHRvIGEgc3Ry aW5nIGFzIGlmIGJ5IHN0ZDo6c3ByaW50ZiBpbiB0aGUgZGVmYXVsdCAoIkMiKSBsb2NhbGUiCist ICAgIC8vIGFuZCBzaW5jZSBzcHJpbnRmIHByb21vdGVzIGZsb2F0cyB0byBkb3VibGVzLCBJIHRo aW5rIHRoaXMgaXMgZXhhY3RseSB3aGF0ICdzdGQ6OnRvX2NoYXJzJworLSAgICAvLyBkb2VzLgor LSAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGRvY3VtZW50YXRpb24gZm9yICdzdGQ6OnRv X2NoYXJzJyByZXF1aXJlcyB0aGF0ICJwYXJzaW5nIHRoZQorLSAgICAvLyByZXByZXNlbnRhdGlv biB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBzdGQ6OmZyb21fY2hhcnMgZnVuY3Rpb24gcmVjb3Zl cnMgdmFsdWUgZXhhY3RseSIuIFRoYXQKKy0gICAgLy8gaW5kaWNhdGVzIHRoYXQgc2luZ2xlIHBy ZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXJzIHNob3VsZCBiZSByZWNvdmVyZWQgdXNpbmcK Ky0gICAgLy8gJ3N0ZDo6c3RydG9mJy4KKy0gICAgLy8KKy0gICAgLy8gTkI6IElmIHRoZSBuZWln aGJvcnMgYXJlIGNvbXB1dGVkIGZvciBzaW5nbGUtcHJlY2lzaW9uIG51bWJlcnMsIHRoZXJlIGlz IGEgc2luZ2xlIGZsb2F0CistICAgIC8vICAgICAoNy4wMzg1MzA3ZS0yNmYpIHdoaWNoIGNhbid0 IGJlIHJlY292ZXJlZCB1c2luZyBzdHJ0b2QuIFRoZSByZXN1bHRpbmcgZG91YmxlIHByZWNpc2lv bgorLSAgICAvLyAgICAgdmFsdWUgaXMgb2ZmIGJ5IDEgdWxwLgorLSNpZiAwCistICAgIGNvbnN0 IGJvdW5kYXJpZXMgdyA9IGNvbXB1dGVfYm91bmRhcmllcyhzdGF0aWNfY2FzdDxkb3VibGU+KHZh bHVlKSk7CistI2Vsc2UKKy0gICAgY29uc3QgYm91bmRhcmllcyB3ID0gY29tcHV0ZV9ib3VuZGFy aWVzKHZhbHVlKTsKKy0jZW5kaWYKKy0KKy0gICAgZ3Jpc3UyKGJ1ZiwgbGVuLCBkZWNpbWFsX2V4 cG9uZW50LCB3Lm1pbnVzLCB3LncsIHcucGx1cyk7CistfQorLQorLS8qIQorLUBicmllZiBhcHBl bmRzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBlIHRvIGJ1ZgorLUByZXR1cm4gYSBwb2lu dGVyIHRvIHRoZSBlbGVtZW50IGZvbGxvd2luZyB0aGUgZXhwb25lbnQuCistQHByZSAtMTAwMCA8 IGUgPCAxMDAwCistKi8KKy1KU09OX0hFRExFWV9OT05fTlVMTCgxKQorLUpTT05fSEVETEVZX1JF VFVSTlNfTk9OX05VTEwKKy1pbmxpbmUgY2hhciogYXBwZW5kX2V4cG9uZW50KGNoYXIqIGJ1Ziwg aW50IGUpCisteworLSAgICBKU09OX0FTU0VSVChlID4gLTEwMDApOworLSAgICBKU09OX0FTU0VS VChlIDwgIDEwMDApOworLQorLSAgICBpZiAoZSA8IDApCistICAgIHsKKy0gICAgICAgIGUgPSAt ZTsKKy0gICAgICAgICpidWYrKyA9ICctJzsKKy0gICAgfQorLSAgICBlbHNlCistICAgIHsKKy0g ICAgICAgICpidWYrKyA9ICcrJzsKKy0gICAgfQorLQorLSAgICBhdXRvIGsgPSBzdGF0aWNfY2Fz dDxzdGQ6OnVpbnQzMl90PihlKTsKKy0gICAgaWYgKGsgPCAxMCkKKy0gICAgeworLSAgICAgICAg Ly8gQWx3YXlzIHByaW50IGF0IGxlYXN0IHR3byBkaWdpdHMgaW4gdGhlIGV4cG9uZW50LgorLSAg ICAgICAgLy8gVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByaW50ZigiJWciKS4KKy0g ICAgICAgICpidWYrKyA9ICcwJzsKKy0gICAgICAgICpidWYrKyA9IHN0YXRpY19jYXN0PGNoYXI+ KCcwJyArIGspOworLSAgICB9CistICAgIGVsc2UgaWYgKGsgPCAxMDApCistICAgIHsKKy0gICAg ICAgICpidWYrKyA9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGsgLyAxMCk7CistICAgICAgICBr ICU9IDEwOworLSAgICAgICAgKmJ1ZisrID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgayk7Cist ICAgIH0KKy0gICAgZWxzZQorLSAgICB7CistICAgICAgICAqYnVmKysgPSBzdGF0aWNfY2FzdDxj aGFyPignMCcgKyBrIC8gMTAwKTsKKy0gICAgICAgIGsgJT0gMTAwOworLSAgICAgICAgKmJ1Zisr ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgayAvIDEwKTsKKy0gICAgICAgIGsgJT0gMTA7Cist ICAgICAgICAqYnVmKysgPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBrKTsKKy0gICAgfQorLQor LSAgICByZXR1cm4gYnVmOworLX0KKy0KKy0vKiEKKy1AYnJpZWYgcHJldHRpZnkgdiA9IGJ1ZiAq IDEwXmRlY2ltYWxfZXhwb25lbnQKKy0KKy1JZiB2IGlzIGluIHRoZSByYW5nZSBbMTBebWluX2V4 cCwgMTBebWF4X2V4cCkgaXQgd2lsbCBiZSBwcmludGVkIGluIGZpeGVkLXBvaW50Cistbm90YXRp b24uIE90aGVyd2lzZSBpdCB3aWxsIGJlIHByaW50ZWQgaW4gZXhwb25lbnRpYWwgbm90YXRpb24u CistCistQHByZSBtaW5fZXhwIDwgMAorLUBwcmUgbWF4X2V4cCA+IDAKKy0qLworLUpTT05fSEVE TEVZX05PTl9OVUxMKDEpCistSlNPTl9IRURMRVlfUkVUVVJOU19OT05fTlVMTAorLWlubGluZSBj aGFyKiBmb3JtYXRfYnVmZmVyKGNoYXIqIGJ1ZiwgaW50IGxlbiwgaW50IGRlY2ltYWxfZXhwb25l bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbl9leHAsIGludCBtYXhfZXhw KQorLXsKKy0gICAgSlNPTl9BU1NFUlQobWluX2V4cCA8IDApOworLSAgICBKU09OX0FTU0VSVCht YXhfZXhwID4gMCk7CistCistICAgIGNvbnN0IGludCBrID0gbGVuOworLSAgICBjb25zdCBpbnQg biA9IGxlbiArIGRlY2ltYWxfZXhwb25lbnQ7CistCistICAgIC8vIHYgPSBidWYgKiAxMF4obi1r KQorLSAgICAvLyBrIGlzIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIGRlY2lt YWwgZGlnaXRzKQorLSAgICAvLyBuIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVjaW1hbCBwb2lu dCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4KKy0KKy0gICAgaWYgKGsgPD0g biAmJiBuIDw9IG1heF9leHApCistICAgIHsKKy0gICAgICAgIC8vIGRpZ2l0c1swMDBdCistICAg ICAgICAvLyBsZW4gPD0gbWF4X2V4cCArIDIKKy0KKy0gICAgICAgIHN0ZDo6bWVtc2V0KGJ1ZiAr IGssICcwJywgc3RhdGljX2Nhc3Q8c2l6ZV90PihuKSAtIHN0YXRpY19jYXN0PHNpemVfdD4oaykp OworLSAgICAgICAgLy8gTWFrZSBpdCBsb29rIGxpa2UgYSBmbG9hdGluZy1wb2ludCBudW1iZXIg KCMzNjIsICMzNzgpCistICAgICAgICBidWZbbiArIDBdID0gJy4nOworLSAgICAgICAgYnVmW24g KyAxXSA9ICcwJzsKKy0gICAgICAgIHJldHVybiBidWYgKyAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihu KSArIDIpOworLSAgICB9CistCistICAgIGlmICgwIDwgbiAmJiBuIDw9IG1heF9leHApCistICAg IHsKKy0gICAgICAgIC8vIGRpZy5pdHMKKy0gICAgICAgIC8vIGxlbiA8PSBtYXhfZGlnaXRzMTAg KyAxCistCistICAgICAgICBKU09OX0FTU0VSVChrID4gbik7CistCistICAgICAgICBzdGQ6Om1l bW1vdmUoYnVmICsgKHN0YXRpY19jYXN0PHNpemVfdD4obikgKyAxKSwgYnVmICsgbiwgc3RhdGlj X2Nhc3Q8c2l6ZV90PihrKSAtIHN0YXRpY19jYXN0PHNpemVfdD4obikpOworLSAgICAgICAgYnVm W25dID0gJy4nOworLSAgICAgICAgcmV0dXJuIGJ1ZiArIChzdGF0aWNfY2FzdDxzaXplX3Q+KGsp ICsgMVUpOworLSAgICB9CistCistICAgIGlmIChtaW5fZXhwIDwgbiAmJiBuIDw9IDApCistICAg IHsKKy0gICAgICAgIC8vIDAuWzAwMF1kaWdpdHMKKy0gICAgICAgIC8vIGxlbiA8PSAyICsgKC1t aW5fZXhwIC0gMSkgKyBtYXhfZGlnaXRzMTAKKy0KKy0gICAgICAgIHN0ZDo6bWVtbW92ZShidWYg KyAoMiArIHN0YXRpY19jYXN0PHNpemVfdD4oLW4pKSwgYnVmLCBzdGF0aWNfY2FzdDxzaXplX3Q+ KGspKTsKKy0gICAgICAgIGJ1ZlswXSA9ICcwJzsKKy0gICAgICAgIGJ1ZlsxXSA9ICcuJzsKKy0g ICAgICAgIHN0ZDo6bWVtc2V0KGJ1ZiArIDIsICcwJywgc3RhdGljX2Nhc3Q8c2l6ZV90Pigtbikp OworLSAgICAgICAgcmV0dXJuIGJ1ZiArICgyVSArIHN0YXRpY19jYXN0PHNpemVfdD4oLW4pICsg c3RhdGljX2Nhc3Q8c2l6ZV90PihrKSk7CistICAgIH0KKy0KKy0gICAgaWYgKGsgPT0gMSkKKy0g ICAgeworLSAgICAgICAgLy8gZEUrMTIzCistICAgICAgICAvLyBsZW4gPD0gMSArIDUKKy0KKy0g ICAgICAgIGJ1ZiArPSAxOworLSAgICB9CistICAgIGVsc2UKKy0gICAgeworLSAgICAgICAgLy8g ZC5pZ2l0c0UrMTIzCistICAgICAgICAvLyBsZW4gPD0gbWF4X2RpZ2l0czEwICsgMSArIDUKKy0K Ky0gICAgICAgIHN0ZDo6bWVtbW92ZShidWYgKyAyLCBidWYgKyAxLCBzdGF0aWNfY2FzdDxzaXpl X3Q+KGspIC0gMSk7CistICAgICAgICBidWZbMV0gPSAnLic7CistICAgICAgICBidWYgKz0gMSAr IHN0YXRpY19jYXN0PHNpemVfdD4oayk7CistICAgIH0KKy0KKy0gICAgKmJ1ZisrID0gJ2UnOwor LSAgICByZXR1cm4gYXBwZW5kX2V4cG9uZW50KGJ1ZiwgbiAtIDEpOworLX0KKy0KKy19IC8vIG5h bWVzcGFjZSBkdG9hX2ltcGwKKy0KKy0vKiEKKy1AYnJpZWYgZ2VuZXJhdGVzIGEgZGVjaW1hbCBy ZXByZXNlbnRhdGlvbiBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHZhbHVlIGluIFtmaXJz dCwgbGFzdCkuCistCistVGhlIGZvcm1hdCBvZiB0aGUgcmVzdWx0aW5nIGRlY2ltYWwgcmVwcmVz ZW50YXRpb24gaXMgc2ltaWxhciB0byBwcmludGYncyAlZworLWZvcm1hdC4gUmV0dXJucyBhbiBp dGVyYXRvciBwb2ludGluZyBwYXN0LXRoZS1lbmQgb2YgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRp b24uCistCistQG5vdGUgVGhlIGlucHV0IG51bWJlciBtdXN0IGJlIGZpbml0ZSwgaS5lLiBOYU4n cyBhbmQgSW5mJ3MgYXJlIG5vdCBzdXBwb3J0ZWQuCistQG5vdGUgVGhlIGJ1ZmZlciBtdXN0IGJl IGxhcmdlIGVub3VnaC4KKy1Abm90ZSBUaGUgcmVzdWx0IGlzIE5PVCBudWxsLXRlcm1pbmF0ZWQu CistKi8KKy10ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+CistSlNPTl9IRURMRVlfTk9OX05V TEwoMSwgMikKKy1KU09OX0hFRExFWV9SRVRVUk5TX05PTl9OVUxMCistY2hhciogdG9fY2hhcnMo Y2hhciogZmlyc3QsIGNvbnN0IGNoYXIqIGxhc3QsIEZsb2F0VHlwZSB2YWx1ZSkKKy17CistICAg IHN0YXRpY19jYXN0PHZvaWQ+KGxhc3QpOyAvLyBtYXliZSB1bnVzZWQgLSBmaXggd2FybmluZwor LSAgICBKU09OX0FTU0VSVChzdGQ6OmlzZmluaXRlKHZhbHVlKSk7CistCistICAgIC8vIFVzZSBz aWduYml0KHZhbHVlKSBpbnN0ZWFkIG9mICh2YWx1ZSA8IDApIHNpbmNlIHNpZ25iaXQgd29ya3Mg Zm9yIC0wLgorLSAgICBpZiAoc3RkOjpzaWduYml0KHZhbHVlKSkKKy0gICAgeworLSAgICAgICAg dmFsdWUgPSAtdmFsdWU7CistICAgICAgICAqZmlyc3QrKyA9ICctJzsKKy0gICAgfQorLQorLSNp ZmRlZiBfX0dOVUNfXworLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorLSNwcmFnbWEgR0ND IGRpYWdub3N0aWMgaWdub3JlZCAiLVdmbG9hdC1lcXVhbCIKKy0jZW5kaWYKKy0gICAgaWYgKHZh bHVlID09IDApIC8vICstMAorLSAgICB7CistICAgICAgICAqZmlyc3QrKyA9ICcwJzsKKy0gICAg ICAgIC8vIE1ha2UgaXQgbG9vayBsaWtlIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyICgjMzYyLCAj Mzc4KQorLSAgICAgICAgKmZpcnN0KysgPSAnLic7CistICAgICAgICAqZmlyc3QrKyA9ICcwJzsK Ky0gICAgICAgIHJldHVybiBmaXJzdDsKKy0gICAgfQorLSNpZmRlZiBfX0dOVUNfXworLSNwcmFn bWEgR0NDIGRpYWdub3N0aWMgcG9wCistI2VuZGlmCistCistICAgIEpTT05fQVNTRVJUKGxhc3Qg LSBmaXJzdCA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9kaWdpdHMxMCk7 CistCistICAgIC8vIENvbXB1dGUgdiA9IGJ1ZmZlciAqIDEwXmRlY2ltYWxfZXhwb25lbnQuCist ICAgIC8vIFRoZSBkZWNpbWFsIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHRoZSBidWZmZXIsIHdoaWNo IG5lZWRzIHRvIGJlIGludGVycHJldGVkCistICAgIC8vIGFzIGFuIHVuc2lnbmVkIGRlY2ltYWwg aW50ZWdlci4KKy0gICAgLy8gbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgaS5lLiB0 aGUgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzLgorLSAgICBpbnQgbGVuID0gMDsKKy0gICAgaW50 IGRlY2ltYWxfZXhwb25lbnQgPSAwOworLSAgICBkdG9hX2ltcGw6OmdyaXN1MihmaXJzdCwgbGVu LCBkZWNpbWFsX2V4cG9uZW50LCB2YWx1ZSk7CistCistICAgIEpTT05fQVNTRVJUKGxlbiA8PSBz dGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9kaWdpdHMxMCk7CistCistICAgIC8v IEZvcm1hdCB0aGUgYnVmZmVyIGxpa2UgcHJpbnRmKCIlLipnIiwgcHJlYywgdmFsdWUpCistICAg IGNvbnN0ZXhwciBpbnQga01pbkV4cCA9IC00OworLSAgICAvLyBVc2UgZGlnaXRzMTAgaGVyZSB0 byBpbmNyZWFzZSBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbiAyLgorLSAgICBjb25zdGV4cHIg aW50IGtNYXhFeHAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46OmRpZ2l0czEwOwor LQorLSAgICBKU09OX0FTU0VSVChsYXN0IC0gZmlyc3QgPj0ga01heEV4cCArIDIpOworLSAgICBK U09OX0FTU0VSVChsYXN0IC0gZmlyc3QgPj0gMiArICgta01pbkV4cCAtIDEpICsgc3RkOjpudW1l cmljX2xpbWl0czxGbG9hdFR5cGU+OjptYXhfZGlnaXRzMTApOworLSAgICBKU09OX0FTU0VSVChs YXN0IC0gZmlyc3QgPj0gc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjptYXhfZGlnaXRz MTAgKyA2KTsKKy0KKy0gICAgcmV0dXJuIGR0b2FfaW1wbDo6Zm9ybWF0X2J1ZmZlcihmaXJzdCwg bGVuLCBkZWNpbWFsX2V4cG9uZW50LCBrTWluRXhwLCBrTWF4RXhwKTsKKy19CistCistfSAvLyBu YW1lc3BhY2UgZGV0YWlsCistfSAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0vLyAjaW5jbHVk ZSA8bmxvaG1hbm4vZGV0YWlsL2V4Y2VwdGlvbnMuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9o bWFubi9kZXRhaWwvbWFjcm9fc2NvcGUuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9k ZXRhaWwvbWV0YS9jcHBfZnV0dXJlLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vZGV0 YWlsL291dHB1dC9iaW5hcnlfd3JpdGVyLmhwcD4KKy0KKy0vLyAjaW5jbHVkZSA8bmxvaG1hbm4v ZGV0YWlsL291dHB1dC9vdXRwdXRfYWRhcHRlcnMuaHBwPgorLQorLS8vICNpbmNsdWRlIDxubG9o bWFubi9kZXRhaWwvdmFsdWVfdC5ocHA+CistCistCistbmFtZXNwYWNlIG5sb2htYW5uCistewor LW5hbWVzcGFjZSBkZXRhaWwKKy17CistLy8vLy8vLy8vLy8vLy8vLy8vLworLS8vIHNlcmlhbGl6 YXRpb24gLy8KKy0vLy8vLy8vLy8vLy8vLy8vLy8vCistCistLy8vIGhvdyB0byB0cmVhdCBkZWNv ZGluZyBlcnJvcnMKKy1lbnVtIGNsYXNzIGVycm9yX2hhbmRsZXJfdAorLXsKKy0gICAgc3RyaWN0 LCAgLy8vPCB0aHJvdyBhIHR5cGVfZXJyb3IgZXhjZXB0aW9uIGluIGNhc2Ugb2YgaW52YWxpZCBV VEYtOAorLSAgICByZXBsYWNlLCAvLy88IHJlcGxhY2UgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMg d2l0aCBVK0ZGRkQKKy0gICAgaWdub3JlICAgLy8vPCBpZ25vcmUgaW52YWxpZCBVVEYtOCBzZXF1 ZW5jZXMKKy19OworLQorLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU+CistY2xhc3Mg c2VyaWFsaXplcgorLXsKKy0gICAgdXNpbmcgc3RyaW5nX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25U eXBlOjpzdHJpbmdfdDsKKy0gICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3QgPSB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpudW1iZXJfZmxvYXRfdDsKKy0gICAgdXNpbmcgbnVtYmVyX2ludGVnZXJfdCA9 IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9pbnRlZ2VyX3Q7CistICAgIHVzaW5nIG51 bWJlcl91bnNpZ25lZF90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVk X3Q7CistICAgIHVzaW5nIGJpbmFyeV9jaGFyX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpi aW5hcnlfdDo6dmFsdWVfdHlwZTsKKy0gICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnVpbnQ4X3Qg VVRGOF9BQ0NFUFQgPSAwOworLSAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6dWludDhfdCBVVEY4 X1JFSkVDVCA9IDE7CistCistICBwdWJsaWM6CistICAgIC8qIQorLSAgICBAcGFyYW1baW5dIHMg IG91dHB1dCBzdHJlYW0gdG8gc2VyaWFsaXplIHRvCistICAgIEBwYXJhbVtpbl0gaWNoYXIgIGlu ZGVudGF0aW9uIGNoYXJhY3RlciB0byB1c2UKKy0gICAgQHBhcmFtW2luXSBlcnJvcl9oYW5kbGVy XyAgaG93IHRvIHJlYWN0IG9uIGRlY29kaW5nIGVycm9ycworLSAgICAqLworLSAgICBzZXJpYWxp emVyKG91dHB1dF9hZGFwdGVyX3Q8Y2hhcj4gcywgY29uc3QgY2hhciBpY2hhciwKKy0gICAgICAg ICAgICAgICBlcnJvcl9oYW5kbGVyX3QgZXJyb3JfaGFuZGxlcl8gPSBlcnJvcl9oYW5kbGVyX3Q6 OnN0cmljdCkKKy0gICAgICAgIDogbyhzdGQ6Om1vdmUocykpCistICAgICAgICAsIGxvYyhzdGQ6 OmxvY2FsZWNvbnYoKSkKKy0gICAgICAgICwgdGhvdXNhbmRzX3NlcChsb2MtPnRob3VzYW5kc19z ZXAgPT0gbnVsbHB0ciA/ICdcMCcgOiBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+Ojp0b19jaGFyX3R5 cGUoKiAobG9jLT50aG91c2FuZHNfc2VwKSkpCistICAgICAgICAsIGRlY2ltYWxfcG9pbnQobG9j LT5kZWNpbWFsX3BvaW50ID09IG51bGxwdHIgPyAnXDAnIDogc3RkOjpjaGFyX3RyYWl0czxjaGFy Pjo6dG9fY2hhcl90eXBlKCogKGxvYy0+ZGVjaW1hbF9wb2ludCkpKQorLSAgICAgICAgLCBpbmRl bnRfY2hhcihpY2hhcikKKy0gICAgICAgICwgaW5kZW50X3N0cmluZyg1MTIsIGluZGVudF9jaGFy KQorLSAgICAgICAgLCBlcnJvcl9oYW5kbGVyKGVycm9yX2hhbmRsZXJfKQorLSAgICB7fQorLQor LSAgICAvLyBkZWxldGUgYmVjYXVzZSBvZiBwb2ludGVyIG1lbWJlcnMKKy0gICAgc2VyaWFsaXpl cihjb25zdCBzZXJpYWxpemVyJikgPSBkZWxldGU7CistICAgIHNlcmlhbGl6ZXImIG9wZXJhdG9y PShjb25zdCBzZXJpYWxpemVyJikgPSBkZWxldGU7CistICAgIHNlcmlhbGl6ZXIoc2VyaWFsaXpl ciYmKSA9IGRlbGV0ZTsKKy0gICAgc2VyaWFsaXplciYgb3BlcmF0b3I9KHNlcmlhbGl6ZXImJikg PSBkZWxldGU7CistICAgIH5zZXJpYWxpemVyKCkgPSBkZWZhdWx0OworLQorLSAgICAvKiEKKy0g ICAgQGJyaWVmIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXJpYWxpemF0aW9uIGZ1 bmN0aW9uCistCistICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBwdWJsaWMgbWVt YmVyIGZ1bmN0aW9uIGR1bXAgYW5kIG9yZ2FuaXplcworLSAgICB0aGUgc2VyaWFsaXphdGlvbiBp bnRlcm5hbGx5LiBUaGUgaW5kZW50YXRpb24gbGV2ZWwgaXMgcHJvcGFnYXRlZCBhcworLSAgICBh ZGRpdGlvbmFsIHBhcmFtZXRlci4gSW4gY2FzZSBvZiBhcnJheXMgYW5kIG9iamVjdHMsIHRoZSBm dW5jdGlvbiBpcworLSAgICBjYWxsZWQgcmVjdXJzaXZlbHkuCistCistICAgIC0gc3RyaW5ncyBh bmQgb2JqZWN0IGtleXMgYXJlIGVzY2FwZWQgdXNpbmcgYGVzY2FwZV9zdHJpbmcoKWAKKy0gICAg LSBpbnRlZ2VyIG51bWJlcnMgYXJlIGNvbnZlcnRlZCBpbXBsaWNpdGx5IHZpYSBgb3BlcmF0b3I8 PGAKKy0gICAgLSBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBzdHJp bmcgdXNpbmcgYCIlZyJgIGZvcm1hdAorLSAgICAtIGJpbmFyeSB2YWx1ZXMgYXJlIHNlcmlhbGl6 ZWQgYXMgb2JqZWN0cyBjb250YWluaW5nIHRoZSBzdWJ0eXBlIGFuZCB0aGUKKy0gICAgICBieXRl IGFycmF5CistCistICAgIEBwYXJhbVtpbl0gdmFsICAgICAgICAgICAgICAgdmFsdWUgdG8gc2Vy aWFsaXplCistICAgIEBwYXJhbVtpbl0gcHJldHR5X3ByaW50ICAgICAgd2hldGhlciB0aGUgb3V0 cHV0IHNoYWxsIGJlIHByZXR0eS1wcmludGVkCistICAgIEBwYXJhbVtpbl0gZW5zdXJlX2FzY2lp IElmIEBhIGVuc3VyZV9hc2NpaSBpcyB0cnVlLCBhbGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMKKy0g ICAgaW4gdGhlIG91dHB1dCBhcmUgZXNjYXBlZCB3aXRoIGBcdVhYWFhgIHNlcXVlbmNlcywgYW5k IHRoZSByZXN1bHQgY29uc2lzdHMKKy0gICAgb2YgQVNDSUkgY2hhcmFjdGVycyBvbmx5LgorLSAg ICBAcGFyYW1baW5dIGluZGVudF9zdGVwICAgICAgIHRoZSBpbmRlbnQgbGV2ZWwKKy0gICAgQHBh cmFtW2luXSBjdXJyZW50X2luZGVudCAgICB0aGUgY3VycmVudCBpbmRlbnQgbGV2ZWwgKG9ubHkg dXNlZCBpbnRlcm5hbGx5KQorLSAgICAqLworLSAgICB2b2lkIGR1bXAoY29uc3QgQmFzaWNKc29u VHlwZSYgdmFsLAorLSAgICAgICAgICAgICAgY29uc3QgYm9vbCBwcmV0dHlfcHJpbnQsCistICAg ICAgICAgICAgICBjb25zdCBib29sIGVuc3VyZV9hc2NpaSwKKy0gICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGludCBpbmRlbnRfc3RlcCwKKy0gICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGludCBjdXJyZW50X2luZGVudCA9IDApCistICAgIHsKKy0gICAgICAgIHN3aXRjaCAodmFsLm1f dHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmICh2YWwubV92YWx1ZS5vYmplY3QtPmVt cHR5KCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRl X2NoYXJhY3RlcnMoInt9IiwgMik7CistICAgICAgICAgICAgICAgICAgICByZXR1cm47CistICAg ICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgaWYgKHByZXR0eV9wcmludCkKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVy cygie1xuIiwgMik7CistCistICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0byBob2xk IGluZGVudGF0aW9uIGZvciByZWN1cnNpdmUgY2FsbHMKKy0gICAgICAgICAgICAgICAgICAgIGNv bnN0IGF1dG8gbmV3X2luZGVudCA9IGN1cnJlbnRfaW5kZW50ICsgaW5kZW50X3N0ZXA7CistICAg ICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoaW5kZW50X3N0cmluZy5z aXplKCkgPCBuZXdfaW5kZW50KSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAg ICAgICAgICAgICAgICBpbmRlbnRfc3RyaW5nLnJlc2l6ZShpbmRlbnRfc3RyaW5nLnNpemUoKSAq IDIsICcgJyk7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAg ICAvLyBmaXJzdCBuLTEgZWxlbWVudHMKKy0gICAgICAgICAgICAgICAgICAgIGF1dG8gaSA9IHZh bC5tX3ZhbHVlLm9iamVjdC0+Y2JlZ2luKCk7CistICAgICAgICAgICAgICAgICAgICBmb3IgKHN0 ZDo6c2l6ZV90IGNudCA9IDA7IGNudCA8IHZhbC5tX3ZhbHVlLm9iamVjdC0+c2l6ZSgpIC0gMTsg KytjbnQsICsraSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg ICAgICBvLT53cml0ZV9jaGFyYWN0ZXJzKGluZGVudF9zdHJpbmcuY19zdHIoKSwgbmV3X2luZGVu dCk7CistICAgICAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVyKCdcIicpOwor LSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfZXNjYXBlZChpLT5maXJzdCwgZW5zdXJlX2Fz Y2lpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXJzKCJcIjog IiwgMyk7CistICAgICAgICAgICAgICAgICAgICAgICAgZHVtcChpLT5zZWNvbmQsIHRydWUsIGVu c3VyZV9hc2NpaSwgaW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOworLSAgICAgICAgICAgICAgICAg ICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoIixcbiIsIDIpOworLSAgICAgICAgICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBlbGVtZW50CistICAgICAgICAg ICAgICAgICAgICBKU09OX0FTU0VSVChpICE9IHZhbC5tX3ZhbHVlLm9iamVjdC0+Y2VuZCgpKTsK Ky0gICAgICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKHN0ZDo6bmV4dChpKSA9PSB2YWwubV92 YWx1ZS5vYmplY3QtPmNlbmQoKSk7CistICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFy YWN0ZXJzKGluZGVudF9zdHJpbmcuY19zdHIoKSwgbmV3X2luZGVudCk7CistICAgICAgICAgICAg ICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXIoJ1wiJyk7CistICAgICAgICAgICAgICAgICAgICBk dW1wX2VzY2FwZWQoaS0+Zmlyc3QsIGVuc3VyZV9hc2NpaSk7CistICAgICAgICAgICAgICAgICAg ICBvLT53cml0ZV9jaGFyYWN0ZXJzKCJcIjogIiwgMyk7CistICAgICAgICAgICAgICAgICAgICBk dW1wKGktPnNlY29uZCwgdHJ1ZSwgZW5zdXJlX2FzY2lpLCBpbmRlbnRfc3RlcCwgbmV3X2luZGVu dCk7CistCistICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXIoJ1xuJyk7Cist ICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXJzKGluZGVudF9zdHJpbmcuY19z dHIoKSwgY3VycmVudF9pbmRlbnQpOworLSAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hh cmFjdGVyKCd9Jyk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZQor LSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0 ZXIoJ3snKTsKKy0KKy0gICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IG4tMSBlbGVtZW50cwor LSAgICAgICAgICAgICAgICAgICAgYXV0byBpID0gdmFsLm1fdmFsdWUub2JqZWN0LT5jYmVnaW4o KTsKKy0gICAgICAgICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgY250ID0gMDsgY250IDwg dmFsLm1fdmFsdWUub2JqZWN0LT5zaXplKCkgLSAxOyArK2NudCwgKytpKQorLSAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3Rlcign XCInKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wX2VzY2FwZWQoaS0+Zmlyc3QsIGVu c3VyZV9hc2NpaSk7CistICAgICAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVy cygiXCI6IiwgMik7CistICAgICAgICAgICAgICAgICAgICAgICAgZHVtcChpLT5zZWNvbmQsIGZh bHNlLCBlbnN1cmVfYXNjaWksIGluZGVudF9zdGVwLCBjdXJyZW50X2luZGVudCk7CistICAgICAg ICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVyKCcsJyk7CistICAgICAgICAgICAg ICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAvLyBsYXN0IGVsZW1lbnQKKy0gICAg ICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKGkgIT0gdmFsLm1fdmFsdWUub2JqZWN0LT5jZW5k KCkpOworLSAgICAgICAgICAgICAgICAgICAgSlNPTl9BU1NFUlQoc3RkOjpuZXh0KGkpID09IHZh bC5tX3ZhbHVlLm9iamVjdC0+Y2VuZCgpKTsKKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRl X2NoYXJhY3RlcignXCInKTsKKy0gICAgICAgICAgICAgICAgICAgIGR1bXBfZXNjYXBlZChpLT5m aXJzdCwgZW5zdXJlX2FzY2lpKTsKKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJh Y3RlcnMoIlwiOiIsIDIpOworLSAgICAgICAgICAgICAgICAgICAgZHVtcChpLT5zZWNvbmQsIGZh bHNlLCBlbnN1cmVfYXNjaWksIGluZGVudF9zdGVwLCBjdXJyZW50X2luZGVudCk7CistCistICAg ICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXIoJ30nKTsKKy0gICAgICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgICAgICByZXR1cm47CistICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICBpZiAodmFsLm1fdmFsdWUuYXJyYXktPmVtcHR5KCkpCistICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoIltdIiwgMik7Cist ICAgICAgICAgICAgICAgICAgICByZXR1cm47CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICAgICAgaWYgKHByZXR0eV9wcmludCkKKy0gICAgICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycygiW1xuIiwgMik7CistCistICAgICAg ICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0byBob2xkIGluZGVudGF0aW9uIGZvciByZWN1cnNp dmUgY2FsbHMKKy0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gbmV3X2luZGVudCA9IGN1 cnJlbnRfaW5kZW50ICsgaW5kZW50X3N0ZXA7CistICAgICAgICAgICAgICAgICAgICBpZiAoSlNP Tl9IRURMRVlfVU5MSUtFTFkoaW5kZW50X3N0cmluZy5zaXplKCkgPCBuZXdfaW5kZW50KSkKKy0g ICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRfc3Ry aW5nLnJlc2l6ZShpbmRlbnRfc3RyaW5nLnNpemUoKSAqIDIsICcgJyk7CistICAgICAgICAgICAg ICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBuLTEgZWxlbWVudHMK Ky0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpID0gdmFsLm1fdmFsdWUuYXJyYXktPmNi ZWdpbigpOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IHZhbC5tX3ZhbHVlLmFy cmF5LT5jZW5kKCkgLSAxOyArK2kpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycyhpbmRlbnRfc3RyaW5nLmNfc3RyKCks IG5ld19pbmRlbnQpOworLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXAoKmksIHRydWUsIGVu c3VyZV9hc2NpaSwgaW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOworLSAgICAgICAgICAgICAgICAg ICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoIixcbiIsIDIpOworLSAgICAgICAgICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBlbGVtZW50CistICAgICAgICAg ICAgICAgICAgICBKU09OX0FTU0VSVCghdmFsLm1fdmFsdWUuYXJyYXktPmVtcHR5KCkpOworLSAg ICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycyhpbmRlbnRfc3RyaW5nLmNfc3Ry KCksIG5ld19pbmRlbnQpOworLSAgICAgICAgICAgICAgICAgICAgZHVtcCh2YWwubV92YWx1ZS5h cnJheS0+YmFjaygpLCB0cnVlLCBlbnN1cmVfYXNjaWksIGluZGVudF9zdGVwLCBuZXdfaW5kZW50 KTsKKy0KKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcignXG4nKTsKKy0g ICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoaW5kZW50X3N0cmluZy5jX3N0 cigpLCBjdXJyZW50X2luZGVudCk7CistICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFy YWN0ZXIoJ10nKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlCist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3Rl cignWycpOworLQorLSAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3Qgbi0xIGVsZW1lbnRzCist ICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaSA9IHZhbC5tX3ZhbHVlLmFycmF5LT5jYmVn aW4oKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSB2YWwubV92YWx1ZS5hcnJh eS0+Y2VuZCgpIC0gMTsgKytpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAgICAgICAgIGR1bXAoKmksIGZhbHNlLCBlbnN1cmVfYXNjaWksIGluZGVudF9zdGVwLCBj dXJyZW50X2luZGVudCk7CistICAgICAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFj dGVyKCcsJyk7CistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAg ICAvLyBsYXN0IGVsZW1lbnQKKy0gICAgICAgICAgICAgICAgICAgIEpTT05fQVNTRVJUKCF2YWwu bV92YWx1ZS5hcnJheS0+ZW1wdHkoKSk7CistICAgICAgICAgICAgICAgICAgICBkdW1wKHZhbC5t X3ZhbHVlLmFycmF5LT5iYWNrKCksIGZhbHNlLCBlbnN1cmVfYXNjaWksIGluZGVudF9zdGVwLCBj dXJyZW50X2luZGVudCk7CistCistICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0 ZXIoJ10nKTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICByZXR1cm47 CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVyKCdcIicp OworLSAgICAgICAgICAgICAgICBkdW1wX2VzY2FwZWQoKnZhbC5tX3ZhbHVlLnN0cmluZywgZW5z dXJlX2FzY2lpKTsKKy0gICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVyKCdcIicpOwor LSAgICAgICAgICAgICAgICByZXR1cm47CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg aWYgKHByZXR0eV9wcmludCkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAg ICAgby0+d3JpdGVfY2hhcmFjdGVycygie1xuIiwgMik7CistCistICAgICAgICAgICAgICAgICAg ICAvLyB2YXJpYWJsZSB0byBob2xkIGluZGVudGF0aW9uIGZvciByZWN1cnNpdmUgY2FsbHMKKy0g ICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gbmV3X2luZGVudCA9IGN1cnJlbnRfaW5kZW50 ICsgaW5kZW50X3N0ZXA7CistICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5M SUtFTFkoaW5kZW50X3N0cmluZy5zaXplKCkgPCBuZXdfaW5kZW50KSkKKy0gICAgICAgICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRfc3RyaW5nLnJlc2l6ZShp bmRlbnRfc3RyaW5nLnNpemUoKSAqIDIsICcgJyk7CistICAgICAgICAgICAgICAgICAgICB9Cist CistICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXJzKGluZGVudF9zdHJpbmcu Y19zdHIoKSwgbmV3X2luZGVudCk7CistCistICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9j aGFyYWN0ZXJzKCJcImJ5dGVzXCI6IFsiLCAxMCk7CistCistICAgICAgICAgICAgICAgICAgICBp ZiAoIXZhbC5tX3ZhbHVlLmJpbmFyeS0+ZW1wdHkoKSkKKy0gICAgICAgICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaSA9IHZhbC5tX3ZhbHVlLmJpbmFy eS0+Y2JlZ2luKCk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IHZhbC5t X3ZhbHVlLmJpbmFyeS0+Y2VuZCgpIC0gMTsgKytpKQorLSAgICAgICAgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9pbnRlZ2VyKCppKTsKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycygiLCAiLCAyKTsKKy0g ICAgICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9p bnRlZ2VyKHZhbC5tX3ZhbHVlLmJpbmFyeS0+YmFjaygpKTsKKy0gICAgICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoIl0sXG4iLCAz KTsKKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoaW5kZW50X3N0cmlu Zy5jX3N0cigpLCBuZXdfaW5kZW50KTsKKy0KKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRl X2NoYXJhY3RlcnMoIlwic3VidHlwZVwiOiAiLCAxMSk7CistICAgICAgICAgICAgICAgICAgICBp ZiAodmFsLm1fdmFsdWUuYmluYXJ5LT5oYXNfc3VidHlwZSgpKQorLSAgICAgICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfaW50ZWdlcih2YWwubV92YWx1ZS5i aW5hcnktPnN1YnR5cGUoKSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAg ICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICAgICAgby0+d3JpdGVfY2hhcmFjdGVycygibnVsbCIsIDQpOworLSAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVyKCdcbicpOworLSAg ICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycyhpbmRlbnRfc3RyaW5nLmNfc3Ry KCksIGN1cnJlbnRfaW5kZW50KTsKKy0gICAgICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJh Y3RlcignfScpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVy cygie1wiYnl0ZXNcIjpbIiwgMTApOworLQorLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwu bV92YWx1ZS5iaW5hcnktPmVtcHR5KCkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGkgPSB2YWwubV92YWx1ZS5iaW5hcnktPmNiZWdp bigpOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSB2YWwubV92YWx1ZS5i aW5hcnktPmNlbmQoKSAtIDE7ICsraSkKKy0gICAgICAgICAgICAgICAgICAgICAgICB7CistICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfaW50ZWdlcigqaSk7CistICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcignLCcpOworLSAgICAgICAgICAgICAg ICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wX2ludGVnZXIodmFsLm1f dmFsdWUuYmluYXJ5LT5iYWNrKCkpOworLSAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAg ICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycygiXSxcInN1YnR5cGVcIjoiLCAxMik7 CistICAgICAgICAgICAgICAgICAgICBpZiAodmFsLm1fdmFsdWUuYmluYXJ5LT5oYXNfc3VidHlw ZSgpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGR1 bXBfaW50ZWdlcih2YWwubV92YWx1ZS5iaW5hcnktPnN1YnR5cGUoKSk7CistICAgICAgICAgICAg ICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVyKCd9Jyk7CistICAgICAgICAgICAgICAgICAg ICB9CistICAgICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycygibnVsbH0iLCA1KTsK Ky0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAg ICAgICByZXR1cm47CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmICh2YWwubV92 YWx1ZS5ib29sZWFuKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBv LT53cml0ZV9jaGFyYWN0ZXJzKCJ0cnVlIiwgNCk7CistICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBvLT53cml0ZV9jaGFyYWN0ZXJzKCJmYWxzZSIsIDUpOworLSAgICAgICAgICAgICAgICB9Cist ICAgICAgICAgICAgICAgIHJldHVybjsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAg Y2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIGR1bXBfaW50ZWdlcih2YWwubV92YWx1ZS5udW1iZXJfaW50ZWdlcik7CistICAgICAg ICAgICAgICAgIHJldHVybjsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICBkdW1wX2ludGVnZXIodmFsLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKy0gICAgICAgICAg ICAgICAgcmV0dXJuOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGR1bXBf ZmxvYXQodmFsLm1fdmFsdWUubnVtYmVyX2Zsb2F0KTsKKy0gICAgICAgICAgICAgICAgcmV0dXJu OworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRl ZDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMo IjxkaXNjYXJkZWQ+IiwgMTEpOworLSAgICAgICAgICAgICAgICByZXR1cm47CistICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoIm51bGwiLCA0KTsKKy0gICAg ICAgICAgICAgICAgcmV0dXJuOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBkZWZh dWx0OiAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgIEpTT05f QVNTRVJUKGZhbHNlKTsgLy8gTk9MSU5UKGNlcnQtZGNsMDMtYyxoaWNwcC1zdGF0aWMtYXNzZXJ0 LG1pc2Mtc3RhdGljLWFzc2VydCkgTENPVl9FWENMX0xJTkUKKy0gICAgICAgIH0KKy0gICAgfQor LQorLSAgSlNPTl9QUklWQVRFX1VOTEVTU19URVNURUQ6CistICAgIC8qIQorLSAgICBAYnJpZWYg ZHVtcCBlc2NhcGVkIHN0cmluZworLQorLSAgICBFc2NhcGUgYSBzdHJpbmcgYnkgcmVwbGFjaW5n IGNlcnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGJ5IGEgc2VxdWVuY2Ugb2YgYW4KKy0gICAgZXNj YXBlIGNoYXJhY3RlciAoYmFja3NsYXNoKSBhbmQgYW5vdGhlciBjaGFyYWN0ZXIgYW5kIG90aGVy IGNvbnRyb2wKKy0gICAgY2hhcmFjdGVycyBieSBhIHNlcXVlbmNlIG9mICJcdSIgZm9sbG93ZWQg YnkgYSBmb3VyLWRpZ2l0IGhleAorLSAgICByZXByZXNlbnRhdGlvbi4gVGhlIGVzY2FwZWQgc3Ry aW5nIGlzIHdyaXR0ZW4gdG8gb3V0cHV0IHN0cmVhbSBAYSBvLgorLQorLSAgICBAcGFyYW1baW5d IHMgIHRoZSBzdHJpbmcgdG8gZXNjYXBlCistICAgIEBwYXJhbVtpbl0gZW5zdXJlX2FzY2lpICB3 aGV0aGVyIHRvIGVzY2FwZSBub24tQVNDSUkgY2hhcmFjdGVycyB3aXRoCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcdVhYWFggc2VxdWVuY2VzCistCistICAgIEBjb21wbGV4aXR5IExp bmVhciBpbiB0aGUgbGVuZ3RoIG9mIHN0cmluZyBAYSBzLgorLSAgICAqLworLSAgICB2b2lkIGR1 bXBfZXNjYXBlZChjb25zdCBzdHJpbmdfdCYgcywgY29uc3QgYm9vbCBlbnN1cmVfYXNjaWkpCist ICAgIHsKKy0gICAgICAgIHN0ZDo6dWludDMyX3QgY29kZXBvaW50e307CistICAgICAgICBzdGQ6 OnVpbnQ4X3Qgc3RhdGUgPSBVVEY4X0FDQ0VQVDsKKy0gICAgICAgIHN0ZDo6c2l6ZV90IGJ5dGVz ID0gMDsgIC8vIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHN0cmluZ19idWZmZXIKKy0KKy0g ICAgICAgIC8vIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGF0IHRoZSBwb2ludCBvZiB0aGUgbGFz dCB2YWxpZCBieXRlCistICAgICAgICBzdGQ6OnNpemVfdCBieXRlc19hZnRlcl9sYXN0X2FjY2Vw dCA9IDA7CistICAgICAgICBzdGQ6OnNpemVfdCB1bmR1bXBlZF9jaGFycyA9IDA7CistCistICAg ICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgcy5zaXplKCk7ICsraSkKKy0gICAgICAg IHsKKy0gICAgICAgICAgICBjb25zdCBhdXRvIGJ5dGUgPSBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4 X3Q+KHNbaV0pOworLQorLSAgICAgICAgICAgIHN3aXRjaCAoZGVjb2RlKHN0YXRlLCBjb2RlcG9p bnQsIGJ5dGUpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgY2FzZSBVVEY4X0FD Q0VQVDogIC8vIGRlY29kZSBmb3VuZCBhIG5ldyBjb2RlIHBvaW50CistICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZXBvaW50KQorLSAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwODogLy8gYmFja3Nw YWNlCistICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJpbmdfYnVmZmVyW2J5dGVzKytdID0gJ1xcJzsKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RyaW5nX2J1ZmZlcltieXRlcysrXSA9ICdiJzsKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwOTogLy8gaG9yaXpvbnRhbCB0YWIKKy0gICAgICAg ICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19i dWZmZXJbYnl0ZXMrK10gPSAnXFwnOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJp bmdfYnVmZmVyW2J5dGVzKytdID0gJ3QnOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKy0gICAgICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAweDBBOiAvLyBuZXdsaW5lCistICAgICAgICAgICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfYnVmZmVyW2J5dGVzKytdID0gJ1xc JzsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX2J1ZmZlcltieXRlcysrXSA9 ICduJzsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAg ICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwQzogLy8g Zm9ybWZlZWQKKy0gICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmluZ19idWZmZXJbYnl0ZXMrK10gPSAnXFwnOworLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJpbmdfYnVmZmVyW2J5dGVzKytdID0gJ2YnOworLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgICAgICB9CistCist ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDBEOiAvLyBjYXJyaWFnZSByZXR1cm4KKy0g ICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cmluZ19idWZmZXJbYnl0ZXMrK10gPSAnXFwnOworLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJpbmdfYnVmZmVyW2J5dGVzKytdID0gJ3InOworLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSAweDIyOiAvLyBxdW90YXRpb24gbWFyaworLSAgICAgICAgICAgICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX2J1ZmZlclti eXRlcysrXSA9ICdcXCc7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19idWZm ZXJbYnl0ZXMrK10gPSAnXCInOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK Ky0gICAgICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAweDVDOiAvLyByZXZlcnNlIHNvbGlkdXMKKy0gICAgICAgICAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19idWZmZXJbYnl0ZXMrK10gPSAn XFwnOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfYnVmZmVyW2J5dGVzKytd ID0gJ1xcJzsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAg ICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cist ICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv LyBlc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzICgweDAwLi4weDFGKSBvciwgaWYKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlX2FzY2lpIHBhcmFtZXRlciBpcyB1c2VkLCBu b24tQVNDSUkgY2hhcmFjdGVycworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNv ZGVwb2ludCA8PSAweDFGKSB8fCAoZW5zdXJlX2FzY2lpICYmIChjb2RlcG9pbnQgPj0gMHg3Rikp KQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoY29kZXBvaW50IDw9IDB4RkZGRikKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBO T0xJTlRORVhUTElORShjcHBjb3JlZ3VpZGVsaW5lcy1wcm8tdHlwZS12YXJhcmcsaGljcHAtdmFy YXJnKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZv aWQ+KChzdGQ6OnNucHJpbnRmKShzdHJpbmdfYnVmZmVyLmRhdGEoKSArIGJ5dGVzLCA3LCAiXFx1 JTA0eCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6dWludDE2X3Q+KGNvZGVwb2lu dCkpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyArPSA2Owor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGNwcGNv cmVndWlkZWxpbmVzLXByby10eXBlLXZhcmFyZyxoaWNwcC12YXJhcmcpCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oKHN0ZDo6c25wcmludGYp KHN0cmluZ19idWZmZXIuZGF0YSgpICsgYnl0ZXMsIDEzLCAiXFx1JTA0eFxcdSUwNHgiLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQxNl90PigweEQ3QzB1ICsgKGNvZGVwb2lu dCA+PiAxMHUpKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1aW50MTZfdD4oMHhE QzAwdSArIChjb2RlcG9pbnQgJiAweDNGRnUpKSkpOworLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ5dGVzICs9IDEyOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSBieXRlIHRvIGJ1ZmZlciAoYWxsIHByZXZp b3VzIGJ5dGVzCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIGNvcGll ZCBoYXZlIGluIGRlZmF1bHQgY2FzZSBhYm92ZSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cmluZ19idWZmZXJbYnl0ZXMrK10gPSBzW2ldOworLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAg ICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAg ICAgICAgICAgICAgIC8vIHdyaXRlIGJ1ZmZlciBhbmQgcmVzZXQgaW5kZXg7IHRoZXJlIG11c3Qg YmUgMTMgYnl0ZXMKKy0gICAgICAgICAgICAgICAgICAgIC8vIGxlZnQsIGFzIHRoaXMgaXMgdGhl IG1heGltYWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCistICAgICAgICAgICAgICAgICAgICAvLyB3 cml0dGVuICgiXHV4eHh4XHV4eHh4XDAiKSBmb3Igb25lIGNvZGUgcG9pbnQKKy0gICAgICAgICAg ICAgICAgICAgIGlmIChzdHJpbmdfYnVmZmVyLnNpemUoKSAtIGJ5dGVzIDwgMTMpCistICAgICAg ICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFj dGVycyhzdHJpbmdfYnVmZmVyLmRhdGEoKSwgYnl0ZXMpOworLSAgICAgICAgICAgICAgICAgICAg ICAgIGJ5dGVzID0gMDsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAg ICAgICAgIC8vIHJlbWVtYmVyIHRoZSBieXRlIHBvc2l0aW9uIG9mIHRoaXMgYWNjZXB0CistICAg ICAgICAgICAgICAgICAgICBieXRlc19hZnRlcl9sYXN0X2FjY2VwdCA9IGJ5dGVzOworLSAgICAg ICAgICAgICAgICAgICAgdW5kdW1wZWRfY2hhcnMgPSAwOworLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSBVVEY4 X1JFSkVDVDogIC8vIGRlY29kZSBmb3VuZCBpbnZhbGlkIFVURi04IGJ5dGUKKy0gICAgICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlcnJvcl9oYW5kbGVyKQorLSAg ICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZXJyb3Jf aGFuZGxlcl90OjpzdHJpY3Q6CistICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3MgPDwgc3RkOjp1cHBlcmNhc2UgPDwgc3RkOjpzZXRmaWxsKCcwJykg PDwgc3RkOjpzZXR3KDIpIDw8IHN0ZDo6aGV4IDw8IChieXRlIHwgMCk7CistICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMxNiwgImludmFs aWQgVVRGLTggYnl0ZSBhdCBpbmRleCAiICsgc3RkOjp0b19zdHJpbmcoaSkgKyAiOiAweCIgKyBz cy5zdHIoKSwgQmFzaWNKc29uVHlwZSgpKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZXJyb3JfaGFuZGxlcl90OjppZ25vcmU6 CistICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlcnJvcl9oYW5kbGVyX3Q6OnJlcGxhY2U6 CistICAgICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBpbiBjYXNlIHdlIHNhdyB0aGlzIGNoYXJhY3RlciB0aGUgZmlyc3QgdGltZSwgd2UKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd291bGQgbGlrZSB0byByZWFkIGl0IGFnYWlu LCBiZWNhdXNlIHRoZSBieXRlCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heSBi ZSBPSyBmb3IgaXRzZWxmLCBidXQganVzdCBub3QgT0sgZm9yIHRoZQorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLyBwcmV2aW91cyBzZXF1ZW5jZQorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAodW5kdW1wZWRfY2hhcnMgPiAwKQorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWk7CistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g cmVzZXQgbGVuZ3RoIGJ1ZmZlciB0byB0aGUgbGFzdCBhY2NlcHRlZCBpbmRleDsKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gdGh1cyByZW1vdmluZy9pZ25vcmluZyB0aGUgaW52YWxp ZCBjaGFyYWN0ZXJzCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzID0gYnl0ZXNf YWZ0ZXJfbGFzdF9hY2NlcHQ7CistCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl cnJvcl9oYW5kbGVyID09IGVycm9yX2hhbmRsZXJfdDo6cmVwbGFjZSkKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRk IGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZW5zdXJlX2FzY2lpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19idWZmZXJbYnl0ZXMr K10gPSAnXFwnOworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19i dWZmZXJbYnl0ZXMrK10gPSAndSc7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RyaW5nX2J1ZmZlcltieXRlcysrXSA9ICdmJzsKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJpbmdfYnVmZmVyW2J5dGVzKytdID0gJ2YnOworLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19idWZmZXJbYnl0ZXMrK10gPSAnZic7Cist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX2J1ZmZlcltieXRlcysr XSA9ICdkJzsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfYnVmZmVy W2J5dGVzKytdID0gZGV0YWlsOjpiaW5hcnlfd3JpdGVyPEJhc2ljSnNvblR5cGUsIGNoYXI+Ojp0 b19jaGFyX3R5cGUoJ1x4RUYnKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJpbmdfYnVmZmVyW2J5dGVzKytdID0gZGV0YWlsOjpiaW5hcnlfd3JpdGVyPEJhc2ljSnNv blR5cGUsIGNoYXI+Ojp0b19jaGFyX3R5cGUoJ1x4QkYnKTsKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJpbmdfYnVmZmVyW2J5dGVzKytdID0gZGV0YWlsOjpiaW5hcnlf d3JpdGVyPEJhc2ljSnNvblR5cGUsIGNoYXI+Ojp0b19jaGFyX3R5cGUoJ1x4QkQnKTsKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIHdyaXRlIGJ1ZmZlciBhbmQgcmVzZXQgaW5kZXg7IHRoZXJlIG11c3QgYmUg MTMgYnl0ZXMKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlZnQsIGFzIHRo aXMgaXMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyB3cml0dGVuICgiXHV4eHh4XHV4eHh4XDAiKSBmb3Igb25lIGNv ZGUgcG9pbnQKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdfYnVm ZmVyLnNpemUoKSAtIGJ5dGVzIDwgMTMpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFj dGVycyhzdHJpbmdfYnVmZmVyLmRhdGEoKSwgYnl0ZXMpOworLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ5dGVzID0gMDsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2FmdGVyX2xh c3RfYWNjZXB0ID0gYnl0ZXM7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0KKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kdW1wZWRfY2hhcnMgPSAwOworLQorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBzdHJpbmcK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBVVEY4X0FDQ0VQVDsKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgLy8gTENP Vl9FWENMX0xJTkUKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTl9BU1NFUlQoZmFs c2UpOyAvLyBOT0xJTlQoY2VydC1kY2wwMy1jLGhpY3BwLXN0YXRpYy1hc3NlcnQsbWlzYy1zdGF0 aWMtYXNzZXJ0KSBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICAgICAgZGVmYXVsdDogIC8vIGRlY29kZSBmb3VuZCB5ZXQgaW5jb21wbGV0ZSBtdWx0aS1ieXRl IGNvZGUgcG9pbnQKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgaWYg KCFlbnN1cmVfYXNjaWkpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgLy8gY29kZSBwb2ludCB3aWxsIG5vdCBiZSBlc2NhcGVkIC0gY29weSBieXRlIHRv IGJ1ZmZlcgorLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19idWZmZXJbYnl0ZXMrK10g PSBzW2ldOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgKyt1 bmR1bXBlZF9jaGFyczsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLQorLSAgICAgICAgLy8gd2UgZmlu aXNoZWQgcHJvY2Vzc2luZyB0aGUgc3RyaW5nCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElL RUxZKHN0YXRlID09IFVURjhfQUNDRVBUKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyB3 cml0ZSBidWZmZXIKKy0gICAgICAgICAgICBpZiAoYnl0ZXMgPiAwKQorLSAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycyhzdHJpbmdfYnVmZmVyLmRhdGEo KSwgYnl0ZXMpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0g ICAgICAgIHsKKy0gICAgICAgICAgICAvLyB3ZSBmaW5pc2ggcmVhZGluZywgYnV0IGRvIG5vdCBh Y2NlcHQ6IHN0cmluZyB3YXMgaW5jb21wbGV0ZQorLSAgICAgICAgICAgIHN3aXRjaCAoZXJyb3Jf aGFuZGxlcikKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNhc2UgZXJyb3JfaGFu ZGxlcl90OjpzdHJpY3Q6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworLSAgICAgICAgICAgICAgICAgICAgc3MgPDwgc3RkOjp1 cHBlcmNhc2UgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KDIpIDw8IHN0ZDo6aGV4 IDw8IChzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KHMuYmFjaygpKSB8IDApOworLSAgICAgICAg ICAgICAgICAgICAgSlNPTl9USFJPVyh0eXBlX2Vycm9yOjpjcmVhdGUoMzE2LCAiaW5jb21wbGV0 ZSBVVEYtOCBzdHJpbmc7IGxhc3QgYnl0ZTogMHgiICsgc3Muc3RyKCksIEJhc2ljSnNvblR5cGUo KSkpOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgZXJyb3Jf aGFuZGxlcl90OjppZ25vcmU6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgIC8vIHdyaXRlIGFsbCBhY2NlcHRlZCBieXRlcworLSAgICAgICAgICAgICAgICAgICAgby0+ d3JpdGVfY2hhcmFjdGVycyhzdHJpbmdfYnVmZmVyLmRhdGEoKSwgYnl0ZXNfYWZ0ZXJfbGFzdF9h Y2NlcHQpOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgIH0K Ky0KKy0gICAgICAgICAgICAgICAgY2FzZSBlcnJvcl9oYW5kbGVyX3Q6OnJlcGxhY2U6CistICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGFsbCBhY2NlcHRl ZCBieXRlcworLSAgICAgICAgICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycyhzdHJpbmdf YnVmZmVyLmRhdGEoKSwgYnl0ZXNfYWZ0ZXJfbGFzdF9hY2NlcHQpOworLSAgICAgICAgICAgICAg ICAgICAgLy8gYWRkIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyCistICAgICAgICAgICAgICAgICAg ICBpZiAoZW5zdXJlX2FzY2lpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAgICAgICAgIG8tPndyaXRlX2NoYXJhY3RlcnMoIlxcdWZmZmQiLCA2KTsKKy0gICAgICAg ICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXJzKCJc eEVGXHhCRlx4QkQiLCAzKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGRl ZmF1bHQ6ICAgICAgICAgICAgLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICAgICAgICAg IEpTT05fQVNTRVJUKGZhbHNlKTsgLy8gTk9MSU5UKGNlcnQtZGNsMDMtYyxoaWNwcC1zdGF0aWMt YXNzZXJ0LG1pc2Mtc3RhdGljLWFzc2VydCkgTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICB9 CistICAgICAgICB9CistICAgIH0KKy0KKy0gIHByaXZhdGU6CistICAgIC8qIQorLSAgICBAYnJp ZWYgY291bnQgZGlnaXRzCistCistICAgIENvdW50IHRoZSBudW1iZXIgb2YgZGVjaW1hbCAoYmFz ZSAxMCkgZGlnaXRzIGZvciBhbiBpbnB1dCB1bnNpZ25lZCBpbnRlZ2VyLgorLQorLSAgICBAcGFy YW1baW5dIHggIHVuc2lnbmVkIGludGVnZXIgbnVtYmVyIHRvIGNvdW50IGl0cyBkaWdpdHMKKy0g ICAgQHJldHVybiAgICBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMKKy0gICAgKi8KKy0gICAgaW5s aW5lIHVuc2lnbmVkIGludCBjb3VudF9kaWdpdHMobnVtYmVyX3Vuc2lnbmVkX3QgeCkgbm9leGNl cHQKKy0gICAgeworLSAgICAgICAgdW5zaWduZWQgaW50IG5fZGlnaXRzID0gMTsKKy0gICAgICAg IGZvciAoOzspCistICAgICAgICB7CistICAgICAgICAgICAgaWYgKHggPCAxMCkKKy0gICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBuX2RpZ2l0czsKKy0gICAgICAgICAgICB9 CistICAgICAgICAgICAgaWYgKHggPCAxMDApCistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICByZXR1cm4gbl9kaWdpdHMgKyAxOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBp ZiAoeCA8IDEwMDApCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gbl9k aWdpdHMgKyAyOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBpZiAoeCA8IDEwMDAwKQor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIG5fZGlnaXRzICsgMzsKKy0g ICAgICAgICAgICB9CistICAgICAgICAgICAgeCA9IHggLyAxMDAwMHU7CistICAgICAgICAgICAg bl9kaWdpdHMgKz0gNDsKKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvLyB0ZW1wbGF0ZXMg dG8gYXZvaWQgd2FybmluZ3MgYWJvdXQgdXNlbGVzcyBjYXN0cworLSAgICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgTnVtYmVyVHlwZSwgZW5hYmxlX2lmX3Q8c3RkOjppc19zaWduZWQ8TnVtYmVyVHlwZT46 OnZhbHVlLCBpbnQ+ID0gMD4KKy0gICAgYm9vbCBpc19uZWdhdGl2ZV9udW1iZXIoTnVtYmVyVHlw ZSB4KQorLSAgICB7CistICAgICAgICByZXR1cm4geCA8IDA7CistICAgIH0KKy0KKy0gICAgdGVt cGxhdGUgPCB0eXBlbmFtZSBOdW1iZXJUeXBlLCBlbmFibGVfaWZfdCA8c3RkOjppc191bnNpZ25l ZDxOdW1iZXJUeXBlPjo6dmFsdWUsIGludCA+ID0gMCA+CistICAgIGJvb2wgaXNfbmVnYXRpdmVf bnVtYmVyKE51bWJlclR5cGUgLyp1bnVzZWQqLykKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZh bHNlOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgZHVtcCBhbiBpbnRlZ2VyCist CistICAgIER1bXAgYSBnaXZlbiBpbnRlZ2VyIHRvIG91dHB1dCBzdHJlYW0gQGEgby4gV29ya3Mg aW50ZXJuYWxseSB3aXRoCistICAgIEBhIG51bWJlcl9idWZmZXIuCistCistICAgIEBwYXJhbVtp bl0geCAgaW50ZWdlciBudW1iZXIgKHNpZ25lZCBvciB1bnNpZ25lZCkgdG8gZHVtcAorLSAgICBA dHBhcmFtIE51bWJlclR5cGUgZWl0aGVyIEBhIG51bWJlcl9pbnRlZ2VyX3Qgb3IgQGEgbnVtYmVy X3Vuc2lnbmVkX3QKKy0gICAgKi8KKy0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBOdW1iZXJUeXBl LCBkZXRhaWw6OmVuYWJsZV9pZl90IDwKKy0gICAgICAgICAgICAgICAgICAgc3RkOjppc19pbnRl Z3JhbDxOdW1iZXJUeXBlPjo6dmFsdWUgfHwKKy0gICAgICAgICAgICAgICAgICAgc3RkOjppc19z YW1lPE51bWJlclR5cGUsIG51bWJlcl91bnNpZ25lZF90Pjo6dmFsdWUgfHwKKy0gICAgICAgICAg ICAgICAgICAgc3RkOjppc19zYW1lPE51bWJlclR5cGUsIG51bWJlcl9pbnRlZ2VyX3Q+Ojp2YWx1 ZSB8fAorLSAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8TnVtYmVyVHlwZSwgYmluYXJ5 X2NoYXJfdD46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICBpbnQgPiA9IDAgPgorLSAgICB2 b2lkIGR1bXBfaW50ZWdlcihOdW1iZXJUeXBlIHgpCistICAgIHsKKy0gICAgICAgIHN0YXRpYyBj b25zdGV4cHIgc3RkOjphcnJheTxzdGQ6OmFycmF5PGNoYXIsIDI+LCAxMDA+IGRpZ2l0c190b185 OQorLSAgICAgICAgeworLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAge3snMCcsICcw J319LCB7eycwJywgJzEnfX0sIHt7JzAnLCAnMid9fSwge3snMCcsICczJ319LCB7eycwJywgJzQn fX0sIHt7JzAnLCAnNSd9fSwge3snMCcsICc2J319LCB7eycwJywgJzcnfX0sIHt7JzAnLCAnOCd9 fSwge3snMCcsICc5J319LAorLSAgICAgICAgICAgICAgICB7eycxJywgJzAnfX0sIHt7JzEnLCAn MSd9fSwge3snMScsICcyJ319LCB7eycxJywgJzMnfX0sIHt7JzEnLCAnNCd9fSwge3snMScsICc1 J319LCB7eycxJywgJzYnfX0sIHt7JzEnLCAnNyd9fSwge3snMScsICc4J319LCB7eycxJywgJzkn fX0sCistICAgICAgICAgICAgICAgIHt7JzInLCAnMCd9fSwge3snMicsICcxJ319LCB7eycyJywg JzInfX0sIHt7JzInLCAnMyd9fSwge3snMicsICc0J319LCB7eycyJywgJzUnfX0sIHt7JzInLCAn Nid9fSwge3snMicsICc3J319LCB7eycyJywgJzgnfX0sIHt7JzInLCAnOSd9fSwKKy0gICAgICAg ICAgICAgICAge3snMycsICcwJ319LCB7eyczJywgJzEnfX0sIHt7JzMnLCAnMid9fSwge3snMycs ICczJ319LCB7eyczJywgJzQnfX0sIHt7JzMnLCAnNSd9fSwge3snMycsICc2J319LCB7eyczJywg JzcnfX0sIHt7JzMnLCAnOCd9fSwge3snMycsICc5J319LAorLSAgICAgICAgICAgICAgICB7eyc0 JywgJzAnfX0sIHt7JzQnLCAnMSd9fSwge3snNCcsICcyJ319LCB7eyc0JywgJzMnfX0sIHt7JzQn LCAnNCd9fSwge3snNCcsICc1J319LCB7eyc0JywgJzYnfX0sIHt7JzQnLCAnNyd9fSwge3snNCcs ICc4J319LCB7eyc0JywgJzknfX0sCistICAgICAgICAgICAgICAgIHt7JzUnLCAnMCd9fSwge3sn NScsICcxJ319LCB7eyc1JywgJzInfX0sIHt7JzUnLCAnMyd9fSwge3snNScsICc0J319LCB7eyc1 JywgJzUnfX0sIHt7JzUnLCAnNid9fSwge3snNScsICc3J319LCB7eyc1JywgJzgnfX0sIHt7JzUn LCAnOSd9fSwKKy0gICAgICAgICAgICAgICAge3snNicsICcwJ319LCB7eyc2JywgJzEnfX0sIHt7 JzYnLCAnMid9fSwge3snNicsICczJ319LCB7eyc2JywgJzQnfX0sIHt7JzYnLCAnNSd9fSwge3sn NicsICc2J319LCB7eyc2JywgJzcnfX0sIHt7JzYnLCAnOCd9fSwge3snNicsICc5J319LAorLSAg ICAgICAgICAgICAgICB7eyc3JywgJzAnfX0sIHt7JzcnLCAnMSd9fSwge3snNycsICcyJ319LCB7 eyc3JywgJzMnfX0sIHt7JzcnLCAnNCd9fSwge3snNycsICc1J319LCB7eyc3JywgJzYnfX0sIHt7 JzcnLCAnNyd9fSwge3snNycsICc4J319LCB7eyc3JywgJzknfX0sCistICAgICAgICAgICAgICAg IHt7JzgnLCAnMCd9fSwge3snOCcsICcxJ319LCB7eyc4JywgJzInfX0sIHt7JzgnLCAnMyd9fSwg e3snOCcsICc0J319LCB7eyc4JywgJzUnfX0sIHt7JzgnLCAnNid9fSwge3snOCcsICc3J319LCB7 eyc4JywgJzgnfX0sIHt7JzgnLCAnOSd9fSwKKy0gICAgICAgICAgICAgICAge3snOScsICcwJ319 LCB7eyc5JywgJzEnfX0sIHt7JzknLCAnMid9fSwge3snOScsICczJ319LCB7eyc5JywgJzQnfX0s IHt7JzknLCAnNSd9fSwge3snOScsICc2J319LCB7eyc5JywgJzcnfX0sIHt7JzknLCAnOCd9fSwg e3snOScsICc5J319LAorLSAgICAgICAgICAgIH0KKy0gICAgICAgIH07CistCistICAgICAgICAv LyBzcGVjaWFsIGNhc2UgZm9yICIwIgorLSAgICAgICAgaWYgKHggPT0gMCkKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXIoJzAnKTsKKy0gICAgICAgICAgICByZXR1 cm47CistICAgICAgICB9CistCistICAgICAgICAvLyB1c2UgYSBwb2ludGVyIHRvIGZpbGwgdGhl IGJ1ZmZlcgorLSAgICAgICAgYXV0byBidWZmZXJfcHRyID0gbnVtYmVyX2J1ZmZlci5iZWdpbigp OyAvLyBOT0xJTlQobGx2bS1xdWFsaWZpZWQtYXV0byxyZWFkYWJpbGl0eS1xdWFsaWZpZWQtYXV0 byxjcHBjb3JlZ3VpZGVsaW5lcy1wcm8tdHlwZS12YXJhcmcsaGljcHAtdmFyYXJnKQorLQorLSAg ICAgICAgbnVtYmVyX3Vuc2lnbmVkX3QgYWJzX3ZhbHVlOworLQorLSAgICAgICAgdW5zaWduZWQg aW50IG5fY2hhcnN7fTsKKy0KKy0gICAgICAgIGlmIChpc19uZWdhdGl2ZV9udW1iZXIoeCkpCist ICAgICAgICB7CistICAgICAgICAgICAgKmJ1ZmZlcl9wdHIgPSAnLSc7CistICAgICAgICAgICAg YWJzX3ZhbHVlID0gcmVtb3ZlX3NpZ24oc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4oeCkp OworLQorLSAgICAgICAgICAgIC8vIGFjY291bnQgb25lIG1vcmUgYnl0ZSBmb3IgdGhlIG1pbnVz IHNpZ24KKy0gICAgICAgICAgICBuX2NoYXJzID0gMSArIGNvdW50X2RpZ2l0cyhhYnNfdmFsdWUp OworLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAgICAgICAgICAgIGFi c192YWx1ZSA9IHN0YXRpY19jYXN0PG51bWJlcl91bnNpZ25lZF90Pih4KTsKKy0gICAgICAgICAg ICBuX2NoYXJzID0gY291bnRfZGlnaXRzKGFic192YWx1ZSk7CistICAgICAgICB9CistCistICAg ICAgICAvLyBzcGFyZSAxIGJ5dGUgZm9yICdcMCcKKy0gICAgICAgIEpTT05fQVNTRVJUKG5fY2hh cnMgPCBudW1iZXJfYnVmZmVyLnNpemUoKSAtIDEpOworLQorLSAgICAgICAgLy8ganVtcCB0byB0 aGUgZW5kIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmcgZnJvbSBiYWNrd2FyZCwKKy0gICAgICAgIC8v IHNvIHdlIGxhdGVyIGF2b2lkIHJldmVyc2luZyB0aGUgcmVzdWx0CistICAgICAgICBidWZmZXJf cHRyICs9IG5fY2hhcnM7CistCistICAgICAgICAvLyBGYXN0IGludDJhc2NpaSBpbXBsZW1lbnRh dGlvbiBpbnNwaXJlZCBieSAiRmFzdHdhcmUiIHRhbGsgYnkgQW5kcmVpIEFsZXhhbmRyZXNjdQor LSAgICAgICAgLy8gU2VlOiBodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PW80LUN3RG8y enBnCistICAgICAgICB3aGlsZSAoYWJzX3ZhbHVlID49IDEwMCkKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICBjb25zdCBhdXRvIGRpZ2l0c19pbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigo YWJzX3ZhbHVlICUgMTAwKSk7CistICAgICAgICAgICAgYWJzX3ZhbHVlIC89IDEwMDsKKy0gICAg ICAgICAgICAqKC0tYnVmZmVyX3B0cikgPSBkaWdpdHNfdG9fOTlbZGlnaXRzX2luZGV4XVsxXTsK Ky0gICAgICAgICAgICAqKC0tYnVmZmVyX3B0cikgPSBkaWdpdHNfdG9fOTlbZGlnaXRzX2luZGV4 XVswXTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIGlmIChhYnNfdmFsdWUgPj0gMTApCistICAg ICAgICB7CistICAgICAgICAgICAgY29uc3QgYXV0byBkaWdpdHNfaW5kZXggPSBzdGF0aWNfY2Fz dDx1bnNpZ25lZD4oYWJzX3ZhbHVlKTsKKy0gICAgICAgICAgICAqKC0tYnVmZmVyX3B0cikgPSBk aWdpdHNfdG9fOTlbZGlnaXRzX2luZGV4XVsxXTsKKy0gICAgICAgICAgICAqKC0tYnVmZmVyX3B0 cikgPSBkaWdpdHNfdG9fOTlbZGlnaXRzX2luZGV4XVswXTsKKy0gICAgICAgIH0KKy0gICAgICAg IGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAqKC0tYnVmZmVyX3B0cikgPSBzdGF0aWNf Y2FzdDxjaGFyPignMCcgKyBhYnNfdmFsdWUpOworLSAgICAgICAgfQorLQorLSAgICAgICAgby0+ d3JpdGVfY2hhcmFjdGVycyhudW1iZXJfYnVmZmVyLmRhdGEoKSwgbl9jaGFycyk7CistICAgIH0K Ky0KKy0gICAgLyohCistICAgIEBicmllZiBkdW1wIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCist CistICAgIER1bXAgYSBnaXZlbiBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gb3V0cHV0IHN0cmVh bSBAYSBvLiBXb3JrcyBpbnRlcm5hbGx5CistICAgIHdpdGggQGEgbnVtYmVyX2J1ZmZlci4KKy0K Ky0gICAgQHBhcmFtW2luXSB4ICBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZHVtcAorLSAgICAq LworLSAgICB2b2lkIGR1bXBfZmxvYXQobnVtYmVyX2Zsb2F0X3QgeCkKKy0gICAgeworLSAgICAg ICAgLy8gTmFOIC8gaW5mCistICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeCkpCistICAgICAg ICB7CistICAgICAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycygibnVsbCIsIDQpOworLSAgICAg ICAgICAgIHJldHVybjsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIElmIG51bWJlcl9mbG9h dF90IGlzIGFuIElFRUUtNzU0IHNpbmdsZSBvciBkb3VibGUgcHJlY2lzaW9uIG51bWJlciwKKy0g ICAgICAgIC8vIHVzZSB0aGUgR3Jpc3UyIGFsZ29yaXRobSB0byBwcm9kdWNlIHNob3J0IG51bWJl cnMgd2hpY2ggYXJlCistICAgICAgICAvLyBndWFyYW50ZWVkIHRvIHJvdW5kLXRyaXAsIHVzaW5n IHN0cnRvZiBhbmQgc3RydG9kLCByZXNwLgorLSAgICAgICAgLy8KKy0gICAgICAgIC8vIE5COiBU aGUgdGVzdCBiZWxvdyB3b3JrcyBpZiA8bG9uZyBkb3VibGU+ID09IDxkb3VibGU+LgorLSAgICAg ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2llZWVfc2luZ2xlX29yX2RvdWJsZQorLSAgICAg ICAgICAgID0gKHN0ZDo6bnVtZXJpY19saW1pdHM8bnVtYmVyX2Zsb2F0X3Q+Ojppc19pZWM1NTkg JiYgc3RkOjpudW1lcmljX2xpbWl0czxudW1iZXJfZmxvYXRfdD46OmRpZ2l0cyA9PSAyNCAmJiBz dGQ6Om51bWVyaWNfbGltaXRzPG51bWJlcl9mbG9hdF90Pjo6bWF4X2V4cG9uZW50ID09IDEyOCkg fHwKKy0gICAgICAgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPG51bWJlcl9mbG9hdF90Pjo6 aXNfaWVjNTU5ICYmIHN0ZDo6bnVtZXJpY19saW1pdHM8bnVtYmVyX2Zsb2F0X3Q+OjpkaWdpdHMg PT0gNTMgJiYgc3RkOjpudW1lcmljX2xpbWl0czxudW1iZXJfZmxvYXRfdD46Om1heF9leHBvbmVu dCA9PSAxMDI0KTsKKy0KKy0gICAgICAgIGR1bXBfZmxvYXQoeCwgc3RkOjppbnRlZ3JhbF9jb25z dGFudDxib29sLCBpc19pZWVlX3NpbmdsZV9vcl9kb3VibGU+KCkpOworLSAgICB9CistCistICAg IHZvaWQgZHVtcF9mbG9hdChudW1iZXJfZmxvYXRfdCB4LCBzdGQ6OnRydWVfdHlwZSAvKmlzX2ll ZWVfc2luZ2xlX29yX2RvdWJsZSovKQorLSAgICB7CistICAgICAgICBhdXRvKiBiZWdpbiA9IG51 bWJlcl9idWZmZXIuZGF0YSgpOworLSAgICAgICAgYXV0byogZW5kID0gOjpubG9obWFubjo6ZGV0 YWlsOjp0b19jaGFycyhiZWdpbiwgYmVnaW4gKyBudW1iZXJfYnVmZmVyLnNpemUoKSwgeCk7Cist CistICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXJzKGJlZ2luLCBzdGF0aWNfY2FzdDxzaXplX3Q+ KGVuZCAtIGJlZ2luKSk7CistICAgIH0KKy0KKy0gICAgdm9pZCBkdW1wX2Zsb2F0KG51bWJlcl9m bG9hdF90IHgsIHN0ZDo6ZmFsc2VfdHlwZSAvKmlzX2llZWVfc2luZ2xlX29yX2RvdWJsZSovKQor LSAgICB7CistICAgICAgICAvLyBnZXQgbnVtYmVyIG9mIGRpZ2l0cyBmb3IgYSBmbG9hdCAtPiB0 ZXh0IC0+IGZsb2F0IHJvdW5kLXRyaXAKKy0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBk ID0gc3RkOjpudW1lcmljX2xpbWl0czxudW1iZXJfZmxvYXRfdD46Om1heF9kaWdpdHMxMDsKKy0K Ky0gICAgICAgIC8vIHRoZSBhY3R1YWwgY29udmVyc2lvbgorLSAgICAgICAgLy8gTk9MSU5UTkVY VExJTkUoY3BwY29yZWd1aWRlbGluZXMtcHJvLXR5cGUtdmFyYXJnLGhpY3BwLXZhcmFyZykKKy0g ICAgICAgIHN0ZDo6cHRyZGlmZl90IGxlbiA9IChzdGQ6OnNucHJpbnRmKShudW1iZXJfYnVmZmVy LmRhdGEoKSwgbnVtYmVyX2J1ZmZlci5zaXplKCksICIlLipnIiwgZCwgeCk7CistCistICAgICAg ICAvLyBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IKKy0gICAgICAgIEpTT05fQVNT RVJUKGxlbiA+IDApOworLSAgICAgICAgLy8gY2hlY2sgaWYgYnVmZmVyIHdhcyBsYXJnZSBlbm91 Z2gKKy0gICAgICAgIEpTT05fQVNTRVJUKHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihsZW4pIDwg bnVtYmVyX2J1ZmZlci5zaXplKCkpOworLQorLSAgICAgICAgLy8gZXJhc2UgdGhvdXNhbmRzIHNl cGFyYXRvcgorLSAgICAgICAgaWYgKHRob3VzYW5kc19zZXAgIT0gJ1wwJykKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICAvLyBOT0xJTlRORVhUTElORShyZWFkYWJpbGl0eS1xdWFsaWZpZWQtYXV0 byxsbHZtLXF1YWxpZmllZC1hdXRvKTogc3RkOjpyZW1vdmUgcmV0dXJucyBhbiBpdGVyYXRvciwg c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL2lzc3Vlcy8zMDgxCistICAgICAg ICAgICAgY29uc3QgYXV0byBlbmQgPSBzdGQ6OnJlbW92ZShudW1iZXJfYnVmZmVyLmJlZ2luKCks IG51bWJlcl9idWZmZXIuYmVnaW4oKSArIGxlbiwgdGhvdXNhbmRzX3NlcCk7CistICAgICAgICAg ICAgc3RkOjpmaWxsKGVuZCwgbnVtYmVyX2J1ZmZlci5lbmQoKSwgJ1wwJyk7CistICAgICAgICAg ICAgSlNPTl9BU1NFUlQoKGVuZCAtIG51bWJlcl9idWZmZXIuYmVnaW4oKSkgPD0gbGVuKTsKKy0g ICAgICAgICAgICBsZW4gPSAoZW5kIC0gbnVtYmVyX2J1ZmZlci5iZWdpbigpKTsKKy0gICAgICAg IH0KKy0KKy0gICAgICAgIC8vIGNvbnZlcnQgZGVjaW1hbCBwb2ludCB0byAnLicKKy0gICAgICAg IGlmIChkZWNpbWFsX3BvaW50ICE9ICdcMCcgJiYgZGVjaW1hbF9wb2ludCAhPSAnLicpCistICAg ICAgICB7CistICAgICAgICAgICAgLy8gTk9MSU5UTkVYVExJTkUocmVhZGFiaWxpdHktcXVhbGlm aWVkLWF1dG8sbGx2bS1xdWFsaWZpZWQtYXV0byk6IHN0ZDo6ZmluZCByZXR1cm5zIGFuIGl0ZXJh dG9yLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzMwODEKKy0g ICAgICAgICAgICBjb25zdCBhdXRvIGRlY19wb3MgPSBzdGQ6OmZpbmQobnVtYmVyX2J1ZmZlci5i ZWdpbigpLCBudW1iZXJfYnVmZmVyLmVuZCgpLCBkZWNpbWFsX3BvaW50KTsKKy0gICAgICAgICAg ICBpZiAoZGVjX3BvcyAhPSBudW1iZXJfYnVmZmVyLmVuZCgpKQorLSAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgKmRlY19wb3MgPSAnLic7CistICAgICAgICAgICAgfQorLSAgICAgICAg fQorLQorLSAgICAgICAgby0+d3JpdGVfY2hhcmFjdGVycyhudW1iZXJfYnVmZmVyLmRhdGEoKSwg c3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGxlbikpOworLQorLSAgICAgICAgLy8gZGV0ZXJtaW5l IGlmIHdlIG5lZWQgdG8gYXBwZW5kICIuMCIKKy0gICAgICAgIGNvbnN0IGJvb2wgdmFsdWVfaXNf aW50X2xpa2UgPQorLSAgICAgICAgICAgIHN0ZDo6bm9uZV9vZihudW1iZXJfYnVmZmVyLmJlZ2lu KCksIG51bWJlcl9idWZmZXIuYmVnaW4oKSArIGxlbiArIDEsCistICAgICAgICAgICAgICAgICAg ICAgICAgIFtdKGNoYXIgYykKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gYyA9PSAn LicgfHwgYyA9PSAnZSc7CistICAgICAgICB9KTsKKy0KKy0gICAgICAgIGlmICh2YWx1ZV9pc19p bnRfbGlrZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBvLT53cml0ZV9jaGFyYWN0ZXJzKCIu MCIsIDIpOworLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgY2hl Y2sgd2hldGhlciBhIHN0cmluZyBpcyBVVEYtOCBlbmNvZGVkCistCistICAgIFRoZSBmdW5jdGlv biBjaGVja3MgZWFjaCBieXRlIG9mIGEgc3RyaW5nIHdoZXRoZXIgaXQgaXMgVVRGLTggZW5jb2Rl ZC4gVGhlCistICAgIHJlc3VsdCBvZiB0aGUgY2hlY2sgaXMgc3RvcmVkIGluIHRoZSBAYSBzdGF0 ZSBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0CistICAgIGJlIGNhbGxlZCBpbml0aWFsbHkg d2l0aCBzdGF0ZSAwIChhY2NlcHQpLiBTdGF0ZSAxIG1lYW5zIHRoZSBzdHJpbmcgbXVzdAorLSAg ICBiZSByZWplY3RlZCwgYmVjYXVzZSB0aGUgY3VycmVudCBieXRlIGlzIG5vdCBhbGxvd2VkLiBJ ZiB0aGUgc3RyaW5nIGlzCistICAgIGNvbXBsZXRlbHkgcHJvY2Vzc2VkLCBidXQgdGhlIHN0YXRl IGlzIG5vbi16ZXJvLCB0aGUgc3RyaW5nIGVuZGVkCistICAgIHByZW1hdHVyZWx5OyB0aGF0IGlz LCB0aGUgbGFzdCBieXRlIGluZGljYXRlZCBtb3JlIGJ5dGVzIHNob3VsZCBoYXZlCistICAgIGZv bGxvd2VkLgorLQorLSAgICBAcGFyYW1baW4sb3V0XSBzdGF0ZSAgdGhlIHN0YXRlIG9mIHRoZSBk ZWNvZGluZworLSAgICBAcGFyYW1baW4sb3V0XSBjb2RlcCAgY29kZXBvaW50ICh2YWxpZCBvbmx5 IGlmIHJlc3VsdGluZyBzdGF0ZSBpcyBVVEY4X0FDQ0VQVCkKKy0gICAgQHBhcmFtW2luXSBieXRl ICAgICAgIG5leHQgYnl0ZSB0byBkZWNvZGUKKy0gICAgQHJldHVybiAgICAgICAgICAgICAgIG5l dyBzdGF0ZQorLQorLSAgICBAbm90ZSBUaGUgZnVuY3Rpb24gaGFzIGJlZW4gZWRpdGVkOiBhIHN0 ZDo6YXJyYXkgaXMgdXNlZC4KKy0KKy0gICAgQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMDgt MjAwOSBCam9lcm4gSG9laHJtYW5uIDxiam9lcm5AaG9laHJtYW5uLmRlPgorLSAgICBAc2EgaHR0 cDovL2Jqb2Vybi5ob2Vocm1hbm4uZGUvdXRmLTgvZGVjb2Rlci9kZmEvCistICAgICovCistICAg IHN0YXRpYyBzdGQ6OnVpbnQ4X3QgZGVjb2RlKHN0ZDo6dWludDhfdCYgc3RhdGUsIHN0ZDo6dWlu dDMyX3QmIGNvZGVwLCBjb25zdCBzdGQ6OnVpbnQ4X3QgYnl0ZSkgbm9leGNlcHQKKy0gICAgewor LSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8c3RkOjp1aW50OF90LCA0MDA+IHV0Zjhk ID0KKy0gICAgICAgIHsKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC8vIDAwLi4xRgorLSAgICAgICAgICAgICAg ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAvLyAyMC4uM0YKKy0gICAg ICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgLy8gNDAu LjVGCistICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIC8vIDYwLi43RgorLSAgICAgICAgICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAx LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5 LCA5LCA5LCA5LCA5LCAvLyA4MC4uOUYKKy0gICAgICAgICAgICAgICAgNywgNywgNywgNywgNywg NywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywg NywgNywgNywgNywgNywgNywgNywgNywgLy8gQTAuLkJGCistICAgICAgICAgICAgICAgIDgsIDgs IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIs IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIC8vIEMwLi5ERgorLSAgICAgICAgICAg ICAgICAweEEsIDB4MywgMHgzLCAweDMsIDB4MywgMHgzLCAweDMsIDB4MywgMHgzLCAweDMsIDB4 MywgMHgzLCAweDMsIDB4NCwgMHgzLCAweDMsIC8vIEUwLi5FRgorLSAgICAgICAgICAgICAgICAw eEIsIDB4NiwgMHg2LCAweDYsIDB4NSwgMHg4LCAweDgsIDB4OCwgMHg4LCAweDgsIDB4OCwgMHg4 LCAweDgsIDB4OCwgMHg4LCAweDgsIC8vIEYwLi5GRgorLSAgICAgICAgICAgICAgICAweDAsIDB4 MSwgMHgyLCAweDMsIDB4NSwgMHg4LCAweDcsIDB4MSwgMHgxLCAweDEsIDB4NCwgMHg2LCAweDEs IDB4MSwgMHgxLCAweDEsIC8vIHMwLi5zMAorLSAgICAgICAgICAgICAgICAxLCAxLCAxLCAxLCAx LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAw LCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAvLyBzMS4uczIKKy0gICAgICAgICAgICAgICAgMSwg MiwgMSwgMSwgMSwgMSwgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg MSwgMSwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgLy8gczMuLnM0CistICAgICAgICAg ICAgICAgIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEs IDEsIDEsIDEsIDEsIDEsIDEsIDMsIDEsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIC8vIHM1Li5zNgor LSAgICAgICAgICAgICAgICAxLCAzLCAxLCAxLCAxLCAxLCAxLCAzLCAxLCAzLCAxLCAxLCAxLCAx LCAxLCAxLCAxLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxIC8v IHM3Li5zOAorLSAgICAgICAgICAgIH0KKy0gICAgICAgIH07CistCistICAgICAgICBKU09OX0FT U0VSVChieXRlIDwgdXRmOGQuc2l6ZSgpKTsKKy0gICAgICAgIGNvbnN0IHN0ZDo6dWludDhfdCB0 eXBlID0gdXRmOGRbYnl0ZV07CistCistICAgICAgICBjb2RlcCA9IChzdGF0ZSAhPSBVVEY4X0FD Q0VQVCkKKy0gICAgICAgICAgICAgICAgPyAoYnl0ZSAmIDB4M2Z1KSB8IChjb2RlcCA8PCA2dSkK Ky0gICAgICAgICAgICAgICAgOiAoMHhGRnUgPj4gdHlwZSkgJiAoYnl0ZSk7CistCistICAgICAg ICBzdGQ6OnNpemVfdCBpbmRleCA9IDI1NnUgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRlKSAq IDE2dSArIHN0YXRpY19jYXN0PHNpemVfdD4odHlwZSk7CistICAgICAgICBKU09OX0FTU0VSVChp bmRleCA8IDQwMCk7CistICAgICAgICBzdGF0ZSA9IHV0ZjhkW2luZGV4XTsKKy0gICAgICAgIHJl dHVybiBzdGF0ZTsKKy0gICAgfQorLQorLSAgICAvKgorLSAgICAgKiBPdmVybG9hZCB0byBtYWtl IHRoZSBjb21waWxlciBoYXBweSB3aGlsZSBpdCBpcyBpbnN0YW50aWF0aW5nCistICAgICAqIGR1 bXBfaW50ZWdlciBmb3IgbnVtYmVyX3Vuc2lnbmVkX3QuCistICAgICAqIE11c3QgbmV2ZXIgYmUg Y2FsbGVkLgorLSAgICAgKi8KKy0gICAgbnVtYmVyX3Vuc2lnbmVkX3QgcmVtb3ZlX3NpZ24obnVt YmVyX3Vuc2lnbmVkX3QgeCkKKy0gICAgeworLSAgICAgICAgSlNPTl9BU1NFUlQoZmFsc2UpOyAv LyBOT0xJTlQoY2VydC1kY2wwMy1jLGhpY3BwLXN0YXRpYy1hc3NlcnQsbWlzYy1zdGF0aWMtYXNz ZXJ0KSBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgcmV0dXJuIHg7IC8vIExDT1ZfRVhDTF9MSU5F CistICAgIH0KKy0KKy0gICAgLyoKKy0gICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBkdW1wX2lu dGVnZXIKKy0gICAgICoKKy0gICAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIG5lZ2F0aXZlIHNp Z25lZCBpbnRlZ2VyIGFuZCByZXR1cm5zIGl0cyBhYnNvbHV0ZQorLSAgICAgKiB2YWx1ZSBhcyB1 bnNpZ25lZCBpbnRlZ2VyLiBUaGUgcGx1cy9taW51cyBzaHVmZmxpbmcgaXMgbmVjZXNzYXJ5IGFz IHdlIGNhbgorLSAgICAgKiBub3QgZGlyZWN0bHkgcmVtb3ZlIHRoZSBzaWduIG9mIGFuIGFyYml0 cmFyeSBzaWduZWQgaW50ZWdlciBhcyB0aGUKKy0gICAgICogYWJzb2x1dGUgdmFsdWVzIG9mIElO VF9NSU4gYW5kIElOVF9NQVggYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lLiBTZWUKKy0gICAgICog IzE3MDggZm9yIGRldGFpbHMuCistICAgICAqLworLSAgICBpbmxpbmUgbnVtYmVyX3Vuc2lnbmVk X3QgcmVtb3ZlX3NpZ24obnVtYmVyX2ludGVnZXJfdCB4KSBub2V4Y2VwdAorLSAgICB7CistICAg ICAgICBKU09OX0FTU0VSVCh4IDwgMCAmJiB4IDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8bnVtYmVy X2ludGVnZXJfdD46Om1heCkoKSk7IC8vIE5PTElOVChtaXNjLXJlZHVuZGFudC1leHByZXNzaW9u KQorLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl91bnNpZ25lZF90PigtKHggKyAx KSkgKyAxOworLSAgICB9CistCistICBwcml2YXRlOgorLSAgICAvLy8gdGhlIG91dHB1dCBvZiB0 aGUgc2VyaWFsaXplcgorLSAgICBvdXRwdXRfYWRhcHRlcl90PGNoYXI+IG8gPSBudWxscHRyOwor LQorLSAgICAvLy8gYSAoaG9wZWZ1bGx5KSBsYXJnZSBlbm91Z2ggY2hhcmFjdGVyIGJ1ZmZlcgor LSAgICBzdGQ6OmFycmF5PGNoYXIsIDY0PiBudW1iZXJfYnVmZmVye3t9fTsKKy0KKy0gICAgLy8v IHRoZSBsb2NhbGUKKy0gICAgY29uc3Qgc3RkOjpsY29udiogbG9jID0gbnVsbHB0cjsKKy0gICAg Ly8vIHRoZSBsb2NhbGUncyB0aG91c2FuZCBzZXBhcmF0b3IgY2hhcmFjdGVyCistICAgIGNvbnN0 IGNoYXIgdGhvdXNhbmRzX3NlcCA9ICdcMCc7CistICAgIC8vLyB0aGUgbG9jYWxlJ3MgZGVjaW1h bCBwb2ludCBjaGFyYWN0ZXIKKy0gICAgY29uc3QgY2hhciBkZWNpbWFsX3BvaW50ID0gJ1wwJzsK Ky0KKy0gICAgLy8vIHN0cmluZyBidWZmZXIKKy0gICAgc3RkOjphcnJheTxjaGFyLCA1MTI+IHN0 cmluZ19idWZmZXJ7e319OworLQorLSAgICAvLy8gdGhlIGluZGVudGF0aW9uIGNoYXJhY3Rlcgor LSAgICBjb25zdCBjaGFyIGluZGVudF9jaGFyOworLSAgICAvLy8gdGhlIGluZGVudGF0aW9uIHN0 cmluZworLSAgICBzdHJpbmdfdCBpbmRlbnRfc3RyaW5nOworLQorLSAgICAvLy8gZXJyb3JfaGFu ZGxlciBob3cgdG8gcmVhY3Qgb24gZGVjb2RpbmcgZXJyb3JzCistICAgIGNvbnN0IGVycm9yX2hh bmRsZXJfdCBlcnJvcl9oYW5kbGVyOworLX07CistfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorLX0g IC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vICNpbmNsdWRlIDxubG9obWFubi9kZXRhaWwv dmFsdWVfdC5ocHA+CistCistLy8gI2luY2x1ZGUgPG5sb2htYW5uL2pzb25fZndkLmhwcD4KKy0K Ky0vLyAjaW5jbHVkZSA8bmxvaG1hbm4vb3JkZXJlZF9tYXAuaHBwPgorLQorLQorLSNpbmNsdWRl IDxmdW5jdGlvbmFsPiAvLyBsZXNzCistI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+IC8vIGlu aXRpYWxpemVyX2xpc3QKKy0jaW5jbHVkZSA8aXRlcmF0b3I+IC8vIGlucHV0X2l0ZXJhdG9yX3Rh ZywgaXRlcmF0b3JfdHJhaXRzCistI2luY2x1ZGUgPG1lbW9yeT4gLy8gYWxsb2NhdG9yCistI2lu Y2x1ZGUgPHN0ZGV4Y2VwdD4gLy8gZm9yIG91dF9vZl9yYW5nZQorLSNpbmNsdWRlIDx0eXBlX3Ry YWl0cz4gLy8gZW5hYmxlX2lmLCBpc19jb252ZXJ0aWJsZQorLSNpbmNsdWRlIDx1dGlsaXR5PiAv LyBwYWlyCistI2luY2x1ZGUgPHZlY3Rvcj4gLy8gdmVjdG9yCistCistLy8gI2luY2x1ZGUgPG5s b2htYW5uL2RldGFpbC9tYWNyb19zY29wZS5ocHA+CistCistCistbmFtZXNwYWNlIG5sb2htYW5u CisteworLQorLS8vLyBvcmRlcmVkX21hcDogYSBtaW5pbWFsIG1hcC1saWtlIGNvbnRhaW5lciB0 aGF0IHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIKKy0vLy8gZm9yIHVzZSB3aXRoaW4gbmxvaG1h bm46OmJhc2ljX2pzb248b3JkZXJlZF9tYXA+CistdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3Mg VCwgY2xhc3MgSWdub3JlZExlc3MgPSBzdGQ6Omxlc3M8S2V5PiwKKy0gICAgICAgICAgY2xhc3Mg QWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEtleSwgVD4+PgorLSAg ICAgICAgICAgICAgICAgIHN0cnVjdCBvcmRlcmVkX21hcCA6IHN0ZDo6dmVjdG9yPHN0ZDo6cGFp cjxjb25zdCBLZXksIFQ+LCBBbGxvY2F0b3I+CisteworLSAgICB1c2luZyBrZXlfdHlwZSA9IEtl eTsKKy0gICAgdXNpbmcgbWFwcGVkX3R5cGUgPSBUOworLSAgICB1c2luZyBDb250YWluZXIgPSBz dGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Y29uc3QgS2V5LCBUPiwgQWxsb2NhdG9yPjsKKy0gICAgdXNp bmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBDb250YWluZXI6Oml0ZXJhdG9yOworLSAgICB1c2luZyBj b25zdF9pdGVyYXRvciA9IHR5cGVuYW1lIENvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3I7CistICAg IHVzaW5nIHNpemVfdHlwZSA9IHR5cGVuYW1lIENvbnRhaW5lcjo6c2l6ZV90eXBlOworLSAgICB1 c2luZyB2YWx1ZV90eXBlID0gdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlOworLQorLSAg ICAvLyBFeHBsaWNpdCBjb25zdHJ1Y3RvcnMgaW5zdGVhZCBvZiBgdXNpbmcgQ29udGFpbmVyOjpD b250YWluZXJgCistICAgIC8vIG90aGVyd2lzZSBvbGRlciBjb21waWxlcnMgY2hva2Ugb24gaXQg KEdDQyA8PSA1LjUsIHhjb2RlIDw9IDkuNCkKKy0gICAgb3JkZXJlZF9tYXAoY29uc3QgQWxsb2Nh dG9yJiBhbGxvYyA9IEFsbG9jYXRvcigpKSA6IENvbnRhaW5lcnthbGxvY30ge30KKy0gICAgdGVt cGxhdGUgPGNsYXNzIEl0PgorLSAgICBvcmRlcmVkX21hcChJdCBmaXJzdCwgSXQgbGFzdCwgY29u c3QgQWxsb2NhdG9yJiBhbGxvYyA9IEFsbG9jYXRvcigpKQorLSAgICAgICAgOiBDb250YWluZXJ7 Zmlyc3QsIGxhc3QsIGFsbG9jfSB7fQorLSAgICBvcmRlcmVkX21hcChzdGQ6OmluaXRpYWxpemVy X2xpc3Q8VD4gaW5pdCwgY29uc3QgQWxsb2NhdG9yJiBhbGxvYyA9IEFsbG9jYXRvcigpICkKKy0g ICAgICAgIDogQ29udGFpbmVye2luaXQsIGFsbG9jfSB7fQorLQorLSAgICBzdGQ6OnBhaXI8aXRl cmF0b3IsIGJvb2w+IGVtcGxhY2UoY29uc3Qga2V5X3R5cGUmIGtleSwgVCYmIHQpCistICAgIHsK Ky0gICAgICAgIGZvciAoYXV0byBpdCA9IHRoaXMtPmJlZ2luKCk7IGl0ICE9IHRoaXMtPmVuZCgp OyArK2l0KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGlmIChpdC0+Zmlyc3QgPT0ga2V5KQor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHtpdCwgZmFsc2V9OworLSAg ICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIENvbnRhaW5lcjo6ZW1wbGFjZV9iYWNr KGtleSwgdCk7CistICAgICAgICByZXR1cm4gey0tdGhpcy0+ZW5kKCksIHRydWV9OworLSAgICB9 CistCistICAgIFQmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpCistICAgIHsKKy0gICAgICAg IHJldHVybiBlbXBsYWNlKGtleSwgVHt9KS5maXJzdC0+c2Vjb25kOworLSAgICB9CistCistICAg IGNvbnN0IFQmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CistICAgIHsKKy0gICAg ICAgIHJldHVybiBhdChrZXkpOworLSAgICB9CistCistICAgIFQmIGF0KGNvbnN0IEtleSYga2V5 KQorLSAgICB7CistICAgICAgICBmb3IgKGF1dG8gaXQgPSB0aGlzLT5iZWdpbigpOyBpdCAhPSB0 aGlzLT5lbmQoKTsgKytpdCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoaXQtPmZpcnN0 ID09IGtleSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vj b25kOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05fVEhST1co c3RkOjpvdXRfb2ZfcmFuZ2UoImtleSBub3QgZm91bmQiKSk7CistICAgIH0KKy0KKy0gICAgY29u c3QgVCYgYXQoY29uc3QgS2V5JiBrZXkpIGNvbnN0CistICAgIHsKKy0gICAgICAgIGZvciAoYXV0 byBpdCA9IHRoaXMtPmJlZ2luKCk7IGl0ICE9IHRoaXMtPmVuZCgpOyArK2l0KQorLSAgICAgICAg eworLSAgICAgICAgICAgIGlmIChpdC0+Zmlyc3QgPT0ga2V5KQorLSAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CistICAgICAgICAgICAgfQorLSAgICAg ICAgfQorLQorLSAgICAgICAgSlNPTl9USFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgia2V5IG5vdCBm b3VuZCIpKTsKKy0gICAgfQorLQorLSAgICBzaXplX3R5cGUgZXJhc2UoY29uc3QgS2V5JiBrZXkp CistICAgIHsKKy0gICAgICAgIGZvciAoYXV0byBpdCA9IHRoaXMtPmJlZ2luKCk7IGl0ICE9IHRo aXMtPmVuZCgpOyArK2l0KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGlmIChpdC0+Zmlyc3Qg PT0ga2V5KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgY2Fu bm90IG1vdmUgY29uc3QgS2V5cywgcmUtY29uc3RydWN0IHRoZW0gaW4gcGxhY2UKKy0gICAgICAg ICAgICAgICAgZm9yIChhdXRvIG5leHQgPSBpdDsgKytuZXh0ICE9IHRoaXMtPmVuZCgpOyArK2l0 KQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBpdC0+fnZhbHVlX3R5 cGUoKTsgLy8gRGVzdHJveSBidXQga2VlcCBhbGxvY2F0aW9uCistICAgICAgICAgICAgICAgICAg ICBuZXcgKCYqaXQpIHZhbHVlX3R5cGV7c3RkOjptb3ZlKCpuZXh0KX07CistICAgICAgICAgICAg ICAgIH0KKy0gICAgICAgICAgICAgICAgQ29udGFpbmVyOjpwb3BfYmFjaygpOworLSAgICAgICAg ICAgICAgICByZXR1cm4gMTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICBy ZXR1cm4gMDsKKy0gICAgfQorLQorLSAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBwb3MpCist ICAgIHsKKy0gICAgICAgIHJldHVybiBlcmFzZShwb3MsIHN0ZDo6bmV4dChwb3MpKTsKKy0gICAg fQorLQorLSAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCkK Ky0gICAgeworLSAgICAgICAgY29uc3QgYXV0byBlbGVtZW50c19hZmZlY3RlZCA9IHN0ZDo6ZGlz dGFuY2UoZmlyc3QsIGxhc3QpOworLSAgICAgICAgY29uc3QgYXV0byBvZmZzZXQgPSBzdGQ6OmRp c3RhbmNlKENvbnRhaW5lcjo6YmVnaW4oKSwgZmlyc3QpOworLQorLSAgICAgICAgLy8gVGhpcyBp cyB0aGUgc3RhcnQgc2l0dWF0aW9uLiBXZSBuZWVkIHRvIGRlbGV0ZSBlbGVtZW50c19hZmZlY3Rl ZAorLSAgICAgICAgLy8gZWxlbWVudHMgKDMgaW4gdGhpcyBleGFtcGxlOiBlLCBmLCBnKSwgYW5k IG5lZWQgdG8gcmV0dXJuIGFuCistICAgICAgICAvLyBpdGVyYXRvciBwYXN0IHRoZSBsYXN0IGRl bGV0ZWQgZWxlbWVudCAoaCBpbiB0aGlzIGV4YW1wbGUpLgorLSAgICAgICAgLy8gTm90ZSB0aGF0 IG9mZnNldCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHZlY3RvcgorLSAg ICAgICAgLy8gdG8gZmlyc3QuIFdlIHdpbGwgbmVlZCB0aGlzIGxhdGVyLgorLQorLSAgICAgICAg Ly8gWyBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqIF0KKy0gICAgICAgIC8vICAgICAgICAg ICAgICAgXiAgICAgICAgXgorLSAgICAgICAgLy8gICAgICAgICAgICAgZmlyc3QgICAgbGFzdAor LQorLSAgICAgICAgLy8gU2luY2Ugd2UgY2Fubm90IG1vdmUgY29uc3QgS2V5cywgd2UgcmUtY29u c3RydWN0IHRoZW0gaW4gcGxhY2UuCistICAgICAgICAvLyBXZSBzdGFydCBhdCBmaXJzdCBhbmQg cmUtY29uc3RydWN0ICh2aXouIGNvcHkpIHRoZSBlbGVtZW50cyBmcm9tCistICAgICAgICAvLyB0 aGUgYmFjayBvZiB0aGUgdmVjdG9yLiBFeGFtcGxlIGZvciBmaXJzdCBpdGVyYXRpb246CistCist ICAgICAgICAvLyAgICAgICAgICAgICAgICwtLS0tLS0tLS4KKy0gICAgICAgIC8vICAgICAgICAg ICAgICAgdiAgICAgICAgfCAgIGRlc3Ryb3kgZSBhbmQgcmUtY29uc3RydWN0IHdpdGggaAorLSAg ICAgICAgLy8gWyBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqIF0KKy0gICAgICAgIC8vICAg ICAgICAgICAgICAgXiAgICAgICAgXgorLSAgICAgICAgLy8gICAgICAgICAgICAgICBpdCAgICAg ICBpdCArIGVsZW1lbnRzX2FmZmVjdGVkCistCistICAgICAgICBmb3IgKGF1dG8gaXQgPSBmaXJz dDsgc3RkOjpuZXh0KGl0LCBlbGVtZW50c19hZmZlY3RlZCkgIT0gQ29udGFpbmVyOjplbmQoKTsg KytpdCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpdC0+fnZhbHVlX3R5cGUoKTsgLy8gZGVz dHJveSBidXQga2VlcCBhbGxvY2F0aW9uCistICAgICAgICAgICAgbmV3ICgmKml0KSB2YWx1ZV90 eXBle3N0ZDo6bW92ZSgqc3RkOjpuZXh0KGl0LCBlbGVtZW50c19hZmZlY3RlZCkpfTsgLy8gIm1v dmUiIG5leHQgZWxlbWVudCB0byBpdAorLSAgICAgICAgfQorLQorLSAgICAgICAgLy8gWyBhLCBi LCBjLCBkLCBoLCBpLCBqLCBoLCBpLCBqIF0KKy0gICAgICAgIC8vICAgICAgICAgICAgICAgXiAg ICAgICAgXgorLSAgICAgICAgLy8gICAgICAgICAgICAgZmlyc3QgICAgbGFzdAorLQorLSAgICAg ICAgLy8gcmVtb3ZlIHRoZSB1bm5lZWRlZCBlbGVtZW50cyBhdCB0aGUgZW5kIG9mIHRoZSB2ZWN0 b3IKKy0gICAgICAgIENvbnRhaW5lcjo6cmVzaXplKHRoaXMtPnNpemUoKSAtIHN0YXRpY19jYXN0 PHNpemVfdHlwZT4oZWxlbWVudHNfYWZmZWN0ZWQpKTsKKy0KKy0gICAgICAgIC8vIFsgYSwgYiwg YywgZCwgaCwgaSwgaiBdCistICAgICAgICAvLyAgICAgICAgICAgICAgIF4gICAgICAgIF4KKy0g ICAgICAgIC8vICAgICAgICAgICAgIGZpcnN0ICAgIGxhc3QKKy0KKy0gICAgICAgIC8vIGZpcnN0 IGlzIG5vdyBwb2ludGluZyBwYXN0IHRoZSBsYXN0IGRlbGV0ZWQgZWxlbWVudCwgYnV0IHdlIGNh bm5vdAorLSAgICAgICAgLy8gdXNlIHRoaXMgaXRlcmF0b3IsIGJlY2F1c2UgaXQgbWF5IGhhdmUg YmVlbiBpbnZhbGlkYXRlZCBieSB0aGUKKy0gICAgICAgIC8vIHJlc2l6ZSBjYWxsLiBJbnN0ZWFk LCB3ZSBjYW4gcmV0dXJuIGJlZ2luKCkgKyBvZmZzZXQuCistICAgICAgICByZXR1cm4gQ29udGFp bmVyOjpiZWdpbigpICsgb2Zmc2V0OworLSAgICB9CistCistICAgIHNpemVfdHlwZSBjb3VudChj b25zdCBLZXkmIGtleSkgY29uc3QKKy0gICAgeworLSAgICAgICAgZm9yIChhdXRvIGl0ID0gdGhp cy0+YmVnaW4oKTsgaXQgIT0gdGhpcy0+ZW5kKCk7ICsraXQpCistICAgICAgICB7CistICAgICAg ICAgICAgaWYgKGl0LT5maXJzdCA9PSBrZXkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICByZXR1cm4gMTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICByZXR1 cm4gMDsKKy0gICAgfQorLQorLSAgICBpdGVyYXRvciBmaW5kKGNvbnN0IEtleSYga2V5KQorLSAg ICB7CistICAgICAgICBmb3IgKGF1dG8gaXQgPSB0aGlzLT5iZWdpbigpOyBpdCAhPSB0aGlzLT5l bmQoKTsgKytpdCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoaXQtPmZpcnN0ID09IGtl eSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBpdDsKKy0gICAgICAg ICAgICB9CistICAgICAgICB9CistICAgICAgICByZXR1cm4gQ29udGFpbmVyOjplbmQoKTsKKy0g ICAgfQorLQorLSAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleSYga2V5KSBjb25zdAor LSAgICB7CistICAgICAgICBmb3IgKGF1dG8gaXQgPSB0aGlzLT5iZWdpbigpOyBpdCAhPSB0aGlz LT5lbmQoKTsgKytpdCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoaXQtPmZpcnN0ID09 IGtleSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBpdDsKKy0gICAg ICAgICAgICB9CistICAgICAgICB9CistICAgICAgICByZXR1cm4gQ29udGFpbmVyOjplbmQoKTsK Ky0gICAgfQorLQorLSAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydCggdmFsdWVf dHlwZSYmIHZhbHVlICkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGVtcGxhY2UodmFsdWUuZmly c3QsIHN0ZDo6bW92ZSh2YWx1ZS5zZWNvbmQpKTsKKy0gICAgfQorLQorLSAgICBzdGQ6OnBhaXI8 aXRlcmF0b3IsIGJvb2w+IGluc2VydCggY29uc3QgdmFsdWVfdHlwZSYgdmFsdWUgKQorLSAgICB7 CistICAgICAgICBmb3IgKGF1dG8gaXQgPSB0aGlzLT5iZWdpbigpOyBpdCAhPSB0aGlzLT5lbmQo KTsgKytpdCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoaXQtPmZpcnN0ID09IHZhbHVl LmZpcnN0KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHtpdCwgZmFs c2V9OworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIENvbnRhaW5lcjo6cHVz aF9iYWNrKHZhbHVlKTsKKy0gICAgICAgIHJldHVybiB7LS10aGlzLT5lbmQoKSwgdHJ1ZX07Cist ICAgIH0KKy0KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRJdD4KKy0gICAgdXNpbmcgcmVx dWlyZV9pbnB1dF9pdGVyID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb252ZXJ0 aWJsZTx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJbnB1dEl0Pjo6aXRlcmF0b3JfY2F0 ZWdvcnksCistICAgICAgICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWc+Ojp2YWx1ZT46OnR5 cGU7CistCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIElucHV0SXQsIHR5cGVuYW1lID0gcmVxdWly ZV9pbnB1dF9pdGVyPElucHV0SXQ+PgorLSAgICB2b2lkIGluc2VydChJbnB1dEl0IGZpcnN0LCBJ bnB1dEl0IGxhc3QpCistICAgIHsKKy0gICAgICAgIGZvciAoYXV0byBpdCA9IGZpcnN0OyBpdCAh PSBsYXN0OyArK2l0KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGluc2VydCgqaXQpOworLSAg ICAgICAgfQorLSAgICB9CistfTsKKy0KKy19ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0K Ky0jaWYgZGVmaW5lZChKU09OX0hBU19DUFBfMTcpCistICAgICNpbmNsdWRlIDxzdHJpbmdfdmll dz4KKy0jZW5kaWYKKy0KKy0vKiEKKy1AYnJpZWYgbmFtZXNwYWNlIGZvciBOaWVscyBMb2htYW5u CistQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4KKy1Ac2luY2UgdmVyc2lvbiAxLjAu MAorLSovCistbmFtZXNwYWNlIG5sb2htYW5uCisteworLQorLS8qIQorLUBicmllZiBhIGNsYXNz IHRvIHN0b3JlIEpTT04gdmFsdWVzCistCistQGludGVybmFsCistQGludmFyaWFudCBUaGUgbWVt YmVyIHZhcmlhYmxlcyBAYSBtX3ZhbHVlIGFuZCBAYSBtX3R5cGUgaGF2ZSB0aGUgZm9sbG93aW5n CistcmVsYXRpb25zaGlwOgorLS0gSWYgYG1fdHlwZSA9PSB2YWx1ZV90OjpvYmplY3RgLCB0aGVu IGBtX3ZhbHVlLm9iamVjdCAhPSBudWxscHRyYC4KKy0tIElmIGBtX3R5cGUgPT0gdmFsdWVfdDo6 YXJyYXlgLCB0aGVuIGBtX3ZhbHVlLmFycmF5ICE9IG51bGxwdHJgLgorLS0gSWYgYG1fdHlwZSA9 PSB2YWx1ZV90OjpzdHJpbmdgLCB0aGVuIGBtX3ZhbHVlLnN0cmluZyAhPSBudWxscHRyYC4KKy1U aGUgaW52YXJpYW50cyBhcmUgY2hlY2tlZCBieSBtZW1iZXIgZnVuY3Rpb24gYXNzZXJ0X2ludmFy aWFudCgpLgorLQorLUBub3RlIE9iamVjdFR5cGUgdHJpY2sgZnJvbSBodHRwczovL3N0YWNrb3Zl cmZsb3cuY29tL2EvOTg2MDkxMQorLUBlbmRpbnRlcm5hbAorLQorLUBzaW5jZSB2ZXJzaW9uIDEu MC4wCistCistQG5vc3ViZ3JvdXBpbmcKKy0qLworLU5MT0hNQU5OX0JBU0lDX0pTT05fVFBMX0RF Q0xBUkFUSU9OCistY2xhc3MgYmFzaWNfanNvbiAvLyBOT0xJTlQoY3BwY29yZWd1aWRlbGluZXMt c3BlY2lhbC1tZW1iZXItZnVuY3Rpb25zLGhpY3BwLXNwZWNpYWwtbWVtYmVyLWZ1bmN0aW9ucykK Ky17CistICBwcml2YXRlOgorLSAgICB0ZW1wbGF0ZTxkZXRhaWw6OnZhbHVlX3Q+IGZyaWVuZCBz dHJ1Y3QgZGV0YWlsOjpleHRlcm5hbF9jb25zdHJ1Y3RvcjsKKy0gICAgZnJpZW5kIDo6bmxvaG1h bm46Ompzb25fcG9pbnRlcjxiYXNpY19qc29uPjsKKy0KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUg QmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgSW5wdXRUeXBlPgorLSAgICBmcmllbmQgY2xhc3MgOjpu bG9obWFubjo6ZGV0YWlsOjpwYXJzZXI7CistICAgIGZyaWVuZCA6Om5sb2htYW5uOjpkZXRhaWw6 OnNlcmlhbGl6ZXI8YmFzaWNfanNvbj47CistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNv blR5cGU+CistICAgIGZyaWVuZCBjbGFzcyA6Om5sb2htYW5uOjpkZXRhaWw6Oml0ZXJfaW1wbDsK Ky0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ2hhclR5cGU+ CistICAgIGZyaWVuZCBjbGFzcyA6Om5sb2htYW5uOjpkZXRhaWw6OmJpbmFyeV93cml0ZXI7Cist ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIElucHV0VHlwZSwg dHlwZW5hbWUgU0FYPgorLSAgICBmcmllbmQgY2xhc3MgOjpubG9obWFubjo6ZGV0YWlsOjpiaW5h cnlfcmVhZGVyOworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLSAgICBm cmllbmQgY2xhc3MgOjpubG9obWFubjo6ZGV0YWlsOjpqc29uX3NheF9kb21fcGFyc2VyOworLSAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgorLSAgICBmcmllbmQgY2xhc3MgOjpu bG9obWFubjo6ZGV0YWlsOjpqc29uX3NheF9kb21fY2FsbGJhY2tfcGFyc2VyOworLSAgICBmcmll bmQgY2xhc3MgOjpubG9obWFubjo6ZGV0YWlsOjpleGNlcHRpb247CistCistICAgIC8vLyB3b3Jr YXJvdW5kIHR5cGUgZm9yIE1TVkMKKy0gICAgdXNpbmcgYmFzaWNfanNvbl90ID0gTkxPSE1BTk5f QkFTSUNfSlNPTl9UUEw7CistCistICBKU09OX1BSSVZBVEVfVU5MRVNTX1RFU1RFRDoKKy0gICAg Ly8gY29udmVuaWVuY2UgYWxpYXNlcyBmb3IgdHlwZXMgcmVzaWRpbmcgaW4gbmFtZXNwYWNlIGRl dGFpbDsKKy0gICAgdXNpbmcgbGV4ZXIgPSA6Om5sb2htYW5uOjpkZXRhaWw6OmxleGVyX2Jhc2U8 YmFzaWNfanNvbj47CistCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIElucHV0QWRhcHRlclR5cGU+ CistICAgIHN0YXRpYyA6Om5sb2htYW5uOjpkZXRhaWw6OnBhcnNlcjxiYXNpY19qc29uLCBJbnB1 dEFkYXB0ZXJUeXBlPiBwYXJzZXIoCistICAgICAgICBJbnB1dEFkYXB0ZXJUeXBlIGFkYXB0ZXIs CistICAgICAgICBkZXRhaWw6OnBhcnNlcl9jYWxsYmFja190PGJhc2ljX2pzb24+Y2IgPSBudWxs cHRyLAorLSAgICAgICAgY29uc3QgYm9vbCBhbGxvd19leGNlcHRpb25zID0gdHJ1ZSwKKy0gICAg ICAgIGNvbnN0IGJvb2wgaWdub3JlX2NvbW1lbnRzID0gZmFsc2UKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCistICAgIHsKKy0gICAgICAgIHJldHVybiA6Om5sb2htYW5uOjpk ZXRhaWw6OnBhcnNlcjxiYXNpY19qc29uLCBJbnB1dEFkYXB0ZXJUeXBlPihzdGQ6Om1vdmUoYWRh cHRlciksCistICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShjYiksIGFsbG93X2V4Y2VwdGlvbnMs IGlnbm9yZV9jb21tZW50cyk7CistICAgIH0KKy0KKy0gIHByaXZhdGU6CistICAgIHVzaW5nIHBy aW1pdGl2ZV9pdGVyYXRvcl90ID0gOjpubG9obWFubjo6ZGV0YWlsOjpwcmltaXRpdmVfaXRlcmF0 b3JfdDsKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KKy0gICAgdXNpbmcg aW50ZXJuYWxfaXRlcmF0b3IgPSA6Om5sb2htYW5uOjpkZXRhaWw6OmludGVybmFsX2l0ZXJhdG9y PEJhc2ljSnNvblR5cGU+OworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgor LSAgICB1c2luZyBpdGVyX2ltcGwgPSA6Om5sb2htYW5uOjpkZXRhaWw6Oml0ZXJfaW1wbDxCYXNp Y0pzb25UeXBlPjsKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CistICAgIHVzaW5n IGl0ZXJhdGlvbl9wcm94eSA9IDo6bmxvaG1hbm46OmRldGFpbDo6aXRlcmF0aW9uX3Byb3h5PEl0 ZXJhdG9yPjsKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzZT4gdXNpbmcganNvbl9yZXZlcnNl X2l0ZXJhdG9yID0gOjpubG9obWFubjo6ZGV0YWlsOjpqc29uX3JldmVyc2VfaXRlcmF0b3I8QmFz ZT47CistCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorLSAgICB1c2luZyBvdXRw dXRfYWRhcHRlcl90ID0gOjpubG9obWFubjo6ZGV0YWlsOjpvdXRwdXRfYWRhcHRlcl90PENoYXJU eXBlPjsKKy0KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlPgorLSAgICB1c2luZyBi aW5hcnlfcmVhZGVyID0gOjpubG9obWFubjo6ZGV0YWlsOjpiaW5hcnlfcmVhZGVyPGJhc2ljX2pz b24sIElucHV0VHlwZT47CistICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPiB1c2luZyBi aW5hcnlfd3JpdGVyID0gOjpubG9obWFubjo6ZGV0YWlsOjpiaW5hcnlfd3JpdGVyPGJhc2ljX2pz b24sIENoYXJUeXBlPjsKKy0KKy0gIEpTT05fUFJJVkFURV9VTkxFU1NfVEVTVEVEOgorLSAgICB1 c2luZyBzZXJpYWxpemVyID0gOjpubG9obWFubjo6ZGV0YWlsOjpzZXJpYWxpemVyPGJhc2ljX2pz b24+OworLQorLSAgcHVibGljOgorLSAgICB1c2luZyB2YWx1ZV90ID0gZGV0YWlsOjp2YWx1ZV90 OworLSAgICAvLy8gSlNPTiBQb2ludGVyLCBzZWUgQHJlZiBubG9obWFubjo6anNvbl9wb2ludGVy CistICAgIHVzaW5nIGpzb25fcG9pbnRlciA9IDo6bmxvaG1hbm46Ompzb25fcG9pbnRlcjxiYXNp Y19qc29uPjsKKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU0ZJTkFFPgorLSAg ICB1c2luZyBqc29uX3NlcmlhbGl6ZXIgPSBKU09OU2VyaWFsaXplcjxULCBTRklOQUU+OworLSAg ICAvLy8gaG93IHRvIHRyZWF0IGRlY29kaW5nIGVycm9ycworLSAgICB1c2luZyBlcnJvcl9oYW5k bGVyX3QgPSBkZXRhaWw6OmVycm9yX2hhbmRsZXJfdDsKKy0gICAgLy8vIGhvdyB0byB0cmVhdCBD Qk9SIHRhZ3MKKy0gICAgdXNpbmcgY2Jvcl90YWdfaGFuZGxlcl90ID0gZGV0YWlsOjpjYm9yX3Rh Z19oYW5kbGVyX3Q7CistICAgIC8vLyBoZWxwZXIgdHlwZSBmb3IgaW5pdGlhbGl6ZXIgbGlzdHMg b2YgYmFzaWNfanNvbiB2YWx1ZXMKKy0gICAgdXNpbmcgaW5pdGlhbGl6ZXJfbGlzdF90ID0gc3Rk Ojppbml0aWFsaXplcl9saXN0PGRldGFpbDo6anNvbl9yZWY8YmFzaWNfanNvbj4+OworLQorLSAg ICB1c2luZyBpbnB1dF9mb3JtYXRfdCA9IGRldGFpbDo6aW5wdXRfZm9ybWF0X3Q7CistICAgIC8v LyBTQVggaW50ZXJmYWNlIHR5cGUsIHNlZSBAcmVmIG5sb2htYW5uOjpqc29uX3NheAorLSAgICB1 c2luZyBqc29uX3NheF90ID0ganNvbl9zYXg8YmFzaWNfanNvbj47CistCistICAgIC8vLy8vLy8v Ly8vLy8vLy8KKy0gICAgLy8gZXhjZXB0aW9ucyAvLworLSAgICAvLy8vLy8vLy8vLy8vLy8vCist CistICAgIC8vLyBAbmFtZSBleGNlcHRpb25zCistICAgIC8vLyBDbGFzc2VzIHRvIGltcGxlbWVu dCB1c2VyLWRlZmluZWQgZXhjZXB0aW9ucy4KKy0gICAgLy8vIEB7CistCistICAgIHVzaW5nIGV4 Y2VwdGlvbiA9IGRldGFpbDo6ZXhjZXB0aW9uOworLSAgICB1c2luZyBwYXJzZV9lcnJvciA9IGRl dGFpbDo6cGFyc2VfZXJyb3I7CistICAgIHVzaW5nIGludmFsaWRfaXRlcmF0b3IgPSBkZXRhaWw6 OmludmFsaWRfaXRlcmF0b3I7CistICAgIHVzaW5nIHR5cGVfZXJyb3IgPSBkZXRhaWw6OnR5cGVf ZXJyb3I7CistICAgIHVzaW5nIG91dF9vZl9yYW5nZSA9IGRldGFpbDo6b3V0X29mX3JhbmdlOwor LSAgICB1c2luZyBvdGhlcl9lcnJvciA9IGRldGFpbDo6b3RoZXJfZXJyb3I7CistCistICAgIC8v LyBAfQorLQorLQorLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0gICAgLy8gY29udGFpbmVy IHR5cGVzIC8vCistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLSAgICAvLy8gQG5hbWUg Y29udGFpbmVyIHR5cGVzCistICAgIC8vLyBUaGUgY2Fub25pYyBjb250YWluZXIgdHlwZXMgdG8g dXNlIEByZWYgYmFzaWNfanNvbiBsaWtlIGFueSBvdGhlciBTVEwKKy0gICAgLy8vIGNvbnRhaW5l ci4KKy0gICAgLy8vIEB7CistCistICAgIC8vLyB0aGUgdHlwZSBvZiBlbGVtZW50cyBpbiBhIGJh c2ljX2pzb24gY29udGFpbmVyCistICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBiYXNpY19qc29uOwor LQorLSAgICAvLy8gdGhlIHR5cGUgb2YgYW4gZWxlbWVudCByZWZlcmVuY2UKKy0gICAgdXNpbmcg cmVmZXJlbmNlID0gdmFsdWVfdHlwZSY7CistICAgIC8vLyB0aGUgdHlwZSBvZiBhbiBlbGVtZW50 IGNvbnN0IHJlZmVyZW5jZQorLSAgICB1c2luZyBjb25zdF9yZWZlcmVuY2UgPSBjb25zdCB2YWx1 ZV90eXBlJjsKKy0KKy0gICAgLy8vIGEgdHlwZSB0byByZXByZXNlbnQgZGlmZmVyZW5jZXMgYmV0 d2VlbiBpdGVyYXRvcnMKKy0gICAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZm X3Q7CistICAgIC8vLyBhIHR5cGUgdG8gcmVwcmVzZW50IGNvbnRhaW5lciBzaXplcworLSAgICB1 c2luZyBzaXplX3R5cGUgPSBzdGQ6OnNpemVfdDsKKy0KKy0gICAgLy8vIHRoZSBhbGxvY2F0b3Ig dHlwZQorLSAgICB1c2luZyBhbGxvY2F0b3JfdHlwZSA9IEFsbG9jYXRvclR5cGU8YmFzaWNfanNv bj47CistCistICAgIC8vLyB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IHBvaW50ZXIKKy0gICAgdXNp bmcgcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxhbGxvY2F0b3JfdHlw ZT46OnBvaW50ZXI7CistICAgIC8vLyB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IGNvbnN0IHBvaW50 ZXIKKy0gICAgdXNpbmcgY29uc3RfcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWxsb2NhdG9yX3Ry YWl0czxhbGxvY2F0b3JfdHlwZT46OmNvbnN0X3BvaW50ZXI7CistCistICAgIC8vLyBhbiBpdGVy YXRvciBmb3IgYSBiYXNpY19qc29uIGNvbnRhaW5lcgorLSAgICB1c2luZyBpdGVyYXRvciA9IGl0 ZXJfaW1wbDxiYXNpY19qc29uPjsKKy0gICAgLy8vIGEgY29uc3QgaXRlcmF0b3IgZm9yIGEgYmFz aWNfanNvbiBjb250YWluZXIKKy0gICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBpdGVyX2ltcGw8 Y29uc3QgYmFzaWNfanNvbj47CistICAgIC8vLyBhIHJldmVyc2UgaXRlcmF0b3IgZm9yIGEgYmFz aWNfanNvbiBjb250YWluZXIKKy0gICAgdXNpbmcgcmV2ZXJzZV9pdGVyYXRvciA9IGpzb25fcmV2 ZXJzZV9pdGVyYXRvcjx0eXBlbmFtZSBiYXNpY19qc29uOjppdGVyYXRvcj47CistICAgIC8vLyBh IGNvbnN0IHJldmVyc2UgaXRlcmF0b3IgZm9yIGEgYmFzaWNfanNvbiBjb250YWluZXIKKy0gICAg dXNpbmcgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciA9IGpzb25fcmV2ZXJzZV9pdGVyYXRvcjx0eXBl bmFtZSBiYXNpY19qc29uOjpjb25zdF9pdGVyYXRvcj47CistCistICAgIC8vLyBAfQorLQorLQor LSAgICAvLy8gQGJyaWVmIHJldHVybnMgdGhlIGFsbG9jYXRvciBhc3NvY2lhdGVkIHdpdGggdGhl IGNvbnRhaW5lcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFz aWNfanNvbi9nZXRfYWxsb2NhdG9yLworLSAgICBzdGF0aWMgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs bG9jYXRvcigpCistICAgIHsKKy0gICAgICAgIHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOworLSAg ICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJucyB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIHRo ZSBsaWJyYXJ5CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNp Y19qc29uL21ldGEvCistICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVAorLSAgICBz dGF0aWMgYmFzaWNfanNvbiBtZXRhKCkKKy0gICAgeworLSAgICAgICAgYmFzaWNfanNvbiByZXN1 bHQ7CistCistICAgICAgICByZXN1bHRbImNvcHlyaWdodCJdID0gIihDKSAyMDEzLTIwMjIgTmll bHMgTG9obWFubiI7CistICAgICAgICByZXN1bHRbIm5hbWUiXSA9ICJKU09OIGZvciBNb2Rlcm4g QysrIjsKKy0gICAgICAgIHJlc3VsdFsidXJsIl0gPSAiaHR0cHM6Ly9naXRodWIuY29tL25sb2ht YW5uL2pzb24iOworLSAgICAgICAgcmVzdWx0WyJ2ZXJzaW9uIl1bInN0cmluZyJdID0KKy0gICAg ICAgICAgICBzdGQ6OnRvX3N0cmluZyhOTE9ITUFOTl9KU09OX1ZFUlNJT05fTUFKT1IpICsgIi4i ICsKKy0gICAgICAgICAgICBzdGQ6OnRvX3N0cmluZyhOTE9ITUFOTl9KU09OX1ZFUlNJT05fTUlO T1IpICsgIi4iICsKKy0gICAgICAgICAgICBzdGQ6OnRvX3N0cmluZyhOTE9ITUFOTl9KU09OX1ZF UlNJT05fUEFUQ0gpOworLSAgICAgICAgcmVzdWx0WyJ2ZXJzaW9uIl1bIm1ham9yIl0gPSBOTE9I TUFOTl9KU09OX1ZFUlNJT05fTUFKT1I7CistICAgICAgICByZXN1bHRbInZlcnNpb24iXVsibWlu b3IiXSA9IE5MT0hNQU5OX0pTT05fVkVSU0lPTl9NSU5PUjsKKy0gICAgICAgIHJlc3VsdFsidmVy c2lvbiJdWyJwYXRjaCJdID0gTkxPSE1BTk5fSlNPTl9WRVJTSU9OX1BBVENIOworLQorLSNpZmRl ZiBfV0lOMzIKKy0gICAgICAgIHJlc3VsdFsicGxhdGZvcm0iXSA9ICJ3aW4zMiI7CistI2VsaWYg ZGVmaW5lZCBfX2xpbnV4X18KKy0gICAgICAgIHJlc3VsdFsicGxhdGZvcm0iXSA9ICJsaW51eCI7 CistI2VsaWYgZGVmaW5lZCBfX0FQUExFX18KKy0gICAgICAgIHJlc3VsdFsicGxhdGZvcm0iXSA9 ICJhcHBsZSI7CistI2VsaWYgZGVmaW5lZCBfX3VuaXhfXworLSAgICAgICAgcmVzdWx0WyJwbGF0 Zm9ybSJdID0gInVuaXgiOworLSNlbHNlCistICAgICAgICByZXN1bHRbInBsYXRmb3JtIl0gPSAi dW5rbm93biI7CistI2VuZGlmCistCistI2lmIGRlZmluZWQoX19JQ0MpIHx8IGRlZmluZWQoX19J TlRFTF9DT01QSUxFUikKKy0gICAgICAgIHJlc3VsdFsiY29tcGlsZXIiXSA9IHt7ImZhbWlseSIs ICJpY2MifSwgeyJ2ZXJzaW9uIiwgX19JTlRFTF9DT01QSUxFUn19OworLSNlbGlmIGRlZmluZWQo X19jbGFuZ19fKQorLSAgICAgICAgcmVzdWx0WyJjb21waWxlciJdID0ge3siZmFtaWx5IiwgImNs YW5nIn0sIHsidmVyc2lvbiIsIF9fY2xhbmdfdmVyc2lvbl9ffX07CistI2VsaWYgZGVmaW5lZChf X0dOVUNfXykgfHwgZGVmaW5lZChfX0dOVUdfXykKKy0gICAgICAgIHJlc3VsdFsiY29tcGlsZXIi XSA9IHt7ImZhbWlseSIsICJnY2MifSwgeyJ2ZXJzaW9uIiwgc3RkOjp0b19zdHJpbmcoX19HTlVD X18pICsgIi4iICsgc3RkOjp0b19zdHJpbmcoX19HTlVDX01JTk9SX18pICsgIi4iICsgc3RkOjp0 b19zdHJpbmcoX19HTlVDX1BBVENITEVWRUxfXyl9fTsKKy0jZWxpZiBkZWZpbmVkKF9fSFBfY2Mp IHx8IGRlZmluZWQoX19IUF9hQ0MpCistICAgICAgICByZXN1bHRbImNvbXBpbGVyIl0gPSAiaHAi CistI2VsaWYgZGVmaW5lZChfX0lCTUNQUF9fKQorLSAgICAgICAgcmVzdWx0WyJjb21waWxlciJd ID0ge3siZmFtaWx5IiwgImlsZWNwcCJ9LCB7InZlcnNpb24iLCBfX0lCTUNQUF9ffX07CistI2Vs aWYgZGVmaW5lZChfTVNDX1ZFUikKKy0gICAgICAgIHJlc3VsdFsiY29tcGlsZXIiXSA9IHt7ImZh bWlseSIsICJtc3ZjIn0sIHsidmVyc2lvbiIsIF9NU0NfVkVSfX07CistI2VsaWYgZGVmaW5lZChf X1BHSSkKKy0gICAgICAgIHJlc3VsdFsiY29tcGlsZXIiXSA9IHt7ImZhbWlseSIsICJwZ2NwcCJ9 LCB7InZlcnNpb24iLCBfX1BHSX19OworLSNlbGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCistICAg ICAgICByZXN1bHRbImNvbXBpbGVyIl0gPSB7eyJmYW1pbHkiLCAic3VucHJvIn0sIHsidmVyc2lv biIsIF9fU1VOUFJPX0NDfX07CistI2Vsc2UKKy0gICAgICAgIHJlc3VsdFsiY29tcGlsZXIiXSA9 IHt7ImZhbWlseSIsICJ1bmtub3duIn0sIHsidmVyc2lvbiIsICJ1bmtub3duIn19OworLSNlbmRp ZgorLQorLSNpZmRlZiBfX2NwbHVzcGx1cworLSAgICAgICAgcmVzdWx0WyJjb21waWxlciJdWyJj KysiXSA9IHN0ZDo6dG9fc3RyaW5nKF9fY3BsdXNwbHVzKTsKKy0jZWxzZQorLSAgICAgICAgcmVz dWx0WyJjb21waWxlciJdWyJjKysiXSA9ICJ1bmtub3duIjsKKy0jZW5kaWYKKy0gICAgICAgIHJl dHVybiByZXN1bHQ7CistICAgIH0KKy0KKy0KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vCistICAgIC8vIEpTT04gdmFsdWUgZGF0YSB0eXBlcyAvLworLSAgICAvLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKy0KKy0gICAgLy8vIEBuYW1lIEpTT04gdmFsdWUgZGF0YSB0eXBlcwor LSAgICAvLy8gVGhlIGRhdGEgdHlwZXMgdG8gc3RvcmUgYSBKU09OIHZhbHVlLiBUaGVzZSB0eXBl cyBhcmUgZGVyaXZlZCBmcm9tCistICAgIC8vLyB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIHBhc3Nl ZCB0byBjbGFzcyBAcmVmIGJhc2ljX2pzb24uCistICAgIC8vLyBAeworLQorLSAgICAvLy8gQGJy aWVmIG9iamVjdCBrZXkgY29tcGFyYXRvciB0eXBlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29u Lm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL29iamVjdF9jb21wYXJhdG9yX3QvCistI2lmIGRl ZmluZWQoSlNPTl9IQVNfQ1BQXzE0KQorLSAgICAvLyBVc2UgdHJhbnNwYXJlbnQgY29tcGFyYXRv ciBpZiBwb3NzaWJsZSwgY29tYmluZWQgd2l0aCBwZXJmZWN0IGZvcndhcmRpbmcKKy0gICAgLy8g b24gZmluZCgpIGFuZCBjb3VudCgpIGNhbGxzIHByZXZlbnRzIHVubmVjZXNzYXJ5IHN0cmluZyBj b25zdHJ1Y3Rpb24uCistICAgIHVzaW5nIG9iamVjdF9jb21wYXJhdG9yX3QgPSBzdGQ6Omxlc3M8 PjsKKy0jZWxzZQorLSAgICB1c2luZyBvYmplY3RfY29tcGFyYXRvcl90ID0gc3RkOjpsZXNzPFN0 cmluZ1R5cGU+OworLSNlbmRpZgorLQorLSAgICAvLy8gQGJyaWVmIGEgdHlwZSBmb3IgYW4gb2Jq ZWN0CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29u L29iamVjdF90LworLSAgICB1c2luZyBvYmplY3RfdCA9IE9iamVjdFR5cGU8U3RyaW5nVHlwZSwK Ky0gICAgICAgICAgYmFzaWNfanNvbiwKKy0gICAgICAgICAgb2JqZWN0X2NvbXBhcmF0b3JfdCwK Ky0gICAgICAgICAgQWxsb2NhdG9yVHlwZTxzdGQ6OnBhaXI8Y29uc3QgU3RyaW5nVHlwZSwKKy0g ICAgICAgICAgYmFzaWNfanNvbj4+PjsKKy0KKy0gICAgLy8vIEBicmllZiBhIHR5cGUgZm9yIGFu IGFycmF5CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19q c29uL2FycmF5X3QvCistICAgIHVzaW5nIGFycmF5X3QgPSBBcnJheVR5cGU8YmFzaWNfanNvbiwg QWxsb2NhdG9yVHlwZTxiYXNpY19qc29uPj47CistCistICAgIC8vLyBAYnJpZWYgYSB0eXBlIGZv ciBhIHN0cmluZworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFz aWNfanNvbi9zdHJpbmdfdC8KKy0gICAgdXNpbmcgc3RyaW5nX3QgPSBTdHJpbmdUeXBlOworLQor LSAgICAvLy8gQGJyaWVmIGEgdHlwZSBmb3IgYSBib29sZWFuCistICAgIC8vLyBAc2EgaHR0cHM6 Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2Jvb2xlYW5fdC8KKy0gICAgdXNpbmcg Ym9vbGVhbl90ID0gQm9vbGVhblR5cGU7CistCistICAgIC8vLyBAYnJpZWYgYSB0eXBlIGZvciBh IG51bWJlciAoaW50ZWdlcikKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUv YXBpL2Jhc2ljX2pzb24vbnVtYmVyX2ludGVnZXJfdC8KKy0gICAgdXNpbmcgbnVtYmVyX2ludGVn ZXJfdCA9IE51bWJlckludGVnZXJUeXBlOworLQorLSAgICAvLy8gQGJyaWVmIGEgdHlwZSBmb3Ig YSBudW1iZXIgKHVuc2lnbmVkKQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5t ZS9hcGkvYmFzaWNfanNvbi9udW1iZXJfdW5zaWduZWRfdC8KKy0gICAgdXNpbmcgbnVtYmVyX3Vu c2lnbmVkX3QgPSBOdW1iZXJVbnNpZ25lZFR5cGU7CistCistICAgIC8vLyBAYnJpZWYgYSB0eXBl IGZvciBhIG51bWJlciAoZmxvYXRpbmctcG9pbnQpCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29u Lm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL251bWJlcl9mbG9hdF90LworLSAgICB1c2luZyBu dW1iZXJfZmxvYXRfdCA9IE51bWJlckZsb2F0VHlwZTsKKy0KKy0gICAgLy8vIEBicmllZiBhIHR5 cGUgZm9yIGEgcGFja2VkIGJpbmFyeSB0eXBlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5s b2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2JpbmFyeV90LworLSAgICB1c2luZyBiaW5hcnlfdCA9 IG5sb2htYW5uOjpieXRlX2NvbnRhaW5lcl93aXRoX3N1YnR5cGU8QmluYXJ5VHlwZT47CistCist ICAgIC8vLyBAfQorLQorLSAgcHJpdmF0ZToKKy0KKy0gICAgLy8vIGhlbHBlciBmb3IgZXhjZXB0 aW9uLXNhZmUgb2JqZWN0IGNyZWF0aW9uCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu YW1lLi4uIEFyZ3M+CistICAgIEpTT05fSEVETEVZX1JFVFVSTlNfTk9OX05VTEwKKy0gICAgc3Rh dGljIFQqIGNyZWF0ZShBcmdzJiYgLi4uIGFyZ3MpCistICAgIHsKKy0gICAgICAgIEFsbG9jYXRv clR5cGU8VD4gYWxsb2M7CistICAgICAgICB1c2luZyBBbGxvY2F0b3JUcmFpdHMgPSBzdGQ6OmFs bG9jYXRvcl90cmFpdHM8QWxsb2NhdG9yVHlwZTxUPj47CistCistICAgICAgICBhdXRvIGRlbGV0 ZXIgPSBbJl0oVCAqIG9iaikKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBBbGxvY2F0b3JUcmFp dHM6OmRlYWxsb2NhdGUoYWxsb2MsIG9iaiwgMSk7CistICAgICAgICB9OworLSAgICAgICAgc3Rk Ojp1bmlxdWVfcHRyPFQsIGRlY2x0eXBlKGRlbGV0ZXIpPiBvYmooQWxsb2NhdG9yVHJhaXRzOjph bGxvY2F0ZShhbGxvYywgMSksIGRlbGV0ZXIpOworLSAgICAgICAgQWxsb2NhdG9yVHJhaXRzOjpj b25zdHJ1Y3QoYWxsb2MsIG9iai5nZXQoKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK Ky0gICAgICAgIEpTT05fQVNTRVJUKG9iaiAhPSBudWxscHRyKTsKKy0gICAgICAgIHJldHVybiBv YmoucmVsZWFzZSgpOworLSAgICB9CistCistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor LSAgICAvLyBKU09OIHZhbHVlIHN0b3JhZ2UgLy8KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vCistCistICBKU09OX1BSSVZBVEVfVU5MRVNTX1RFU1RFRDoKKy0gICAgLyohCistICAgIEBi cmllZiBhIEpTT04gdmFsdWUKKy0KKy0gICAgVGhlIGFjdHVhbCBzdG9yYWdlIGZvciBhIEpTT04g dmFsdWUgb2YgdGhlIEByZWYgYmFzaWNfanNvbiBjbGFzcy4gVGhpcworLSAgICB1bmlvbiBjb21i aW5lcyB0aGUgZGlmZmVyZW50IHN0b3JhZ2UgdHlwZXMgZm9yIHRoZSBKU09OIHZhbHVlIHR5cGVz CistICAgIGRlZmluZWQgaW4gQHJlZiB2YWx1ZV90LgorLQorLSAgICBKU09OIHR5cGUgfCB2YWx1 ZV90IHR5cGUgICAgfCB1c2VkIHR5cGUKKy0gICAgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0t IHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistICAgIG9iamVjdCAgICB8IG9iamVjdCAgICAg ICAgICB8IHBvaW50ZXIgdG8gQHJlZiBvYmplY3RfdAorLSAgICBhcnJheSAgICAgfCBhcnJheSAg ICAgICAgICAgfCBwb2ludGVyIHRvIEByZWYgYXJyYXlfdAorLSAgICBzdHJpbmcgICAgfCBzdHJp bmcgICAgICAgICAgfCBwb2ludGVyIHRvIEByZWYgc3RyaW5nX3QKKy0gICAgYm9vbGVhbiAgIHwg Ym9vbGVhbiAgICAgICAgIHwgQHJlZiBib29sZWFuX3QKKy0gICAgbnVtYmVyICAgIHwgbnVtYmVy X2ludGVnZXIgIHwgQHJlZiBudW1iZXJfaW50ZWdlcl90CistICAgIG51bWJlciAgICB8IG51bWJl cl91bnNpZ25lZCB8IEByZWYgbnVtYmVyX3Vuc2lnbmVkX3QKKy0gICAgbnVtYmVyICAgIHwgbnVt YmVyX2Zsb2F0ICAgIHwgQHJlZiBudW1iZXJfZmxvYXRfdAorLSAgICBiaW5hcnkgICAgfCBiaW5h cnkgICAgICAgICAgfCBwb2ludGVyIHRvIEByZWYgYmluYXJ5X3QKKy0gICAgbnVsbCAgICAgIHwg bnVsbCAgICAgICAgICAgIHwgKm5vIHZhbHVlIGlzIHN0b3JlZCoKKy0KKy0gICAgQG5vdGUgVmFy aWFibGUtbGVuZ3RoIHR5cGVzIChvYmplY3RzLCBhcnJheXMsIGFuZCBzdHJpbmdzKSBhcmUgc3Rv cmVkIGFzCistICAgIHBvaW50ZXJzLiBUaGUgc2l6ZSBvZiB0aGUgdW5pb24gc2hvdWxkIG5vdCBl eGNlZWQgNjQgYml0cyBpZiB0aGUgZGVmYXVsdAorLSAgICB2YWx1ZSB0eXBlcyBhcmUgdXNlZC4K Ky0KKy0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKy0gICAgKi8KKy0gICAgdW5pb24ganNvbl92 YWx1ZQorLSAgICB7CistICAgICAgICAvLy8gb2JqZWN0IChzdG9yZWQgd2l0aCBwb2ludGVyIHRv IHNhdmUgc3RvcmFnZSkKKy0gICAgICAgIG9iamVjdF90KiBvYmplY3Q7CistICAgICAgICAvLy8g YXJyYXkgKHN0b3JlZCB3aXRoIHBvaW50ZXIgdG8gc2F2ZSBzdG9yYWdlKQorLSAgICAgICAgYXJy YXlfdCogYXJyYXk7CistICAgICAgICAvLy8gc3RyaW5nIChzdG9yZWQgd2l0aCBwb2ludGVyIHRv IHNhdmUgc3RvcmFnZSkKKy0gICAgICAgIHN0cmluZ190KiBzdHJpbmc7CistICAgICAgICAvLy8g YmluYXJ5IChzdG9yZWQgd2l0aCBwb2ludGVyIHRvIHNhdmUgc3RvcmFnZSkKKy0gICAgICAgIGJp bmFyeV90KiBiaW5hcnk7CistICAgICAgICAvLy8gYm9vbGVhbgorLSAgICAgICAgYm9vbGVhbl90 IGJvb2xlYW47CistICAgICAgICAvLy8gbnVtYmVyIChpbnRlZ2VyKQorLSAgICAgICAgbnVtYmVy X2ludGVnZXJfdCBudW1iZXJfaW50ZWdlcjsKKy0gICAgICAgIC8vLyBudW1iZXIgKHVuc2lnbmVk IGludGVnZXIpCistICAgICAgICBudW1iZXJfdW5zaWduZWRfdCBudW1iZXJfdW5zaWduZWQ7Cist ICAgICAgICAvLy8gbnVtYmVyIChmbG9hdGluZy1wb2ludCkKKy0gICAgICAgIG51bWJlcl9mbG9h dF90IG51bWJlcl9mbG9hdDsKKy0KKy0gICAgICAgIC8vLyBkZWZhdWx0IGNvbnN0cnVjdG9yIChm b3IgbnVsbCB2YWx1ZXMpCistICAgICAgICBqc29uX3ZhbHVlKCkgPSBkZWZhdWx0OworLSAgICAg ICAgLy8vIGNvbnN0cnVjdG9yIGZvciBib29sZWFucworLSAgICAgICAganNvbl92YWx1ZShib29s ZWFuX3Qgdikgbm9leGNlcHQgOiBib29sZWFuKHYpIHt9CistICAgICAgICAvLy8gY29uc3RydWN0 b3IgZm9yIG51bWJlcnMgKGludGVnZXIpCistICAgICAgICBqc29uX3ZhbHVlKG51bWJlcl9pbnRl Z2VyX3Qgdikgbm9leGNlcHQgOiBudW1iZXJfaW50ZWdlcih2KSB7fQorLSAgICAgICAgLy8vIGNv bnN0cnVjdG9yIGZvciBudW1iZXJzICh1bnNpZ25lZCkKKy0gICAgICAgIGpzb25fdmFsdWUobnVt YmVyX3Vuc2lnbmVkX3Qgdikgbm9leGNlcHQgOiBudW1iZXJfdW5zaWduZWQodikge30KKy0gICAg ICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgbnVtYmVycyAoZmxvYXRpbmctcG9pbnQpCistICAgICAg ICBqc29uX3ZhbHVlKG51bWJlcl9mbG9hdF90IHYpIG5vZXhjZXB0IDogbnVtYmVyX2Zsb2F0KHYp IHt9CistICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9yIGVtcHR5IHZhbHVlcyBvZiBhIGdpdmVu IHR5cGUKKy0gICAgICAgIGpzb25fdmFsdWUodmFsdWVfdCB0KQorLSAgICAgICAgeworLSAgICAg ICAgICAgIHN3aXRjaCAodCkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNhc2Ug dmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBvYmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+KCk7CistICAgICAgICAgICAgICAgICAgICBicmVh azsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 OmFycmF5OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBhcnJheSA9 IGNyZWF0ZTxhcnJheV90PigpOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAg ICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6Cist ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IGNyZWF0ZTxz dHJpbmdfdD4oIiIpOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGJpbmFyeSA9IGNyZWF0ZTxiaW5hcnlf dD4oKTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9Cist CistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiA9IHN0YXRpY19jYXN0PGJvb2xlYW5f dD4oZmFsc2UpOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgbnVtYmVyX2ludGVnZXIgPSBz dGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90PigwKTsKKy0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICBudW1iZXJfdW5zaWduZWQgPSBzdGF0aWNfY2FzdDxudW1iZXJfdW5zaWduZWRfdD4oMCk7 CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICAg ICAgeworLSAgICAgICAgICAgICAgICAgICAgbnVtYmVyX2Zsb2F0ID0gc3RhdGljX2Nhc3Q8bnVt YmVyX2Zsb2F0X3Q+KDAuMCk7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CistICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG51bGxwdHI7ICAv LyBzaWxlbmNlIHdhcm5pbmcsIHNlZSAjODIxCistICAgICAgICAgICAgICAgICAgICBicmVhazsK Ky0gICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRp c2NhcmRlZDoKKy0gICAgICAgICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbnVsbHB0cjsgIC8vIHNpbGVuY2Ugd2Fybmlu Zywgc2VlICM4MjEKKy0gICAgICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VM WSh0ID09IHZhbHVlX3Q6Om51bGwpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgICAgIEpTT05fVEhST1cob3RoZXJfZXJyb3I6OmNyZWF0ZSg1MDAsICI5NjFj MTUxZDJlODdmMjY4NmE5NTVhOWJlMjRkMzE2ZjEzNjJiZjIxIDMuMTAuNSIsIGJhc2ljX2pzb24o KSkpOyAvLyBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICB9Cist ICAgICAgICB9CistCistICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9yIHN0cmluZ3MKKy0gICAg ICAgIGpzb25fdmFsdWUoY29uc3Qgc3RyaW5nX3QmIHZhbHVlKSA6IHN0cmluZyhjcmVhdGU8c3Ry aW5nX3Q+KHZhbHVlKSkge30KKy0KKy0gICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgcnZhbHVl IHN0cmluZ3MKKy0gICAgICAgIGpzb25fdmFsdWUoc3RyaW5nX3QmJiB2YWx1ZSkgOiBzdHJpbmco Y3JlYXRlPHN0cmluZ190PihzdGQ6Om1vdmUodmFsdWUpKSkge30KKy0KKy0gICAgICAgIC8vLyBj b25zdHJ1Y3RvciBmb3Igb2JqZWN0cworLSAgICAgICAganNvbl92YWx1ZShjb25zdCBvYmplY3Rf dCYgdmFsdWUpIDogb2JqZWN0KGNyZWF0ZTxvYmplY3RfdD4odmFsdWUpKSB7fQorLQorLSAgICAg ICAgLy8vIGNvbnN0cnVjdG9yIGZvciBydmFsdWUgb2JqZWN0cworLSAgICAgICAganNvbl92YWx1 ZShvYmplY3RfdCYmIHZhbHVlKSA6IG9iamVjdChjcmVhdGU8b2JqZWN0X3Q+KHN0ZDo6bW92ZSh2 YWx1ZSkpKSB7fQorLQorLSAgICAgICAgLy8vIGNvbnN0cnVjdG9yIGZvciBhcnJheXMKKy0gICAg ICAgIGpzb25fdmFsdWUoY29uc3QgYXJyYXlfdCYgdmFsdWUpIDogYXJyYXkoY3JlYXRlPGFycmF5 X3Q+KHZhbHVlKSkge30KKy0KKy0gICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgcnZhbHVlIGFy cmF5cworLSAgICAgICAganNvbl92YWx1ZShhcnJheV90JiYgdmFsdWUpIDogYXJyYXkoY3JlYXRl PGFycmF5X3Q+KHN0ZDo6bW92ZSh2YWx1ZSkpKSB7fQorLQorLSAgICAgICAgLy8vIGNvbnN0cnVj dG9yIGZvciBiaW5hcnkgYXJyYXlzCistICAgICAgICBqc29uX3ZhbHVlKGNvbnN0IHR5cGVuYW1l IGJpbmFyeV90Ojpjb250YWluZXJfdHlwZSYgdmFsdWUpIDogYmluYXJ5KGNyZWF0ZTxiaW5hcnlf dD4odmFsdWUpKSB7fQorLQorLSAgICAgICAgLy8vIGNvbnN0cnVjdG9yIGZvciBydmFsdWUgYmlu YXJ5IGFycmF5cworLSAgICAgICAganNvbl92YWx1ZSh0eXBlbmFtZSBiaW5hcnlfdDo6Y29udGFp bmVyX3R5cGUmJiB2YWx1ZSkgOiBiaW5hcnkoY3JlYXRlPGJpbmFyeV90PihzdGQ6Om1vdmUodmFs dWUpKSkge30KKy0KKy0gICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgYmluYXJ5IGFycmF5cyAo aW50ZXJuYWwgdHlwZSkKKy0gICAgICAgIGpzb25fdmFsdWUoY29uc3QgYmluYXJ5X3QmIHZhbHVl KSA6IGJpbmFyeShjcmVhdGU8YmluYXJ5X3Q+KHZhbHVlKSkge30KKy0KKy0gICAgICAgIC8vLyBj b25zdHJ1Y3RvciBmb3IgcnZhbHVlIGJpbmFyeSBhcnJheXMgKGludGVybmFsIHR5cGUpCistICAg ICAgICBqc29uX3ZhbHVlKGJpbmFyeV90JiYgdmFsdWUpIDogYmluYXJ5KGNyZWF0ZTxiaW5hcnlf dD4oc3RkOjptb3ZlKHZhbHVlKSkpIHt9CistCistICAgICAgICB2b2lkIGRlc3Ryb3kodmFsdWVf dCB0KQorLSAgICAgICAgeworLSAgICAgICAgICAgIGlmICh0ID09IHZhbHVlX3Q6OmFycmF5IHx8 IHQgPT0gdmFsdWVfdDo6b2JqZWN0KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg Ly8gZmxhdHRlbiB0aGUgY3VycmVudCBqc29uX3ZhbHVlIHRvIGEgaGVhcC1hbGxvY2F0ZWQgc3Rh Y2sKKy0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8YmFzaWNfanNvbj4gc3RhY2s7CistCist ICAgICAgICAgICAgICAgIC8vIG1vdmUgdGhlIHRvcC1sZXZlbCBpdGVtcyB0byBzdGFjaworLSAg ICAgICAgICAgICAgICBpZiAodCA9PSB2YWx1ZV90OjphcnJheSkKKy0gICAgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzZXJ2ZShhcnJheS0+c2l6ZSgpKTsKKy0g ICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShhcnJheS0+YmVnaW4oKSwgYXJyYXktPmVuZCgp LCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoc3RhY2spKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IHN0YWNrLnJlc2VydmUob2JqZWN0LT5zaXplKCkpOworLSAgICAgICAgICAgICAgICAgICAgZm9y IChhdXRvJiYgaXQgOiAqb2JqZWN0KQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAgICAgICAgIHN0YWNrLnB1c2hfYmFjayhzdGQ6Om1vdmUoaXQuc2Vjb25kKSk7Cist ICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICAgICAgd2hpbGUgKCFzdGFjay5lbXB0eSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICAvLyBtb3ZlIHRoZSBsYXN0IGl0ZW0gdG8gbG9jYWwgdmFyaWFibGUgdG8g YmUgcHJvY2Vzc2VkCistICAgICAgICAgICAgICAgICAgICBiYXNpY19qc29uIGN1cnJlbnRfaXRl bShzdGQ6Om1vdmUoc3RhY2suYmFjaygpKSk7CistICAgICAgICAgICAgICAgICAgICBzdGFjay5w b3BfYmFjaygpOworLQorLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgY3VycmVudF9pdGVtIGlz IGFycmF5L29iamVjdCwgbW92ZQorLSAgICAgICAgICAgICAgICAgICAgLy8gaXRzIGNoaWxkcmVu IHRvIHRoZSBzdGFjayB0byBiZSBwcm9jZXNzZWQgbGF0ZXIKKy0gICAgICAgICAgICAgICAgICAg IGlmIChjdXJyZW50X2l0ZW0uaXNfYXJyYXkoKSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY3VycmVudF9pdGVtLm1fdmFsdWUuYXJy YXktPmJlZ2luKCksIGN1cnJlbnRfaXRlbS5tX3ZhbHVlLmFycmF5LT5lbmQoKSwgc3RkOjpiYWNr X2luc2VydGVyKHN0YWNrKSk7CistCistICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9p dGVtLm1fdmFsdWUuYXJyYXktPmNsZWFyKCk7CistICAgICAgICAgICAgICAgICAgICB9CistICAg ICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50X2l0ZW0uaXNfb2JqZWN0KCkpCistICAg ICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiYg aXQgOiAqY3VycmVudF9pdGVtLm1fdmFsdWUub2JqZWN0KQorLSAgICAgICAgICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaF9iYWNrKHN0ZDo6 bW92ZShpdC5zZWNvbmQpKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAg ICAgICAgICAgICAgICAgICAgY3VycmVudF9pdGVtLm1fdmFsdWUub2JqZWN0LT5jbGVhcigpOwor LSAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBu b3cgc2FmZSB0aGF0IGN1cnJlbnRfaXRlbSBnZXQgZGVzdHJ1Y3RlZAorLSAgICAgICAgICAgICAg ICAgICAgLy8gc2luY2UgaXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbgorLSAgICAgICAgICAg ICAgICB9CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIHN3aXRjaCAodCkKKy0gICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBBbGxvY2F0b3JUeXBlPG9iamVjdF90 PiBhbGxvYzsKKy0gICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxkZWNs dHlwZShhbGxvYyk+OjpkZXN0cm95KGFsbG9jLCBvYmplY3QpOworLSAgICAgICAgICAgICAgICAg ICAgc3RkOjphbGxvY2F0b3JfdHJhaXRzPGRlY2x0eXBlKGFsbG9jKT46OmRlYWxsb2NhdGUoYWxs b2MsIG9iamVjdCwgMSk7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorLSAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBBbGxvY2F0b3JUeXBlPGFycmF5X3Q+ IGFsbG9jOworLSAgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3JfdHJhaXRzPGRlY2x0 eXBlKGFsbG9jKT46OmRlc3Ryb3koYWxsb2MsIGFycmF5KTsKKy0gICAgICAgICAgICAgICAgICAg IHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxkZWNsdHlwZShhbGxvYyk+OjpkZWFsbG9jYXRlKGFsbG9j LCBhcnJheSwgMSk7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgQWxsb2NhdG9yVHlwZTxzdHJpbmdfdD4g YWxsb2M7CistICAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8ZGVjbHR5 cGUoYWxsb2MpPjo6ZGVzdHJveShhbGxvYywgc3RyaW5nKTsKKy0gICAgICAgICAgICAgICAgICAg IHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxkZWNsdHlwZShhbGxvYyk+OjpkZWFsbG9jYXRlKGFsbG9j LCBzdHJpbmcsIDEpOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIEFsbG9jYXRvclR5cGU8YmluYXJ5X3Q+ IGFsbG9jOworLSAgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3JfdHJhaXRzPGRlY2x0 eXBlKGFsbG9jKT46OmRlc3Ryb3koYWxsb2MsIGJpbmFyeSk7CistICAgICAgICAgICAgICAgICAg ICBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8ZGVjbHR5cGUoYWxsb2MpPjo6ZGVhbGxvY2F0ZShhbGxv YywgYmluYXJ5LCAxKTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAg ICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAg ICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgICAgICAgICBjYXNlIHZh bHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51 bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxv YXQ6CistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAg ICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0K Ky0gICAgfTsKKy0KKy0gIHByaXZhdGU6CistICAgIC8qIQorLSAgICBAYnJpZWYgY2hlY2tzIHRo ZSBjbGFzcyBpbnZhcmlhbnRzCistCistICAgIFRoaXMgZnVuY3Rpb24gYXNzZXJ0cyB0aGUgY2xh c3MgaW52YXJpYW50cy4gSXQgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IHRoZQorLSAgICBlbmQgb2Yg ZXZlcnkgY29uc3RydWN0b3IgdG8gbWFrZSBzdXJlIHRoYXQgY3JlYXRlZCBvYmplY3RzIHJlc3Bl Y3QgdGhlCistICAgIGludmFyaWFudC4gRnVydGhlcm1vcmUsIGl0IGhhcyB0byBiZSBjYWxsZWQg ZWFjaCB0aW1lIHRoZSB0eXBlIG9mIGEgSlNPTgorLSAgICB2YWx1ZSBpcyBjaGFuZ2VkLCBiZWNh dXNlIHRoZSBpbnZhcmlhbnQgZXhwcmVzc2VzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4KKy0gICAg QGEgbV90eXBlIGFuZCBAYSBtX3ZhbHVlLgorLQorLSAgICBGdXJ0aGVybW9yZSwgdGhlIHBhcmVu dCByZWxhdGlvbiBpcyBjaGVja2VkIGZvciBhcnJheXMgYW5kIG9iamVjdHM6IElmCistICAgIEBh IGNoZWNrX3BhcmVudHMgdHJ1ZSBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9yIG9iamVjdCwg dGhlbiB0aGUKKy0gICAgY29udGFpbmVyJ3MgZWxlbWVudHMgbXVzdCBoYXZlIHRoZSBjdXJyZW50 IHZhbHVlIGFzIHBhcmVudC4KKy0KKy0gICAgQHBhcmFtW2luXSBjaGVja19wYXJlbnRzICB3aGV0 aGVyIHRoZSBwYXJlbnQgcmVsYXRpb24gc2hvdWxkIGJlIGNoZWNrZWQuCistICAgICAgICAgICAg ICAgVGhlIHZhbHVlIGlzIHRydWUgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgc2V0IHRv IGZhbHNlCistICAgICAgICAgICAgICAgZHVyaW5nIGRlc3RydWN0aW9uIG9mIG9iamVjdHMgd2hl biB0aGUgaW52YXJpYW50IGRvZXMgbm90CistICAgICAgICAgICAgICAgbmVlZCB0byBob2xkLgor LSAgICAqLworLSAgICB2b2lkIGFzc2VydF9pbnZhcmlhbnQoYm9vbCBjaGVja19wYXJlbnRzID0g dHJ1ZSkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgSlNPTl9BU1NFUlQobV90eXBl ICE9IHZhbHVlX3Q6Om9iamVjdCB8fCBtX3ZhbHVlLm9iamVjdCAhPSBudWxscHRyKTsKKy0gICAg ICAgIEpTT05fQVNTRVJUKG1fdHlwZSAhPSB2YWx1ZV90OjphcnJheSB8fCBtX3ZhbHVlLmFycmF5 ICE9IG51bGxwdHIpOworLSAgICAgICAgSlNPTl9BU1NFUlQobV90eXBlICE9IHZhbHVlX3Q6OnN0 cmluZyB8fCBtX3ZhbHVlLnN0cmluZyAhPSBudWxscHRyKTsKKy0gICAgICAgIEpTT05fQVNTRVJU KG1fdHlwZSAhPSB2YWx1ZV90OjpiaW5hcnkgfHwgbV92YWx1ZS5iaW5hcnkgIT0gbnVsbHB0cik7 CistCistI2lmIEpTT05fRElBR05PU1RJQ1MKKy0gICAgICAgIEpTT05fVFJZCistICAgICAgICB7 CistICAgICAgICAgICAgLy8gY3BwY2hlY2stc3VwcHJlc3MgYXNzZXJ0V2l0aFNpZGVFZmZlY3QK Ky0gICAgICAgICAgICBKU09OX0FTU0VSVCghY2hlY2tfcGFyZW50cyB8fCAhaXNfc3RydWN0dXJl ZCgpIHx8IHN0ZDo6YWxsX29mKGJlZ2luKCksIGVuZCgpLCBbdGhpc10oY29uc3QgYmFzaWNfanNv biAmIGopCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gai5tX3BhcmVu dCA9PSB0aGlzOworLSAgICAgICAgICAgIH0pKTsKKy0gICAgICAgIH0KKy0gICAgICAgIEpTT05f Q0FUQ0goLi4uKSB7fSAvLyBMQ09WX0VYQ0xfTElORQorLSNlbmRpZgorLSAgICAgICAgc3RhdGlj X2Nhc3Q8dm9pZD4oY2hlY2tfcGFyZW50cyk7CistICAgIH0KKy0KKy0gICAgdm9pZCBzZXRfcGFy ZW50cygpCistICAgIHsKKy0jaWYgSlNPTl9ESUFHTk9TVElDUworLSAgICAgICAgc3dpdGNoICht X3R5cGUpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6ICptX3Zh bHVlLmFycmF5KQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBlbGVt ZW50Lm1fcGFyZW50ID0gdGhpczsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAg ICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpv YmplY3Q6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGVsZW1l bnQgOiAqbV92YWx1ZS5vYmplY3QpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgICAgIGVsZW1lbnQuc2Vjb25kLm1fcGFyZW50ID0gdGhpczsKKy0gICAgICAgICAgICAgICAg fQorLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAg ICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5n OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVt YmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0Ogor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAgIGNhc2UgdmFs dWVfdDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAg IGJyZWFrOworLSAgICAgICAgfQorLSNlbmRpZgorLSAgICB9CistCistICAgIGl0ZXJhdG9yIHNl dF9wYXJlbnRzKGl0ZXJhdG9yIGl0LCB0eXBlbmFtZSBpdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBl IGNvdW50X3NldF9wYXJlbnRzKQorLSAgICB7CistI2lmIEpTT05fRElBR05PU1RJQ1MKKy0gICAg ICAgIGZvciAodHlwZW5hbWUgaXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBpID0gMDsgaSA8IGNv dW50X3NldF9wYXJlbnRzOyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgKGl0ICsgaSkt Pm1fcGFyZW50ID0gdGhpczsKKy0gICAgICAgIH0KKy0jZWxzZQorLSAgICAgICAgc3RhdGljX2Nh c3Q8dm9pZD4oY291bnRfc2V0X3BhcmVudHMpOworLSNlbmRpZgorLSAgICAgICAgcmV0dXJuIGl0 OworLSAgICB9CistCistICAgIHJlZmVyZW5jZSBzZXRfcGFyZW50KHJlZmVyZW5jZSBqLCBzdGQ6 OnNpemVfdCBvbGRfY2FwYWNpdHkgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpKQorLSAg ICB7CistI2lmIEpTT05fRElBR05PU1RJQ1MKKy0gICAgICAgIGlmIChvbGRfY2FwYWNpdHkgIT0g c3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAv LyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzI4MzgKKy0gICAg ICAgICAgICBKU09OX0FTU0VSVCh0eXBlKCkgPT0gdmFsdWVfdDo6YXJyYXkpOworLSAgICAgICAg ICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShtX3ZhbHVlLmFycmF5LT5jYXBhY2l0eSgpICE9 IG9sZF9jYXBhY2l0eSkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBjYXBh Y2l0eSBoYXMgY2hhbmdlZDogdXBkYXRlIGFsbCBwYXJlbnRzCistICAgICAgICAgICAgICAgIHNl dF9wYXJlbnRzKCk7CistICAgICAgICAgICAgICAgIHJldHVybiBqOworLSAgICAgICAgICAgIH0K Ky0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIG9yZGVyZWRfanNvbiB1c2VzIGEgdmVjdG9yIGlu dGVybmFsbHksIHNvIHBvaW50ZXJzIGNvdWxkIGhhdmUKKy0gICAgICAgIC8vIGJlZW4gaW52YWxp ZGF0ZWQ7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbi9pc3N1ZXMvMjk2Mgor LSNpZmRlZiBKU09OX0hFRExFWV9NU1ZDX1ZFUlNJT04KKy0jcHJhZ21hIHdhcm5pbmcocHVzaCAp CistI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTI3KSAvLyBpZ25vcmUgd2FybmluZyB0byBy ZXBsYWNlIGlmIHdpdGggaWYgY29uc3RleHByCistI2VuZGlmCistICAgICAgICBpZiAoZGV0YWls Ojppc19vcmRlcmVkX21hcDxvYmplY3RfdD46OnZhbHVlKQorLSAgICAgICAgeworLSAgICAgICAg ICAgIHNldF9wYXJlbnRzKCk7CistICAgICAgICAgICAgcmV0dXJuIGo7CistICAgICAgICB9Cist I2lmZGVmIEpTT05fSEVETEVZX01TVkNfVkVSU0lPTgorLSNwcmFnbWEgd2FybmluZyggcG9wICkK Ky0jZW5kaWYKKy0KKy0gICAgICAgIGoubV9wYXJlbnQgPSB0aGlzOworLSNlbHNlCistICAgICAg ICBzdGF0aWNfY2FzdDx2b2lkPihqKTsKKy0gICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KG9sZF9j YXBhY2l0eSk7CistI2VuZGlmCistICAgICAgICByZXR1cm4gajsKKy0gICAgfQorLQorLSAgcHVi bGljOgorLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLSAgICAvLyBKU09OIHBhcnNl ciBjYWxsYmFjayAvLworLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLSAgICAv Ly8gQGJyaWVmIHBhcnNlciBldmVudCB0eXBlcworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5u bG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9wYXJzZV9ldmVudF90LworLSAgICB1c2luZyBwYXJz ZV9ldmVudF90ID0gZGV0YWlsOjpwYXJzZV9ldmVudF90OworLQorLSAgICAvLy8gQGJyaWVmIHBl ci1lbGVtZW50IHBhcnNlciBjYWxsYmFjayB0eXBlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29u Lm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3BhcnNlcl9jYWxsYmFja190LworLSAgICB1c2lu ZyBwYXJzZXJfY2FsbGJhY2tfdCA9IGRldGFpbDo6cGFyc2VyX2NhbGxiYWNrX3Q8YmFzaWNfanNv bj47CistCistICAgIC8vLy8vLy8vLy8vLy8vLy8vLworLSAgICAvLyBjb25zdHJ1Y3RvcnMgLy8K Ky0gICAgLy8vLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8vLyBAbmFtZSBjb25zdHJ1Y3RvcnMg YW5kIGRlc3RydWN0b3JzCistICAgIC8vLyBDb25zdHJ1Y3RvcnMgb2YgY2xhc3MgQHJlZiBiYXNp Y19qc29uLCBjb3B5L21vdmUgY29uc3RydWN0b3IsIGNvcHkKKy0gICAgLy8vIGFzc2lnbm1lbnQs IHN0YXRpYyBmdW5jdGlvbnMgY3JlYXRpbmcgb2JqZWN0cywgYW5kIHRoZSBkZXN0cnVjdG9yLgor LSAgICAvLy8gQHsKKy0KKy0gICAgLy8vIEBicmllZiBjcmVhdGUgYW4gZW1wdHkgdmFsdWUgd2l0 aCBhIGdpdmVuIHR5cGUKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBp L2Jhc2ljX2pzb24vYmFzaWNfanNvbi8KKy0gICAgYmFzaWNfanNvbihjb25zdCB2YWx1ZV90IHYp CistICAgICAgICA6IG1fdHlwZSh2KSwgbV92YWx1ZSh2KQorLSAgICB7CistICAgICAgICBhc3Nl cnRfaW52YXJpYW50KCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBjcmVhdGUgYSBudWxs IG9iamVjdAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNf anNvbi9iYXNpY19qc29uLworLSAgICBiYXNpY19qc29uKHN0ZDo6bnVsbHB0cl90ID0gbnVsbHB0 cikgbm9leGNlcHQKKy0gICAgICAgIDogYmFzaWNfanNvbih2YWx1ZV90OjpudWxsKQorLSAgICB7 CistICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmll ZiBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20gY29tcGF0aWJsZSB0eXBlcworLSAgICAvLy8gQHNh IGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9iYXNpY19qc29uLworLSAg ICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIENvbXBhdGlibGVUeXBlLAorLSAgICAgICAgICAgICAgIHR5 cGVuYW1lIFUgPSBkZXRhaWw6OnVuY3ZyZWZfdDxDb21wYXRpYmxlVHlwZT4sCistICAgICAgICAg ICAgICAgZGV0YWlsOjplbmFibGVfaWZfdCA8CistICAgICAgICAgICAgICAgICAgICFkZXRhaWw6 OmlzX2Jhc2ljX2pzb248VT46OnZhbHVlICYmIGRldGFpbDo6aXNfY29tcGF0aWJsZV90eXBlPGJh c2ljX2pzb25fdCwgVT46OnZhbHVlLCBpbnQgPiA9IDAgPgorLSAgICBiYXNpY19qc29uKENvbXBh dGlibGVUeXBlICYmIHZhbCkgbm9leGNlcHQobm9leGNlcHQoIC8vIE5PTElOVChidWdwcm9uZS1m b3J3YXJkaW5nLXJlZmVyZW5jZS1vdmVybG9hZCxidWdwcm9uZS1leGNlcHRpb24tZXNjYXBlKQor LSAgICAgICAgICAgICAgICBKU09OU2VyaWFsaXplcjxVPjo6dG9fanNvbihzdGQ6OmRlY2x2YWw8 YmFzaWNfanNvbl90Jj4oKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RkOjpmb3J3YXJkPENvbXBhdGlibGVUeXBlPih2YWwpKSkpCistICAgIHsKKy0gICAg ICAgIEpTT05TZXJpYWxpemVyPFU+Ojp0b19qc29uKCp0aGlzLCBzdGQ6OmZvcndhcmQ8Q29tcGF0 aWJsZVR5cGU+KHZhbCkpOworLSAgICAgICAgc2V0X3BhcmVudHMoKTsKKy0gICAgICAgIGFzc2Vy dF9pbnZhcmlhbnQoKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNyZWF0ZSBhIEpTT04g dmFsdWUgZnJvbSBhbiBleGlzdGluZyBvbmUKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxv aG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vYmFzaWNfanNvbi8KKy0gICAgdGVtcGxhdGUgPCB0eXBl bmFtZSBCYXNpY0pzb25UeXBlLAorLSAgICAgICAgICAgICAgIGRldGFpbDo6ZW5hYmxlX2lmX3Qg PAorLSAgICAgICAgICAgICAgICAgICBkZXRhaWw6OmlzX2Jhc2ljX2pzb248QmFzaWNKc29uVHlw ZT46OnZhbHVlJiYgIXN0ZDo6aXNfc2FtZTxiYXNpY19qc29uLCBCYXNpY0pzb25UeXBlPjo6dmFs dWUsIGludCA+ID0gMCA+CistICAgIGJhc2ljX2pzb24oY29uc3QgQmFzaWNKc29uVHlwZSYgdmFs KQorLSAgICB7CistICAgICAgICB1c2luZyBvdGhlcl9ib29sZWFuX3QgPSB0eXBlbmFtZSBCYXNp Y0pzb25UeXBlOjpib29sZWFuX3Q7CistICAgICAgICB1c2luZyBvdGhlcl9udW1iZXJfZmxvYXRf dCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9mbG9hdF90OworLSAgICAgICAgdXNp bmcgb3RoZXJfbnVtYmVyX2ludGVnZXJfdCA9IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJl cl9pbnRlZ2VyX3Q7CistICAgICAgICB1c2luZyBvdGhlcl9udW1iZXJfdW5zaWduZWRfdCA9IHR5 cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl91bnNpZ25lZF90OworLSAgICAgICAgdXNpbmcg b3RoZXJfc3RyaW5nX3QgPSB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdfdDsKKy0gICAg ICAgIHVzaW5nIG90aGVyX29iamVjdF90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0 X3Q7CistICAgICAgICB1c2luZyBvdGhlcl9hcnJheV90ID0gdHlwZW5hbWUgQmFzaWNKc29uVHlw ZTo6YXJyYXlfdDsKKy0gICAgICAgIHVzaW5nIG90aGVyX2JpbmFyeV90ID0gdHlwZW5hbWUgQmFz aWNKc29uVHlwZTo6YmluYXJ5X3Q7CistCistICAgICAgICBzd2l0Y2ggKHZhbC50eXBlKCkpCist ICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAg ICAgICAgICBKU09OU2VyaWFsaXplcjxvdGhlcl9ib29sZWFuX3Q+Ojp0b19qc29uKCp0aGlzLCB2 YWwudGVtcGxhdGUgZ2V0PG90aGVyX2Jvb2xlYW5fdD4oKSk7CistICAgICAgICAgICAgICAgIGJy ZWFrOworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorLSAgICAgICAg ICAgICAgICBKU09OU2VyaWFsaXplcjxvdGhlcl9udW1iZXJfZmxvYXRfdD46OnRvX2pzb24oKnRo aXMsIHZhbC50ZW1wbGF0ZSBnZXQ8b3RoZXJfbnVtYmVyX2Zsb2F0X3Q+KCkpOworLSAgICAgICAg ICAgICAgICBicmVhazsKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2Vy OgorLSAgICAgICAgICAgICAgICBKU09OU2VyaWFsaXplcjxvdGhlcl9udW1iZXJfaW50ZWdlcl90 Pjo6dG9fanNvbigqdGhpcywgdmFsLnRlbXBsYXRlIGdldDxvdGhlcl9udW1iZXJfaW50ZWdlcl90 PigpKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90 OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgICAgIEpTT05TZXJpYWxpemVyPG90aGVy X251bWJlcl91bnNpZ25lZF90Pjo6dG9fanNvbigqdGhpcywgdmFsLnRlbXBsYXRlIGdldDxvdGhl cl9udW1iZXJfdW5zaWduZWRfdD4oKSk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgICAgICBKU09OU2VyaWFs aXplcjxvdGhlcl9zdHJpbmdfdD46OnRvX2pzb24oKnRoaXMsIHZhbC50ZW1wbGF0ZSBnZXRfcmVm PGNvbnN0IG90aGVyX3N0cmluZ190Jj4oKSk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgICAgICBKU09OU2Vy aWFsaXplcjxvdGhlcl9vYmplY3RfdD46OnRvX2pzb24oKnRoaXMsIHZhbC50ZW1wbGF0ZSBnZXRf cmVmPGNvbnN0IG90aGVyX29iamVjdF90Jj4oKSk7CistICAgICAgICAgICAgICAgIGJyZWFrOwor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgICAgIEpTT05T ZXJpYWxpemVyPG90aGVyX2FycmF5X3Q+Ojp0b19qc29uKCp0aGlzLCB2YWwudGVtcGxhdGUgZ2V0 X3JlZjxjb25zdCBvdGhlcl9hcnJheV90Jj4oKSk7CistICAgICAgICAgICAgICAgIGJyZWFrOwor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAgICAgICBKU09O U2VyaWFsaXplcjxvdGhlcl9iaW5hcnlfdD46OnRvX2pzb24oKnRoaXMsIHZhbC50ZW1wbGF0ZSBn ZXRfcmVmPGNvbnN0IG90aGVyX2JpbmFyeV90Jj4oKSk7CistICAgICAgICAgICAgICAgIGJyZWFr OworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICAgICAgKnRo aXMgPSBudWxscHRyOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6 ZGlzY2FyZGVkOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICBkZWZhdWx0 OiAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgIEpTT05fQVNT RVJUKGZhbHNlKTsgLy8gTk9MSU5UKGNlcnQtZGNsMDMtYyxoaWNwcC1zdGF0aWMtYXNzZXJ0LG1p c2Mtc3RhdGljLWFzc2VydCkgTENPVl9FWENMX0xJTkUKKy0gICAgICAgIH0KKy0gICAgICAgIHNl dF9wYXJlbnRzKCk7CistICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CistICAgIH0KKy0KKy0g ICAgLy8vIEBicmllZiBjcmVhdGUgYSBjb250YWluZXIgKGFycmF5IG9yIG9iamVjdCkgZnJvbSBh biBpbml0aWFsaXplciBsaXN0CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1l L2FwaS9iYXNpY19qc29uL2Jhc2ljX2pzb24vCistICAgIGJhc2ljX2pzb24oaW5pdGlhbGl6ZXJf bGlzdF90IGluaXQsCistICAgICAgICAgICAgICAgYm9vbCB0eXBlX2RlZHVjdGlvbiA9IHRydWUs CistICAgICAgICAgICAgICAgdmFsdWVfdCBtYW51YWxfdHlwZSA9IHZhbHVlX3Q6OmFycmF5KQor LSAgICB7CistICAgICAgICAvLyBjaGVjayBpZiBlYWNoIGVsZW1lbnQgaXMgYW4gYXJyYXkgd2l0 aCB0d28gZWxlbWVudHMgd2hvc2UgZmlyc3QKKy0gICAgICAgIC8vIGVsZW1lbnQgaXMgYSBzdHJp bmcKKy0gICAgICAgIGJvb2wgaXNfYW5fb2JqZWN0ID0gc3RkOjphbGxfb2YoaW5pdC5iZWdpbigp LCBpbml0LmVuZCgpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb XShjb25zdCBkZXRhaWw6Ompzb25fcmVmPGJhc2ljX2pzb24+JiBlbGVtZW50X3JlZikKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gZWxlbWVudF9yZWYtPmlzX2FycmF5KCkgJiYgZWxl bWVudF9yZWYtPnNpemUoKSA9PSAyICYmICgqZWxlbWVudF9yZWYpWzBdLmlzX3N0cmluZygpOwor LSAgICAgICAgfSk7CistCistICAgICAgICAvLyBhZGp1c3QgdHlwZSBpZiB0eXBlIGRlZHVjdGlv biBpcyBub3Qgd2FudGVkCistICAgICAgICBpZiAoIXR5cGVfZGVkdWN0aW9uKQorLSAgICAgICAg eworLSAgICAgICAgICAgIC8vIGlmIGFycmF5IGlzIHdhbnRlZCwgZG8gbm90IGNyZWF0ZSBhbiBv YmplY3QgdGhvdWdoIHBvc3NpYmxlCistICAgICAgICAgICAgaWYgKG1hbnVhbF90eXBlID09IHZh bHVlX3Q6OmFycmF5KQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaXNfYW5fb2Jq ZWN0ID0gZmFsc2U7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIC8vIGlmIG9iamVj dCBpcyB3YW50ZWQgYnV0IGltcG9zc2libGUsIHRocm93IGFuIGV4Y2VwdGlvbgorLSAgICAgICAg ICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShtYW51YWxfdHlwZSA9PSB2YWx1ZV90OjpvYmpl Y3QgJiYgIWlzX2FuX29iamVjdCkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBK U09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDEsICJjYW5ub3QgY3JlYXRlIG9iamVjdCBm cm9tIGluaXRpYWxpemVyIGxpc3QiLCBiYXNpY19qc29uKCkpKTsKKy0gICAgICAgICAgICB9Cist ICAgICAgICB9CistCistICAgICAgICBpZiAoaXNfYW5fb2JqZWN0KQorLSAgICAgICAgeworLSAg ICAgICAgICAgIC8vIHRoZSBpbml0aWFsaXplciBsaXN0IGlzIGEgbGlzdCBvZiBwYWlycyAtPiBj cmVhdGUgb2JqZWN0CistICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6b2JqZWN0OworLSAg ICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZV90OjpvYmplY3Q7CistCistICAgICAgICAgICAgZm9y IChhdXRvJiBlbGVtZW50X3JlZiA6IGluaXQpCistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICBhdXRvIGVsZW1lbnQgPSBlbGVtZW50X3JlZi5tb3ZlZF9vcl9jb3BpZWQoKTsKKy0gICAg ICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QtPmVtcGxhY2UoCistICAgICAgICAgICAgICAgICAg ICBzdGQ6Om1vdmUoKigoKmVsZW1lbnQubV92YWx1ZS5hcnJheSlbMF0ubV92YWx1ZS5zdHJpbmcp KSwKKy0gICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZSgoKmVsZW1lbnQubV92YWx1ZS5hcnJh eSlbMV0pKTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICBlbHNlCistICAg ICAgICB7CistICAgICAgICAgICAgLy8gdGhlIGluaXRpYWxpemVyIGxpc3QgZGVzY3JpYmVzIGFu IGFycmF5IC0+IGNyZWF0ZSBhcnJheQorLSAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6OmFy cmF5OworLSAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oaW5pdC5i ZWdpbigpLCBpbml0LmVuZCgpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHNldF9wYXJlbnRz KCk7CistICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBi cmllZiBleHBsaWNpdGx5IGNyZWF0ZSBhIGJpbmFyeSBhcnJheSAod2l0aG91dCBzdWJ0eXBlKQor LSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9iaW5h cnkvCistICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVAorLSAgICBzdGF0aWMgYmFz aWNfanNvbiBiaW5hcnkoY29uc3QgdHlwZW5hbWUgYmluYXJ5X3Q6OmNvbnRhaW5lcl90eXBlJiBp bml0KQorLSAgICB7CistICAgICAgICBhdXRvIHJlcyA9IGJhc2ljX2pzb24oKTsKKy0gICAgICAg IHJlcy5tX3R5cGUgPSB2YWx1ZV90OjpiaW5hcnk7CistICAgICAgICByZXMubV92YWx1ZSA9IGlu aXQ7CistICAgICAgICByZXR1cm4gcmVzOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgZXhw bGljaXRseSBjcmVhdGUgYSBiaW5hcnkgYXJyYXkgKHdpdGggc3VidHlwZSkKKy0gICAgLy8vIEBz YSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vYmluYXJ5LworLSAgICBK U09OX0hFRExFWV9XQVJOX1VOVVNFRF9SRVNVTFQKKy0gICAgc3RhdGljIGJhc2ljX2pzb24gYmlu YXJ5KGNvbnN0IHR5cGVuYW1lIGJpbmFyeV90Ojpjb250YWluZXJfdHlwZSYgaW5pdCwgdHlwZW5h bWUgYmluYXJ5X3Q6OnN1YnR5cGVfdHlwZSBzdWJ0eXBlKQorLSAgICB7CistICAgICAgICBhdXRv IHJlcyA9IGJhc2ljX2pzb24oKTsKKy0gICAgICAgIHJlcy5tX3R5cGUgPSB2YWx1ZV90OjpiaW5h cnk7CistICAgICAgICByZXMubV92YWx1ZSA9IGJpbmFyeV90KGluaXQsIHN1YnR5cGUpOworLSAg ICAgICAgcmV0dXJuIHJlczsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGV4cGxpY2l0bHkg Y3JlYXRlIGEgYmluYXJ5IGFycmF5CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5u Lm1lL2FwaS9iYXNpY19qc29uL2JpbmFyeS8KKy0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURf UkVTVUxUCistICAgIHN0YXRpYyBiYXNpY19qc29uIGJpbmFyeSh0eXBlbmFtZSBiaW5hcnlfdDo6 Y29udGFpbmVyX3R5cGUmJiBpbml0KQorLSAgICB7CistICAgICAgICBhdXRvIHJlcyA9IGJhc2lj X2pzb24oKTsKKy0gICAgICAgIHJlcy5tX3R5cGUgPSB2YWx1ZV90OjpiaW5hcnk7CistICAgICAg ICByZXMubV92YWx1ZSA9IHN0ZDo6bW92ZShpbml0KTsKKy0gICAgICAgIHJldHVybiByZXM7Cist ICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBleHBsaWNpdGx5IGNyZWF0ZSBhIGJpbmFyeSBhcnJh eSAod2l0aCBzdWJ0eXBlKQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYmFzaWNfanNvbi9iaW5hcnkvCistICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VM VAorLSAgICBzdGF0aWMgYmFzaWNfanNvbiBiaW5hcnkodHlwZW5hbWUgYmluYXJ5X3Q6OmNvbnRh aW5lcl90eXBlJiYgaW5pdCwgdHlwZW5hbWUgYmluYXJ5X3Q6OnN1YnR5cGVfdHlwZSBzdWJ0eXBl KQorLSAgICB7CistICAgICAgICBhdXRvIHJlcyA9IGJhc2ljX2pzb24oKTsKKy0gICAgICAgIHJl cy5tX3R5cGUgPSB2YWx1ZV90OjpiaW5hcnk7CistICAgICAgICByZXMubV92YWx1ZSA9IGJpbmFy eV90KHN0ZDo6bW92ZShpbml0KSwgc3VidHlwZSk7CistICAgICAgICByZXR1cm4gcmVzOworLSAg ICB9CistCistICAgIC8vLyBAYnJpZWYgZXhwbGljaXRseSBjcmVhdGUgYW4gYXJyYXkgZnJvbSBh biBpbml0aWFsaXplciBsaXN0CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1l L2FwaS9iYXNpY19qc29uL2FycmF5LworLSAgICBKU09OX0hFRExFWV9XQVJOX1VOVVNFRF9SRVNV TFQKKy0gICAgc3RhdGljIGJhc2ljX2pzb24gYXJyYXkoaW5pdGlhbGl6ZXJfbGlzdF90IGluaXQg PSB7fSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGJhc2ljX2pzb24oaW5pdCwgZmFsc2UsIHZh bHVlX3Q6OmFycmF5KTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGV4cGxpY2l0bHkgY3Jl YXRlIGFuIG9iamVjdCBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKy0gICAgLy8vIEBzYSBodHRw czovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb2JqZWN0LworLSAgICBKU09OX0hF RExFWV9XQVJOX1VOVVNFRF9SRVNVTFQKKy0gICAgc3RhdGljIGJhc2ljX2pzb24gb2JqZWN0KGlu aXRpYWxpemVyX2xpc3RfdCBpbml0ID0ge30pCistICAgIHsKKy0gICAgICAgIHJldHVybiBiYXNp Y19qc29uKGluaXQsIGZhbHNlLCB2YWx1ZV90OjpvYmplY3QpOworLSAgICB9CistCistICAgIC8v LyBAYnJpZWYgY29uc3RydWN0IGFuIGFycmF5IHdpdGggY291bnQgY29waWVzIG9mIGdpdmVuIHZh bHVlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29u L2Jhc2ljX2pzb24vCistICAgIGJhc2ljX2pzb24oc2l6ZV90eXBlIGNudCwgY29uc3QgYmFzaWNf anNvbiYgdmFsKQorLSAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6YXJyYXkpCistICAgIHsKKy0g ICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oY250LCB2YWwpOworLSAgICAg ICAgc2V0X3BhcmVudHMoKTsKKy0gICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKy0gICAgfQor LQorLSAgICAvLy8gQGJyaWVmIGNvbnN0cnVjdCBhIEpTT04gY29udGFpbmVyIGdpdmVuIGFuIGl0 ZXJhdG9yIHJhbmdlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9i YXNpY19qc29uL2Jhc2ljX2pzb24vCistICAgIHRlbXBsYXRlIDwgY2xhc3MgSW5wdXRJVCwgdHlw ZW5hbWUgc3RkOjplbmFibGVfaWYgPAorLSAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8 SW5wdXRJVCwgdHlwZW5hbWUgYmFzaWNfanNvbl90OjppdGVyYXRvcj46OnZhbHVlIHx8CistICAg ICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxJbnB1dElULCB0eXBlbmFtZSBiYXNpY19qc29u X3Q6OmNvbnN0X2l0ZXJhdG9yPjo6dmFsdWUsIGludCA+Ojp0eXBlID0gMCA+CistICAgIGJhc2lj X2pzb24oSW5wdXRJVCBmaXJzdCwgSW5wdXRJVCBsYXN0KQorLSAgICB7CistICAgICAgICBKU09O X0FTU0VSVChmaXJzdC5tX29iamVjdCAhPSBudWxscHRyKTsKKy0gICAgICAgIEpTT05fQVNTRVJU KGxhc3QubV9vYmplY3QgIT0gbnVsbHB0cik7CistCistICAgICAgICAvLyBtYWtlIHN1cmUgaXRl cmF0b3IgZml0cyB0aGUgY3VycmVudCB2YWx1ZQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VO TElLRUxZKGZpcnN0Lm1fb2JqZWN0ICE9IGxhc3QubV9vYmplY3QpKQorLSAgICAgICAgeworLSAg ICAgICAgICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIwMSwgIml0ZXJh dG9ycyBhcmUgbm90IGNvbXBhdGlibGUiLCBiYXNpY19qc29uKCkpKTsKKy0gICAgICAgIH0KKy0K Ky0gICAgICAgIC8vIGNvcHkgdHlwZSBmcm9tIGZpcnN0IGl0ZXJhdG9yCistICAgICAgICBtX3R5 cGUgPSBmaXJzdC5tX29iamVjdC0+bV90eXBlOworLQorLSAgICAgICAgLy8gY2hlY2sgaWYgaXRl cmF0b3IgcmFuZ2UgaXMgY29tcGxldGUgZm9yIHByaW1pdGl2ZSB2YWx1ZXMKKy0gICAgICAgIHN3 aXRjaCAobV90eXBlKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9v bGVhbjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAg ICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIGNhc2UgdmFs dWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5n OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElL RUxZKCFmaXJzdC5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19iZWdpbigpCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbGFzdC5tX2l0LnByaW1pdGl2ZV9p dGVyYXRvci5pc19lbmQoKSkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIwNCwgIml0ZXJhdG9ycyBv dXQgb2YgcmFuZ2UiLCAqZmlyc3QubV9vYmplY3QpKTsKKy0gICAgICAgICAgICAgICAgfQorLSAg ICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2Fz ZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90 OjpiaW5hcnk6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpkaXNjYXJkZWQ6CistICAgICAg ICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICB9CistCist ICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIHZh bHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg bV92YWx1ZS5udW1iZXJfaW50ZWdlciA9IGZpcnN0Lm1fb2JqZWN0LT5tX3ZhbHVlLm51bWJlcl9p bnRlZ2VyOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA9IGZpcnN0Lm1fb2JqZWN0 LT5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZDsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0Ogor LSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV92YWx1ZS5udW1iZXJfZmxvYXQgPSBm aXJzdC5tX29iamVjdC0+bV92YWx1ZS5udW1iZXJfZmxvYXQ7CistICAgICAgICAgICAgICAgIGJy ZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xl YW46CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBtX3ZhbHVlLmJvb2xlYW4gPSBm aXJzdC5tX29iamVjdC0+bV92YWx1ZS5ib29sZWFuOworLSAgICAgICAgICAgICAgICBicmVhazsK Ky0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6Cist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gKmZpcnN0Lm1fb2JqZWN0 LT5tX3ZhbHVlLnN0cmluZzsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+KGZpcnN0 Lm1faXQub2JqZWN0X2l0ZXJhdG9yLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGFzdC5tX2l0Lm9iamVjdF9pdGVyYXRvcik7CistICAgICAgICAg ICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6OmFycmF5OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV92YWx1ZS5hcnJh eSA9IGNyZWF0ZTxhcnJheV90PihmaXJzdC5tX2l0LmFycmF5X2l0ZXJhdG9yLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QubV9pdC5hcnJheV9p dGVyYXRvcik7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0g ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgIG1fdmFsdWUgPSAqZmlyc3QubV9vYmplY3QtPm1fdmFsdWUuYmluYXJ5OworLSAg ICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2Fz ZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgor LSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgIEpTT05fVEhST1coaW52YWxp ZF9pdGVyYXRvcjo6Y3JlYXRlKDIwNiwgImNhbm5vdCBjb25zdHJ1Y3Qgd2l0aCBpdGVyYXRvcnMg ZnJvbSAiICsgc3RkOjpzdHJpbmcoZmlyc3QubV9vYmplY3QtPnR5cGVfbmFtZSgpKSwgKmZpcnN0 Lm1fb2JqZWN0KSk7CistICAgICAgICB9CistCistICAgICAgICBzZXRfcGFyZW50cygpOworLSAg ICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistCistCistICAgIC8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLSAgICAvLyBvdGhlciBjb25zdHJ1Y3RvcnMg YW5kIGRlc3RydWN0b3IgLy8KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vCistCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEpzb25SZWYsCistICAgICAgICAgICAg IGRldGFpbDo6ZW5hYmxlX2lmX3Q8ZGV0YWlsOjpjb25qdW5jdGlvbjxkZXRhaWw6OmlzX2pzb25f cmVmPEpzb25SZWY+LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNf c2FtZTx0eXBlbmFtZSBKc29uUmVmOjp2YWx1ZV90eXBlLCBiYXNpY19qc29uPj46OnZhbHVlLCBp bnQ+ID0gMCA+CistICAgIGJhc2ljX2pzb24oY29uc3QgSnNvblJlZiYgcmVmKSA6IGJhc2ljX2pz b24ocmVmLm1vdmVkX29yX2NvcGllZCgpKSB7fQorLQorLSAgICAvLy8gQGJyaWVmIGNvcHkgY29u c3RydWN0b3IKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2lj X2pzb24vYmFzaWNfanNvbi8KKy0gICAgYmFzaWNfanNvbihjb25zdCBiYXNpY19qc29uJiBvdGhl cikKKy0gICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKKy0gICAgeworLSAgICAgICAgLy8g Y2hlY2sgb2YgcGFzc2VkIHZhbHVlIGlzIHZhbGlkCistICAgICAgICBvdGhlci5hc3NlcnRfaW52 YXJpYW50KCk7CistCistICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAg ICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIG1fdmFsdWUgPSAqb3RoZXIubV92YWx1ZS5vYmplY3Q7CistICAgICAgICAgICAgICAg IGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFy cmF5OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV92YWx1ZSA9ICpvdGhlci5t X3ZhbHVlLmFycmF5OworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9Cist CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBtX3ZhbHVlID0gKm90aGVyLm1fdmFsdWUuc3RyaW5nOworLSAgICAgICAg ICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1 ZV90Ojpib29sZWFuOgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV92YWx1ZSA9 IG90aGVyLm1fdmFsdWUuYm9vbGVhbjsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6Cist ICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gb3RoZXIubV92YWx1ZS5u dW1iZXJfaW50ZWdlcjsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWUubnVtYmVyX3Vu c2lnbmVkOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBtX3ZhbHVlID0gb3RoZXIubV92YWx1ZS5udW1iZXJfZmxvYXQ7CistICAg ICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG1fdmFs dWUgPSAqb3RoZXIubV92YWx1ZS5iaW5hcnk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAg ICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpkaXNjYXJkZWQ6CistICAgICAgICAgICAgZGVmYXVsdDoKKy0g ICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICB9CistCistICAgICAgICBzZXRfcGFyZW50 cygpOworLSAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICB9CistCistICAgIC8vLyBA YnJpZWYgbW92ZSBjb25zdHJ1Y3RvcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFu bi5tZS9hcGkvYmFzaWNfanNvbi9iYXNpY19qc29uLworLSAgICBiYXNpY19qc29uKGJhc2ljX2pz b24mJiBvdGhlcikgbm9leGNlcHQKKy0gICAgICAgIDogbV90eXBlKHN0ZDo6bW92ZShvdGhlci5t X3R5cGUpKSwKKy0gICAgICAgICAgbV92YWx1ZShzdGQ6Om1vdmUob3RoZXIubV92YWx1ZSkpCist ICAgIHsKKy0gICAgICAgIC8vIGNoZWNrIHRoYXQgcGFzc2VkIHZhbHVlIGlzIHZhbGlkCistICAg ICAgICBvdGhlci5hc3NlcnRfaW52YXJpYW50KGZhbHNlKTsKKy0KKy0gICAgICAgIC8vIGludmFs aWRhdGUgcGF5bG9hZAorLSAgICAgICAgb3RoZXIubV90eXBlID0gdmFsdWVfdDo6bnVsbDsKKy0g ICAgICAgIG90aGVyLm1fdmFsdWUgPSB7fTsKKy0KKy0gICAgICAgIHNldF9wYXJlbnRzKCk7Cist ICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBj b3B5IGFzc2lnbm1lbnQKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBp L2Jhc2ljX2pzb24vb3BlcmF0b3I9LworLSAgICBiYXNpY19qc29uJiBvcGVyYXRvcj0oYmFzaWNf anNvbiBvdGhlcikgbm9leGNlcHQgKAorLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29u c3RydWN0aWJsZTx2YWx1ZV90Pjo6dmFsdWUmJgorLSAgICAgICAgc3RkOjppc19ub3Rocm93X21v dmVfYXNzaWduYWJsZTx2YWx1ZV90Pjo6dmFsdWUmJgorLSAgICAgICAgc3RkOjppc19ub3Rocm93 X21vdmVfY29uc3RydWN0aWJsZTxqc29uX3ZhbHVlPjo6dmFsdWUmJgorLSAgICAgICAgc3RkOjpp c19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxqc29uX3ZhbHVlPjo6dmFsdWUKKy0gICAgKQorLSAg ICB7CistICAgICAgICAvLyBjaGVjayB0aGF0IHBhc3NlZCB2YWx1ZSBpcyB2YWxpZAorLSAgICAg ICAgb3RoZXIuYXNzZXJ0X2ludmFyaWFudCgpOworLQorLSAgICAgICAgdXNpbmcgc3RkOjpzd2Fw OworLSAgICAgICAgc3dhcChtX3R5cGUsIG90aGVyLm1fdHlwZSk7CistICAgICAgICBzd2FwKG1f dmFsdWUsIG90aGVyLm1fdmFsdWUpOworLQorLSAgICAgICAgc2V0X3BhcmVudHMoKTsKKy0gICAg ICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAgfQor LQorLSAgICAvLy8gQGJyaWVmIGRlc3RydWN0b3IKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24u bmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vfmJhc2ljX2pzb24vCistICAgIH5iYXNpY19qc29u KCkgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgYXNzZXJ0X2ludmFyaWFudChmYWxzZSk7Cist ICAgICAgICBtX3ZhbHVlLmRlc3Ryb3kobV90eXBlKTsKKy0gICAgfQorLQorLSAgICAvLy8gQH0K Ky0KKy0gIHB1YmxpYzoKKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0gICAgLy8gb2Jq ZWN0IGluc3BlY3Rpb24gLy8KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0KKy0gICAg Ly8vIEBuYW1lIG9iamVjdCBpbnNwZWN0aW9uCistICAgIC8vLyBGdW5jdGlvbnMgdG8gaW5zcGVj dCB0aGUgdHlwZSBvZiBhIEpTT04gdmFsdWUuCistICAgIC8vLyBAeworLQorLSAgICAvLy8gQGJy aWVmIHNlcmlhbGl6YXRpb24KKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUv YXBpL2Jhc2ljX2pzb24vZHVtcC8KKy0gICAgc3RyaW5nX3QgZHVtcChjb25zdCBpbnQgaW5kZW50 ID0gLTEsCistICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBpbmRlbnRfY2hhciA9ICcgJywK Ky0gICAgICAgICAgICAgICAgICBjb25zdCBib29sIGVuc3VyZV9hc2NpaSA9IGZhbHNlLAorLSAg ICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yX2hhbmRsZXJfdCBlcnJvcl9oYW5kbGVyID0gZXJy b3JfaGFuZGxlcl90OjpzdHJpY3QpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHN0cmluZ190IHJl c3VsdDsKKy0gICAgICAgIHNlcmlhbGl6ZXIgcyhkZXRhaWw6Om91dHB1dF9hZGFwdGVyPGNoYXIs IHN0cmluZ190PihyZXN1bHQpLCBpbmRlbnRfY2hhciwgZXJyb3JfaGFuZGxlcik7CistCistICAg ICAgICBpZiAoaW5kZW50ID49IDApCistICAgICAgICB7CistICAgICAgICAgICAgcy5kdW1wKCp0 aGlzLCB0cnVlLCBlbnN1cmVfYXNjaWksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5kZW50 KSk7CistICAgICAgICB9CistICAgICAgICBlbHNlCistICAgICAgICB7CistICAgICAgICAgICAg cy5kdW1wKCp0aGlzLCBmYWxzZSwgZW5zdXJlX2FzY2lpLCAwKTsKKy0gICAgICAgIH0KKy0KKy0g ICAgICAgIHJldHVybiByZXN1bHQ7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm4g dGhlIHR5cGUgb2YgdGhlIEpTT04gdmFsdWUgKGV4cGxpY2l0KQorLSAgICAvLy8gQHNhIGh0dHBz Oi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi90eXBlLworLSAgICBjb25zdGV4cHIg dmFsdWVfdCB0eXBlKCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIG1f dHlwZTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIHJldHVybiB3aGV0aGVyIHR5cGUgaXMg cHJpbWl0aXZlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNp Y19qc29uL2lzX3ByaW1pdGl2ZS8KKy0gICAgY29uc3RleHByIGJvb2wgaXNfcHJpbWl0aXZlKCkg Y29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGlzX251bGwoKSB8fCBpc19z dHJpbmcoKSB8fCBpc19ib29sZWFuKCkgfHwgaXNfbnVtYmVyKCkgfHwgaXNfYmluYXJ5KCk7Cist ICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm4gd2hldGhlciB0eXBlIGlzIHN0cnVjdHVy ZWQKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24v aXNfc3RydWN0dXJlZC8KKy0gICAgY29uc3RleHByIGJvb2wgaXNfc3RydWN0dXJlZCgpIGNvbnN0 IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJldHVybiBpc19hcnJheSgpIHx8IGlzX29iamVj dCgpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMg bnVsbAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNv bi9pc19udWxsLworLSAgICBjb25zdGV4cHIgYm9vbCBpc19udWxsKCkgY29uc3Qgbm9leGNlcHQK Ky0gICAgeworLSAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpudWxsOworLSAgICB9 CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYSBib29sZWFuCist ICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2lzX2Jv b2xlYW4vCistICAgIGNvbnN0ZXhwciBib29sIGlzX2Jvb2xlYW4oKSBjb25zdCBub2V4Y2VwdAor LSAgICB7CistICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6OmJvb2xlYW47CistICAg IH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhIG51bWJlcgor LSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pc19u dW1iZXIvCistICAgIGNvbnN0ZXhwciBib29sIGlzX251bWJlcigpIGNvbnN0IG5vZXhjZXB0Cist ICAgIHsKKy0gICAgICAgIHJldHVybiBpc19udW1iZXJfaW50ZWdlcigpIHx8IGlzX251bWJlcl9m bG9hdCgpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUg aXMgYW4gaW50ZWdlciBudW1iZXIKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4u bWUvYXBpL2Jhc2ljX2pzb24vaXNfbnVtYmVyX2ludGVnZXIvCistICAgIGNvbnN0ZXhwciBib29s IGlzX251bWJlcl9pbnRlZ2VyKCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0 dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlciB8fCBtX3R5cGUgPT0gdmFsdWVf dDo6bnVtYmVyX3Vuc2lnbmVkOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJuIHdo ZXRoZXIgdmFsdWUgaXMgYW4gdW5zaWduZWQgaW50ZWdlciBudW1iZXIKKy0gICAgLy8vIEBzYSBo dHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vaXNfbnVtYmVyX3Vuc2lnbmVk LworLSAgICBjb25zdGV4cHIgYm9vbCBpc19udW1iZXJfdW5zaWduZWQoKSBjb25zdCBub2V4Y2Vw dAorLSAgICB7CistICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNp Z25lZDsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlz IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2ht YW5uLm1lL2FwaS9iYXNpY19qc29uL2lzX251bWJlcl9mbG9hdC8KKy0gICAgY29uc3RleHByIGJv b2wgaXNfbnVtYmVyX2Zsb2F0KCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0 dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ7CistICAgIH0KKy0KKy0gICAgLy8v IEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhbiBvYmplY3QKKy0gICAgLy8vIEBzYSBo dHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vaXNfb2JqZWN0LworLSAgICBj b25zdGV4cHIgYm9vbCBpc19vYmplY3QoKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAg ICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6Om9iamVjdDsKKy0gICAgfQorLQorLSAgICAvLy8g QGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGFuIGFycmF5CistICAgIC8vLyBAc2EgaHR0 cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2lzX2FycmF5LworLSAgICBjb25z dGV4cHIgYm9vbCBpc19hcnJheSgpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJl dHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6YXJyYXk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmll ZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhIHN0cmluZworLSAgICAvLy8gQHNhIGh0dHBzOi8v anNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pc19zdHJpbmcvCistICAgIGNvbnN0ZXhw ciBib29sIGlzX3N0cmluZygpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJldHVy biBtX3R5cGUgPT0gdmFsdWVfdDo6c3RyaW5nOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYg cmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYSBiaW5hcnkgYXJyYXkKKy0gICAgLy8vIEBzYSBodHRw czovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vaXNfYmluYXJ5LworLSAgICBjb25z dGV4cHIgYm9vbCBpc19iaW5hcnkoKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAgICBy ZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6OmJpbmFyeTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJy aWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGRpc2NhcmRlZAorLSAgICAvLy8gQHNhIGh0dHBz Oi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pc19kaXNjYXJkZWQvCistICAgIGNv bnN0ZXhwciBib29sIGlzX2Rpc2NhcmRlZCgpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAg ICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6ZGlzY2FyZGVkOworLSAgICB9CistCistICAg IC8vLyBAYnJpZWYgcmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBKU09OIHZhbHVlIChpbXBsaWNpdCkK Ky0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb3Bl cmF0b3JfdmFsdWVfdC8KKy0gICAgY29uc3RleHByIG9wZXJhdG9yIHZhbHVlX3QoKSBjb25zdCBu b2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gbV90eXBlOworLSAgICB9CistCistICAg IC8vLyBAfQorLQorLSAgcHJpdmF0ZToKKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8v IHZhbHVlIGFjY2VzcyAvLworLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8KKy0KKy0gICAgLy8vIGdl dCBhIGJvb2xlYW4gKGV4cGxpY2l0KQorLSAgICBib29sZWFuX3QgZ2V0X2ltcGwoYm9vbGVhbl90 KiAvKnVudXNlZCovKSBjb25zdAorLSAgICB7CistICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElL RUxZKGlzX2Jvb2xlYW4oKSkpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIG1fdmFs dWUuYm9vbGVhbjsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJv cjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVzdCBiZSBib29sZWFuLCBidXQgaXMgIiArIHN0ZDo6c3Ry aW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMpKTsKKy0gICAgfQorLQorLSAgICAvLy8gZ2V0IGEgcG9p bnRlciB0byB0aGUgdmFsdWUgKG9iamVjdCkKKy0gICAgb2JqZWN0X3QqIGdldF9pbXBsX3B0cihv YmplY3RfdCogLyp1bnVzZWQqLykgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGlz X29iamVjdCgpID8gbV92YWx1ZS5vYmplY3QgOiBudWxscHRyOworLSAgICB9CistCistICAgIC8v LyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAob2JqZWN0KQorLSAgICBjb25zdGV4cHIgY29u c3Qgb2JqZWN0X3QqIGdldF9pbXBsX3B0cihjb25zdCBvYmplY3RfdCogLyp1bnVzZWQqLykgY29u c3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGlzX29iamVjdCgpID8gbV92YWx1 ZS5vYmplY3QgOiBudWxscHRyOworLSAgICB9CistCistICAgIC8vLyBnZXQgYSBwb2ludGVyIHRv IHRoZSB2YWx1ZSAoYXJyYXkpCistICAgIGFycmF5X3QqIGdldF9pbXBsX3B0cihhcnJheV90KiAv KnVudXNlZCovKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gaXNfYXJyYXkoKSA/ IG1fdmFsdWUuYXJyYXkgOiBudWxscHRyOworLSAgICB9CistCistICAgIC8vLyBnZXQgYSBwb2lu dGVyIHRvIHRoZSB2YWx1ZSAoYXJyYXkpCistICAgIGNvbnN0ZXhwciBjb25zdCBhcnJheV90KiBn ZXRfaW1wbF9wdHIoY29uc3QgYXJyYXlfdCogLyp1bnVzZWQqLykgY29uc3Qgbm9leGNlcHQKKy0g ICAgeworLSAgICAgICAgcmV0dXJuIGlzX2FycmF5KCkgPyBtX3ZhbHVlLmFycmF5IDogbnVsbHB0 cjsKKy0gICAgfQorLQorLSAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKHN0cmlu ZykKKy0gICAgc3RyaW5nX3QqIGdldF9pbXBsX3B0cihzdHJpbmdfdCogLyp1bnVzZWQqLykgbm9l eGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGlzX3N0cmluZygpID8gbV92YWx1ZS5zdHJp bmcgOiBudWxscHRyOworLSAgICB9CistCistICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2 YWx1ZSAoc3RyaW5nKQorLSAgICBjb25zdGV4cHIgY29uc3Qgc3RyaW5nX3QqIGdldF9pbXBsX3B0 cihjb25zdCBzdHJpbmdfdCogLyp1bnVzZWQqLykgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAg ICAgICAgcmV0dXJuIGlzX3N0cmluZygpID8gbV92YWx1ZS5zdHJpbmcgOiBudWxscHRyOworLSAg ICB9CistCistICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoYm9vbGVhbikKKy0g ICAgYm9vbGVhbl90KiBnZXRfaW1wbF9wdHIoYm9vbGVhbl90KiAvKnVudXNlZCovKSBub2V4Y2Vw dAorLSAgICB7CistICAgICAgICByZXR1cm4gaXNfYm9vbGVhbigpID8gJm1fdmFsdWUuYm9vbGVh biA6IG51bGxwdHI7CistICAgIH0KKy0KKy0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZh bHVlIChib29sZWFuKQorLSAgICBjb25zdGV4cHIgY29uc3QgYm9vbGVhbl90KiBnZXRfaW1wbF9w dHIoY29uc3QgYm9vbGVhbl90KiAvKnVudXNlZCovKSBjb25zdCBub2V4Y2VwdAorLSAgICB7Cist ICAgICAgICByZXR1cm4gaXNfYm9vbGVhbigpID8gJm1fdmFsdWUuYm9vbGVhbiA6IG51bGxwdHI7 CistICAgIH0KKy0KKy0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChpbnRlZ2Vy IG51bWJlcikKKy0gICAgbnVtYmVyX2ludGVnZXJfdCogZ2V0X2ltcGxfcHRyKG51bWJlcl9pbnRl Z2VyX3QqIC8qdW51c2VkKi8pIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJldHVybiBpc19u dW1iZXJfaW50ZWdlcigpID8gJm1fdmFsdWUubnVtYmVyX2ludGVnZXIgOiBudWxscHRyOworLSAg ICB9CistCistICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoaW50ZWdlciBudW1i ZXIpCistICAgIGNvbnN0ZXhwciBjb25zdCBudW1iZXJfaW50ZWdlcl90KiBnZXRfaW1wbF9wdHIo Y29uc3QgbnVtYmVyX2ludGVnZXJfdCogLyp1bnVzZWQqLykgY29uc3Qgbm9leGNlcHQKKy0gICAg eworLSAgICAgICAgcmV0dXJuIGlzX251bWJlcl9pbnRlZ2VyKCkgPyAmbV92YWx1ZS5udW1iZXJf aW50ZWdlciA6IG51bGxwdHI7CistICAgIH0KKy0KKy0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8g dGhlIHZhbHVlICh1bnNpZ25lZCBudW1iZXIpCistICAgIG51bWJlcl91bnNpZ25lZF90KiBnZXRf aW1wbF9wdHIobnVtYmVyX3Vuc2lnbmVkX3QqIC8qdW51c2VkKi8pIG5vZXhjZXB0CistICAgIHsK Ky0gICAgICAgIHJldHVybiBpc19udW1iZXJfdW5zaWduZWQoKSA/ICZtX3ZhbHVlLm51bWJlcl91 bnNpZ25lZCA6IG51bGxwdHI7CistICAgIH0KKy0KKy0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8g dGhlIHZhbHVlICh1bnNpZ25lZCBudW1iZXIpCistICAgIGNvbnN0ZXhwciBjb25zdCBudW1iZXJf dW5zaWduZWRfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl91bnNpZ25lZF90KiAvKnVudXNl ZCovKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gaXNfbnVtYmVyX3Vu c2lnbmVkKCkgPyAmbV92YWx1ZS5udW1iZXJfdW5zaWduZWQgOiBudWxscHRyOworLSAgICB9Cist CistICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoZmxvYXRpbmctcG9pbnQgbnVt YmVyKQorLSAgICBudW1iZXJfZmxvYXRfdCogZ2V0X2ltcGxfcHRyKG51bWJlcl9mbG9hdF90KiAv KnVudXNlZCovKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gaXNfbnVtYmVyX2Zs b2F0KCkgPyAmbV92YWx1ZS5udW1iZXJfZmxvYXQgOiBudWxscHRyOworLSAgICB9CistCistICAg IC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoZmxvYXRpbmctcG9pbnQgbnVtYmVyKQor LSAgICBjb25zdGV4cHIgY29uc3QgbnVtYmVyX2Zsb2F0X3QqIGdldF9pbXBsX3B0cihjb25zdCBu dW1iZXJfZmxvYXRfdCogLyp1bnVzZWQqLykgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAg ICAgcmV0dXJuIGlzX251bWJlcl9mbG9hdCgpID8gJm1fdmFsdWUubnVtYmVyX2Zsb2F0IDogbnVs bHB0cjsKKy0gICAgfQorLQorLSAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKGJp bmFyeSkKKy0gICAgYmluYXJ5X3QqIGdldF9pbXBsX3B0cihiaW5hcnlfdCogLyp1bnVzZWQqLykg bm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGlzX2JpbmFyeSgpID8gbV92YWx1ZS5i aW5hcnkgOiBudWxscHRyOworLSAgICB9CistCistICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRo ZSB2YWx1ZSAoYmluYXJ5KQorLSAgICBjb25zdGV4cHIgY29uc3QgYmluYXJ5X3QqIGdldF9pbXBs X3B0cihjb25zdCBiaW5hcnlfdCogLyp1bnVzZWQqLykgY29uc3Qgbm9leGNlcHQKKy0gICAgewor LSAgICAgICAgcmV0dXJuIGlzX2JpbmFyeSgpID8gbV92YWx1ZS5iaW5hcnkgOiBudWxscHRyOwor LSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgaGVscGVyIGZ1bmN0aW9uIHRvIGltcGxl bWVudCBnZXRfcmVmKCkKKy0KKy0gICAgVGhpcyBmdW5jdGlvbiBoZWxwcyB0byBpbXBsZW1lbnQg Z2V0X3JlZigpIHdpdGhvdXQgY29kZSBkdXBsaWNhdGlvbiBmb3IKKy0gICAgY29uc3QgYW5kIG5v bi1jb25zdCBvdmVybG9hZHMKKy0KKy0gICAgQHRwYXJhbSBUaGlzVHlwZSB3aWxsIGJlIGRlZHVj ZWQgYXMgYGJhc2ljX2pzb25gIG9yIGBjb25zdCBiYXNpY19qc29uYAorLQorLSAgICBAdGhyb3cg dHlwZV9lcnJvci4zMDMgaWYgUmVmZXJlbmNlVHlwZSBkb2VzIG5vdCBtYXRjaCB1bmRlcmx5aW5n IHZhbHVlCistICAgIHR5cGUgb2YgdGhlIGN1cnJlbnQgSlNPTgorLSAgICAqLworLSAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBSZWZlcmVuY2VUeXBlLCB0eXBlbmFtZSBUaGlzVHlwZT4KKy0gICAgc3Rh dGljIFJlZmVyZW5jZVR5cGUgZ2V0X3JlZl9pbXBsKFRoaXNUeXBlJiBvYmopCistICAgIHsKKy0g ICAgICAgIC8vIGRlbGVnYXRlIHRoZSBjYWxsIHRvIGdldF9wdHI8PigpCistICAgICAgICBhdXRv KiBwdHIgPSBvYmoudGVtcGxhdGUgZ2V0X3B0cjx0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPFJl ZmVyZW5jZVR5cGU+Ojp0eXBlPigpOworLQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJS0VM WShwdHIgIT0gbnVsbHB0cikpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuICpwdHI7 CistICAgICAgICB9CistCistICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgz MDMsICJpbmNvbXBhdGlibGUgUmVmZXJlbmNlVHlwZSBmb3IgZ2V0X3JlZiwgYWN0dWFsIHR5cGUg aXMgIiArIHN0ZDo6c3RyaW5nKG9iai50eXBlX25hbWUoKSksIG9iaikpOworLSAgICB9CistCist ICBwdWJsaWM6CistICAgIC8vLyBAbmFtZSB2YWx1ZSBhY2Nlc3MKKy0gICAgLy8vIERpcmVjdCBh Y2Nlc3MgdG8gdGhlIHN0b3JlZCB2YWx1ZSBvZiBhIEpTT04gdmFsdWUuCistICAgIC8vLyBAewor LQorLSAgICAvLy8gQGJyaWVmIGdldCBhIHBvaW50ZXIgdmFsdWUgKGltcGxpY2l0KQorLSAgICAv Ly8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9nZXRfcHRyLwor LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQb2ludGVyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf aWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2YWx1 ZSwgaW50Pjo6dHlwZSA9IDA+CistICAgIGF1dG8gZ2V0X3B0cigpIG5vZXhjZXB0IC0+IGRlY2x0 eXBlKHN0ZDo6ZGVjbHZhbDxiYXNpY19qc29uX3QmPigpLmdldF9pbXBsX3B0cihzdGQ6OmRlY2x2 YWw8UG9pbnRlclR5cGU+KCkpKQorLSAgICB7CistICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2Fs bCB0byBnZXRfaW1wbF9wdHI8PigpCistICAgICAgICByZXR1cm4gZ2V0X2ltcGxfcHRyKHN0YXRp Y19jYXN0PFBvaW50ZXJUeXBlPihudWxscHRyKSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmll ZiBnZXQgYSBwb2ludGVyIHZhbHVlIChpbXBsaWNpdCkKKy0gICAgLy8vIEBzYSBodHRwczovL2pz b24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vZ2V0X3B0ci8KKy0gICAgdGVtcGxhdGUgPCB0 eXBlbmFtZSBQb2ludGVyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWYgPAorLSAgICAgICAg ICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2YWx1ZSYmCistICAgICAg ICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxQ b2ludGVyVHlwZT46OnR5cGU+Ojp2YWx1ZSwgaW50ID46OnR5cGUgPSAwID4KKy0gICAgY29uc3Rl eHByIGF1dG8gZ2V0X3B0cigpIGNvbnN0IG5vZXhjZXB0IC0+IGRlY2x0eXBlKHN0ZDo6ZGVjbHZh bDxjb25zdCBiYXNpY19qc29uX3QmPigpLmdldF9pbXBsX3B0cihzdGQ6OmRlY2x2YWw8UG9pbnRl clR5cGU+KCkpKQorLSAgICB7CistICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXRf aW1wbF9wdHI8PigpIGNvbnN0CistICAgICAgICByZXR1cm4gZ2V0X2ltcGxfcHRyKHN0YXRpY19j YXN0PFBvaW50ZXJUeXBlPihudWxscHRyKSk7CistICAgIH0KKy0KKy0gIHByaXZhdGU6CistICAg IC8qIQorLSAgICBAYnJpZWYgZ2V0IGEgdmFsdWUgKGV4cGxpY2l0KQorLQorLSAgICBFeHBsaWNp dCB0eXBlIGNvbnZlcnNpb24gYmV0d2VlbiB0aGUgSlNPTiB2YWx1ZSBhbmQgYSBjb21wYXRpYmxl IHZhbHVlCistICAgIHdoaWNoIGlzIFtDb3B5Q29uc3RydWN0aWJsZV0oaHR0cHM6Ly9lbi5jcHBy ZWZlcmVuY2UuY29tL3cvY3BwL25hbWVkX3JlcS9Db3B5Q29uc3RydWN0aWJsZSkKKy0gICAgYW5k IFtEZWZhdWx0Q29uc3RydWN0aWJsZV0oaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3Bw L25hbWVkX3JlcS9EZWZhdWx0Q29uc3RydWN0aWJsZSkuCistICAgIFRoZSB2YWx1ZSBpcyBjb252 ZXJ0ZWQgYnkgY2FsbGluZyB0aGUgQHJlZiBqc29uX3NlcmlhbGl6ZXI8VmFsdWVUeXBlPgorLSAg ICBgZnJvbV9qc29uKClgIG1ldGhvZC4KKy0KKy0gICAgVGhlIGZ1bmN0aW9uIGlzIGVxdWl2YWxl bnQgdG8gZXhlY3V0aW5nCistICAgIEBjb2RlIHsuY3BwfQorLSAgICBWYWx1ZVR5cGUgcmV0Owor LSAgICBKU09OU2VyaWFsaXplcjxWYWx1ZVR5cGU+Ojpmcm9tX2pzb24oKnRoaXMsIHJldCk7Cist ICAgIHJldHVybiByZXQ7CistICAgIEBlbmRjb2RlCistCistICAgIFRoaXMgb3ZlcmxvYWRzIGlz IGNob3NlbiBpZjoKKy0gICAgLSBAYSBWYWx1ZVR5cGUgaXMgbm90IEByZWYgYmFzaWNfanNvbiwK Ky0gICAgLSBAcmVmIGpzb25fc2VyaWFsaXplcjxWYWx1ZVR5cGU+IGhhcyBhIGBmcm9tX2pzb24o KWAgbWV0aG9kIG9mIHRoZSBmb3JtCistICAgICAgYHZvaWQgZnJvbV9qc29uKGNvbnN0IGJhc2lj X2pzb24mLCBWYWx1ZVR5cGUmKWAsIGFuZAorLSAgICAtIEByZWYganNvbl9zZXJpYWxpemVyPFZh bHVlVHlwZT4gZG9lcyBub3QgaGF2ZSBhIGBmcm9tX2pzb24oKWAgbWV0aG9kIG9mCistICAgICAg dGhlIGZvcm0gYFZhbHVlVHlwZSBmcm9tX2pzb24oY29uc3QgYmFzaWNfanNvbiYpYAorLQorLSAg ICBAdHBhcmFtIFZhbHVlVHlwZSB0aGUgcmV0dXJuZWQgdmFsdWUgdHlwZQorLQorLSAgICBAcmV0 dXJuIGNvcHkgb2YgdGhlIEpTT04gdmFsdWUsIGNvbnZlcnRlZCB0byBAYSBWYWx1ZVR5cGUKKy0K Ky0gICAgQHRocm93IHdoYXQgQHJlZiBqc29uX3NlcmlhbGl6ZXI8VmFsdWVUeXBlPiBgZnJvbV9q c29uKClgIG1ldGhvZCB0aHJvd3MKKy0KKy0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJl bG93IHNob3dzIHNldmVyYWwgY29udmVyc2lvbnMgZnJvbSBKU09OIHZhbHVlcworLSAgICB0byBv dGhlciB0eXBlcy4gVGhlcmUgYSBmZXcgdGhpbmdzIHRvIG5vdGU6ICgxKSBGbG9hdGluZy1wb2lu dCBudW1iZXJzIGNhbgorLSAgICBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnNcLCAoMikgQSBKU09O IGFycmF5IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBzdGFuZGFyZAorLSAgICBgc3RkOjp2ZWN0b3I8 c2hvcnQ+YFwsICgzKSBBIEpTT04gb2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gQysrCistICAg IGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgc3VjaCBhcyBgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6 c3RyaW5nXCwKKy0gICAganNvbj5gLixnZXRfX1ZhbHVlVHlwZV9jb25zdH0KKy0KKy0gICAgQHNp bmNlIHZlcnNpb24gMi4xLjAKKy0gICAgKi8KKy0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBWYWx1 ZVR5cGUsCistICAgICAgICAgICAgICAgZGV0YWlsOjplbmFibGVfaWZfdCA8CistICAgICAgICAg ICAgICAgICAgIGRldGFpbDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFZhbHVlVHlwZT46OnZh bHVlJiYKKy0gICAgICAgICAgICAgICAgICAgZGV0YWlsOjpoYXNfZnJvbV9qc29uPGJhc2ljX2pz b25fdCwgVmFsdWVUeXBlPjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAgIGludCA+ID0gMCA+ CistICAgIFZhbHVlVHlwZSBnZXRfaW1wbChkZXRhaWw6OnByaW9yaXR5X3RhZzwwPiAvKnVudXNl ZCovKSBjb25zdCBub2V4Y2VwdChub2V4Y2VwdCgKKy0gICAgICAgICAgICAgICAgSlNPTlNlcmlh bGl6ZXI8VmFsdWVUeXBlPjo6ZnJvbV9qc29uKHN0ZDo6ZGVjbHZhbDxjb25zdCBiYXNpY19qc29u X3QmPigpLCBzdGQ6OmRlY2x2YWw8VmFsdWVUeXBlJj4oKSkpKQorLSAgICB7CistICAgICAgICBh dXRvIHJldCA9IFZhbHVlVHlwZSgpOworLSAgICAgICAgSlNPTlNlcmlhbGl6ZXI8VmFsdWVUeXBl Pjo6ZnJvbV9qc29uKCp0aGlzLCByZXQpOworLSAgICAgICAgcmV0dXJuIHJldDsKKy0gICAgfQor LQorLSAgICAvKiEKKy0gICAgQGJyaWVmIGdldCBhIHZhbHVlIChleHBsaWNpdCk7IHNwZWNpYWwg Y2FzZQorLQorLSAgICBFeHBsaWNpdCB0eXBlIGNvbnZlcnNpb24gYmV0d2VlbiB0aGUgSlNPTiB2 YWx1ZSBhbmQgYSBjb21wYXRpYmxlIHZhbHVlCistICAgIHdoaWNoIGlzICoqbm90KiogW0NvcHlD b25zdHJ1Y3RpYmxlXShodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbmFtZWRfcmVx L0NvcHlDb25zdHJ1Y3RpYmxlKQorLSAgICBhbmQgKipub3QqKiBbRGVmYXVsdENvbnN0cnVjdGli bGVdKGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9uYW1lZF9yZXEvRGVmYXVsdENv bnN0cnVjdGlibGUpLgorLSAgICBUaGUgdmFsdWUgaXMgY29udmVydGVkIGJ5IGNhbGxpbmcgdGhl IEByZWYganNvbl9zZXJpYWxpemVyPFZhbHVlVHlwZT4KKy0gICAgYGZyb21fanNvbigpYCBtZXRo b2QuCistCistICAgIFRoZSBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGV4ZWN1dGluZworLSAg ICBAY29kZSB7LmNwcH0KKy0gICAgcmV0dXJuIEpTT05TZXJpYWxpemVyPFZhbHVlVHlwZT46OmZy b21fanNvbigqdGhpcyk7CistICAgIEBlbmRjb2RlCistCistICAgIFRoaXMgb3ZlcmxvYWRzIGlz IGNob3NlbiBpZjoKKy0gICAgLSBAYSBWYWx1ZVR5cGUgaXMgbm90IEByZWYgYmFzaWNfanNvbiBh bmQKKy0gICAgLSBAcmVmIGpzb25fc2VyaWFsaXplcjxWYWx1ZVR5cGU+IGhhcyBhIGBmcm9tX2pz b24oKWAgbWV0aG9kIG9mIHRoZSBmb3JtCistICAgICAgYFZhbHVlVHlwZSBmcm9tX2pzb24oY29u c3QgYmFzaWNfanNvbiYpYAorLQorLSAgICBAbm90ZSBJZiBAcmVmIGpzb25fc2VyaWFsaXplcjxW YWx1ZVR5cGU+IGhhcyBib3RoIG92ZXJsb2FkcyBvZgorLSAgICBgZnJvbV9qc29uKClgLCB0aGlz IG9uZSBpcyBjaG9zZW4uCistCistICAgIEB0cGFyYW0gVmFsdWVUeXBlIHRoZSByZXR1cm5lZCB2 YWx1ZSB0eXBlCistCistICAgIEByZXR1cm4gY29weSBvZiB0aGUgSlNPTiB2YWx1ZSwgY29udmVy dGVkIHRvIEBhIFZhbHVlVHlwZQorLQorLSAgICBAdGhyb3cgd2hhdCBAcmVmIGpzb25fc2VyaWFs aXplcjxWYWx1ZVR5cGU+IGBmcm9tX2pzb24oKWAgbWV0aG9kIHRocm93cworLQorLSAgICBAc2lu Y2UgdmVyc2lvbiAyLjEuMAorLSAgICAqLworLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFZhbHVl VHlwZSwKKy0gICAgICAgICAgICAgICBkZXRhaWw6OmVuYWJsZV9pZl90IDwKKy0gICAgICAgICAg ICAgICAgICAgZGV0YWlsOjpoYXNfbm9uX2RlZmF1bHRfZnJvbV9qc29uPGJhc2ljX2pzb25fdCwg VmFsdWVUeXBlPjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAgIGludCA+ID0gMCA+CistICAg IFZhbHVlVHlwZSBnZXRfaW1wbChkZXRhaWw6OnByaW9yaXR5X3RhZzwxPiAvKnVudXNlZCovKSBj b25zdCBub2V4Y2VwdChub2V4Y2VwdCgKKy0gICAgICAgICAgICAgICAgSlNPTlNlcmlhbGl6ZXI8 VmFsdWVUeXBlPjo6ZnJvbV9qc29uKHN0ZDo6ZGVjbHZhbDxjb25zdCBiYXNpY19qc29uX3QmPigp KSkpCistICAgIHsKKy0gICAgICAgIHJldHVybiBKU09OU2VyaWFsaXplcjxWYWx1ZVR5cGU+Ojpm cm9tX2pzb24oKnRoaXMpOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgZ2V0IHNw ZWNpYWwtY2FzZSBvdmVybG9hZAorLQorLSAgICBUaGlzIG92ZXJsb2FkcyBjb252ZXJ0cyB0aGUg Y3VycmVudCBAcmVmIGJhc2ljX2pzb24gaW4gYSBkaWZmZXJlbnQKKy0gICAgQHJlZiBiYXNpY19q c29uIHR5cGUKKy0KKy0gICAgQHRwYXJhbSBCYXNpY0pzb25UeXBlID09IEByZWYgYmFzaWNfanNv bgorLQorLSAgICBAcmV0dXJuIGEgY29weSBvZiAqdGhpcywgY29udmVydGVkIGludG8gQGEgQmFz aWNKc29uVHlwZQorLQorLSAgICBAY29tcGxleGl0eSBEZXBlbmRpbmcgb24gdGhlIGltcGxlbWVu dGF0aW9uIG9mIHRoZSBjYWxsZWQgYGZyb21fanNvbigpYAorLSAgICAgICAgICAgICAgICBtZXRo b2QuCistCistICAgIEBzaW5jZSB2ZXJzaW9uIDMuMi4wCistICAgICovCistICAgIHRlbXBsYXRl IDwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZSwKKy0gICAgICAgICAgICAgICBkZXRhaWw6OmVuYWJs ZV9pZl90IDwKKy0gICAgICAgICAgICAgICAgICAgZGV0YWlsOjppc19iYXNpY19qc29uPEJhc2lj SnNvblR5cGU+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgaW50ID4gPSAwID4KKy0gICAg QmFzaWNKc29uVHlwZSBnZXRfaW1wbChkZXRhaWw6OnByaW9yaXR5X3RhZzwyPiAvKnVudXNlZCov KSBjb25zdAorLSAgICB7CistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAg LyohCistICAgIEBicmllZiBnZXQgc3BlY2lhbC1jYXNlIG92ZXJsb2FkCistCistICAgIFRoaXMg b3ZlcmxvYWRzIGF2b2lkcyBhIGxvdCBvZiB0ZW1wbGF0ZSBib2lsZXJwbGF0ZSwgaXQgY2FuIGJl IHNlZW4gYXMgdGhlCistICAgIGlkZW50aXR5IG1ldGhvZAorLQorLSAgICBAdHBhcmFtIEJhc2lj SnNvblR5cGUgPT0gQHJlZiBiYXNpY19qc29uCistCistICAgIEByZXR1cm4gYSBjb3B5IG9mICp0 aGlzCistCistICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorLQorLSAgICBAc2luY2UgdmVyc2lv biAyLjEuMAorLSAgICAqLworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLAor LSAgICAgICAgICAgICBkZXRhaWw6OmVuYWJsZV9pZl90PAorLSAgICAgICAgICAgICAgICAgc3Rk Ojppc19zYW1lPEJhc2ljSnNvblR5cGUsIGJhc2ljX2pzb25fdD46OnZhbHVlLAorLSAgICAgICAg ICAgICAgICAgaW50PiA9IDA+CistICAgIGJhc2ljX2pzb24gZ2V0X2ltcGwoZGV0YWlsOjpwcmlv cml0eV90YWc8Mz4gLyp1bnVzZWQqLykgY29uc3QKKy0gICAgeworLSAgICAgICAgcmV0dXJuICp0 aGlzOworLSAgICB9CistCistICAgIC8qIQorLSAgICBAYnJpZWYgZ2V0IGEgcG9pbnRlciB2YWx1 ZSAoZXhwbGljaXQpCistICAgIEBjb3B5ZG9jIGdldCgpCistICAgICovCistICAgIHRlbXBsYXRl PHR5cGVuYW1lIFBvaW50ZXJUeXBlLAorLSAgICAgICAgICAgICBkZXRhaWw6OmVuYWJsZV9pZl90 PAorLSAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6dmFsdWUs CistICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKy0gICAgY29uc3RleHByIGF1dG8gZ2V0X2lt cGwoZGV0YWlsOjpwcmlvcml0eV90YWc8ND4gLyp1bnVzZWQqLykgY29uc3Qgbm9leGNlcHQKKy0g ICAgLT4gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGNvbnN0IGJhc2ljX2pzb25fdCY+KCkudGVtcGxh dGUgZ2V0X3B0cjxQb2ludGVyVHlwZT4oKSkKKy0gICAgeworLSAgICAgICAgLy8gZGVsZWdhdGUg dGhlIGNhbGwgdG8gZ2V0X3B0cgorLSAgICAgICAgcmV0dXJuIGdldF9wdHI8UG9pbnRlclR5cGU+ KCk7CistICAgIH0KKy0KKy0gIHB1YmxpYzoKKy0gICAgLyohCistICAgIEBicmllZiBnZXQgYSAo cG9pbnRlcikgdmFsdWUgKGV4cGxpY2l0KQorLQorLSAgICBQZXJmb3JtcyBleHBsaWNpdCB0eXBl IGNvbnZlcnNpb24gYmV0d2VlbiB0aGUgSlNPTiB2YWx1ZSBhbmQgYSBjb21wYXRpYmxlIHZhbHVl IGlmIHJlcXVpcmVkLgorLQorLSAgICAtIElmIHRoZSByZXF1ZXN0ZWQgdHlwZSBpcyBhIHBvaW50 ZXIgdG8gdGhlIGludGVybmFsbHkgc3RvcmVkIEpTT04gdmFsdWUgdGhhdCBwb2ludGVyIGlzIHJl dHVybmVkLgorLSAgICBObyBjb3BpZXMgYXJlIG1hZGUuCistCistICAgIC0gSWYgdGhlIHJlcXVl c3RlZCB0eXBlIGlzIHRoZSBjdXJyZW50IEByZWYgYmFzaWNfanNvbiwgb3IgYSBkaWZmZXJlbnQg QHJlZiBiYXNpY19qc29uIGNvbnZlcnRpYmxlCistICAgIGZyb20gdGhlIGN1cnJlbnQgQHJlZiBi YXNpY19qc29uLgorLQorLSAgICAtIE90aGVyd2lzZSB0aGUgdmFsdWUgaXMgY29udmVydGVkIGJ5 IGNhbGxpbmcgdGhlIEByZWYganNvbl9zZXJpYWxpemVyPFZhbHVlVHlwZT4gYGZyb21fanNvbigp YAorLSAgICBtZXRob2QuCistCistICAgIEB0cGFyYW0gVmFsdWVUeXBlQ1YgdGhlIHByb3ZpZGVk IHZhbHVlIHR5cGUKKy0gICAgQHRwYXJhbSBWYWx1ZVR5cGUgdGhlIHJldHVybmVkIHZhbHVlIHR5 cGUKKy0KKy0gICAgQHJldHVybiBjb3B5IG9mIHRoZSBKU09OIHZhbHVlLCBjb252ZXJ0ZWQgdG8g QHRwYXJhbSBWYWx1ZVR5cGUgaWYgbmVjZXNzYXJ5CistCistICAgIEB0aHJvdyB3aGF0IEByZWYg anNvbl9zZXJpYWxpemVyPFZhbHVlVHlwZT4gYGZyb21fanNvbigpYCBtZXRob2QgdGhyb3dzIGlm IGNvbnZlcnNpb24gaXMgcmVxdWlyZWQKKy0KKy0gICAgQHNpbmNlIHZlcnNpb24gMi4xLjAKKy0g ICAgKi8KKy0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBWYWx1ZVR5cGVDViwgdHlwZW5hbWUgVmFs dWVUeXBlID0gZGV0YWlsOjp1bmN2cmVmX3Q8VmFsdWVUeXBlQ1Y+PgorLSNpZiBkZWZpbmVkKEpT T05fSEFTX0NQUF8xNCkKKy0gICAgY29uc3RleHByCistI2VuZGlmCistICAgIGF1dG8gZ2V0KCkg Y29uc3Qgbm9leGNlcHQoCistICAgIG5vZXhjZXB0KHN0ZDo6ZGVjbHZhbDxjb25zdCBiYXNpY19q c29uX3QmPigpLnRlbXBsYXRlIGdldF9pbXBsPFZhbHVlVHlwZT4oZGV0YWlsOjpwcmlvcml0eV90 YWc8ND4ge30pKSkKKy0gICAgLT4gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGNvbnN0IGJhc2ljX2pz b25fdCY+KCkudGVtcGxhdGUgZ2V0X2ltcGw8VmFsdWVUeXBlPihkZXRhaWw6OnByaW9yaXR5X3Rh Zzw0PiB7fSkpCistICAgIHsKKy0gICAgICAgIC8vIHdlIGNhbm5vdCBzdGF0aWNfYXNzZXJ0IG9u IFZhbHVlVHlwZUNWIGJlaW5nIG5vbi1jb25zdCwgYmVjYXVzZQorLSAgICAgICAgLy8gdGhlcmUg aXMgc3VwcG9ydCBmb3IgZ2V0PGNvbnN0IGJhc2ljX2pzb25fdD4oKSwgd2hpY2ggaXMgd2h5IHdl CistICAgICAgICAvLyBzdGlsbCBuZWVkIHRoZSB1bmN2cmVmCistICAgICAgICBzdGF0aWNfYXNz ZXJ0KCFzdGQ6OmlzX3JlZmVyZW5jZTxWYWx1ZVR5cGVDVj46OnZhbHVlLAorLSAgICAgICAgICAg ICAgICAgICAgICAiZ2V0KCkgY2Fubm90IGJlIHVzZWQgd2l0aCByZWZlcmVuY2UgdHlwZXMsIHlv dSBtaWdodCB3YW50IHRvIHVzZSBnZXRfcmVmKCkiKTsKKy0gICAgICAgIHJldHVybiBnZXRfaW1w bDxWYWx1ZVR5cGU+KGRldGFpbDo6cHJpb3JpdHlfdGFnPDQ+IHt9KTsKKy0gICAgfQorLQorLSAg ICAvKiEKKy0gICAgQGJyaWVmIGdldCBhIHBvaW50ZXIgdmFsdWUgKGV4cGxpY2l0KQorLQorLSAg ICBFeHBsaWNpdCBwb2ludGVyIGFjY2VzcyB0byB0aGUgaW50ZXJuYWxseSBzdG9yZWQgSlNPTiB2 YWx1ZS4gTm8gY29waWVzIGFyZQorLSAgICBtYWRlLgorLQorLSAgICBAd2FybmluZyBUaGUgcG9p bnRlciBiZWNvbWVzIGludmFsaWQgaWYgdGhlIHVuZGVybHlpbmcgSlNPTiBvYmplY3QKKy0gICAg Y2hhbmdlcy4KKy0KKy0gICAgQHRwYXJhbSBQb2ludGVyVHlwZSBwb2ludGVyIHR5cGU7IG11c3Qg YmUgYSBwb2ludGVyIHRvIEByZWYgYXJyYXlfdCwgQHJlZgorLSAgICBvYmplY3RfdCwgQHJlZiBz dHJpbmdfdCwgQHJlZiBib29sZWFuX3QsIEByZWYgbnVtYmVyX2ludGVnZXJfdCwKKy0gICAgQHJl ZiBudW1iZXJfdW5zaWduZWRfdCwgb3IgQHJlZiBudW1iZXJfZmxvYXRfdC4KKy0KKy0gICAgQHJl dHVybiBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbGx5IHN0b3JlZCBKU09OIHZhbHVlIGlmIHRoZSBy ZXF1ZXN0ZWQKKy0gICAgcG9pbnRlciB0eXBlIEBhIFBvaW50ZXJUeXBlIGZpdHMgdG8gdGhlIEpT T04gdmFsdWU7IGBudWxscHRyYCBvdGhlcndpc2UKKy0KKy0gICAgQGNvbXBsZXhpdHkgQ29uc3Rh bnQuCistCistICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgcG9p bnRlcnMgdG8gaW50ZXJuYWwgdmFsdWVzIG9mIGEKKy0gICAgSlNPTiB2YWx1ZSBjYW4gYmUgcmVx dWVzdGVkLiBOb3RlIHRoYXQgbm8gdHlwZSBjb252ZXJzaW9ucyBhcmUgbWFkZSBhbmQgYQorLSAg ICBgbnVsbHB0cmAgaXMgcmV0dXJuZWQgaWYgdGhlIHZhbHVlIGFuZCB0aGUgcmVxdWVzdGVkIHBv aW50ZXIgdHlwZSBkb2VzIG5vdAorLSAgICBtYXRjaC4sZ2V0X19Qb2ludGVyVHlwZX0KKy0KKy0g ICAgQHNhIHNlZSBAcmVmIGdldF9wdHIoKSBmb3IgZXhwbGljaXQgcG9pbnRlci1tZW1iZXIgYWNj ZXNzCistCistICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCistICAgICovCistICAgIHRlbXBsYXRl PHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKy0gICAgICAg ICAgICAgICAgIHN0ZDo6aXNfcG9pbnRlcjxQb2ludGVyVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBl ID0gMD4KKy0gICAgYXV0byBnZXQoKSBub2V4Y2VwdCAtPiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8 YmFzaWNfanNvbl90Jj4oKS50ZW1wbGF0ZSBnZXRfcHRyPFBvaW50ZXJUeXBlPigpKQorLSAgICB7 CistICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXRfcHRyCistICAgICAgICByZXR1 cm4gZ2V0X3B0cjxQb2ludGVyVHlwZT4oKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGdl dCBhIHZhbHVlIChleHBsaWNpdCkKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4u bWUvYXBpL2Jhc2ljX2pzb24vZ2V0X3RvLworLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFZhbHVl VHlwZSwKKy0gICAgICAgICAgICAgICBkZXRhaWw6OmVuYWJsZV9pZl90IDwKKy0gICAgICAgICAg ICAgICAgICAgIWRldGFpbDo6aXNfYmFzaWNfanNvbjxWYWx1ZVR5cGU+Ojp2YWx1ZSYmCistICAg ICAgICAgICAgICAgICAgIGRldGFpbDo6aGFzX2Zyb21fanNvbjxiYXNpY19qc29uX3QsIFZhbHVl VHlwZT46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICBpbnQgPiA9IDAgPgorLSAgICBWYWx1 ZVR5cGUgJiBnZXRfdG8oVmFsdWVUeXBlJiB2KSBjb25zdCBub2V4Y2VwdChub2V4Y2VwdCgKKy0g ICAgICAgICAgICAgICAgSlNPTlNlcmlhbGl6ZXI8VmFsdWVUeXBlPjo6ZnJvbV9qc29uKHN0ZDo6 ZGVjbHZhbDxjb25zdCBiYXNpY19qc29uX3QmPigpLCB2KSkpCistICAgIHsKKy0gICAgICAgIEpT T05TZXJpYWxpemVyPFZhbHVlVHlwZT46OmZyb21fanNvbigqdGhpcywgdik7CistICAgICAgICBy ZXR1cm4gdjsKKy0gICAgfQorLQorLSAgICAvLyBzcGVjaWFsaXphdGlvbiB0byBhbGxvdyBjYWxs aW5nIGdldF90byB3aXRoIGEgYmFzaWNfanNvbiB2YWx1ZQorLSAgICAvLyBzZWUgaHR0cHM6Ly9n aXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzIxNzUKKy0gICAgdGVtcGxhdGU8dHlwZW5h bWUgVmFsdWVUeXBlLAorLSAgICAgICAgICAgICBkZXRhaWw6OmVuYWJsZV9pZl90IDwKKy0gICAg ICAgICAgICAgICAgIGRldGFpbDo6aXNfYmFzaWNfanNvbjxWYWx1ZVR5cGU+Ojp2YWx1ZSwKKy0g ICAgICAgICAgICAgICAgIGludD4gPSAwPgorLSAgICBWYWx1ZVR5cGUgJiBnZXRfdG8oVmFsdWVU eXBlJiB2KSBjb25zdAorLSAgICB7CistICAgICAgICB2ID0gKnRoaXM7CistICAgICAgICByZXR1 cm4gdjsKKy0gICAgfQorLQorLSAgICB0ZW1wbGF0ZSA8CistICAgICAgICB0eXBlbmFtZSBULCBz dGQ6OnNpemVfdCBOLAorLSAgICAgICAgdHlwZW5hbWUgQXJyYXkgPSBUICgmKVtOXSwgLy8gTk9M SU5UKGNwcGNvcmVndWlkZWxpbmVzLWF2b2lkLWMtYXJyYXlzLGhpY3BwLWF2b2lkLWMtYXJyYXlz LG1vZGVybml6ZS1hdm9pZC1jLWFycmF5cykKKy0gICAgICAgIGRldGFpbDo6ZW5hYmxlX2lmX3Qg PAorLSAgICAgICAgICAgIGRldGFpbDo6aGFzX2Zyb21fanNvbjxiYXNpY19qc29uX3QsIEFycmF5 Pjo6dmFsdWUsIGludCA+ID0gMCA+CistICAgIEFycmF5IGdldF90byhUICgmdilbTl0pIGNvbnN0 IC8vIE5PTElOVChjcHBjb3JlZ3VpZGVsaW5lcy1hdm9pZC1jLWFycmF5cyxoaWNwcC1hdm9pZC1j LWFycmF5cyxtb2Rlcm5pemUtYXZvaWQtYy1hcnJheXMpCistICAgIG5vZXhjZXB0KG5vZXhjZXB0 KEpTT05TZXJpYWxpemVyPEFycmF5Pjo6ZnJvbV9qc29uKAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RkOjpkZWNsdmFsPGNvbnN0IGJhc2ljX2pzb25fdCY+KCksIHYpKSkKKy0gICAgewor LSAgICAgICAgSlNPTlNlcmlhbGl6ZXI8QXJyYXk+Ojpmcm9tX2pzb24oKnRoaXMsIHYpOworLSAg ICAgICAgcmV0dXJuIHY7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBnZXQgYSByZWZlcmVu Y2UgdmFsdWUgKGltcGxpY2l0KQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5t ZS9hcGkvYmFzaWNfanNvbi9nZXRfcmVmLworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWZlcmVu Y2VUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKy0gICAgICAgICAgICAgICAgIHN0ZDo6 aXNfcmVmZXJlbmNlPFJlZmVyZW5jZVR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CistICAg IFJlZmVyZW5jZVR5cGUgZ2V0X3JlZigpCistICAgIHsKKy0gICAgICAgIC8vIGRlbGVnYXRlIGNh bGwgdG8gZ2V0X3JlZl9pbXBsCistICAgICAgICByZXR1cm4gZ2V0X3JlZl9pbXBsPFJlZmVyZW5j ZVR5cGU+KCp0aGlzKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGdldCBhIHJlZmVyZW5j ZSB2YWx1ZSAoaW1wbGljaXQpCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1l L2FwaS9iYXNpY19qc29uL2dldF9yZWYvCistICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgUmVmZXJl bmNlVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWYgPAorLSAgICAgICAgICAgICAgICAgICBz dGQ6OmlzX3JlZmVyZW5jZTxSZWZlcmVuY2VUeXBlPjo6dmFsdWUmJgorLSAgICAgICAgICAgICAg ICAgICBzdGQ6OmlzX2NvbnN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxSZWZlcmVu Y2VUeXBlPjo6dHlwZT46OnZhbHVlLCBpbnQgPjo6dHlwZSA9IDAgPgorLSAgICBSZWZlcmVuY2VU eXBlIGdldF9yZWYoKSBjb25zdAorLSAgICB7CistICAgICAgICAvLyBkZWxlZ2F0ZSBjYWxsIHRv IGdldF9yZWZfaW1wbAorLSAgICAgICAgcmV0dXJuIGdldF9yZWZfaW1wbDxSZWZlcmVuY2VUeXBl PigqdGhpcyk7CistICAgIH0KKy0KKy0gICAgLyohCistICAgIEBicmllZiBnZXQgYSB2YWx1ZSAo aW1wbGljaXQpCistCistICAgIEltcGxpY2l0IHR5cGUgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSBK U09OIHZhbHVlIGFuZCBhIGNvbXBhdGlibGUgdmFsdWUuCistICAgIFRoZSBjYWxsIGlzIHJlYWxp emVkIGJ5IGNhbGxpbmcgQHJlZiBnZXQoKSBjb25zdC4KKy0KKy0gICAgQHRwYXJhbSBWYWx1ZVR5 cGUgbm9uLXBvaW50ZXIgdHlwZSBjb21wYXRpYmxlIHRvIHRoZSBKU09OIHZhbHVlLCBmb3IKKy0g ICAgaW5zdGFuY2UgYGludGAgZm9yIEpTT04gaW50ZWdlciBudW1iZXJzLCBgYm9vbGAgZm9yIEpT T04gYm9vbGVhbnMsIG9yCistICAgIGBzdGQ6OnZlY3RvcmAgdHlwZXMgZm9yIEpTT04gYXJyYXlz LiBUaGUgY2hhcmFjdGVyIHR5cGUgb2YgQHJlZiBzdHJpbmdfdAorLSAgICBhcyB3ZWxsIGFzIGFu IGluaXRpYWxpemVyIGxpc3Qgb2YgdGhpcyB0eXBlIGlzIGV4Y2x1ZGVkIHRvIGF2b2lkCistICAg IGFtYmlndWl0aWVzIGFzIHRoZXNlIHR5cGVzIGltcGxpY2l0bHkgY29udmVydCB0byBgc3RkOjpz dHJpbmdgLgorLQorLSAgICBAcmV0dXJuIGNvcHkgb2YgdGhlIEpTT04gdmFsdWUsIGNvbnZlcnRl ZCB0byB0eXBlIEBhIFZhbHVlVHlwZQorLQorLSAgICBAdGhyb3cgdHlwZV9lcnJvci4zMDIgaW4g Y2FzZSBwYXNzZWQgdHlwZSBAYSBWYWx1ZVR5cGUgaXMgaW5jb21wYXRpYmxlCistICAgIHRvIHRo ZSBKU09OIHZhbHVlIHR5cGUgKGUuZy4sIHRoZSBKU09OIHZhbHVlIGlzIG9mIHR5cGUgYm9vbGVh biwgYnV0IGEKKy0gICAgc3RyaW5nIGlzIHJlcXVlc3RlZCk7IHNlZSBleGFtcGxlIGJlbG93Cist CistICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgSlNPTiB2YWx1ZS4K Ky0KKy0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIHNldmVyYWwgY29u dmVyc2lvbnMgZnJvbSBKU09OIHZhbHVlcworLSAgICB0byBvdGhlciB0eXBlcy4gVGhlcmUgYSBm ZXcgdGhpbmdzIHRvIG5vdGU6ICgxKSBGbG9hdGluZy1wb2ludCBudW1iZXJzIGNhbgorLSAgICBi ZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnNcLCAoMikgQSBKU09OIGFycmF5IGNhbiBiZSBjb252ZXJ0 ZWQgdG8gYSBzdGFuZGFyZAorLSAgICBgc3RkOjp2ZWN0b3I8c2hvcnQ+YFwsICgzKSBBIEpTT04g b2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gQysrCistICAgIGFzc29jaWF0aXZlIGNvbnRhaW5l cnMgc3VjaCBhcyBgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nXCwKKy0gICAganNvbj5g LixvcGVyYXRvcl9fVmFsdWVUeXBlfQorLQorLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorLSAg ICAqLworLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgc3RkOjpl bmFibGVfaWYgPAorLSAgICAgICAgICAgICAgICAgICBkZXRhaWw6OmNvbmp1bmN0aW9uIDwKKy0g ICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6bmVnYXRpb248c3RkOjppc19wb2ludGVyPFZh bHVlVHlwZT4+LAorLSAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOjpuZWdhdGlvbjxzdGQ6 OmlzX3NhbWU8VmFsdWVUeXBlLCBkZXRhaWw6Ompzb25fcmVmPGJhc2ljX2pzb24+Pj4sCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6bmVnYXRpb248c3Rk Ojppc19zYW1lPFZhbHVlVHlwZSwgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+PiwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOjpuZWdhdGlvbjxk ZXRhaWw6OmlzX2Jhc2ljX2pzb248VmFsdWVUeXBlPj4sCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRldGFpbDo6bmVnYXRpb248c3RkOjppc19zYW1lPFZhbHVlVHlw ZSwgc3RkOjppbml0aWFsaXplcl9saXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPj4+ LAorLQorLSNpZiBkZWZpbmVkKEpTT05fSEFTX0NQUF8xNykgJiYgKGRlZmluZWQoX19HTlVDX18p IHx8IChkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxOTEwICYmIF9NU0NfVkVSIDw9 IDE5MTQpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldGFpbDo6bmVnYXRpb248c3RkOjppc19zYW1lPFZhbHVlVHlwZSwgc3RkOjpzdHJpbmdfdmll dz4+LAorLSNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldGFpbDo6aXNfZGV0ZWN0ZWRfbGF6eTxkZXRhaWw6OmdldF90ZW1wbGF0ZV9mdW5j dGlvbiwgY29uc3QgYmFzaWNfanNvbl90JiwgVmFsdWVUeXBlPgorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnZhbHVlLCBpbnQgPjo6dHlwZSA9IDAg PgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OX0VYUExJQ0lU IG9wZXJhdG9yIFZhbHVlVHlwZSgpIGNvbnN0CistICAgIHsKKy0gICAgICAgIC8vIGRlbGVnYXRl IHRoZSBjYWxsIHRvIGdldDw+KCkgY29uc3QKKy0gICAgICAgIHJldHVybiBnZXQ8VmFsdWVUeXBl PigpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgZ2V0IGEgYmluYXJ5IHZhbHVlCistICAg IC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2dldF9iaW5h cnkvCistICAgIGJpbmFyeV90JiBnZXRfYmluYXJ5KCkKKy0gICAgeworLSAgICAgICAgaWYgKCFp c19iaW5hcnkoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJy b3I6OmNyZWF0ZSgzMDIsICJ0eXBlIG11c3QgYmUgYmluYXJ5LCBidXQgaXMgIiArIHN0ZDo6c3Ry aW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVy biAqZ2V0X3B0cjxiaW5hcnlfdCo+KCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBnZXQg YSBiaW5hcnkgdmFsdWUKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBp L2Jhc2ljX2pzb24vZ2V0X2JpbmFyeS8KKy0gICAgY29uc3QgYmluYXJ5X3QmIGdldF9iaW5hcnko KSBjb25zdAorLSAgICB7CistICAgICAgICBpZiAoIWlzX2JpbmFyeSgpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwMiwgInR5cGUgbXVz dCBiZSBiaW5hcnksIGJ1dCBpcyAiICsgc3RkOjpzdHJpbmcodHlwZV9uYW1lKCkpLCAqdGhpcykp OworLSAgICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuICpnZXRfcHRyPGNvbnN0IGJpbmFyeV90 Kj4oKTsKKy0gICAgfQorLQorLSAgICAvLy8gQH0KKy0KKy0KKy0gICAgLy8vLy8vLy8vLy8vLy8v Ly8vLy8KKy0gICAgLy8gZWxlbWVudCBhY2Nlc3MgLy8KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8v Ly8KKy0KKy0gICAgLy8vIEBuYW1lIGVsZW1lbnQgYWNjZXNzCistICAgIC8vLyBBY2Nlc3MgdG8g dGhlIEpTT04gdmFsdWUuCistICAgIC8vLyBAeworLQorLSAgICAvLy8gQGJyaWVmIGFjY2VzcyBz cGVjaWZpZWQgYXJyYXkgZWxlbWVudCB3aXRoIGJvdW5kcyBjaGVja2luZworLSAgICAvLy8gQHNh IGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9hdC8KKy0gICAgcmVmZXJl bmNlIGF0KHNpemVfdHlwZSBpZHgpCistICAgIHsKKy0gICAgICAgIC8vIGF0IG9ubHkgd29ya3Mg Zm9yIGFycmF5cworLSAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJS0VMWShpc19hcnJheSgpKSkK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RSWQorLSAgICAgICAgICAgIHsKKy0gICAg ICAgICAgICAgICAgcmV0dXJuIHNldF9wYXJlbnQobV92YWx1ZS5hcnJheS0+YXQoaWR4KSk7Cist ICAgICAgICAgICAgfQorLSAgICAgICAgICAgIEpTT05fQ0FUQ0ggKHN0ZDo6b3V0X29mX3Jhbmdl JikKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBiZXR0ZXIgZXhj ZXB0aW9uIGV4cGxhbmF0aW9uCistICAgICAgICAgICAgICAgIEpTT05fVEhST1cob3V0X29mX3Jh bmdlOjpjcmVhdGUoNDAxLCAiYXJyYXkgaW5kZXggIiArIHN0ZDo6dG9fc3RyaW5nKGlkeCkgKyAi IGlzIG91dCBvZiByYW5nZSIsICp0aGlzKSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQor LSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fVEhST1codHlwZV9l cnJvcjo6Y3JlYXRlKDMwNCwgImNhbm5vdCB1c2UgYXQoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0 eXBlX25hbWUoKSksICp0aGlzKSk7CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIEBi cmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1lbnQgd2l0aCBib3VuZHMgY2hlY2tpbmcK Ky0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vYXQv CistICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgaWR4KSBjb25zdAorLSAgICB7Cist ICAgICAgICAvLyBhdCBvbmx5IHdvcmtzIGZvciBhcnJheXMKKy0gICAgICAgIGlmIChKU09OX0hF RExFWV9MSUtFTFkoaXNfYXJyYXkoKSkpCistICAgICAgICB7CistICAgICAgICAgICAgSlNPTl9U UlkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLmFycmF5 LT5hdChpZHgpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBKU09OX0NBVENIIChzdGQ6 Om91dF9vZl9yYW5nZSYpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBjcmVh dGUgYmV0dGVyIGV4Y2VwdGlvbiBleHBsYW5hdGlvbgorLSAgICAgICAgICAgICAgICBKU09OX1RI Uk9XKG91dF9vZl9yYW5nZTo6Y3JlYXRlKDQwMSwgImFycmF5IGluZGV4ICIgKyBzdGQ6OnRvX3N0 cmluZyhpZHgpICsgIiBpcyBvdXQgb2YgcmFuZ2UiLCAqdGhpcykpOworLSAgICAgICAgICAgIH0K Ky0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09O X1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDQsICJjYW5ub3QgdXNlIGF0KCkgd2l0aCAiICsg c3RkOjpzdHJpbmcodHlwZV9uYW1lKCkpLCAqdGhpcykpOworLSAgICAgICAgfQorLSAgICB9Cist CistICAgIC8vLyBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudCB3aXRoIGJv dW5kcyBjaGVja2luZworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv YmFzaWNfanNvbi9hdC8KKy0gICAgcmVmZXJlbmNlIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90 OjprZXlfdHlwZSYga2V5KQorLSAgICB7CistICAgICAgICAvLyBhdCBvbmx5IHdvcmtzIGZvciBv YmplY3RzCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElLRUxZKGlzX29iamVjdCgpKSkKKy0g ICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RSWQorLSAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgcmV0dXJuIHNldF9wYXJlbnQobV92YWx1ZS5vYmplY3QtPmF0KGtleSkpOworLSAg ICAgICAgICAgIH0KKy0gICAgICAgICAgICBKU09OX0NBVENIIChzdGQ6Om91dF9vZl9yYW5nZSYp CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYmV0dGVyIGV4Y2Vw dGlvbiBleHBsYW5hdGlvbgorLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKG91dF9vZl9yYW5n ZTo6Y3JlYXRlKDQwMywgImtleSAnIiArIGtleSArICInIG5vdCBmb3VuZCIsICp0aGlzKSk7Cist ICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAg ICAgICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwNCwgImNhbm5vdCB1c2Ug YXQoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0eXBlX25hbWUoKSksICp0aGlzKSk7CistICAgICAg ICB9CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBl bGVtZW50IHdpdGggYm91bmRzIGNoZWNraW5nCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5s b2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2F0LworLSAgICBjb25zdF9yZWZlcmVuY2UgYXQoY29u c3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpIGNvbnN0CistICAgIHsKKy0gICAg ICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKy0gICAgICAgIGlmIChKU09OX0hFRExF WV9MSUtFTFkoaXNfb2JqZWN0KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fVFJZ CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3Qt PmF0KGtleSk7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIEpTT05fQ0FUQ0ggKHN0ZDo6 b3V0X29mX3JhbmdlJikKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIC8vIGNyZWF0 ZSBiZXR0ZXIgZXhjZXB0aW9uIGV4cGxhbmF0aW9uCistICAgICAgICAgICAgICAgIEpTT05fVEhS T1cob3V0X29mX3JhbmdlOjpjcmVhdGUoNDAzLCAia2V5ICciICsga2V5ICsgIicgbm90IGZvdW5k IiwgKnRoaXMpKTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICBlbHNlCist ICAgICAgICB7CistICAgICAgICAgICAgSlNPTl9USFJPVyh0eXBlX2Vycm9yOjpjcmVhdGUoMzA0 LCAiY2Fubm90IHVzZSBhdCgpIHdpdGggIiArIHN0ZDo6c3RyaW5nKHR5cGVfbmFtZSgpKSwgKnRo aXMpKTsKKy0gICAgICAgIH0KKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGFjY2VzcyBzcGVj aWZpZWQgYXJyYXkgZWxlbWVudAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5t ZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvciU1QiU1RC8KKy0gICAgcmVmZXJlbmNlIG9wZXJhdG9y W10oc2l6ZV90eXBlIGlkeCkKKy0gICAgeworLSAgICAgICAgLy8gaW1wbGljaXRseSBjb252ZXJ0 IG51bGwgdmFsdWUgdG8gYW4gZW1wdHkgYXJyYXkKKy0gICAgICAgIGlmIChpc19udWxsKCkpCist ICAgICAgICB7CistICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6YXJyYXk7CistICAgICAg ICAgICAgbV92YWx1ZS5hcnJheSA9IGNyZWF0ZTxhcnJheV90PigpOworLSAgICAgICAgICAgIGFz c2VydF9pbnZhcmlhbnQoKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIG9wZXJhdG9yW10g b25seSB3b3JrcyBmb3IgYXJyYXlzCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElLRUxZKGlz X2FycmF5KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIC8vIGZpbGwgdXAgYXJyYXkgd2l0 aCBudWxsIHZhbHVlcyBpZiBnaXZlbiBpZHggaXMgb3V0c2lkZSByYW5nZQorLSAgICAgICAgICAg IGlmIChpZHggPj0gbV92YWx1ZS5hcnJheS0+c2l6ZSgpKQorLSAgICAgICAgICAgIHsKKy0jaWYg SlNPTl9ESUFHTk9TVElDUworLSAgICAgICAgICAgICAgICAvLyByZW1lbWJlciBhcnJheSBzaXpl ICYgY2FwYWNpdHkgYmVmb3JlIHJlc2l6aW5nCistICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8g b2xkX3NpemUgPSBtX3ZhbHVlLmFycmF5LT5zaXplKCk7CistICAgICAgICAgICAgICAgIGNvbnN0 IGF1dG8gb2xkX2NhcGFjaXR5ID0gbV92YWx1ZS5hcnJheS0+Y2FwYWNpdHkoKTsKKy0jZW5kaWYK Ky0gICAgICAgICAgICAgICAgbV92YWx1ZS5hcnJheS0+cmVzaXplKGlkeCArIDEpOworLQorLSNp ZiBKU09OX0RJQUdOT1NUSUNTCistICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJ S0VMWShtX3ZhbHVlLmFycmF5LT5jYXBhY2l0eSgpICE9IG9sZF9jYXBhY2l0eSkpCistICAgICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGNhcGFjaXR5IGhhcyBjaGFuZ2Vk OiB1cGRhdGUgYWxsIHBhcmVudHMKKy0gICAgICAgICAgICAgICAgICAgIHNldF9wYXJlbnRzKCk7 CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICAvLyBzZXQgcGFyZW50IGZvciB2YWx1ZXMgYWRk ZWQgYWJvdmUKKy0gICAgICAgICAgICAgICAgICAgIHNldF9wYXJlbnRzKGJlZ2luKCkgKyBzdGF0 aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlPihvbGRfc2l6ZSksIHN0 YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGU+KGlkeCArIDEgLSBv bGRfc2l6ZSkpOworLSAgICAgICAgICAgICAgICB9CistI2VuZGlmCistICAgICAgICAgICAgICAg IGFzc2VydF9pbnZhcmlhbnQoKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgcmV0 dXJuIG1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10oaWR4KTsKKy0gICAgICAgIH0KKy0KKy0gICAg ICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwNSwgImNhbm5vdCB1c2Ugb3BlcmF0 b3JbXSB3aXRoIGEgbnVtZXJpYyBhcmd1bWVudCB3aXRoICIgKyBzdGQ6OnN0cmluZyh0eXBlX25h bWUoKSksICp0aGlzKSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3Mgc3BlY2lm aWVkIGFycmF5IGVsZW1lbnQKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUv YXBpL2Jhc2ljX2pzb24vb3BlcmF0b3IlNUIlNUQvCistICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVy YXRvcltdKHNpemVfdHlwZSBpZHgpIGNvbnN0CistICAgIHsKKy0gICAgICAgIC8vIGNvbnN0IG9w ZXJhdG9yW10gb25seSB3b3JrcyBmb3IgYXJyYXlzCistICAgICAgICBpZiAoSlNPTl9IRURMRVlf TElLRUxZKGlzX2FycmF5KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiBtX3Zh bHVlLmFycmF5LT5vcGVyYXRvcltdKGlkeCk7CistICAgICAgICB9CistCistICAgICAgICBKU09O X1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDUsICJjYW5ub3QgdXNlIG9wZXJhdG9yW10gd2l0 aCBhIG51bWVyaWMgYXJndW1lbnQgd2l0aCAiICsgc3RkOjpzdHJpbmcodHlwZV9uYW1lKCkpLCAq dGhpcykpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmpl Y3QgZWxlbWVudAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFz aWNfanNvbi9vcGVyYXRvciU1QiU1RC8KKy0gICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oY29uc3Qg dHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpCistICAgIHsKKy0gICAgICAgIC8vIGlt cGxpY2l0bHkgY29udmVydCBudWxsIHZhbHVlIHRvIGFuIGVtcHR5IG9iamVjdAorLSAgICAgICAg aWYgKGlzX251bGwoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90 OjpvYmplY3Q7CistICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+ KCk7CistICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICAgICAgfQorLQorLSAg ICAgICAgLy8gb3BlcmF0b3JbXSBvbmx5IHdvcmtzIGZvciBvYmplY3RzCistICAgICAgICBpZiAo SlNPTl9IRURMRVlfTElLRUxZKGlzX29iamVjdCgpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICByZXR1cm4gc2V0X3BhcmVudChtX3ZhbHVlLm9iamVjdC0+b3BlcmF0b3JbXShrZXkpKTsKKy0g ICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwNSwg ImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50IHdpdGggIiArIHN0 ZDo6c3RyaW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMpKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJy aWVmIGFjY2VzcyBzcGVjaWZpZWQgb2JqZWN0IGVsZW1lbnQKKy0gICAgLy8vIEBzYSBodHRwczov L2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb3BlcmF0b3IlNUIlNUQvCistICAgIGNv bnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlw ZSYga2V5KSBjb25zdAorLSAgICB7CistICAgICAgICAvLyBjb25zdCBvcGVyYXRvcltdIG9ubHkg d29ya3MgZm9yIG9iamVjdHMKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9MSUtFTFkoaXNfb2Jq ZWN0KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fQVNTRVJUKG1fdmFsdWUub2Jq ZWN0LT5maW5kKGtleSkgIT0gbV92YWx1ZS5vYmplY3QtPmVuZCgpKTsKKy0gICAgICAgICAgICBy ZXR1cm4gbV92YWx1ZS5vYmplY3QtPmZpbmQoa2V5KS0+c2Vjb25kOworLSAgICAgICAgfQorLQor LSAgICAgICAgSlNPTl9USFJPVyh0eXBlX2Vycm9yOjpjcmVhdGUoMzA1LCAiY2Fubm90IHVzZSBv cGVyYXRvcltdIHdpdGggYSBzdHJpbmcgYXJndW1lbnQgd2l0aCAiICsgc3RkOjpzdHJpbmcodHlw ZV9uYW1lKCkpLCAqdGhpcykpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgYWNjZXNzIHNw ZWNpZmllZCBvYmplY3QgZWxlbWVudAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFu bi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvciU1QiU1RC8KKy0gICAgdGVtcGxhdGU8dHlwZW5h bWUgVD4KKy0gICAgSlNPTl9IRURMRVlfTk9OX05VTEwoMikKKy0gICAgcmVmZXJlbmNlIG9wZXJh dG9yW10oVCoga2V5KQorLSAgICB7CistICAgICAgICAvLyBpbXBsaWNpdGx5IGNvbnZlcnQgbnVs bCB0byBvYmplY3QKKy0gICAgICAgIGlmIChpc19udWxsKCkpCistICAgICAgICB7CistICAgICAg ICAgICAgbV90eXBlID0gdmFsdWVfdDo6b2JqZWN0OworLSAgICAgICAgICAgIG1fdmFsdWUgPSB2 YWx1ZV90OjpvYmplY3Q7CistICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworLSAgICAg ICAgfQorLQorLSAgICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2JqZWN0cworLSAgICAgICAg aWYgKEpTT05fSEVETEVZX0xJS0VMWShpc19vYmplY3QoKSkpCistICAgICAgICB7CistICAgICAg ICAgICAgcmV0dXJuIHNldF9wYXJlbnQobV92YWx1ZS5vYmplY3QtPm9wZXJhdG9yW10oa2V5KSk7 CistICAgICAgICB9CistCistICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgz MDUsICJjYW5ub3QgdXNlIG9wZXJhdG9yW10gd2l0aCBhIHN0cmluZyBhcmd1bWVudCB3aXRoICIg KyBzdGQ6OnN0cmluZyh0eXBlX25hbWUoKSksICp0aGlzKSk7CistICAgIH0KKy0KKy0gICAgLy8v IEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50CistICAgIC8vLyBAc2EgaHR0 cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL29wZXJhdG9yJTVCJTVELworLSAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLSAgICBKU09OX0hFRExFWV9OT05fTlVMTCgyKQorLSAg ICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShUKiBrZXkpIGNvbnN0CistICAgIHsKKy0gICAg ICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKy0gICAgICAgIGlmIChKU09OX0hFRExF WV9MSUtFTFkoaXNfb2JqZWN0KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fQVNT RVJUKG1fdmFsdWUub2JqZWN0LT5maW5kKGtleSkgIT0gbV92YWx1ZS5vYmplY3QtPmVuZCgpKTsK Ky0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmZpbmQoa2V5KS0+c2Vjb25kOwor LSAgICAgICAgfQorLQorLSAgICAgICAgSlNPTl9USFJPVyh0eXBlX2Vycm9yOjpjcmVhdGUoMzA1 LCAiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggYSBzdHJpbmcgYXJndW1lbnQgd2l0aCAiICsg c3RkOjpzdHJpbmcodHlwZV9uYW1lKCkpLCAqdGhpcykpOworLSAgICB9CistCistICAgIC8vLyBA YnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudCB3aXRoIGRlZmF1bHQgdmFsdWUK Ky0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vdmFs dWUvCistICAgIC8vLyB1c2luZyBzdGQ6OmlzX2NvbnZlcnRpYmxlIGluIGEgc3RkOjplbmFibGVf aWYgd2lsbCBmYWlsIHdoZW4gdXNpbmcgZXhwbGljaXQgY29udmVyc2lvbnMKKy0gICAgdGVtcGxh dGUgPCBjbGFzcyBWYWx1ZVR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmIDwKKy0gICAgICAg ICAgICAgICAgICAgZGV0YWlsOjppc19nZXRhYmxlPGJhc2ljX2pzb25fdCwgVmFsdWVUeXBlPjo6 dmFsdWUKKy0gICAgICAgICAgICAgICAgICAgJiYgIXN0ZDo6aXNfc2FtZTx2YWx1ZV90LCBWYWx1 ZVR5cGU+Ojp2YWx1ZSwgaW50ID46OnR5cGUgPSAwID4KKy0gICAgVmFsdWVUeXBlIHZhbHVlKGNv bnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYga2V5LCBjb25zdCBWYWx1ZVR5cGUmIGRl ZmF1bHRfdmFsdWUpIGNvbnN0CistICAgIHsKKy0gICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9y IG9iamVjdHMKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9MSUtFTFkoaXNfb2JqZWN0KCkpKQor LSAgICAgICAgeworLSAgICAgICAgICAgIC8vIGlmIGtleSBpcyBmb3VuZCwgcmV0dXJuIHZhbHVl IGFuZCBnaXZlbiBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZQorLSAgICAgICAgICAgIGNvbnN0IGF1 dG8gaXQgPSBmaW5kKGtleSk7CistICAgICAgICAgICAgaWYgKGl0ICE9IGVuZCgpKQorLSAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGl0LT50ZW1wbGF0ZSBnZXQ8VmFsdWVU eXBlPigpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdF92 YWx1ZTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3Jl YXRlKDMwNiwgImNhbm5vdCB1c2UgdmFsdWUoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0eXBlX25h bWUoKSksICp0aGlzKSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3Mgc3BlY2lm aWVkIG9iamVjdCBlbGVtZW50IHdpdGggZGVmYXVsdCB2YWx1ZQorLSAgICAvLy8gQHNhIGh0dHBz Oi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi92YWx1ZS8KKy0gICAgLy8vIG92ZXJs b2FkIGZvciBhIGRlZmF1bHQgdmFsdWUgb2YgdHlwZSBjb25zdCBjaGFyKgorLSAgICBzdHJpbmdf dCB2YWx1ZShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSwgY29uc3QgY2hh ciogZGVmYXVsdF92YWx1ZSkgY29uc3QKKy0gICAgeworLSAgICAgICAgcmV0dXJuIHZhbHVlKGtl eSwgc3RyaW5nX3QoZGVmYXVsdF92YWx1ZSkpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYg YWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudCB2aWEgSlNPTiBQb2ludGVyIHdpdGggZGVm YXVsdCB2YWx1ZQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFz aWNfanNvbi92YWx1ZS8KKy0gICAgdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlLCB0eXBlbmFtZSBz dGQ6OmVuYWJsZV9pZjwKKy0gICAgICAgICAgICAgICAgIGRldGFpbDo6aXNfZ2V0YWJsZTxiYXNp Y19qc29uX3QsIFZhbHVlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKy0gICAgVmFsdWVU eXBlIHZhbHVlKGNvbnN0IGpzb25fcG9pbnRlciYgcHRyLCBjb25zdCBWYWx1ZVR5cGUmIGRlZmF1 bHRfdmFsdWUpIGNvbnN0CistICAgIHsKKy0gICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9i amVjdHMKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9MSUtFTFkoaXNfb2JqZWN0KCkpKQorLSAg ICAgICAgeworLSAgICAgICAgICAgIC8vIGlmIHBvaW50ZXIgcmVzb2x2ZXMgYSB2YWx1ZSwgcmV0 dXJuIGl0IG9yIHVzZSBkZWZhdWx0IHZhbHVlCistICAgICAgICAgICAgSlNPTl9UUlkKKy0gICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVybiBwdHIuZ2V0X2NoZWNrZWQodGhpcyku dGVtcGxhdGUgZ2V0PFZhbHVlVHlwZT4oKTsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAg SlNPTl9JTlRFUk5BTF9DQVRDSCAob3V0X29mX3JhbmdlJikKKy0gICAgICAgICAgICB7CistICAg ICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOworLSAgICAgICAgICAgIH0KKy0gICAg ICAgIH0KKy0KKy0gICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwNiwgImNh bm5vdCB1c2UgdmFsdWUoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0eXBlX25hbWUoKSksICp0aGlz KSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBl bGVtZW50IHZpYSBKU09OIFBvaW50ZXIgd2l0aCBkZWZhdWx0IHZhbHVlCistICAgIC8vLyBAc2Eg aHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3ZhbHVlLworLSAgICAvLy8g b3ZlcmxvYWQgZm9yIGEgZGVmYXVsdCB2YWx1ZSBvZiB0eXBlIGNvbnN0IGNoYXIqCistICAgIEpT T05fSEVETEVZX05PTl9OVUxMKDMpCistICAgIHN0cmluZ190IHZhbHVlKGNvbnN0IGpzb25fcG9p bnRlciYgcHRyLCBjb25zdCBjaGFyKiBkZWZhdWx0X3ZhbHVlKSBjb25zdAorLSAgICB7CistICAg ICAgICByZXR1cm4gdmFsdWUocHRyLCBzdHJpbmdfdChkZWZhdWx0X3ZhbHVlKSk7CistICAgIH0K Ky0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3MgdGhlIGZpcnN0IGVsZW1lbnQKKy0gICAgLy8vIEBz YSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vZnJvbnQvCistICAgIHJl ZmVyZW5jZSBmcm9udCgpCistICAgIHsKKy0gICAgICAgIHJldHVybiAqYmVnaW4oKTsKKy0gICAg fQorLQorLSAgICAvLy8gQGJyaWVmIGFjY2VzcyB0aGUgZmlyc3QgZWxlbWVudAorLSAgICAvLy8g QHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9mcm9udC8KKy0gICAg Y29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QKKy0gICAgeworLSAgICAgICAgcmV0dXJuICpj YmVnaW4oKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGFjY2VzcyB0aGUgbGFzdCBlbGVt ZW50CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29u L2JhY2svCistICAgIHJlZmVyZW5jZSBiYWNrKCkKKy0gICAgeworLSAgICAgICAgYXV0byB0bXAg PSBlbmQoKTsKKy0gICAgICAgIC0tdG1wOworLSAgICAgICAgcmV0dXJuICp0bXA7CistICAgIH0K Ky0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3MgdGhlIGxhc3QgZWxlbWVudAorLSAgICAvLy8gQHNh IGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9iYWNrLworLSAgICBjb25z dF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0CistICAgIHsKKy0gICAgICAgIGF1dG8gdG1wID0gY2Vu ZCgpOworLSAgICAgICAgLS10bXA7CistICAgICAgICByZXR1cm4gKnRtcDsKKy0gICAgfQorLQor LSAgICAvLy8gQGJyaWVmIHJlbW92ZSBlbGVtZW50IGdpdmVuIGFuIGl0ZXJhdG9yCistICAgIC8v LyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2VyYXNlLworLSAg ICB0ZW1wbGF0ZSA8IGNsYXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWYg PAorLSAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFt ZSBiYXNpY19qc29uX3Q6Oml0ZXJhdG9yPjo6dmFsdWUgfHwKKy0gICAgICAgICAgICAgICAgICAg c3RkOjppc19zYW1lPEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgYmFzaWNfanNvbl90Ojpjb25zdF9p dGVyYXRvcj46OnZhbHVlLCBpbnQgPjo6dHlwZQorLSAgICAgICAgICAgICAgID0gMCA+CistICAg IEl0ZXJhdG9yVHlwZSBlcmFzZShJdGVyYXRvclR5cGUgcG9zKQorLSAgICB7CistICAgICAgICAv LyBtYWtlIHN1cmUgaXRlcmF0b3IgZml0cyB0aGUgY3VycmVudCB2YWx1ZQorLSAgICAgICAgaWYg KEpTT05fSEVETEVZX1VOTElLRUxZKHRoaXMgIT0gcG9zLm1fb2JqZWN0KSkKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICBKU09OX1RIUk9XKGludmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMDIsICJp dGVyYXRvciBkb2VzIG5vdCBmaXQgY3VycmVudCB2YWx1ZSIsICp0aGlzKSk7CistICAgICAgICB9 CistCistICAgICAgICBJdGVyYXRvclR5cGUgcmVzdWx0ID0gZW5kKCk7CistCistICAgICAgICBz d2l0Y2ggKG1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJv b2xlYW46CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICBjYXNlIHZh bHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmlu ZzoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghcG9zLm1faXQucHJpbWl0 aXZlX2l0ZXJhdG9yLmlzX2JlZ2luKCkpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICBKU09OX1RIUk9XKGludmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMDUsICJpdGVy YXRvciBvdXQgb2YgcmFuZ2UiLCAqdGhpcykpOworLSAgICAgICAgICAgICAgICB9CistCistICAg ICAgICAgICAgICAgIGlmIChpc19zdHJpbmcoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICAgICAgQWxsb2NhdG9yVHlwZTxzdHJpbmdfdD4gYWxsb2M7CistICAgICAgICAg ICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8ZGVjbHR5cGUoYWxsb2MpPjo6ZGVzdHJv eShhbGxvYywgbV92YWx1ZS5zdHJpbmcpOworLSAgICAgICAgICAgICAgICAgICAgc3RkOjphbGxv Y2F0b3JfdHJhaXRzPGRlY2x0eXBlKGFsbG9jKT46OmRlYWxsb2NhdGUoYWxsb2MsIG1fdmFsdWUu c3RyaW5nLCAxKTsKKy0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUuc3RyaW5nID0gbnVsbHB0 cjsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpc19iaW5h cnkoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgQWxsb2NhdG9y VHlwZTxiaW5hcnlfdD4gYWxsb2M7CistICAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRv cl90cmFpdHM8ZGVjbHR5cGUoYWxsb2MpPjo6ZGVzdHJveShhbGxvYywgbV92YWx1ZS5iaW5hcnkp OworLSAgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3JfdHJhaXRzPGRlY2x0eXBlKGFs bG9jKT46OmRlYWxsb2NhdGUoYWxsb2MsIG1fdmFsdWUuYmluYXJ5LCAxKTsKKy0gICAgICAgICAg ICAgICAgICAgIG1fdmFsdWUuYmluYXJ5ID0gbnVsbHB0cjsKKy0gICAgICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90OjpudWxsOworLSAgICAgICAgICAg ICAgICBhc3NlcnRfaW52YXJpYW50KCk7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAg ICAgICAgIH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgIHJlc3VsdC5tX2l0Lm9iamVjdF9pdGVyYXRvciA9IG1f dmFsdWUub2JqZWN0LT5lcmFzZShwb3MubV9pdC5vYmplY3RfaXRlcmF0b3IpOworLSAgICAgICAg ICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1 ZV90OjphcnJheToKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJlc3VsdC5tX2l0 LmFycmF5X2l0ZXJhdG9yID0gbV92YWx1ZS5hcnJheS0+ZXJhc2UocG9zLm1faXQuYXJyYXlfaXRl cmF0b3IpOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICB9CistCistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6 ZGlzY2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgIEpTT05f VEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwNywgImNhbm5vdCB1c2UgZXJhc2UoKSB3aXRoICIg KyBzdGQ6OnN0cmluZyh0eXBlX25hbWUoKSksICp0aGlzKSk7CistICAgICAgICB9CistCistICAg ICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmVtb3ZlIGVs ZW1lbnRzIGdpdmVuIGFuIGl0ZXJhdG9yIHJhbmdlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29u Lm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2VyYXNlLworLSAgICB0ZW1wbGF0ZSA8IGNsYXNz IEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWYgPAorLSAgICAgICAgICAgICAg ICAgICBzdGQ6OmlzX3NhbWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6Oml0 ZXJhdG9yPjo6dmFsdWUgfHwKKy0gICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPEl0ZXJh dG9yVHlwZSwgdHlwZW5hbWUgYmFzaWNfanNvbl90Ojpjb25zdF9pdGVyYXRvcj46OnZhbHVlLCBp bnQgPjo6dHlwZQorLSAgICAgICAgICAgICAgID0gMCA+CistICAgIEl0ZXJhdG9yVHlwZSBlcmFz ZShJdGVyYXRvclR5cGUgZmlyc3QsIEl0ZXJhdG9yVHlwZSBsYXN0KQorLSAgICB7CistICAgICAg ICAvLyBtYWtlIHN1cmUgaXRlcmF0b3IgZml0cyB0aGUgY3VycmVudCB2YWx1ZQorLSAgICAgICAg aWYgKEpTT05fSEVETEVZX1VOTElLRUxZKHRoaXMgIT0gZmlyc3QubV9vYmplY3QgfHwgdGhpcyAh PSBsYXN0Lm1fb2JqZWN0KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKGlu dmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMDMsICJpdGVyYXRvcnMgZG8gbm90IGZpdCBjdXJyZW50 IHZhbHVlIiwgKnRoaXMpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIEl0ZXJhdG9yVHlwZSBy ZXN1bHQgPSBlbmQoKTsKKy0KKy0gICAgICAgIHN3aXRjaCAobV90eXBlKQorLSAgICAgICAgewor LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICBjYXNlIHZh bHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9p bnRlZ2VyOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6YmluYXJ5OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVE TEVZX0xJS0VMWSghZmlyc3QubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKQorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFsYXN0Lm1faXQucHJpbWl0 aXZlX2l0ZXJhdG9yLmlzX2VuZCgpKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAgICAgSlNPTl9USFJPVyhpbnZhbGlkX2l0ZXJhdG9yOjpjcmVhdGUoMjA0LCAiaXRlcmF0 b3JzIG91dCBvZiByYW5nZSIsICp0aGlzKSk7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAg ICAgICAgICAgICAgaWYgKGlzX3N0cmluZygpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICBBbGxvY2F0b3JUeXBlPHN0cmluZ190PiBhbGxvYzsKKy0gICAgICAgICAg ICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxkZWNsdHlwZShhbGxvYyk+OjpkZXN0cm95 KGFsbG9jLCBtX3ZhbHVlLnN0cmluZyk7CistICAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9j YXRvcl90cmFpdHM8ZGVjbHR5cGUoYWxsb2MpPjo6ZGVhbGxvY2F0ZShhbGxvYywgbV92YWx1ZS5z dHJpbmcsIDEpOworLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS5zdHJpbmcgPSBudWxscHRy OworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzX2JpbmFy eSgpKQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBBbGxvY2F0b3JU eXBlPGJpbmFyeV90PiBhbGxvYzsKKy0gICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9y X3RyYWl0czxkZWNsdHlwZShhbGxvYyk+OjpkZXN0cm95KGFsbG9jLCBtX3ZhbHVlLmJpbmFyeSk7 CistICAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8ZGVjbHR5cGUoYWxs b2MpPjo6ZGVhbGxvY2F0ZShhbGxvYywgbV92YWx1ZS5iaW5hcnksIDEpOworLSAgICAgICAgICAg ICAgICAgICAgbV92YWx1ZS5iaW5hcnkgPSBudWxscHRyOworLSAgICAgICAgICAgICAgICB9Cist CistICAgICAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CistICAgICAgICAgICAg ICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgcmVzdWx0Lm1faXQub2JqZWN0X2l0ZXJhdG9yID0gbV92 YWx1ZS5vYmplY3QtPmVyYXNlKGZpcnN0Lm1faXQub2JqZWN0X2l0ZXJhdG9yLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Lm1faXQub2JqZWN0X2l0 ZXJhdG9yKTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICByZXN1bHQubV9pdC5hcnJheV9pdGVyYXRvciA9IG1fdmFsdWUuYXJyYXktPmVyYXNl KGZpcnN0Lm1faXQuYXJyYXlfaXRlcmF0b3IsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGFzdC5tX2l0LmFycmF5X2l0ZXJhdG9yKTsKKy0gICAgICAgICAg ICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6bnVsbDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAg ICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNy ZWF0ZSgzMDcsICJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCAiICsgc3RkOjpzdHJpbmcodHlwZV9u YW1lKCkpLCAqdGhpcykpOworLSAgICAgICAgfQorLQorLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK Ky0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIHJlbW92ZSBlbGVtZW50IGZyb20gYSBKU09OIG9i amVjdCBnaXZlbiBhIGtleQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYmFzaWNfanNvbi9lcmFzZS8KKy0gICAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IHR5cGVuYW1l IG9iamVjdF90OjprZXlfdHlwZSYga2V5KQorLSAgICB7CistICAgICAgICAvLyB0aGlzIGVyYXNl IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9MSUtFTFko aXNfb2JqZWN0KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9i amVjdC0+ZXJhc2Uoa2V5KTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05fVEhST1codHlw ZV9lcnJvcjo6Y3JlYXRlKDMwNywgImNhbm5vdCB1c2UgZXJhc2UoKSB3aXRoICIgKyBzdGQ6OnN0 cmluZyh0eXBlX25hbWUoKSksICp0aGlzKSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBy ZW1vdmUgZWxlbWVudCBmcm9tIGEgSlNPTiBhcnJheSBnaXZlbiBhbiBpbmRleAorLSAgICAvLy8g QHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9lcmFzZS8KKy0gICAg dm9pZCBlcmFzZShjb25zdCBzaXplX3R5cGUgaWR4KQorLSAgICB7CistICAgICAgICAvLyB0aGlz IGVyYXNlIG9ubHkgd29ya3MgZm9yIGFycmF5cworLSAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJ S0VMWShpc19hcnJheSgpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURM RVlfVU5MSUtFTFkoaWR4ID49IHNpemUoKSkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICBKU09OX1RIUk9XKG91dF9vZl9yYW5nZTo6Y3JlYXRlKDQwMSwgImFycmF5IGluZGV4ICIg KyBzdGQ6OnRvX3N0cmluZyhpZHgpICsgIiBpcyBvdXQgb2YgcmFuZ2UiLCAqdGhpcykpOworLSAg ICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICBtX3ZhbHVlLmFycmF5LT5lcmFzZShtX3ZhbHVl LmFycmF5LT5iZWdpbigpICsgc3RhdGljX2Nhc3Q8ZGlmZmVyZW5jZV90eXBlPihpZHgpKTsKKy0g ICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RI Uk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDcsICJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCAiICsg c3RkOjpzdHJpbmcodHlwZV9uYW1lKCkpLCAqdGhpcykpOworLSAgICAgICAgfQorLSAgICB9Cist CistICAgIC8vLyBAfQorLQorLQorLSAgICAvLy8vLy8vLy8vLy8KKy0gICAgLy8gbG9va3VwIC8v CistICAgIC8vLy8vLy8vLy8vLworLQorLSAgICAvLy8gQG5hbWUgbG9va3VwCistICAgIC8vLyBA eworLQorLSAgICAvLy8gQGJyaWVmIGZpbmQgYW4gZWxlbWVudCBpbiBhIEpTT04gb2JqZWN0Cist ICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2ZpbmQv CistICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleVQ+CistICAgIGl0ZXJhdG9yIGZpbmQoS2V5VCYm IGtleSkKKy0gICAgeworLSAgICAgICAgYXV0byByZXN1bHQgPSBlbmQoKTsKKy0KKy0gICAgICAg IGlmIChpc19vYmplY3QoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXN1bHQubV9pdC5v YmplY3RfaXRlcmF0b3IgPSBtX3ZhbHVlLm9iamVjdC0+ZmluZChzdGQ6OmZvcndhcmQ8S2V5VD4o a2V5KSk7CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9Cist CistICAgIC8vLyBAYnJpZWYgZmluZCBhbiBlbGVtZW50IGluIGEgSlNPTiBvYmplY3QKKy0gICAg Ly8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vZmluZC8KKy0g ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VD4KKy0gICAgY29uc3RfaXRlcmF0b3IgZmluZChLZXlU JiYga2V5KSBjb25zdAorLSAgICB7CistICAgICAgICBhdXRvIHJlc3VsdCA9IGNlbmQoKTsKKy0K Ky0gICAgICAgIGlmIChpc19vYmplY3QoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXN1 bHQubV9pdC5vYmplY3RfaXRlcmF0b3IgPSBtX3ZhbHVlLm9iamVjdC0+ZmluZChzdGQ6OmZvcndh cmQ8S2V5VD4oa2V5KSk7CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4gcmVzdWx0Owor LSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9jY3VycmVu Y2VzIG9mIGEga2V5IGluIGEgSlNPTiBvYmplY3QKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24u bmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vY291bnQvCistICAgIHRlbXBsYXRlPHR5cGVuYW1l IEtleVQ+CistICAgIHNpemVfdHlwZSBjb3VudChLZXlUJiYga2V5KSBjb25zdAorLSAgICB7Cist ICAgICAgICAvLyByZXR1cm4gMCBmb3IgYWxsIG5vbm9iamVjdCB0eXBlcworLSAgICAgICAgcmV0 dXJuIGlzX29iamVjdCgpID8gbV92YWx1ZS5vYmplY3QtPmNvdW50KHN0ZDo6Zm9yd2FyZDxLZXlU PihrZXkpKSA6IDA7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBjaGVjayB0aGUgZXhpc3Rl bmNlIG9mIGFuIGVsZW1lbnQgaW4gYSBKU09OIG9iamVjdAorLSAgICAvLy8gQHNhIGh0dHBzOi8v anNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9jb250YWlucy8KKy0gICAgdGVtcGxhdGUg PCB0eXBlbmFtZSBLZXlULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZiA8CistICAgICAgICAgICAg ICAgICAgICFzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxLZXlUPjo6dHlwZSwganNv bl9wb2ludGVyPjo6dmFsdWUsIGludCA+Ojp0eXBlID0gMCA+CistICAgIGJvb2wgY29udGFpbnMo S2V5VCAmJiBrZXkpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiBpc19vYmplY3QoKSAm JiBtX3ZhbHVlLm9iamVjdC0+ZmluZChzdGQ6OmZvcndhcmQ8S2V5VD4oa2V5KSkgIT0gbV92YWx1 ZS5vYmplY3QtPmVuZCgpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgY2hlY2sgdGhlIGV4 aXN0ZW5jZSBvZiBhbiBlbGVtZW50IGluIGEgSlNPTiBvYmplY3QgZ2l2ZW4gYSBKU09OIHBvaW50 ZXIKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24v Y29udGFpbnMvCistICAgIGJvb2wgY29udGFpbnMoY29uc3QganNvbl9wb2ludGVyJiBwdHIpIGNv bnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiBwdHIuY29udGFpbnModGhpcyk7CistICAgIH0K Ky0KKy0gICAgLy8vIEB9CistCistCistICAgIC8vLy8vLy8vLy8vLy8vLworLSAgICAvLyBpdGVy YXRvcnMgLy8KKy0gICAgLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8vLyBAbmFtZSBpdGVyYXRv cnMKKy0gICAgLy8vIEB7CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJucyBhbiBpdGVyYXRvciB0 byB0aGUgZmlyc3QgZWxlbWVudAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5t ZS9hcGkvYmFzaWNfanNvbi9iZWdpbi8KKy0gICAgaXRlcmF0b3IgYmVnaW4oKSBub2V4Y2VwdAor LSAgICB7CistICAgICAgICBpdGVyYXRvciByZXN1bHQodGhpcyk7CistICAgICAgICByZXN1bHQu c2V0X2JlZ2luKCk7CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIC8v LyBAYnJpZWYgcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgZmlyc3QgZWxlbWVudAorLSAgICAv Ly8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9iZWdpbi8KKy0g ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAg ICByZXR1cm4gY2JlZ2luKCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm5zIGEg Y29uc3QgaXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQKKy0gICAgLy8vIEBzYSBodHRwczov L2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vY2JlZ2luLworLSAgICBjb25zdF9pdGVy YXRvciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAgICBjb25zdF9pdGVy YXRvciByZXN1bHQodGhpcyk7CistICAgICAgICByZXN1bHQuc2V0X2JlZ2luKCk7CistICAgICAg ICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJucyBhbiBp dGVyYXRvciB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CistICAgIC8vLyBAc2EgaHR0cHM6 Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2VuZC8KKy0gICAgaXRlcmF0b3IgZW5k KCkgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOworLSAg ICAgICAgcmVzdWx0LnNldF9lbmQoKTsKKy0gICAgICAgIHJldHVybiByZXN1bHQ7CistICAgIH0K Ky0KKy0gICAgLy8vIEBicmllZiByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIG9uZSBwYXN0IHRoZSBs YXN0IGVsZW1lbnQKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jh c2ljX2pzb24vZW5kLworLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdAor LSAgICB7CistICAgICAgICByZXR1cm4gY2VuZCgpOworLSAgICB9CistCistICAgIC8vLyBAYnJp ZWYgcmV0dXJucyBhbiBpdGVyYXRvciB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CistICAg IC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2NlbmQvCist ICAgIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAg ICBjb25zdF9pdGVyYXRvciByZXN1bHQodGhpcyk7CistICAgICAgICByZXN1bHQuc2V0X2VuZCgp OworLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIHJl dHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIHJldmVyc2UtYmVnaW5uaW5nCistICAgIC8vLyBAc2Eg aHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3JiZWdpbi8KKy0gICAgcmV2 ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4g cmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1 cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWJlZ2lubmluZworLSAgICAvLy8gQHNhIGh0 dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9yYmVnaW4vCistICAgIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAg ICAgcmV0dXJuIGNyYmVnaW4oKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIHJldHVybnMg YW4gaXRlcmF0b3IgdG8gdGhlIHJldmVyc2UtZW5kCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29u Lm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3JlbmQvCistICAgIHJldmVyc2VfaXRlcmF0b3Ig cmVuZCgpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJldHVybiByZXZlcnNlX2l0ZXJhdG9y KGJlZ2luKCkpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJucyBhbiBpdGVyYXRv ciB0byB0aGUgcmV2ZXJzZS1lbmQKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4u bWUvYXBpL2Jhc2ljX2pzb24vcmVuZC8KKy0gICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5k KCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGNyZW5kKCk7CistICAg IH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0 byB0aGUgbGFzdCBlbGVtZW50CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1l L2FwaS9iYXNpY19qc29uL2NyYmVnaW4vCistICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY3Ji ZWdpbigpIGNvbnN0IG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJldHVybiBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yKGNlbmQoKSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm5z IGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdAorLSAgICAv Ly8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9jcmVuZC8KKy0g ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CistICAgIHsK Ky0gICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGNiZWdpbigpKTsKKy0gICAg fQorLQorLSAgcHVibGljOgorLSAgICAvLy8gQGJyaWVmIHdyYXBwZXIgdG8gYWNjZXNzIGl0ZXJh dG9yIG1lbWJlciBmdW5jdGlvbnMgaW4gcmFuZ2UtYmFzZWQgZm9yCistICAgIC8vLyBAc2EgaHR0 cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2l0ZW1zLworLSAgICAvLy8gQGRl cHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIDMuMS4wIGFuZCB3aWxs IGJlIHJlbW92ZWQgaW4KKy0gICAgLy8vICAgICAgICAgICAgIHZlcnNpb24gNC4wLjAgb2YgdGhl IGxpYnJhcnkuIFBsZWFzZSB1c2UgQHJlZiBpdGVtcygpIGluc3RlYWQ7CistICAgIC8vLyAgICAg ICAgICAgICB0aGF0IGlzLCByZXBsYWNlIGBqc29uOjppdGVyYXRvcl93cmFwcGVyKGopYCB3aXRo IGBqLml0ZW1zKClgLgorLSAgICBKU09OX0hFRExFWV9ERVBSRUNBVEVEX0ZPUigzLjEuMCwgaXRl bXMoKSkKKy0gICAgc3RhdGljIGl0ZXJhdGlvbl9wcm94eTxpdGVyYXRvcj4gaXRlcmF0b3Jfd3Jh cHBlcihyZWZlcmVuY2UgcmVmKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gcmVm Lml0ZW1zKCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiB3cmFwcGVyIHRvIGFjY2VzcyBp dGVyYXRvciBtZW1iZXIgZnVuY3Rpb25zIGluIHJhbmdlLWJhc2VkIGZvcgorLSAgICAvLy8gQHNh IGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pdGVtcy8KKy0gICAgLy8v IEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSAzLjEuMCBhbmQg d2lsbCBiZSByZW1vdmVkIGluCistICAgIC8vLyAgICAgICAgIHZlcnNpb24gNC4wLjAgb2YgdGhl IGxpYnJhcnkuIFBsZWFzZSB1c2UgQHJlZiBpdGVtcygpIGluc3RlYWQ7CistICAgIC8vLyAgICAg ICAgIHRoYXQgaXMsIHJlcGxhY2UgYGpzb246Oml0ZXJhdG9yX3dyYXBwZXIoailgIHdpdGggYGou aXRlbXMoKWAuCistICAgIEpTT05fSEVETEVZX0RFUFJFQ0FURURfRk9SKDMuMS4wLCBpdGVtcygp KQorLSAgICBzdGF0aWMgaXRlcmF0aW9uX3Byb3h5PGNvbnN0X2l0ZXJhdG9yPiBpdGVyYXRvcl93 cmFwcGVyKGNvbnN0X3JlZmVyZW5jZSByZWYpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJl dHVybiByZWYuaXRlbXMoKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGhlbHBlciB0byBh Y2Nlc3MgaXRlcmF0b3IgbWVtYmVyIGZ1bmN0aW9ucyBpbiByYW5nZS1iYXNlZCBmb3IKKy0gICAg Ly8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vaXRlbXMvCist ICAgIGl0ZXJhdGlvbl9wcm94eTxpdGVyYXRvcj4gaXRlbXMoKSBub2V4Y2VwdAorLSAgICB7Cist ICAgICAgICByZXR1cm4gaXRlcmF0aW9uX3Byb3h5PGl0ZXJhdG9yPigqdGhpcyk7CistICAgIH0K Ky0KKy0gICAgLy8vIEBicmllZiBoZWxwZXIgdG8gYWNjZXNzIGl0ZXJhdG9yIG1lbWJlciBmdW5j dGlvbnMgaW4gcmFuZ2UtYmFzZWQgZm9yCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2ht YW5uLm1lL2FwaS9iYXNpY19qc29uL2l0ZW1zLworLSAgICBpdGVyYXRpb25fcHJveHk8Y29uc3Rf aXRlcmF0b3I+IGl0ZW1zKCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJu IGl0ZXJhdGlvbl9wcm94eTxjb25zdF9pdGVyYXRvcj4oKnRoaXMpOworLSAgICB9CistCistICAg IC8vLyBAfQorLQorLQorLSAgICAvLy8vLy8vLy8vLy8vLworLSAgICAvLyBjYXBhY2l0eSAvLwor LSAgICAvLy8vLy8vLy8vLy8vLworLQorLSAgICAvLy8gQG5hbWUgY2FwYWNpdHkKKy0gICAgLy8v IEB7CistCistICAgIC8vLyBAYnJpZWYgY2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBl bXB0eS4KKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pz b24vZW1wdHkvCistICAgIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAg ICAgICBzd2l0Y2ggKG1fdHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6Om51bGw6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBudWxsIHZhbHVl cyBhcmUgZW1wdHkKKy0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CistICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAvLyBkZWxlZ2F0ZSBjYWxsIHRvIGFycmF5X3Q6OmVtcHR5KCkKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPmVtcHR5KCk7CistICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorLSAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBvYmplY3RfdDo6ZW1wdHko KQorLSAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmVtcHR5KCk7CistICAg ICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2ln bmVkOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorLSAgICAgICAg ICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlz Y2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAvLyBhbGwgb3RoZXIgdHlwZXMgYXJlIG5vbmVtcHR5CistICAgICAgICAgICAgICAg IHJldHVybiBmYWxzZTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgIH0KKy0KKy0g ICAgLy8vIEBicmllZiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKy0gICAgLy8vIEBz YSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vc2l6ZS8KKy0gICAgc2l6 ZV90eXBlIHNpemUoKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAgICBzd2l0Y2ggKG1f dHlwZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBudWxsIHZhbHVlcyBhcmUgZW1wdHkKKy0g ICAgICAgICAgICAgICAgcmV0dXJuIDA7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAv LyBkZWxlZ2F0ZSBjYWxsIHRvIGFycmF5X3Q6OnNpemUoKQorLSAgICAgICAgICAgICAgICByZXR1 cm4gbV92YWx1ZS5hcnJheS0+c2l6ZSgpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAg IC8vIGRlbGVnYXRlIGNhbGwgdG8gb2JqZWN0X3Q6OnNpemUoKQorLSAgICAgICAgICAgICAgICBy ZXR1cm4gbV92YWx1ZS5vYmplY3QtPnNpemUoKTsKKy0gICAgICAgICAgICB9CistCistICAgICAg ICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpi b29sZWFuOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAgICAgICAgICAgY2Fz ZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5h cnk6CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpkaXNjYXJkZWQ6CistICAgICAgICAgICAg ZGVmYXVsdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIC8vIGFsbCBvdGhlciB0 eXBlcyBoYXZlIHNpemUgMQorLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKKy0gICAgICAgICAg ICB9CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiByZXR1cm5zIHRoZSBt YXhpbXVtIHBvc3NpYmxlIG51bWJlciBvZiBlbGVtZW50cworLSAgICAvLy8gQHNhIGh0dHBzOi8v anNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9tYXhfc2l6ZS8KKy0gICAgc2l6ZV90eXBl IG1heF9zaXplKCkgY29uc3Qgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgc3dpdGNoIChtX3R5 cGUpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKy0gICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlIGNhbGwgdG8gYXJyYXlfdDo6 bWF4X3NpemUoKQorLSAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5hcnJheS0+bWF4X3Np emUoKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmpl Y3Q6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAvLyBkZWxlZ2F0ZSBjYWxsIHRv IG9iamVjdF90OjptYXhfc2l6ZSgpCistICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9i amVjdC0+bWF4X3NpemUoKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2ln bmVkOgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorLSAgICAgICAg ICAgIGNhc2UgdmFsdWVfdDo6YmluYXJ5OgorLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlz Y2FyZGVkOgorLSAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgeworLSAgICAgICAg ICAgICAgICAvLyBhbGwgb3RoZXIgdHlwZXMgaGF2ZSBtYXhfc2l6ZSgpID09IHNpemUoKQorLSAg ICAgICAgICAgICAgICByZXR1cm4gc2l6ZSgpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0K Ky0gICAgfQorLQorLSAgICAvLy8gQH0KKy0KKy0KKy0gICAgLy8vLy8vLy8vLy8vLy8vCistICAg IC8vIG1vZGlmaWVycyAvLworLSAgICAvLy8vLy8vLy8vLy8vLy8KKy0KKy0gICAgLy8vIEBuYW1l IG1vZGlmaWVycworLSAgICAvLy8gQHsKKy0KKy0gICAgLy8vIEBicmllZiBjbGVhcnMgdGhlIGNv bnRlbnRzCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19q c29uL2NsZWFyLworLSAgICB2b2lkIGNsZWFyKCkgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAg c3dpdGNoIChtX3R5cGUpCistICAgICAgICB7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpu dW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIG1fdmFsdWUu bnVtYmVyX2ludGVnZXIgPSAwOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAg ICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA9IDA7 CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAg ICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgIG1fdmFsdWUubnVtYmVyX2Zsb2F0ID0gMC4wOworLSAgICAgICAgICAgICAgICBicmVh azsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFu OgorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbV92YWx1ZS5ib29sZWFuID0gZmFs c2U7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAg ICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIG1fdmFsdWUuc3RyaW5nLT5jbGVhcigpOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0g ICAgICAgICAgICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBtX3ZhbHVlLmJpbmFyeS0+Y2xlYXIoKTsKKy0g ICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNh c2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBtX3Zh bHVlLmFycmF5LT5jbGVhcigpOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAg ICB9CistCistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBtX3ZhbHVlLm9iamVjdC0+Y2xlYXIoKTsKKy0gICAgICAgICAg ICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6bnVsbDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAg ICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0KKy0gICAg fQorLQorLSAgICAvLy8gQGJyaWVmIGFkZCBhbiBvYmplY3QgdG8gYW4gYXJyYXkKKy0gICAgLy8v IEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vcHVzaF9iYWNrLwor LSAgICB2b2lkIHB1c2hfYmFjayhiYXNpY19qc29uJiYgdmFsKQorLSAgICB7CistICAgICAgICAv LyBwdXNoX2JhY2sgb25seSB3b3JrcyBmb3IgbnVsbCBvYmplY3RzIG9yIGFycmF5cworLSAgICAg ICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCEoaXNfbnVsbCgpIHx8IGlzX2FycmF5KCkpKSkK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgz MDgsICJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdpdGggIiArIHN0ZDo6c3RyaW5nKHR5cGVfbmFt ZSgpKSwgKnRoaXMpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIHRyYW5zZm9ybSBudWxs IG9iamVjdCBpbnRvIGFuIGFycmF5CistICAgICAgICBpZiAoaXNfbnVsbCgpKQorLSAgICAgICAg eworLSAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6OmFycmF5OworLSAgICAgICAgICAgIG1f dmFsdWUgPSB2YWx1ZV90OjphcnJheTsKKy0gICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7 CistICAgICAgICB9CistCistICAgICAgICAvLyBhZGQgZWxlbWVudCB0byBhcnJheSAobW92ZSBz ZW1hbnRpY3MpCistICAgICAgICBjb25zdCBhdXRvIG9sZF9jYXBhY2l0eSA9IG1fdmFsdWUuYXJy YXktPmNhcGFjaXR5KCk7CistICAgICAgICBtX3ZhbHVlLmFycmF5LT5wdXNoX2JhY2soc3RkOjpt b3ZlKHZhbCkpOworLSAgICAgICAgc2V0X3BhcmVudChtX3ZhbHVlLmFycmF5LT5iYWNrKCksIG9s ZF9jYXBhY2l0eSk7CistICAgICAgICAvLyBpZiB2YWwgaXMgbW92ZWQgZnJvbSwgYmFzaWNfanNv biBtb3ZlIGNvbnN0cnVjdG9yIG1hcmtzIGl0IG51bGwsIHNvIHdlIGRvIG5vdCBjYWxsIHRoZSBk ZXN0cnVjdG9yCistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhZGQgYW4gb2JqZWN0IHRvIGFu IGFycmF5CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19q c29uL29wZXJhdG9yKz0vCistICAgIHJlZmVyZW5jZSBvcGVyYXRvcis9KGJhc2ljX2pzb24mJiB2 YWwpCistICAgIHsKKy0gICAgICAgIHB1c2hfYmFjayhzdGQ6Om1vdmUodmFsKSk7CistICAgICAg ICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhZGQgYW4gb2JqZWN0 IHRvIGFuIGFycmF5CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9i YXNpY19qc29uL3B1c2hfYmFjay8KKy0gICAgdm9pZCBwdXNoX2JhY2soY29uc3QgYmFzaWNfanNv biYgdmFsKQorLSAgICB7CistICAgICAgICAvLyBwdXNoX2JhY2sgb25seSB3b3JrcyBmb3IgbnVs bCBvYmplY3RzIG9yIGFycmF5cworLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCEo aXNfbnVsbCgpIHx8IGlzX2FycmF5KCkpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09O X1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDgsICJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdp dGggIiArIHN0ZDo6c3RyaW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMpKTsKKy0gICAgICAgIH0KKy0K Ky0gICAgICAgIC8vIHRyYW5zZm9ybSBudWxsIG9iamVjdCBpbnRvIGFuIGFycmF5CistICAgICAg ICBpZiAoaXNfbnVsbCgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVl X3Q6OmFycmF5OworLSAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZV90OjphcnJheTsKKy0gICAg ICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CistICAgICAgICB9CistCistICAgICAgICAvLyBh ZGQgZWxlbWVudCB0byBhcnJheQorLSAgICAgICAgY29uc3QgYXV0byBvbGRfY2FwYWNpdHkgPSBt X3ZhbHVlLmFycmF5LT5jYXBhY2l0eSgpOworLSAgICAgICAgbV92YWx1ZS5hcnJheS0+cHVzaF9i YWNrKHZhbCk7CistICAgICAgICBzZXRfcGFyZW50KG1fdmFsdWUuYXJyYXktPmJhY2soKSwgb2xk X2NhcGFjaXR5KTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGFkZCBhbiBvYmplY3QgdG8g YW4gYXJyYXkKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2lj X2pzb24vb3BlcmF0b3IrPS8KKy0gICAgcmVmZXJlbmNlIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNf anNvbiYgdmFsKQorLSAgICB7CistICAgICAgICBwdXNoX2JhY2sodmFsKTsKKy0gICAgICAgIHJl dHVybiAqdGhpczsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGFkZCBhbiBvYmplY3QgdG8g YW4gb2JqZWN0CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNp Y19qc29uL3B1c2hfYmFjay8KKy0gICAgdm9pZCBwdXNoX2JhY2soY29uc3QgdHlwZW5hbWUgb2Jq ZWN0X3Q6OnZhbHVlX3R5cGUmIHZhbCkKKy0gICAgeworLSAgICAgICAgLy8gcHVzaF9iYWNrIG9u bHkgd29ya3MgZm9yIG51bGwgb2JqZWN0cyBvciBvYmplY3RzCistICAgICAgICBpZiAoSlNPTl9I RURMRVlfVU5MSUtFTFkoIShpc19udWxsKCkgfHwgaXNfb2JqZWN0KCkpKSkKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDgsICJjYW5ub3Qg dXNlIHB1c2hfYmFjaygpIHdpdGggIiArIHN0ZDo6c3RyaW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMp KTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIHRyYW5zZm9ybSBudWxsIG9iamVjdCBpbnRv IGFuIG9iamVjdAorLSAgICAgICAgaWYgKGlzX251bGwoKSkKKy0gICAgICAgIHsKKy0gICAgICAg ICAgICBtX3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7CistICAgICAgICAgICAgbV92YWx1ZSA9IHZh bHVlX3Q6Om9iamVjdDsKKy0gICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CistICAgICAg ICB9CistCistICAgICAgICAvLyBhZGQgZWxlbWVudCB0byBvYmplY3QKKy0gICAgICAgIGF1dG8g cmVzID0gbV92YWx1ZS5vYmplY3QtPmluc2VydCh2YWwpOworLSAgICAgICAgc2V0X3BhcmVudChy ZXMuZmlyc3QtPnNlY29uZCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhZGQgYW4gb2Jq ZWN0IHRvIGFuIG9iamVjdAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYmFzaWNfanNvbi9vcGVyYXRvcis9LworLSAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShjb25z dCB0eXBlbmFtZSBvYmplY3RfdDo6dmFsdWVfdHlwZSYgdmFsKQorLSAgICB7CistICAgICAgICBw dXNoX2JhY2sodmFsKTsKKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAgfQorLQorLSAgICAv Ly8gQGJyaWVmIGFkZCBhbiBvYmplY3QgdG8gYW4gb2JqZWN0CistICAgIC8vLyBAc2EgaHR0cHM6 Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3B1c2hfYmFjay8KKy0gICAgdm9pZCBw dXNoX2JhY2soaW5pdGlhbGl6ZXJfbGlzdF90IGluaXQpCistICAgIHsKKy0gICAgICAgIGlmIChp c19vYmplY3QoKSAmJiBpbml0LnNpemUoKSA9PSAyICYmICgqaW5pdC5iZWdpbigpKS0+aXNfc3Ry aW5nKCkpCistICAgICAgICB7CistICAgICAgICAgICAgYmFzaWNfanNvbiYmIGtleSA9IGluaXQu YmVnaW4oKS0+bW92ZWRfb3JfY29waWVkKCk7CistICAgICAgICAgICAgcHVzaF9iYWNrKHR5cGVu YW1lIG9iamVjdF90Ojp2YWx1ZV90eXBlKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk Ojptb3ZlKGtleS5nZXRfcmVmPHN0cmluZ190Jj4oKSksIChpbml0LmJlZ2luKCkgKyAxKS0+bW92 ZWRfb3JfY29waWVkKCkpKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICBwdXNoX2JhY2soYmFzaWNfanNvbihpbml0KSk7CistICAgICAgICB9Cist ICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhZGQgYW4gb2JqZWN0IHRvIGFuIG9iamVjdAorLSAg ICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRv cis9LworLSAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShpbml0aWFsaXplcl9saXN0X3QgaW5pdCkK Ky0gICAgeworLSAgICAgICAgcHVzaF9iYWNrKGluaXQpOworLSAgICAgICAgcmV0dXJuICp0aGlz OworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQor LSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9lbXBs YWNlX2JhY2svCistICAgIHRlbXBsYXRlPGNsYXNzLi4uIEFyZ3M+CistICAgIHJlZmVyZW5jZSBl bXBsYWNlX2JhY2soQXJncyYmIC4uLiBhcmdzKQorLSAgICB7CistICAgICAgICAvLyBlbXBsYWNl X2JhY2sgb25seSB3b3JrcyBmb3IgbnVsbCBvYmplY3RzIG9yIGFycmF5cworLSAgICAgICAgaWYg KEpTT05fSEVETEVZX1VOTElLRUxZKCEoaXNfbnVsbCgpIHx8IGlzX2FycmF5KCkpKSkKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMTEsICJj YW5ub3QgdXNlIGVtcGxhY2VfYmFjaygpIHdpdGggIiArIHN0ZDo6c3RyaW5nKHR5cGVfbmFtZSgp KSwgKnRoaXMpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIHRyYW5zZm9ybSBudWxsIG9i amVjdCBpbnRvIGFuIGFycmF5CistICAgICAgICBpZiAoaXNfbnVsbCgpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6OmFycmF5OworLSAgICAgICAgICAgIG1fdmFs dWUgPSB2YWx1ZV90OjphcnJheTsKKy0gICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Cist ICAgICAgICB9CistCistICAgICAgICAvLyBhZGQgZWxlbWVudCB0byBhcnJheSAocGVyZmVjdCBm b3J3YXJkaW5nKQorLSAgICAgICAgY29uc3QgYXV0byBvbGRfY2FwYWNpdHkgPSBtX3ZhbHVlLmFy cmF5LT5jYXBhY2l0eSgpOworLSAgICAgICAgbV92YWx1ZS5hcnJheS0+ZW1wbGFjZV9iYWNrKHN0 ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CistICAgICAgICByZXR1cm4gc2V0X3BhcmVudCht X3ZhbHVlLmFycmF5LT5iYWNrKCksIG9sZF9jYXBhY2l0eSk7CistICAgIH0KKy0KKy0gICAgLy8v IEBicmllZiBhZGQgYW4gb2JqZWN0IHRvIGFuIG9iamVjdCBpZiBrZXkgZG9lcyBub3QgZXhpc3QK Ky0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vZW1w bGFjZS8KKy0gICAgdGVtcGxhdGU8Y2xhc3MuLi4gQXJncz4KKy0gICAgc3RkOjpwYWlyPGl0ZXJh dG9yLCBib29sPiBlbXBsYWNlKEFyZ3MmJiAuLi4gYXJncykKKy0gICAgeworLSAgICAgICAgLy8g ZW1wbGFjZSBvbmx5IHdvcmtzIGZvciBudWxsIG9iamVjdHMgb3IgYXJyYXlzCistICAgICAgICBp ZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIShpc19udWxsKCkgfHwgaXNfb2JqZWN0KCkpKSkKKy0g ICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMTEs ICJjYW5ub3QgdXNlIGVtcGxhY2UoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0eXBlX25hbWUoKSks ICp0aGlzKSk7CistICAgICAgICB9CistCistICAgICAgICAvLyB0cmFuc2Zvcm0gbnVsbCBvYmpl Y3QgaW50byBhbiBvYmplY3QKKy0gICAgICAgIGlmIChpc19udWxsKCkpCistICAgICAgICB7Cist ICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6b2JqZWN0OworLSAgICAgICAgICAgIG1fdmFs dWUgPSB2YWx1ZV90OjpvYmplY3Q7CistICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwor LSAgICAgICAgfQorLQorLSAgICAgICAgLy8gYWRkIGVsZW1lbnQgdG8gYXJyYXkgKHBlcmZlY3Qg Zm9yd2FyZGluZykKKy0gICAgICAgIGF1dG8gcmVzID0gbV92YWx1ZS5vYmplY3QtPmVtcGxhY2Uo c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKy0gICAgICAgIHNldF9wYXJlbnQocmVzLmZp cnN0LT5zZWNvbmQpOworLQorLSAgICAgICAgLy8gY3JlYXRlIHJlc3VsdCBpdGVyYXRvciBhbmQg c2V0IGl0ZXJhdG9yIHRvIHRoZSByZXN1bHQgb2YgZW1wbGFjZQorLSAgICAgICAgYXV0byBpdCA9 IGJlZ2luKCk7CistICAgICAgICBpdC5tX2l0Lm9iamVjdF9pdGVyYXRvciA9IHJlcy5maXJzdDsK Ky0KKy0gICAgICAgIC8vIHJldHVybiBwYWlyIG9mIGl0ZXJhdG9yIGFuZCBib29sZWFuCistICAg ICAgICByZXR1cm4ge2l0LCByZXMuc2Vjb25kfTsKKy0gICAgfQorLQorLSAgICAvLy8gSGVscGVy IGZvciBpbnNlcnRpb24gb2YgYW4gaXRlcmF0b3IKKy0gICAgLy8vIEBub3RlOiBUaGlzIHVzZXMg c3RkOjpkaXN0YW5jZSB0byBzdXBwb3J0IEdDQyA0LjgsCistICAgIC8vLyAgICAgICAgc2VlIGh0 dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL3B1bGwvMTI1NworLSAgICB0ZW1wbGF0ZTx0 eXBlbmFtZS4uLiBBcmdzPgorLSAgICBpdGVyYXRvciBpbnNlcnRfaXRlcmF0b3IoY29uc3RfaXRl cmF0b3IgcG9zLCBBcmdzJiYgLi4uIGFyZ3MpCistICAgIHsKKy0gICAgICAgIGl0ZXJhdG9yIHJl c3VsdCh0aGlzKTsKKy0gICAgICAgIEpTT05fQVNTRVJUKG1fdmFsdWUuYXJyYXkgIT0gbnVsbHB0 cik7CistCistICAgICAgICBhdXRvIGluc2VydF9wb3MgPSBzdGQ6OmRpc3RhbmNlKG1fdmFsdWUu YXJyYXktPmJlZ2luKCksIHBvcy5tX2l0LmFycmF5X2l0ZXJhdG9yKTsKKy0gICAgICAgIG1fdmFs dWUuYXJyYXktPmluc2VydChwb3MubV9pdC5hcnJheV9pdGVyYXRvciwgc3RkOjpmb3J3YXJkPEFy Z3M+KGFyZ3MpLi4uKTsKKy0gICAgICAgIHJlc3VsdC5tX2l0LmFycmF5X2l0ZXJhdG9yID0gbV92 YWx1ZS5hcnJheS0+YmVnaW4oKSArIGluc2VydF9wb3M7CistCistICAgICAgICAvLyBUaGlzIGNv dWxkIGhhdmUgYmVlbiB3cml0dGVuIGFzOgorLSAgICAgICAgLy8gcmVzdWx0Lm1faXQuYXJyYXlf aXRlcmF0b3IgPSBtX3ZhbHVlLmFycmF5LT5pbnNlcnQocG9zLm1faXQuYXJyYXlfaXRlcmF0b3Is IGNudCwgdmFsKTsKKy0gICAgICAgIC8vIGJ1dCB0aGUgcmV0dXJuIHZhbHVlIG9mIGluc2VydCBp cyBtaXNzaW5nIGluIEdDQyA0LjgsIHNvIGl0IGlzIHdyaXR0ZW4gdGhpcyB3YXkgaW5zdGVhZC4K Ky0KKy0gICAgICAgIHNldF9wYXJlbnRzKCk7CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAg ICB9CistCistICAgIC8vLyBAYnJpZWYgaW5zZXJ0cyBlbGVtZW50IGludG8gYXJyYXkKKy0gICAg Ly8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vaW5zZXJ0Lwor LSAgICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBjb25zdCBiYXNpY19qc29u JiB2YWwpCistICAgIHsKKy0gICAgICAgIC8vIGluc2VydCBvbmx5IHdvcmtzIGZvciBhcnJheXMK Ky0gICAgICAgIGlmIChKU09OX0hFRExFWV9MSUtFTFkoaXNfYXJyYXkoKSkpCistICAgICAgICB7 CistICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXRlcmF0b3IgcG9zIGZpdHMgdG8gdGhpcyBKU09O IHZhbHVlCistICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKHBvcy5tX29iamVj dCAhPSB0aGlzKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIEpTT05fVEhST1co aW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIwMiwgIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBjdXJy ZW50IHZhbHVlIiwgKnRoaXMpKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgLy8g aW5zZXJ0IHRvIGFycmF5IGFuZCByZXR1cm4gaXRlcmF0b3IKKy0gICAgICAgICAgICByZXR1cm4g aW5zZXJ0X2l0ZXJhdG9yKHBvcywgdmFsKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIEpTT05f VEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwOSwgImNhbm5vdCB1c2UgaW5zZXJ0KCkgd2l0aCAi ICsgc3RkOjpzdHJpbmcodHlwZV9uYW1lKCkpLCAqdGhpcykpOworLSAgICB9CistCistICAgIC8v LyBAYnJpZWYgaW5zZXJ0cyBlbGVtZW50IGludG8gYXJyYXkKKy0gICAgLy8vIEBzYSBodHRwczov L2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vaW5zZXJ0LworLSAgICBpdGVyYXRvciBp bnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBiYXNpY19qc29uJiYgdmFsKQorLSAgICB7CistICAg ICAgICByZXR1cm4gaW5zZXJ0KHBvcywgdmFsKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVm IGluc2VydHMgY29waWVzIG9mIGVsZW1lbnQgaW50byBhcnJheQorLSAgICAvLy8gQHNhIGh0dHBz Oi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pbnNlcnQvCistICAgIGl0ZXJhdG9y IGluc2VydChjb25zdF9pdGVyYXRvciBwb3MsIHNpemVfdHlwZSBjbnQsIGNvbnN0IGJhc2ljX2pz b24mIHZhbCkKKy0gICAgeworLSAgICAgICAgLy8gaW5zZXJ0IG9ubHkgd29ya3MgZm9yIGFycmF5 cworLSAgICAgICAgaWYgKEpTT05fSEVETEVZX0xJS0VMWShpc19hcnJheSgpKSkKKy0gICAgICAg IHsKKy0gICAgICAgICAgICAvLyBjaGVjayBpZiBpdGVyYXRvciBwb3MgZml0cyB0byB0aGlzIEpT T04gdmFsdWUKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkocG9zLm1fb2Jq ZWN0ICE9IHRoaXMpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgSlNPTl9USFJP VyhpbnZhbGlkX2l0ZXJhdG9yOjpjcmVhdGUoMjAyLCAiaXRlcmF0b3IgZG9lcyBub3QgZml0IGN1 cnJlbnQgdmFsdWUiLCAqdGhpcykpOworLSAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAv LyBpbnNlcnQgdG8gYXJyYXkgYW5kIHJldHVybiBpdGVyYXRvcgorLSAgICAgICAgICAgIHJldHVy biBpbnNlcnRfaXRlcmF0b3IocG9zLCBjbnQsIHZhbCk7CistICAgICAgICB9CistCistICAgICAg ICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDksICJjYW5ub3QgdXNlIGluc2VydCgp IHdpdGggIiArIHN0ZDo6c3RyaW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMpKTsKKy0gICAgfQorLQor LSAgICAvLy8gQGJyaWVmIGluc2VydHMgcmFuZ2Ugb2YgZWxlbWVudHMgaW50byBhcnJheQorLSAg ICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pbnNlcnQv CistICAgIGl0ZXJhdG9yIGluc2VydChjb25zdF9pdGVyYXRvciBwb3MsIGNvbnN0X2l0ZXJhdG9y IGZpcnN0LCBjb25zdF9pdGVyYXRvciBsYXN0KQorLSAgICB7CistICAgICAgICAvLyBpbnNlcnQg b25seSB3b3JrcyBmb3IgYXJyYXlzCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFko IWlzX2FycmF5KCkpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIEpTT05fVEhST1codHlwZV9l cnJvcjo6Y3JlYXRlKDMwOSwgImNhbm5vdCB1c2UgaW5zZXJ0KCkgd2l0aCAiICsgc3RkOjpzdHJp bmcodHlwZV9uYW1lKCkpLCAqdGhpcykpOworLSAgICAgICAgfQorLQorLSAgICAgICAgLy8gY2hl Y2sgaWYgaXRlcmF0b3IgcG9zIGZpdHMgdG8gdGhpcyBKU09OIHZhbHVlCistICAgICAgICBpZiAo SlNPTl9IRURMRVlfVU5MSUtFTFkocG9zLm1fb2JqZWN0ICE9IHRoaXMpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIwMiwgIml0 ZXJhdG9yIGRvZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlIiwgKnRoaXMpKTsKKy0gICAgICAgIH0K Ky0KKy0gICAgICAgIC8vIGNoZWNrIGlmIHJhbmdlIGl0ZXJhdG9ycyBiZWxvbmcgdG8gdGhlIHNh bWUgSlNPTiBvYmplY3QKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShmaXJzdC5t X29iamVjdCAhPSBsYXN0Lm1fb2JqZWN0KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09O X1RIUk9XKGludmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMTAsICJpdGVyYXRvcnMgZG8gbm90IGZp dCIsICp0aGlzKSk7CistICAgICAgICB9CistCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5M SUtFTFkoZmlyc3QubV9vYmplY3QgPT0gdGhpcykpCistICAgICAgICB7CistICAgICAgICAgICAg SlNPTl9USFJPVyhpbnZhbGlkX2l0ZXJhdG9yOjpjcmVhdGUoMjExLCAicGFzc2VkIGl0ZXJhdG9y cyBtYXkgbm90IGJlbG9uZyB0byBjb250YWluZXIiLCAqdGhpcykpOworLSAgICAgICAgfQorLQor LSAgICAgICAgLy8gaW5zZXJ0IHRvIGFycmF5IGFuZCByZXR1cm4gaXRlcmF0b3IKKy0gICAgICAg IHJldHVybiBpbnNlcnRfaXRlcmF0b3IocG9zLCBmaXJzdC5tX2l0LmFycmF5X2l0ZXJhdG9yLCBs YXN0Lm1faXQuYXJyYXlfaXRlcmF0b3IpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgaW5z ZXJ0cyBlbGVtZW50cyBmcm9tIGluaXRpYWxpemVyIGxpc3QgaW50byBhcnJheQorLSAgICAvLy8g QHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9pbnNlcnQvCistICAg IGl0ZXJhdG9yIGluc2VydChjb25zdF9pdGVyYXRvciBwb3MsIGluaXRpYWxpemVyX2xpc3RfdCBp bGlzdCkKKy0gICAgeworLSAgICAgICAgLy8gaW5zZXJ0IG9ubHkgd29ya3MgZm9yIGFycmF5cwor LSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKCFpc19hcnJheSgpKSkKKy0gICAgICAg IHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMDksICJjYW5u b3QgdXNlIGluc2VydCgpIHdpdGggIiArIHN0ZDo6c3RyaW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMp KTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIGNoZWNrIGlmIGl0ZXJhdG9yIHBvcyBmaXRz IHRvIHRoaXMgSlNPTiB2YWx1ZQorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKHBv cy5tX29iamVjdCAhPSB0aGlzKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9X KGludmFsaWRfaXRlcmF0b3I6OmNyZWF0ZSgyMDIsICJpdGVyYXRvciBkb2VzIG5vdCBmaXQgY3Vy cmVudCB2YWx1ZSIsICp0aGlzKSk7CistICAgICAgICB9CistCistICAgICAgICAvLyBpbnNlcnQg dG8gYXJyYXkgYW5kIHJldHVybiBpdGVyYXRvcgorLSAgICAgICAgcmV0dXJuIGluc2VydF9pdGVy YXRvcihwb3MsIGlsaXN0LmJlZ2luKCksIGlsaXN0LmVuZCgpKTsKKy0gICAgfQorLQorLSAgICAv Ly8gQGJyaWVmIGluc2VydHMgcmFuZ2Ugb2YgZWxlbWVudHMgaW50byBvYmplY3QKKy0gICAgLy8v IEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vaW5zZXJ0LworLSAg ICB2b2lkIGluc2VydChjb25zdF9pdGVyYXRvciBmaXJzdCwgY29uc3RfaXRlcmF0b3IgbGFzdCkK Ky0gICAgeworLSAgICAgICAgLy8gaW5zZXJ0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKy0gICAg ICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghaXNfb2JqZWN0KCkpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIEpTT05fVEhST1codHlwZV9lcnJvcjo6Y3JlYXRlKDMwOSwgImNhbm5vdCB1 c2UgaW5zZXJ0KCkgd2l0aCAiICsgc3RkOjpzdHJpbmcodHlwZV9uYW1lKCkpLCAqdGhpcykpOwor LSAgICAgICAgfQorLQorLSAgICAgICAgLy8gY2hlY2sgaWYgcmFuZ2UgaXRlcmF0b3JzIGJlbG9u ZyB0byB0aGUgc2FtZSBKU09OIG9iamVjdAorLSAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElL RUxZKGZpcnN0Lm1fb2JqZWN0ICE9IGxhc3QubV9vYmplY3QpKQorLSAgICAgICAgeworLSAgICAg ICAgICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIxMCwgIml0ZXJhdG9y cyBkbyBub3QgZml0IiwgKnRoaXMpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIC8vIHBhc3Nl ZCBpdGVyYXRvcnMgbXVzdCBiZWxvbmcgdG8gb2JqZWN0cworLSAgICAgICAgaWYgKEpTT05fSEVE TEVZX1VOTElLRUxZKCFmaXJzdC5tX29iamVjdC0+aXNfb2JqZWN0KCkpKQorLSAgICAgICAgewor LSAgICAgICAgICAgIEpTT05fVEhST1coaW52YWxpZF9pdGVyYXRvcjo6Y3JlYXRlKDIwMiwgIml0 ZXJhdG9ycyBmaXJzdCBhbmQgbGFzdCBtdXN0IHBvaW50IHRvIG9iamVjdHMiLCAqdGhpcykpOwor LSAgICAgICAgfQorLQorLSAgICAgICAgbV92YWx1ZS5vYmplY3QtPmluc2VydChmaXJzdC5tX2l0 Lm9iamVjdF9pdGVyYXRvciwgbGFzdC5tX2l0Lm9iamVjdF9pdGVyYXRvcik7CistICAgIH0KKy0K Ky0gICAgLy8vIEBicmllZiB1cGRhdGVzIGEgSlNPTiBvYmplY3QgZnJvbSBhbm90aGVyIG9iamVj dCwgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5u bG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi91cGRhdGUvCistICAgIHZvaWQgdXBkYXRlKGNvbnN0 X3JlZmVyZW5jZSBqLCBib29sIG1lcmdlX29iamVjdHMgPSBmYWxzZSkKKy0gICAgeworLSAgICAg ICAgdXBkYXRlKGouYmVnaW4oKSwgai5lbmQoKSwgbWVyZ2Vfb2JqZWN0cyk7CistICAgIH0KKy0K Ky0gICAgLy8vIEBicmllZiB1cGRhdGVzIGEgSlNPTiBvYmplY3QgZnJvbSBhbm90aGVyIG9iamVj dCwgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5u bG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi91cGRhdGUvCistICAgIHZvaWQgdXBkYXRlKGNvbnN0 X2l0ZXJhdG9yIGZpcnN0LCBjb25zdF9pdGVyYXRvciBsYXN0LCBib29sIG1lcmdlX29iamVjdHMg PSBmYWxzZSkKKy0gICAgeworLSAgICAgICAgLy8gaW1wbGljaXRseSBjb252ZXJ0IG51bGwgdmFs dWUgdG8gYW4gZW1wdHkgb2JqZWN0CistICAgICAgICBpZiAoaXNfbnVsbCgpKQorLSAgICAgICAg eworLSAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKKy0gICAgICAgICAgICBt X3ZhbHVlLm9iamVjdCA9IGNyZWF0ZTxvYmplY3RfdD4oKTsKKy0gICAgICAgICAgICBhc3NlcnRf aW52YXJpYW50KCk7CistICAgICAgICB9CistCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5M SUtFTFkoIWlzX29iamVjdCgpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9X KHR5cGVfZXJyb3I6OmNyZWF0ZSgzMTIsICJjYW5ub3QgdXNlIHVwZGF0ZSgpIHdpdGggIiArIHN0 ZDo6c3RyaW5nKHR5cGVfbmFtZSgpKSwgKnRoaXMpKTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAg IC8vIGNoZWNrIGlmIHJhbmdlIGl0ZXJhdG9ycyBiZWxvbmcgdG8gdGhlIHNhbWUgSlNPTiBvYmpl Y3QKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWShmaXJzdC5tX29iamVjdCAhPSBs YXN0Lm1fb2JqZWN0KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKGludmFs aWRfaXRlcmF0b3I6OmNyZWF0ZSgyMTAsICJpdGVyYXRvcnMgZG8gbm90IGZpdCIsICp0aGlzKSk7 CistICAgICAgICB9CistCistICAgICAgICAvLyBwYXNzZWQgaXRlcmF0b3JzIG11c3QgYmVsb25n IHRvIG9iamVjdHMKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9VTkxJS0VMWSghZmlyc3QubV9v YmplY3QtPmlzX29iamVjdCgpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9X KHR5cGVfZXJyb3I6OmNyZWF0ZSgzMTIsICJjYW5ub3QgdXNlIHVwZGF0ZSgpIHdpdGggIiArIHN0 ZDo6c3RyaW5nKGZpcnN0Lm1fb2JqZWN0LT50eXBlX25hbWUoKSksICpmaXJzdC5tX29iamVjdCkp OworLSAgICAgICAgfQorLQorLSAgICAgICAgZm9yIChhdXRvIGl0ID0gZmlyc3Q7IGl0ICE9IGxh c3Q7ICsraXQpCistICAgICAgICB7CistICAgICAgICAgICAgaWYgKG1lcmdlX29iamVjdHMgJiYg aXQudmFsdWUoKS5pc19vYmplY3QoKSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAg IGF1dG8gaXQyID0gbV92YWx1ZS5vYmplY3QtPmZpbmQoaXQua2V5KCkpOworLSAgICAgICAgICAg ICAgICBpZiAoaXQyICE9IG1fdmFsdWUub2JqZWN0LT5lbmQoKSkKKy0gICAgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAgICAgaXQyLT5zZWNvbmQudXBkYXRlKGl0LnZhbHVlKCksIHRy dWUpOworLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CistICAgICAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICB9CistICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QtPm9wZXJhdG9yW10o aXQua2V5KCkpID0gaXQudmFsdWUoKTsKKy0jaWYgSlNPTl9ESUFHTk9TVElDUworLSAgICAgICAg ICAgIG1fdmFsdWUub2JqZWN0LT5vcGVyYXRvcltdKGl0LmtleSgpKS5tX3BhcmVudCA9IHRoaXM7 CistI2VuZGlmCistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBleGNoYW5n ZXMgdGhlIHZhbHVlcworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv YmFzaWNfanNvbi9zd2FwLworLSAgICB2b2lkIHN3YXAocmVmZXJlbmNlIG90aGVyKSBub2V4Y2Vw dCAoCistICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHZhbHVlX3Q+ Ojp2YWx1ZSYmCistICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPHZhbHVl X3Q+Ojp2YWx1ZSYmCistICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl PGpzb25fdmFsdWU+Ojp2YWx1ZSYmCistICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3Np Z25hYmxlPGpzb25fdmFsdWU+Ojp2YWx1ZQorLSAgICApCistICAgIHsKKy0gICAgICAgIHN0ZDo6 c3dhcChtX3R5cGUsIG90aGVyLm1fdHlwZSk7CistICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZSwg b3RoZXIubV92YWx1ZSk7CistCistICAgICAgICBzZXRfcGFyZW50cygpOworLSAgICAgICAgb3Ro ZXIuc2V0X3BhcmVudHMoKTsKKy0gICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKy0gICAgfQor LQorLSAgICAvLy8gQGJyaWVmIGV4Y2hhbmdlcyB0aGUgdmFsdWVzCistICAgIC8vLyBAc2EgaHR0 cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3N3YXAvCistICAgIGZyaWVuZCB2 b2lkIHN3YXAocmVmZXJlbmNlIGxlZnQsIHJlZmVyZW5jZSByaWdodCkgbm9leGNlcHQgKAorLSAg ICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTx2YWx1ZV90Pjo6dmFsdWUm JgorLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2YWx1ZV90Pjo6dmFs dWUmJgorLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxqc29uX3Zh bHVlPjo6dmFsdWUmJgorLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxq c29uX3ZhbHVlPjo6dmFsdWUKKy0gICAgKQorLSAgICB7CistICAgICAgICBsZWZ0LnN3YXAocmln aHQpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMKKy0g ICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vc3dhcC8K Ky0gICAgdm9pZCBzd2FwKGFycmF5X3QmIG90aGVyKSAvLyBOT0xJTlQoYnVncHJvbmUtZXhjZXB0 aW9uLWVzY2FwZSkKKy0gICAgeworLSAgICAgICAgLy8gc3dhcCBvbmx5IHdvcmtzIGZvciBhcnJh eXMKKy0gICAgICAgIGlmIChKU09OX0hFRExFWV9MSUtFTFkoaXNfYXJyYXkoKSkpCistICAgICAg ICB7CistICAgICAgICAgICAgc3RkOjpzd2FwKCoobV92YWx1ZS5hcnJheSksIG90aGVyKTsKKy0g ICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RI Uk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMTAsICJjYW5ub3QgdXNlIHN3YXAoKSB3aXRoICIgKyBz dGQ6OnN0cmluZyh0eXBlX25hbWUoKSksICp0aGlzKSk7CistICAgICAgICB9CistICAgIH0KKy0K Ky0gICAgLy8vIEBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcworLSAgICAvLy8gQHNhIGh0dHBz Oi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9zd2FwLworLSAgICB2b2lkIHN3YXAo b2JqZWN0X3QmIG90aGVyKSAvLyBOT0xJTlQoYnVncHJvbmUtZXhjZXB0aW9uLWVzY2FwZSkKKy0g ICAgeworLSAgICAgICAgLy8gc3dhcCBvbmx5IHdvcmtzIGZvciBvYmplY3RzCistICAgICAgICBp ZiAoSlNPTl9IRURMRVlfTElLRUxZKGlzX29iamVjdCgpKSkKKy0gICAgICAgIHsKKy0gICAgICAg ICAgICBzdGQ6OnN3YXAoKihtX3ZhbHVlLm9iamVjdCksIG90aGVyKTsKKy0gICAgICAgIH0KKy0g ICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJy b3I6OmNyZWF0ZSgzMTAsICJjYW5ub3QgdXNlIHN3YXAoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0 eXBlX25hbWUoKSksICp0aGlzKSk7CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIEBi cmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9o bWFubi5tZS9hcGkvYmFzaWNfanNvbi9zd2FwLworLSAgICB2b2lkIHN3YXAoc3RyaW5nX3QmIG90 aGVyKSAvLyBOT0xJTlQoYnVncHJvbmUtZXhjZXB0aW9uLWVzY2FwZSkKKy0gICAgeworLSAgICAg ICAgLy8gc3dhcCBvbmx5IHdvcmtzIGZvciBzdHJpbmdzCistICAgICAgICBpZiAoSlNPTl9IRURM RVlfTElLRUxZKGlzX3N0cmluZygpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBzdGQ6OnN3 YXAoKihtX3ZhbHVlLnN0cmluZyksIG90aGVyKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgz MTAsICJjYW5ub3QgdXNlIHN3YXAoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0eXBlX25hbWUoKSks ICp0aGlzKSk7CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBleGNoYW5n ZXMgdGhlIHZhbHVlcworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv YmFzaWNfanNvbi9zd2FwLworLSAgICB2b2lkIHN3YXAoYmluYXJ5X3QmIG90aGVyKSAvLyBOT0xJ TlQoYnVncHJvbmUtZXhjZXB0aW9uLWVzY2FwZSkKKy0gICAgeworLSAgICAgICAgLy8gc3dhcCBv bmx5IHdvcmtzIGZvciBzdHJpbmdzCistICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElLRUxZKGlz X2JpbmFyeSgpKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBzdGQ6OnN3YXAoKihtX3ZhbHVl LmJpbmFyeSksIG90aGVyKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsK Ky0gICAgICAgICAgICBKU09OX1RIUk9XKHR5cGVfZXJyb3I6OmNyZWF0ZSgzMTAsICJjYW5ub3Qg dXNlIHN3YXAoKSB3aXRoICIgKyBzdGQ6OnN0cmluZyh0eXBlX25hbWUoKSksICp0aGlzKSk7Cist ICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVl cworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9z d2FwLworLSAgICB2b2lkIHN3YXAodHlwZW5hbWUgYmluYXJ5X3Q6OmNvbnRhaW5lcl90eXBlJiBv dGhlcikgLy8gTk9MSU5UKGJ1Z3Byb25lLWV4Y2VwdGlvbi1lc2NhcGUpCistICAgIHsKKy0gICAg ICAgIC8vIHN3YXAgb25seSB3b3JrcyBmb3Igc3RyaW5ncworLSAgICAgICAgaWYgKEpTT05fSEVE TEVZX0xJS0VMWShpc19iaW5hcnkoKSkpCistICAgICAgICB7CistICAgICAgICAgICAgc3RkOjpz d2FwKCoobV92YWx1ZS5iaW5hcnkpLCBvdGhlcik7CistICAgICAgICB9CistICAgICAgICBlbHNl CistICAgICAgICB7CistICAgICAgICAgICAgSlNPTl9USFJPVyh0eXBlX2Vycm9yOjpjcmVhdGUo MzEwLCAiY2Fubm90IHVzZSBzd2FwKCkgd2l0aCAiICsgc3RkOjpzdHJpbmcodHlwZV9uYW1lKCkp LCAqdGhpcykpOworLSAgICAgICAgfQorLSAgICB9CistCistICAgIC8vLyBAfQorLQorLSAgcHVi bGljOgorLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0g ICAgLy8gbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gb3BlcmF0b3JzIC8vCistICAgIC8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLSAgICAvLy8gQG5hbWUg bGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gb3BlcmF0b3JzCistICAgIC8vLyBAeworLQorLSAg ICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IGVxdWFsCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29u Lm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL29wZXJhdG9yX2VxLworLSAgICBmcmllbmQgYm9v bCBvcGVyYXRvcj09KGNvbnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5v ZXhjZXB0CistICAgIHsKKy0jaWZkZWYgX19HTlVDX18KKy0jcHJhZ21hIEdDQyBkaWFnbm9zdGlj IHB1c2gKKy0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZmxvYXQtZXF1YWwiCist I2VuZGlmCistICAgICAgICBjb25zdCBhdXRvIGxoc190eXBlID0gbGhzLnR5cGUoKTsKKy0gICAg ICAgIGNvbnN0IGF1dG8gcmhzX3R5cGUgPSByaHMudHlwZSgpOworLQorLSAgICAgICAgaWYgKGxo c190eXBlID09IHJoc190eXBlKQorLSAgICAgICAgeworLSAgICAgICAgICAgIHN3aXRjaCAobGhz X3R5cGUpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFy cmF5OgorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5hcnJheSA9PSAq cmhzLm1fdmFsdWUuYXJyYXk7CistCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2Jq ZWN0OgorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5vYmplY3QgPT0g KnJocy5tX3ZhbHVlLm9iamVjdDsKKy0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpu dWxsOgorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CistCistICAgICAgICAgICAg ICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICps aHMubV92YWx1ZS5zdHJpbmcgPT0gKnJocy5tX3ZhbHVlLnN0cmluZzsKKy0KKy0gICAgICAgICAg ICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGxocy5tX3ZhbHVlLmJvb2xlYW4gPT0gcmhzLm1fdmFsdWUuYm9vbGVhbjsKKy0KKy0gICAgICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICAgICAg ICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlciA9PSByaHMubV92YWx1ZS5udW1i ZXJfaW50ZWdlcjsKKy0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5z aWduZWQ6CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX3Vu c2lnbmVkID09IHJocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZDsKKy0KKy0gICAgICAgICAgICAg ICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CistICAgICAgICAgICAgICAgICAgICByZXR1 cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0ID09IHJocy5tX3ZhbHVlLm51bWJlcl9mbG9hdDsK Ky0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5hcnk6CistICAgICAgICAgICAg ICAgICAgICByZXR1cm4gKmxocy5tX3ZhbHVlLmJpbmFyeSA9PSAqcmhzLm1fdmFsdWUuYmluYXJ5 OworLQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAg ICAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0g ICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2 YWx1ZV90OjpudW1iZXJfaW50ZWdlciAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxv YXQpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9m bG9hdF90PihsaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcikgPT0gcmhzLm1fdmFsdWUubnVtYmVy X2Zsb2F0OworLSAgICAgICAgfQorLSAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVf dDo6bnVtYmVyX2Zsb2F0ICYmIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKQor LSAgICAgICAgeworLSAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQg PT0gc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2Vy KTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51 bWJlcl91bnNpZ25lZCAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQpCistICAg ICAgICB7CistICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90Pihs aHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpID09IHJocy5tX3ZhbHVlLm51bWJlcl9mbG9hdDsK Ky0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJl cl9mbG9hdCAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQpCistICAgICAg ICB7CistICAgICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9mbG9hdCA9PSBzdGF0 aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKy0g ICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91 bnNpZ25lZCAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcikKKy0gICAgICAg IHsKKy0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4obGhz Lm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKSA9PSByaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcjsK Ky0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJl cl9pbnRlZ2VyICYmIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKy0gICAg ICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPT0g c3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVk KTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0jaWZkZWYgX19HTlVD X18KKy0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorLSNlbmRpZgorLSAgICB9CistCistICAg IC8vLyBAYnJpZWYgY29tcGFyaXNvbjogZXF1YWwKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24u bmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb3BlcmF0b3JfZXEvCistICAgIHRlbXBsYXRlPHR5 cGVuYW1lIFNjYWxhclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorLSAgICAgICAgICAg ICAgICAgc3RkOjppc19zY2FsYXI8U2NhbGFyVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K Ky0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdF9yZWZlcmVuY2UgbGhzLCBTY2FsYXJU eXBlIHJocykgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGxocyA9PSBiYXNpY19q c29uKHJocyk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBjb21wYXJpc29uOiBlcXVhbAor LSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVy YXRvcl9lcS8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5hbWUgc3Rk OjplbmFibGVfaWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2FsYXJUeXBl Pjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KFNj YWxhclR5cGUgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorLSAgICB7CistICAg ICAgICByZXR1cm4gYmFzaWNfanNvbihsaHMpID09IHJoczsKKy0gICAgfQorLQorLSAgICAvLy8g QGJyaWVmIGNvbXBhcmlzb246IG5vdCBlcXVhbAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5u bG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvcl9uZS8KKy0gICAgZnJpZW5kIGJvb2wg b3BlcmF0b3IhPShjb25zdF9yZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4 Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gIShsaHMgPT0gcmhzKTsKKy0gICAgfQorLQor LSAgICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IG5vdCBlcXVhbAorLSAgICAvLy8gQHNhIGh0dHBz Oi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvcl9uZS8KKy0gICAgdGVt cGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CistICAg ICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2FsYXJUeXBlPjo6dmFsdWUsIGludD46OnR5 cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0X3JlZmVyZW5jZSBsaHMs IFNjYWxhclR5cGUgcmhzKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gbGhzICE9 IGJhc2ljX2pzb24ocmhzKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNvbXBhcmlzb246 IG5vdCBlcXVhbAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFz aWNfanNvbi9vcGVyYXRvcl9uZS8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwg dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxh cjxTY2FsYXJUeXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBv cGVyYXRvciE9KFNjYWxhclR5cGUgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAor LSAgICB7CistICAgICAgICByZXR1cm4gYmFzaWNfanNvbihsaHMpICE9IHJoczsKKy0gICAgfQor LQorLSAgICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IGxlc3MgdGhhbgorLSAgICAvLy8gQHNhIGh0 dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvcl9sdC8KKy0gICAg ZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5j ZSByaHMpIG5vZXhjZXB0CistICAgIHsKKy0gICAgICAgIGNvbnN0IGF1dG8gbGhzX3R5cGUgPSBs aHMudHlwZSgpOworLSAgICAgICAgY29uc3QgYXV0byByaHNfdHlwZSA9IHJocy50eXBlKCk7Cist CistICAgICAgICBpZiAobGhzX3R5cGUgPT0gcmhzX3R5cGUpCistICAgICAgICB7CistICAgICAg ICAgICAgc3dpdGNoIChsaHNfdHlwZSkKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAg IGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgICAgICAgICAvLyBub3RlIHBhcmVu dGhlc2VzIGFyZSBuZWNlc3NhcnksIHNlZQorLSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6 Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzE1MzAKKy0gICAgICAgICAgICAgICAg ICAgIHJldHVybiAoKmxocy5tX3ZhbHVlLmFycmF5KSA8ICgqcmhzLm1fdmFsdWUuYXJyYXkpOwor LQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICAg ICAgICAgIHJldHVybiAoKmxocy5tX3ZhbHVlLm9iamVjdCkgPCAoKnJocy5tX3ZhbHVlLm9iamVj dCk7CistCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKKy0KKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90 OjpzdHJpbmc6CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCpsaHMubV92YWx1ZS5zdHJp bmcpIDwgKCpyaHMubV92YWx1ZS5zdHJpbmcpOworLQorLSAgICAgICAgICAgICAgICBjYXNlIHZh bHVlX3Q6OmJvb2xlYW46CistICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGxocy5tX3ZhbHVl LmJvb2xlYW4pIDwgKHJocy5tX3ZhbHVlLmJvb2xlYW4pOworLQorLSAgICAgICAgICAgICAgICBj YXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu IChsaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcikgPCAocmhzLm1fdmFsdWUubnVtYmVyX2ludGVn ZXIpOworLQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoK Ky0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobGhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVk KSA8IChyaHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpOworLQorLSAgICAgICAgICAgICAgICBj YXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiAo bGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0KSA8IChyaHMubV92YWx1ZS5udW1iZXJfZmxvYXQpOwor LQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICAg ICAgICAgIHJldHVybiAoKmxocy5tX3ZhbHVlLmJpbmFyeSkgPCAoKnJocy5tX3ZhbHVlLmJpbmFy eSk7CistCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlzY2FyZGVkOgorLSAgICAg ICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor LSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09 IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyICYmIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9m bG9hdCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVy X2Zsb2F0X3Q+KGxocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKSA8IHJocy5tX3ZhbHVlLm51bWJl cl9mbG9hdDsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVl X3Q6Om51bWJlcl9mbG9hdCAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcikK Ky0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0 IDwgc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2Vy KTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51 bWJlcl91bnNpZ25lZCAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQpCistICAg ICAgICB7CistICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90Pihs aHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpIDwgcmhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0Owor LSAgICAgICAgfQorLSAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVy X2Zsb2F0ICYmIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKy0gICAgICAg IHsKKy0gICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0IDwgc3RhdGlj X2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7CistICAg ICAgICB9CistICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50 ZWdlciAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQpCistICAgICAgICB7 CistICAgICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDwgc3RhdGlj X2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKy0g ICAgICAgIH0KKy0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91 bnNpZ25lZCAmJiByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcikKKy0gICAgICAg IHsKKy0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4obGhz Lm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKSA8IHJocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyOwor LSAgICAgICAgfQorLQorLSAgICAgICAgLy8gV2Ugb25seSByZWFjaCB0aGlzIGxpbmUgaWYgd2Ug Y2Fubm90IGNvbXBhcmUgdmFsdWVzLiBJbiB0aGF0IGNhc2UsCistICAgICAgICAvLyB3ZSBjb21w YXJlIHR5cGVzLiBOb3RlIHdlIGhhdmUgdG8gY2FsbCB0aGUgb3BlcmF0b3IgZXhwbGljaXRseSwK Ky0gICAgICAgIC8vIGJlY2F1c2UgTVNWQyBoYXMgcHJvYmxlbXMgb3RoZXJ3aXNlLgorLSAgICAg ICAgcmV0dXJuIG9wZXJhdG9yPChsaHNfdHlwZSwgcmhzX3R5cGUpOworLSAgICB9CistCistICAg IC8vLyBAYnJpZWYgY29tcGFyaXNvbjogbGVzcyB0aGFuCistICAgIC8vLyBAc2EgaHR0cHM6Ly9q c29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL29wZXJhdG9yX2x0LworLSAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBTY2FsYXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKy0gICAgICAg ICAgICAgICAgIHN0ZDo6aXNfc2NhbGFyPFNjYWxhclR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9 IDA+CistICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdF9yZWZlcmVuY2UgbGhzLCBTY2Fs YXJUeXBlIHJocykgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGxocyA8IGJhc2lj X2pzb24ocmhzKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IGxlc3Mg dGhhbgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNv bi9vcGVyYXRvcl9sdC8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5h bWUgc3RkOjplbmFibGVfaWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2Fs YXJUeXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRv cjwoU2NhbGFyVHlwZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhjZXB0CistICAgIHsK Ky0gICAgICAgIHJldHVybiBiYXNpY19qc29uKGxocykgPCByaHM7CistICAgIH0KKy0KKy0gICAg Ly8vIEBicmllZiBjb21wYXJpc29uOiBsZXNzIHRoYW4gb3IgZXF1YWwKKy0gICAgLy8vIEBzYSBo dHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb3BlcmF0b3JfbGUvCistICAg IGZyaWVuZCBib29sIG9wZXJhdG9yPD0oY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJl bmNlIHJocykgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuICEocmhzIDwgbGhzKTsK Ky0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IGxlc3MgdGhhbiBvciBlcXVh bAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9v cGVyYXRvcl9sZS8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5hbWUg c3RkOjplbmFibGVfaWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2FsYXJU eXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9 KGNvbnN0X3JlZmVyZW5jZSBsaHMsIFNjYWxhclR5cGUgcmhzKSBub2V4Y2VwdAorLSAgICB7Cist ICAgICAgICByZXR1cm4gbGhzIDw9IGJhc2ljX2pzb24ocmhzKTsKKy0gICAgfQorLQorLSAgICAv Ly8gQGJyaWVmIGNvbXBhcmlzb246IGxlc3MgdGhhbiBvciBlcXVhbAorLSAgICAvLy8gQHNhIGh0 dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvcl9sZS8KKy0gICAg dGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Cist ICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2FsYXJUeXBlPjo6dmFsdWUsIGludD46 OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9KFNjYWxhclR5cGUgbGhzLCBj b25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1cm4gYmFz aWNfanNvbihsaHMpIDw9IHJoczsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNvbXBhcmlz b246IGdyZWF0ZXIgdGhhbgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYmFzaWNfanNvbi9vcGVyYXRvcl9ndC8KKy0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNv bnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhjZXB0CistICAgIHsK Ky0gICAgICAgIHJldHVybiAhKGxocyA8PSByaHMpOworLSAgICB9CistCistICAgIC8vLyBAYnJp ZWYgY29tcGFyaXNvbjogZ3JlYXRlciB0aGFuCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5s b2htYW5uLm1lL2FwaS9iYXNpY19qc29uL29wZXJhdG9yX2d0LworLSAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBTY2FsYXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKy0gICAgICAgICAgICAg ICAgIHN0ZDo6aXNfc2NhbGFyPFNjYWxhclR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Cist ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPihjb25zdF9yZWZlcmVuY2UgbGhzLCBTY2FsYXJUeXBl IHJocykgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGxocyA+IGJhc2ljX2pzb24o cmhzKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhh bgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9v cGVyYXRvcl9ndC8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5hbWUg c3RkOjplbmFibGVfaWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2FsYXJU eXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj4o U2NhbGFyVHlwZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhjZXB0CistICAgIHsKKy0g ICAgICAgIHJldHVybiBiYXNpY19qc29uKGxocykgPiByaHM7CistICAgIH0KKy0KKy0gICAgLy8v IEBicmllZiBjb21wYXJpc29uOiBncmVhdGVyIHRoYW4gb3IgZXF1YWwKKy0gICAgLy8vIEBzYSBo dHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb3BlcmF0b3JfZ2UvCistICAg IGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJl bmNlIHJocykgbm9leGNlcHQKKy0gICAgeworLSAgICAgICAgcmV0dXJuICEobGhzIDwgcmhzKTsK Ky0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbiBvciBl cXVhbAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNv bi9vcGVyYXRvcl9nZS8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5h bWUgc3RkOjplbmFibGVfaWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2Fs YXJUeXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRv cj49KGNvbnN0X3JlZmVyZW5jZSBsaHMsIFNjYWxhclR5cGUgcmhzKSBub2V4Y2VwdAorLSAgICB7 CistICAgICAgICByZXR1cm4gbGhzID49IGJhc2ljX2pzb24ocmhzKTsKKy0gICAgfQorLQorLSAg ICAvLy8gQGJyaWVmIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorLSAgICAvLy8g QHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvcl9nZS8K Ky0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf aWY8CistICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NjYWxhcjxTY2FsYXJUeXBlPjo6dmFsdWUs IGludD46OnR5cGUgPSAwPgorLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj49KFNjYWxhclR5cGUg bGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorLSAgICB7CistICAgICAgICByZXR1 cm4gYmFzaWNfanNvbihsaHMpID49IHJoczsKKy0gICAgfQorLQorLSAgICAvLy8gQH0KKy0KKy0g ICAgLy8vLy8vLy8vLy8vLy8vLy8vLworLSAgICAvLyBzZXJpYWxpemF0aW9uIC8vCistICAgIC8v Ly8vLy8vLy8vLy8vLy8vLy8KKy0KKy0gICAgLy8vIEBuYW1lIHNlcmlhbGl6YXRpb24KKy0gICAg Ly8vIEB7CistI2lmbmRlZiBKU09OX05PX0lPCistICAgIC8vLyBAYnJpZWYgc2VyaWFsaXplIHRv IHN0cmVhbQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNf anNvbi9vcGVyYXRvcl9sdGx0LworLSAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8 KHN0ZDo6b3N0cmVhbSYgbywgY29uc3QgYmFzaWNfanNvbiYgaikKKy0gICAgeworLSAgICAgICAg Ly8gcmVhZCB3aWR0aCBtZW1iZXIgYW5kIHVzZSBpdCBhcyBpbmRlbnRhdGlvbiBwYXJhbWV0ZXIg aWYgbm9uemVybworLSAgICAgICAgY29uc3QgYm9vbCBwcmV0dHlfcHJpbnQgPSBvLndpZHRoKCkg PiAwOworLSAgICAgICAgY29uc3QgYXV0byBpbmRlbnRhdGlvbiA9IHByZXR0eV9wcmludCA/IG8u d2lkdGgoKSA6IDA7CistCistICAgICAgICAvLyByZXNldCB3aWR0aCB0byAwIGZvciBzdWJzZXF1 ZW50IGNhbGxzIHRvIHRoaXMgc3RyZWFtCistICAgICAgICBvLndpZHRoKDApOworLQorLSAgICAg ICAgLy8gZG8gdGhlIGFjdHVhbCBzZXJpYWxpemF0aW9uCistICAgICAgICBzZXJpYWxpemVyIHMo ZGV0YWlsOjpvdXRwdXRfYWRhcHRlcjxjaGFyPihvKSwgby5maWxsKCkpOworLSAgICAgICAgcy5k dW1wKGosIHByZXR0eV9wcmludCwgZmFsc2UsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5k ZW50YXRpb24pKTsKKy0gICAgICAgIHJldHVybiBvOworLSAgICB9CistCistICAgIC8vLyBAYnJp ZWYgc2VyaWFsaXplIHRvIHN0cmVhbQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFu bi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvcl9sdGx0LworLSAgICAvLy8gQGRlcHJlY2F0ZWQg VGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIDMuMC4wIGFuZCB3aWxsIGJlIHJlbW92 ZWQgaW4KKy0gICAgLy8vICAgICAgICAgICAgIHZlcnNpb24gNC4wLjAgb2YgdGhlIGxpYnJhcnku IFBsZWFzZSB1c2UKKy0gICAgLy8vICAgICAgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt JiwgY29uc3QgYmFzaWNfanNvbiYpIGluc3RlYWQ7IHRoYXQgaXMsCistICAgIC8vLyAgICAgICAg ICAgICByZXBsYWNlIGNhbGxzIGxpa2UgYGogPj4gbztgIHdpdGggYG8gPDwgajtgLgorLSAgICBK U09OX0hFRExFWV9ERVBSRUNBVEVEX0ZPUigzLjAuMCwgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0m LCBjb25zdCBiYXNpY19qc29uJikpCistICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9y Pj4oY29uc3QgYmFzaWNfanNvbiYgaiwgc3RkOjpvc3RyZWFtJiBvKQorLSAgICB7CistICAgICAg ICByZXR1cm4gbyA8PCBqOworLSAgICB9CistI2VuZGlmICAvLyBKU09OX05PX0lPCistICAgIC8v LyBAfQorLQorLQorLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0gICAgLy8gZGVzZXJpYWxp emF0aW9uIC8vCistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLSAgICAvLy8gQG5hbWUg ZGVzZXJpYWxpemF0aW9uCistICAgIC8vLyBAeworLQorLSAgICAvLy8gQGJyaWVmIGRlc2VyaWFs aXplIGZyb20gYSBjb21wYXRpYmxlIGlucHV0CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5s b2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3BhcnNlLworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ bnB1dFR5cGU+CistICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVAorLSAgICBzdGF0 aWMgYmFzaWNfanNvbiBwYXJzZShJbnB1dFR5cGUmJiBpLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfZXhjZXB0aW9ucyA9IHRydWUsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgaWdub3JlX2NvbW1lbnRzID0g ZmFsc2UpCistICAgIHsKKy0gICAgICAgIGJhc2ljX2pzb24gcmVzdWx0OworLSAgICAgICAgcGFy c2VyKGRldGFpbDo6aW5wdXRfYWRhcHRlcihzdGQ6OmZvcndhcmQ8SW5wdXRUeXBlPihpKSksIGNi LCBhbGxvd19leGNlcHRpb25zLCBpZ25vcmVfY29tbWVudHMpLnBhcnNlKHRydWUsIHJlc3VsdCk7 CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgZGVz ZXJpYWxpemUgZnJvbSBhIHBhaXIgb2YgY2hhcmFjdGVyIGl0ZXJhdG9ycworLSAgICAvLy8gQHNh IGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9wYXJzZS8KKy0gICAgdGVt cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorLSAgICBKU09OX0hFRExFWV9XQVJOX1VOVVNF RF9SRVNVTFQKKy0gICAgc3RhdGljIGJhc2ljX2pzb24gcGFyc2UoSXRlcmF0b3JUeXBlIGZpcnN0 LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvclR5cGUgbGFzdCwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBudWxs cHRyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFsbG93X2V4Y2Vw dGlvbnMgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGln bm9yZV9jb21tZW50cyA9IGZhbHNlKQorLSAgICB7CistICAgICAgICBiYXNpY19qc29uIHJlc3Vs dDsKKy0gICAgICAgIHBhcnNlcihkZXRhaWw6OmlucHV0X2FkYXB0ZXIoc3RkOjptb3ZlKGZpcnN0 KSwgc3RkOjptb3ZlKGxhc3QpKSwgY2IsIGFsbG93X2V4Y2VwdGlvbnMsIGlnbm9yZV9jb21tZW50 cykucGFyc2UodHJ1ZSwgcmVzdWx0KTsKKy0gICAgICAgIHJldHVybiByZXN1bHQ7CistICAgIH0K Ky0KKy0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxUCistICAgIEpTT05fSEVETEVZ X0RFUFJFQ0FURURfRk9SKDMuOC4wLCBwYXJzZShwdHIsIHB0ciArIGxlbikpCistICAgIHN0YXRp YyBiYXNpY19qc29uIHBhcnNlKGRldGFpbDo6c3Bhbl9pbnB1dF9hZGFwdGVyJiYgaSwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBudWxs cHRyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFsbG93X2V4Y2Vw dGlvbnMgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGln bm9yZV9jb21tZW50cyA9IGZhbHNlKQorLSAgICB7CistICAgICAgICBiYXNpY19qc29uIHJlc3Vs dDsKKy0gICAgICAgIHBhcnNlcihpLmdldCgpLCBjYiwgYWxsb3dfZXhjZXB0aW9ucywgaWdub3Jl X2NvbW1lbnRzKS5wYXJzZSh0cnVlLCByZXN1bHQpOworLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK Ky0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNoZWNrIGlmIHRoZSBpbnB1dCBpcyB2YWxpZCBK U09OCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29u L2FjY2VwdC8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlPgorLSAgICBzdGF0aWMg Ym9vbCBhY2NlcHQoSW5wdXRUeXBlJiYgaSwKKy0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGJvb2wgaWdub3JlX2NvbW1lbnRzID0gZmFsc2UpCistICAgIHsKKy0gICAgICAgIHJldHVybiBw YXJzZXIoZGV0YWlsOjppbnB1dF9hZGFwdGVyKHN0ZDo6Zm9yd2FyZDxJbnB1dFR5cGU+KGkpKSwg bnVsbHB0ciwgZmFsc2UsIGlnbm9yZV9jb21tZW50cykuYWNjZXB0KHRydWUpOworLSAgICB9Cist CistICAgIC8vLyBAYnJpZWYgY2hlY2sgaWYgdGhlIGlucHV0IGlzIHZhbGlkIEpTT04KKy0gICAg Ly8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vYWNjZXB0Lwor LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CistICAgIHN0YXRpYyBib29sIGFj Y2VwdChJdGVyYXRvclR5cGUgZmlyc3QsIEl0ZXJhdG9yVHlwZSBsYXN0LAorLSAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgYm9vbCBpZ25vcmVfY29tbWVudHMgPSBmYWxzZSkKKy0gICAgewor LSAgICAgICAgcmV0dXJuIHBhcnNlcihkZXRhaWw6OmlucHV0X2FkYXB0ZXIoc3RkOjptb3ZlKGZp cnN0KSwgc3RkOjptb3ZlKGxhc3QpKSwgbnVsbHB0ciwgZmFsc2UsIGlnbm9yZV9jb21tZW50cyku YWNjZXB0KHRydWUpOworLSAgICB9CistCistICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JF U1VMVAorLSAgICBKU09OX0hFRExFWV9ERVBSRUNBVEVEX0ZPUigzLjguMCwgYWNjZXB0KHB0ciwg cHRyICsgbGVuKSkKKy0gICAgc3RhdGljIGJvb2wgYWNjZXB0KGRldGFpbDo6c3Bhbl9pbnB1dF9h ZGFwdGVyJiYgaSwKKy0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgaWdub3JlX2Nv bW1lbnRzID0gZmFsc2UpCistICAgIHsKKy0gICAgICAgIHJldHVybiBwYXJzZXIoaS5nZXQoKSwg bnVsbHB0ciwgZmFsc2UsIGlnbm9yZV9jb21tZW50cykuYWNjZXB0KHRydWUpOworLSAgICB9Cist CistICAgIC8vLyBAYnJpZWYgZ2VuZXJhdGUgU0FYIGV2ZW50cworLSAgICAvLy8gQHNhIGh0dHBz Oi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9zYXhfcGFyc2UvCistICAgIHRlbXBs YXRlIDx0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIFNBWD4KKy0gICAgSlNPTl9IRURMRVlf Tk9OX05VTEwoMikKKy0gICAgc3RhdGljIGJvb2wgc2F4X3BhcnNlKElucHV0VHlwZSYmIGksIFNB WCogc2F4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZm9ybWF0X3QgZm9ybWF0 ID0gaW5wdXRfZm9ybWF0X3Q6Ompzb24sCistICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBib29sIHN0cmljdCA9IHRydWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBi b29sIGlnbm9yZV9jb21tZW50cyA9IGZhbHNlKQorLSAgICB7CistICAgICAgICBhdXRvIGlhID0g ZGV0YWlsOjppbnB1dF9hZGFwdGVyKHN0ZDo6Zm9yd2FyZDxJbnB1dFR5cGU+KGkpKTsKKy0gICAg ICAgIHJldHVybiBmb3JtYXQgPT0gaW5wdXRfZm9ybWF0X3Q6Ompzb24KKy0gICAgICAgICAgICAg ICA/IHBhcnNlcihzdGQ6Om1vdmUoaWEpLCBudWxscHRyLCB0cnVlLCBpZ25vcmVfY29tbWVudHMp LnNheF9wYXJzZShzYXgsIHN0cmljdCkKKy0gICAgICAgICAgICAgICA6IGRldGFpbDo6YmluYXJ5 X3JlYWRlcjxiYXNpY19qc29uLCBkZWNsdHlwZShpYSksIFNBWD4oc3RkOjptb3ZlKGlhKSkuc2F4 X3BhcnNlKGZvcm1hdCwgc2F4LCBzdHJpY3QpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYg Z2VuZXJhdGUgU0FYIGV2ZW50cworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5t ZS9hcGkvYmFzaWNfanNvbi9zYXhfcGFyc2UvCistICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9y VHlwZSwgY2xhc3MgU0FYPgorLSAgICBKU09OX0hFRExFWV9OT05fTlVMTCgzKQorLSAgICBzdGF0 aWMgYm9vbCBzYXhfcGFyc2UoSXRlcmF0b3JUeXBlIGZpcnN0LCBJdGVyYXRvclR5cGUgbGFzdCwg U0FYKiBzYXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9mb3JtYXRfdCBmb3Jt YXQgPSBpbnB1dF9mb3JtYXRfdDo6anNvbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGJvb2wgc3RyaWN0ID0gdHJ1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGJvb2wgaWdub3JlX2NvbW1lbnRzID0gZmFsc2UpCistICAgIHsKKy0gICAgICAgIGF1dG8gaWEg PSBkZXRhaWw6OmlucHV0X2FkYXB0ZXIoc3RkOjptb3ZlKGZpcnN0KSwgc3RkOjptb3ZlKGxhc3Qp KTsKKy0gICAgICAgIHJldHVybiBmb3JtYXQgPT0gaW5wdXRfZm9ybWF0X3Q6Ompzb24KKy0gICAg ICAgICAgICAgICA/IHBhcnNlcihzdGQ6Om1vdmUoaWEpLCBudWxscHRyLCB0cnVlLCBpZ25vcmVf Y29tbWVudHMpLnNheF9wYXJzZShzYXgsIHN0cmljdCkKKy0gICAgICAgICAgICAgICA6IGRldGFp bDo6YmluYXJ5X3JlYWRlcjxiYXNpY19qc29uLCBkZWNsdHlwZShpYSksIFNBWD4oc3RkOjptb3Zl KGlhKSkuc2F4X3BhcnNlKGZvcm1hdCwgc2F4LCBzdHJpY3QpOworLSAgICB9CistCistICAgIC8v LyBAYnJpZWYgZ2VuZXJhdGUgU0FYIGV2ZW50cworLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5u bG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9zYXhfcGFyc2UvCistICAgIC8vLyBAZGVwcmVjYXRl ZCBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgMy44LjAgYW5kIHdpbGwgYmUgcmVt b3ZlZCBpbgorLSAgICAvLy8gICAgICAgICAgICAgdmVyc2lvbiA0LjAuMCBvZiB0aGUgbGlicmFy eS4gUGxlYXNlIHVzZQorLSAgICAvLy8gICAgICAgICAgICAgc2F4X3BhcnNlKHB0ciwgcHRyICsg bGVuKSBpbnN0ZWFkLgorLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU0FYPgorLSAgICBKU09OX0hF RExFWV9ERVBSRUNBVEVEX0ZPUigzLjguMCwgc2F4X3BhcnNlKHB0ciwgcHRyICsgbGVuLCAuLi4p KQorLSAgICBKU09OX0hFRExFWV9OT05fTlVMTCgyKQorLSAgICBzdGF0aWMgYm9vbCBzYXhfcGFy c2UoZGV0YWlsOjpzcGFuX2lucHV0X2FkYXB0ZXImJiBpLCBTQVgqIHNheCwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X2Zvcm1hdF90IGZvcm1hdCA9IGlucHV0X2Zvcm1hdF90Ojpq c29uLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBzdHJpY3QgPSB0cnVl LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBpZ25vcmVfY29tbWVudHMg PSBmYWxzZSkKKy0gICAgeworLSAgICAgICAgYXV0byBpYSA9IGkuZ2V0KCk7CistICAgICAgICBy ZXR1cm4gZm9ybWF0ID09IGlucHV0X2Zvcm1hdF90Ojpqc29uCistICAgICAgICAgICAgICAgLy8g Tk9MSU5UTkVYVExJTkUoaGljcHAtbW92ZS1jb25zdC1hcmcscGVyZm9ybWFuY2UtbW92ZS1jb25z dC1hcmcpCistICAgICAgICAgICAgICAgPyBwYXJzZXIoc3RkOjptb3ZlKGlhKSwgbnVsbHB0ciwg dHJ1ZSwgaWdub3JlX2NvbW1lbnRzKS5zYXhfcGFyc2Uoc2F4LCBzdHJpY3QpCistICAgICAgICAg ICAgICAgLy8gTk9MSU5UTkVYVExJTkUoaGljcHAtbW92ZS1jb25zdC1hcmcscGVyZm9ybWFuY2Ut bW92ZS1jb25zdC1hcmcpCistICAgICAgICAgICAgICAgOiBkZXRhaWw6OmJpbmFyeV9yZWFkZXI8 YmFzaWNfanNvbiwgZGVjbHR5cGUoaWEpLCBTQVg+KHN0ZDo6bW92ZShpYSkpLnNheF9wYXJzZShm b3JtYXQsIHNheCwgc3RyaWN0KTsKKy0gICAgfQorLSNpZm5kZWYgSlNPTl9OT19JTworLSAgICAv Ly8gQGJyaWVmIGRlc2VyaWFsaXplIGZyb20gc3RyZWFtCistICAgIC8vLyBAc2EgaHR0cHM6Ly9q c29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL29wZXJhdG9yX2d0Z3QvCistICAgIC8vLyBA ZGVwcmVjYXRlZCBUaGlzIHN0cmVhbSBvcGVyYXRvciBpcyBkZXByZWNhdGVkIHNpbmNlIDMuMC4w IGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KKy0gICAgLy8vICAgICAgICAgICAgIHZlcnNpb24gNC4w LjAgb2YgdGhlIGxpYnJhcnkuIFBsZWFzZSB1c2UKKy0gICAgLy8vICAgICAgICAgICAgIG9wZXJh dG9yPj4oc3RkOjppc3RyZWFtJiwgYmFzaWNfanNvbiYpIGluc3RlYWQ7IHRoYXQgaXMsCistICAg IC8vLyAgICAgICAgICAgICByZXBsYWNlIGNhbGxzIGxpa2UgYGogPDwgaTtgIHdpdGggYGkgPj4g ajtgLgorLSAgICBKU09OX0hFRExFWV9ERVBSRUNBVEVEX0ZPUigzLjAuMCwgb3BlcmF0b3I+Pihz dGQ6OmlzdHJlYW0mLCBiYXNpY19qc29uJikpCistICAgIGZyaWVuZCBzdGQ6OmlzdHJlYW0mIG9w ZXJhdG9yPDwoYmFzaWNfanNvbiYgaiwgc3RkOjppc3RyZWFtJiBpKQorLSAgICB7CistICAgICAg ICByZXR1cm4gb3BlcmF0b3I+PihpLCBqKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGRl c2VyaWFsaXplIGZyb20gc3RyZWFtCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5u Lm1lL2FwaS9iYXNpY19qc29uL29wZXJhdG9yX2d0Z3QvCistICAgIGZyaWVuZCBzdGQ6OmlzdHJl YW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtJiBpLCBiYXNpY19qc29uJiBqKQorLSAgICB7Cist ICAgICAgICBwYXJzZXIoZGV0YWlsOjppbnB1dF9hZGFwdGVyKGkpKS5wYXJzZShmYWxzZSwgaik7 CistICAgICAgICByZXR1cm4gaTsKKy0gICAgfQorLSNlbmRpZiAgLy8gSlNPTl9OT19JTworLSAg ICAvLy8gQH0KKy0KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8vIGNv bnZlbmllbmNlIGZ1bmN0aW9ucyAvLworLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K Ky0KKy0gICAgLy8vIEBicmllZiByZXR1cm4gdGhlIHR5cGUgYXMgc3RyaW5nCistICAgIC8vLyBA c2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3R5cGVfbmFtZS8KKy0g ICAgSlNPTl9IRURMRVlfUkVUVVJOU19OT05fTlVMTAorLSAgICBjb25zdCBjaGFyKiB0eXBlX25h bWUoKSBjb25zdCBub2V4Y2VwdAorLSAgICB7CistICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKy0g ICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CistICAgICAgICAgICAg ICAgIHJldHVybiAibnVsbCI7CistICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Cist ICAgICAgICAgICAgICAgIHJldHVybiAib2JqZWN0IjsKKy0gICAgICAgICAgICBjYXNlIHZhbHVl X3Q6OmFycmF5OgorLSAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5IjsKKy0gICAgICAgICAg ICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKy0gICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmci OworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKy0gICAgICAgICAgICAgICAg cmV0dXJuICJib29sZWFuIjsKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0g ICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkiOworLSAgICAgICAgICAgIGNhc2UgdmFsdWVf dDo6ZGlzY2FyZGVkOgorLSAgICAgICAgICAgICAgICByZXR1cm4gImRpc2NhcmRlZCI7CistICAg ICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51 bWJlcl9mbG9hdDoKKy0gICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICByZXR1 cm4gIm51bWJlciI7CistICAgICAgICB9CistICAgIH0KKy0KKy0KKy0gIEpTT05fUFJJVkFURV9V TkxFU1NfVEVTVEVEOgorLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8vIG1lbWJl ciB2YXJpYWJsZXMgLy8KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLSAgICAvLy8g dGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAorLSAgICB2YWx1ZV90IG1fdHlwZSA9IHZh bHVlX3Q6Om51bGw7CistCistICAgIC8vLyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVu dAorLSAgICBqc29uX3ZhbHVlIG1fdmFsdWUgPSB7fTsKKy0KKy0jaWYgSlNPTl9ESUFHTk9TVElD UworLSAgICAvLy8gYSBwb2ludGVyIHRvIGEgcGFyZW50IHZhbHVlIChmb3IgZGVidWdnaW5nIHB1 cnBvc2VzKQorLSAgICBiYXNpY19qc29uKiBtX3BhcmVudCA9IG51bGxwdHI7CistI2VuZGlmCist CistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLSAgICAv LyBiaW5hcnkgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gLy8KKy0gICAgLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8vLyBAbmFtZSBiaW5h cnkgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gc3VwcG9ydAorLSAgICAvLy8gQHsKKy0K Ky0gIHB1YmxpYzoKKy0gICAgLy8vIEBicmllZiBjcmVhdGUgYSBDQk9SIHNlcmlhbGl6YXRpb24g b2YgYSBnaXZlbiBKU09OIHZhbHVlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5u Lm1lL2FwaS9iYXNpY19qc29uL3RvX2Nib3IvCistICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6 OnVpbnQ4X3Q+IHRvX2Nib3IoY29uc3QgYmFzaWNfanNvbiYgaikKKy0gICAgeworLSAgICAgICAg c3RkOjp2ZWN0b3I8c3RkOjp1aW50OF90PiByZXN1bHQ7CistICAgICAgICB0b19jYm9yKGosIHJl c3VsdCk7CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIC8vLyBAYnJp ZWYgY3JlYXRlIGEgQ0JPUiBzZXJpYWxpemF0aW9uIG9mIGEgZ2l2ZW4gSlNPTiB2YWx1ZQorLSAg ICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi90b19jYm9y LworLSAgICBzdGF0aWMgdm9pZCB0b19jYm9yKGNvbnN0IGJhc2ljX2pzb24mIGosIGRldGFpbDo6 b3V0cHV0X2FkYXB0ZXI8c3RkOjp1aW50OF90PiBvKQorLSAgICB7CistICAgICAgICBiaW5hcnlf d3JpdGVyPHN0ZDo6dWludDhfdD4obykud3JpdGVfY2JvcihqKTsKKy0gICAgfQorLQorLSAgICAv Ly8gQGJyaWVmIGNyZWF0ZSBhIENCT1Igc2VyaWFsaXphdGlvbiBvZiBhIGdpdmVuIEpTT04gdmFs dWUKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24v dG9fY2Jvci8KKy0gICAgc3RhdGljIHZvaWQgdG9fY2Jvcihjb25zdCBiYXNpY19qc29uJiBqLCBk ZXRhaWw6Om91dHB1dF9hZGFwdGVyPGNoYXI+IG8pCistICAgIHsKKy0gICAgICAgIGJpbmFyeV93 cml0ZXI8Y2hhcj4obykud3JpdGVfY2JvcihqKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVm IGNyZWF0ZSBhIE1lc3NhZ2VQYWNrIHNlcmlhbGl6YXRpb24gb2YgYSBnaXZlbiBKU09OIHZhbHVl CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3Rv X21zZ3BhY2svCistICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnVpbnQ4X3Q+IHRvX21zZ3Bh Y2soY29uc3QgYmFzaWNfanNvbiYgaikKKy0gICAgeworLSAgICAgICAgc3RkOjp2ZWN0b3I8c3Rk Ojp1aW50OF90PiByZXN1bHQ7CistICAgICAgICB0b19tc2dwYWNrKGosIHJlc3VsdCk7CistICAg ICAgICByZXR1cm4gcmVzdWx0OworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgY3JlYXRlIGEg TWVzc2FnZVBhY2sgc2VyaWFsaXphdGlvbiBvZiBhIGdpdmVuIEpTT04gdmFsdWUKKy0gICAgLy8v IEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vdG9fbXNncGFjay8K Ky0gICAgc3RhdGljIHZvaWQgdG9fbXNncGFjayhjb25zdCBiYXNpY19qc29uJiBqLCBkZXRhaWw6 Om91dHB1dF9hZGFwdGVyPHN0ZDo6dWludDhfdD4gbykKKy0gICAgeworLSAgICAgICAgYmluYXJ5 X3dyaXRlcjxzdGQ6OnVpbnQ4X3Q+KG8pLndyaXRlX21zZ3BhY2soaik7CistICAgIH0KKy0KKy0g ICAgLy8vIEBicmllZiBjcmVhdGUgYSBNZXNzYWdlUGFjayBzZXJpYWxpemF0aW9uIG9mIGEgZ2l2 ZW4gSlNPTiB2YWx1ZQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv YmFzaWNfanNvbi90b19tc2dwYWNrLworLSAgICBzdGF0aWMgdm9pZCB0b19tc2dwYWNrKGNvbnN0 IGJhc2ljX2pzb24mIGosIGRldGFpbDo6b3V0cHV0X2FkYXB0ZXI8Y2hhcj4gbykKKy0gICAgewor LSAgICAgICAgYmluYXJ5X3dyaXRlcjxjaGFyPihvKS53cml0ZV9tc2dwYWNrKGopOworLSAgICB9 CistCistICAgIC8vLyBAYnJpZWYgY3JlYXRlIGEgVUJKU09OIHNlcmlhbGl6YXRpb24gb2YgYSBn aXZlbiBKU09OIHZhbHVlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2Fw aS9iYXNpY19qc29uL3RvX3VianNvbi8KKy0gICAgc3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6dWlu dDhfdD4gdG9fdWJqc29uKGNvbnN0IGJhc2ljX2pzb24mIGosCistICAgICAgICAgICAgY29uc3Qg Ym9vbCB1c2Vfc2l6ZSA9IGZhbHNlLAorLSAgICAgICAgICAgIGNvbnN0IGJvb2wgdXNlX3R5cGUg PSBmYWxzZSkKKy0gICAgeworLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1aW50OF90PiByZXN1 bHQ7CistICAgICAgICB0b191Ympzb24oaiwgcmVzdWx0LCB1c2Vfc2l6ZSwgdXNlX3R5cGUpOwor LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNyZWF0 ZSBhIFVCSlNPTiBzZXJpYWxpemF0aW9uIG9mIGEgZ2l2ZW4gSlNPTiB2YWx1ZQorLSAgICAvLy8g QHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi90b191Ympzb24vCist ICAgIHN0YXRpYyB2b2lkIHRvX3VianNvbihjb25zdCBiYXNpY19qc29uJiBqLCBkZXRhaWw6Om91 dHB1dF9hZGFwdGVyPHN0ZDo6dWludDhfdD4gbywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGJvb2wgdXNlX3NpemUgPSBmYWxzZSwgY29uc3QgYm9vbCB1c2VfdHlwZSA9IGZhbHNl KQorLSAgICB7CistICAgICAgICBiaW5hcnlfd3JpdGVyPHN0ZDo6dWludDhfdD4obykud3JpdGVf dWJqc29uKGosIHVzZV9zaXplLCB1c2VfdHlwZSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmll ZiBjcmVhdGUgYSBVQkpTT04gc2VyaWFsaXphdGlvbiBvZiBhIGdpdmVuIEpTT04gdmFsdWUKKy0g ICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vdG9fdWJq c29uLworLSAgICBzdGF0aWMgdm9pZCB0b191Ympzb24oY29uc3QgYmFzaWNfanNvbiYgaiwgZGV0 YWlsOjpvdXRwdXRfYWRhcHRlcjxjaGFyPiBvLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgYm9vbCB1c2Vfc2l6ZSA9IGZhbHNlLCBjb25zdCBib29sIHVzZV90eXBlID0gZmFsc2Up CistICAgIHsKKy0gICAgICAgIGJpbmFyeV93cml0ZXI8Y2hhcj4obykud3JpdGVfdWJqc29uKGos IHVzZV9zaXplLCB1c2VfdHlwZSk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBjcmVhdGUg YSBCU09OIHNlcmlhbGl6YXRpb24gb2YgYSBnaXZlbiBKU09OIHZhbHVlCistICAgIC8vLyBAc2Eg aHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3RvX2Jzb24vCistICAgIHN0 YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnVpbnQ4X3Q+IHRvX2Jzb24oY29uc3QgYmFzaWNfanNvbiYg aikKKy0gICAgeworLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1aW50OF90PiByZXN1bHQ7Cist ICAgICAgICB0b19ic29uKGosIHJlc3VsdCk7CistICAgICAgICByZXR1cm4gcmVzdWx0OworLSAg ICB9CistCistICAgIC8vLyBAYnJpZWYgY3JlYXRlIGEgQlNPTiBzZXJpYWxpemF0aW9uIG9mIGEg Z2l2ZW4gSlNPTiB2YWx1ZQorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9h cGkvYmFzaWNfanNvbi90b19ic29uLworLSAgICBzdGF0aWMgdm9pZCB0b19ic29uKGNvbnN0IGJh c2ljX2pzb24mIGosIGRldGFpbDo6b3V0cHV0X2FkYXB0ZXI8c3RkOjp1aW50OF90PiBvKQorLSAg ICB7CistICAgICAgICBiaW5hcnlfd3JpdGVyPHN0ZDo6dWludDhfdD4obykud3JpdGVfYnNvbihq KTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNyZWF0ZSBhIEJTT04gc2VyaWFsaXphdGlv biBvZiBhIGdpdmVuIEpTT04gdmFsdWUKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1h bm4ubWUvYXBpL2Jhc2ljX2pzb24vdG9fYnNvbi8KKy0gICAgc3RhdGljIHZvaWQgdG9fYnNvbihj b25zdCBiYXNpY19qc29uJiBqLCBkZXRhaWw6Om91dHB1dF9hZGFwdGVyPGNoYXI+IG8pCistICAg IHsKKy0gICAgICAgIGJpbmFyeV93cml0ZXI8Y2hhcj4obykud3JpdGVfYnNvbihqKTsKKy0gICAg fQorLQorLSAgICAvLy8gQGJyaWVmIGNyZWF0ZSBhIEpTT04gdmFsdWUgZnJvbSBhbiBpbnB1dCBp biBDQk9SIGZvcm1hdAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv YmFzaWNfanNvbi9mcm9tX2Nib3IvCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIElucHV0VHlwZT4K Ky0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxUCistICAgIHN0YXRpYyBiYXNpY19q c29uIGZyb21fY2JvcihJbnB1dFR5cGUmJiBpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgYm9vbCBzdHJpY3QgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgYm9vbCBhbGxvd19leGNlcHRpb25zID0gdHJ1ZSwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNib3JfdGFnX2hhbmRsZXJfdCB0YWdfaGFuZGxl ciA9IGNib3JfdGFnX2hhbmRsZXJfdDo6ZXJyb3IpCistICAgIHsKKy0gICAgICAgIGJhc2ljX2pz b24gcmVzdWx0OworLSAgICAgICAgZGV0YWlsOjpqc29uX3NheF9kb21fcGFyc2VyPGJhc2ljX2pz b24+IHNkcChyZXN1bHQsIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICAgICAgYXV0byBpYSA9IGRl dGFpbDo6aW5wdXRfYWRhcHRlcihzdGQ6OmZvcndhcmQ8SW5wdXRUeXBlPihpKSk7CistICAgICAg ICBjb25zdCBib29sIHJlcyA9IGJpbmFyeV9yZWFkZXI8ZGVjbHR5cGUoaWEpPihzdGQ6Om1vdmUo aWEpKS5zYXhfcGFyc2UoaW5wdXRfZm9ybWF0X3Q6OmNib3IsICZzZHAsIHN0cmljdCwgdGFnX2hh bmRsZXIpOworLSAgICAgICAgcmV0dXJuIHJlcyA/IHJlc3VsdCA6IGJhc2ljX2pzb24odmFsdWVf dDo6ZGlzY2FyZGVkKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGNyZWF0ZSBhIEpTT04g dmFsdWUgZnJvbSBhbiBpbnB1dCBpbiBDQk9SIGZvcm1hdAorLSAgICAvLy8gQHNhIGh0dHBzOi8v anNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9mcm9tX2Nib3IvCistICAgIHRlbXBsYXRl PHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKy0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVT VUxUCistICAgIHN0YXRpYyBiYXNpY19qc29uIGZyb21fY2JvcihJdGVyYXRvclR5cGUgZmlyc3Qs IEl0ZXJhdG9yVHlwZSBsYXN0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgYm9vbCBzdHJpY3QgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgYm9vbCBhbGxvd19leGNlcHRpb25zID0gdHJ1ZSwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNib3JfdGFnX2hhbmRsZXJfdCB0YWdfaGFuZGxlciA9IGNib3Jf dGFnX2hhbmRsZXJfdDo6ZXJyb3IpCistICAgIHsKKy0gICAgICAgIGJhc2ljX2pzb24gcmVzdWx0 OworLSAgICAgICAgZGV0YWlsOjpqc29uX3NheF9kb21fcGFyc2VyPGJhc2ljX2pzb24+IHNkcChy ZXN1bHQsIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICAgICAgYXV0byBpYSA9IGRldGFpbDo6aW5w dXRfYWRhcHRlcihzdGQ6Om1vdmUoZmlyc3QpLCBzdGQ6Om1vdmUobGFzdCkpOworLSAgICAgICAg Y29uc3QgYm9vbCByZXMgPSBiaW5hcnlfcmVhZGVyPGRlY2x0eXBlKGlhKT4oc3RkOjptb3ZlKGlh KSkuc2F4X3BhcnNlKGlucHV0X2Zvcm1hdF90OjpjYm9yLCAmc2RwLCBzdHJpY3QsIHRhZ19oYW5k bGVyKTsKKy0gICAgICAgIHJldHVybiByZXMgPyByZXN1bHQgOiBiYXNpY19qc29uKHZhbHVlX3Q6 OmRpc2NhcmRlZCk7CistICAgIH0KKy0KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy0gICAg SlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxUCistICAgIEpTT05fSEVETEVZX0RFUFJFQ0FU RURfRk9SKDMuOC4wLCBmcm9tX2Nib3IocHRyLCBwdHIgKyBsZW4pKQorLSAgICBzdGF0aWMgYmFz aWNfanNvbiBmcm9tX2Nib3IoY29uc3QgVCogcHRyLCBzdGQ6OnNpemVfdCBsZW4sCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHN0cmljdCA9IHRydWUsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFsbG93X2V4Y2VwdGlvbnMg PSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2Jvcl90YWdf aGFuZGxlcl90IHRhZ19oYW5kbGVyID0gY2Jvcl90YWdfaGFuZGxlcl90OjplcnJvcikKKy0gICAg eworLSAgICAgICAgcmV0dXJuIGZyb21fY2JvcihwdHIsIHB0ciArIGxlbiwgc3RyaWN0LCBhbGxv d19leGNlcHRpb25zLCB0YWdfaGFuZGxlcik7CistICAgIH0KKy0KKy0KKy0gICAgSlNPTl9IRURM RVlfV0FSTl9VTlVTRURfUkVTVUxUCistICAgIEpTT05fSEVETEVZX0RFUFJFQ0FURURfRk9SKDMu OC4wLCBmcm9tX2Nib3IocHRyLCBwdHIgKyBsZW4pKQorLSAgICBzdGF0aWMgYmFzaWNfanNvbiBm cm9tX2Nib3IoZGV0YWlsOjpzcGFuX2lucHV0X2FkYXB0ZXImJiBpLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBzdHJpY3QgPSB0cnVlLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhbGxvd19leGNlcHRpb25zID0gdHJ1ZSwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNib3JfdGFnX2hhbmRsZXJf dCB0YWdfaGFuZGxlciA9IGNib3JfdGFnX2hhbmRsZXJfdDo6ZXJyb3IpCistICAgIHsKKy0gICAg ICAgIGJhc2ljX2pzb24gcmVzdWx0OworLSAgICAgICAgZGV0YWlsOjpqc29uX3NheF9kb21fcGFy c2VyPGJhc2ljX2pzb24+IHNkcChyZXN1bHQsIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICAgICAg YXV0byBpYSA9IGkuZ2V0KCk7CistICAgICAgICAvLyBOT0xJTlRORVhUTElORShoaWNwcC1tb3Zl LWNvbnN0LWFyZyxwZXJmb3JtYW5jZS1tb3ZlLWNvbnN0LWFyZykKKy0gICAgICAgIGNvbnN0IGJv b2wgcmVzID0gYmluYXJ5X3JlYWRlcjxkZWNsdHlwZShpYSk+KHN0ZDo6bW92ZShpYSkpLnNheF9w YXJzZShpbnB1dF9mb3JtYXRfdDo6Y2JvciwgJnNkcCwgc3RyaWN0LCB0YWdfaGFuZGxlcik7Cist ICAgICAgICByZXR1cm4gcmVzID8gcmVzdWx0IDogYmFzaWNfanNvbih2YWx1ZV90OjpkaXNjYXJk ZWQpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgY3JlYXRlIGEgSlNPTiB2YWx1ZSBmcm9t IGFuIGlucHV0IGluIE1lc3NhZ2VQYWNrIGZvcm1hdAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNv bi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9mcm9tX21zZ3BhY2svCistICAgIHRlbXBsYXRl PHR5cGVuYW1lIElucHV0VHlwZT4KKy0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxU CistICAgIHN0YXRpYyBiYXNpY19qc29uIGZyb21fbXNncGFjayhJbnB1dFR5cGUmJiBpLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBzdHJpY3QgPSB0cnVl LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhbGxvd19l eGNlcHRpb25zID0gdHJ1ZSkKKy0gICAgeworLSAgICAgICAgYmFzaWNfanNvbiByZXN1bHQ7Cist ICAgICAgICBkZXRhaWw6Ompzb25fc2F4X2RvbV9wYXJzZXI8YmFzaWNfanNvbj4gc2RwKHJlc3Vs dCwgYWxsb3dfZXhjZXB0aW9ucyk7CistICAgICAgICBhdXRvIGlhID0gZGV0YWlsOjppbnB1dF9h ZGFwdGVyKHN0ZDo6Zm9yd2FyZDxJbnB1dFR5cGU+KGkpKTsKKy0gICAgICAgIGNvbnN0IGJvb2wg cmVzID0gYmluYXJ5X3JlYWRlcjxkZWNsdHlwZShpYSk+KHN0ZDo6bW92ZShpYSkpLnNheF9wYXJz ZShpbnB1dF9mb3JtYXRfdDo6bXNncGFjaywgJnNkcCwgc3RyaWN0KTsKKy0gICAgICAgIHJldHVy biByZXMgPyByZXN1bHQgOiBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7CistICAgIH0K Ky0KKy0gICAgLy8vIEBicmllZiBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20gYW4gaW5wdXQgaW4g TWVzc2FnZVBhY2sgZm9ybWF0CistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1l L2FwaS9iYXNpY19qc29uL2Zyb21fbXNncGFjay8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRl cmF0b3JUeXBlPgorLSAgICBKU09OX0hFRExFWV9XQVJOX1VOVVNFRF9SRVNVTFQKKy0gICAgc3Rh dGljIGJhc2ljX2pzb24gZnJvbV9tc2dwYWNrKEl0ZXJhdG9yVHlwZSBmaXJzdCwgSXRlcmF0b3JU eXBlIGxhc3QsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29s IHN0cmljdCA9IHRydWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBib29sIGFsbG93X2V4Y2VwdGlvbnMgPSB0cnVlKQorLSAgICB7CistICAgICAgICBiYXNpY19q c29uIHJlc3VsdDsKKy0gICAgICAgIGRldGFpbDo6anNvbl9zYXhfZG9tX3BhcnNlcjxiYXNpY19q c29uPiBzZHAocmVzdWx0LCBhbGxvd19leGNlcHRpb25zKTsKKy0gICAgICAgIGF1dG8gaWEgPSBk ZXRhaWw6OmlucHV0X2FkYXB0ZXIoc3RkOjptb3ZlKGZpcnN0KSwgc3RkOjptb3ZlKGxhc3QpKTsK Ky0gICAgICAgIGNvbnN0IGJvb2wgcmVzID0gYmluYXJ5X3JlYWRlcjxkZWNsdHlwZShpYSk+KHN0 ZDo6bW92ZShpYSkpLnNheF9wYXJzZShpbnB1dF9mb3JtYXRfdDo6bXNncGFjaywgJnNkcCwgc3Ry aWN0KTsKKy0gICAgICAgIHJldHVybiByZXMgPyByZXN1bHQgOiBiYXNpY19qc29uKHZhbHVlX3Q6 OmRpc2NhcmRlZCk7CistICAgIH0KKy0KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy0gICAg SlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxUCistICAgIEpTT05fSEVETEVZX0RFUFJFQ0FU RURfRk9SKDMuOC4wLCBmcm9tX21zZ3BhY2socHRyLCBwdHIgKyBsZW4pKQorLSAgICBzdGF0aWMg YmFzaWNfanNvbiBmcm9tX21zZ3BhY2soY29uc3QgVCogcHRyLCBzdGQ6OnNpemVfdCBsZW4sCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHN0cmljdCA9IHRy dWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFsbG93 X2V4Y2VwdGlvbnMgPSB0cnVlKQorLSAgICB7CistICAgICAgICByZXR1cm4gZnJvbV9tc2dwYWNr KHB0ciwgcHRyICsgbGVuLCBzdHJpY3QsIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICB9CistCist ICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVAorLSAgICBKU09OX0hFRExFWV9ERVBS RUNBVEVEX0ZPUigzLjguMCwgZnJvbV9tc2dwYWNrKHB0ciwgcHRyICsgbGVuKSkKKy0gICAgc3Rh dGljIGJhc2ljX2pzb24gZnJvbV9tc2dwYWNrKGRldGFpbDo6c3Bhbl9pbnB1dF9hZGFwdGVyJiYg aSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgc3RyaWN0 ID0gdHJ1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wg YWxsb3dfZXhjZXB0aW9ucyA9IHRydWUpCistICAgIHsKKy0gICAgICAgIGJhc2ljX2pzb24gcmVz dWx0OworLSAgICAgICAgZGV0YWlsOjpqc29uX3NheF9kb21fcGFyc2VyPGJhc2ljX2pzb24+IHNk cChyZXN1bHQsIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICAgICAgYXV0byBpYSA9IGkuZ2V0KCk7 CistICAgICAgICAvLyBOT0xJTlRORVhUTElORShoaWNwcC1tb3ZlLWNvbnN0LWFyZyxwZXJmb3Jt YW5jZS1tb3ZlLWNvbnN0LWFyZykKKy0gICAgICAgIGNvbnN0IGJvb2wgcmVzID0gYmluYXJ5X3Jl YWRlcjxkZWNsdHlwZShpYSk+KHN0ZDo6bW92ZShpYSkpLnNheF9wYXJzZShpbnB1dF9mb3JtYXRf dDo6bXNncGFjaywgJnNkcCwgc3RyaWN0KTsKKy0gICAgICAgIHJldHVybiByZXMgPyByZXN1bHQg OiBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7CistICAgIH0KKy0KKy0gICAgLy8vIEBi cmllZiBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20gYW4gaW5wdXQgaW4gVUJKU09OIGZvcm1hdAor LSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9mcm9t X3VianNvbi8KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRUeXBlPgorLSAgICBKU09OX0hF RExFWV9XQVJOX1VOVVNFRF9SRVNVTFQKKy0gICAgc3RhdGljIGJhc2ljX2pzb24gZnJvbV91Ympz b24oSW5wdXRUeXBlJiYgaSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgYm9vbCBzdHJpY3QgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBib29sIGFsbG93X2V4Y2VwdGlvbnMgPSB0cnVlKQorLSAgICB7CistICAgICAgICBi YXNpY19qc29uIHJlc3VsdDsKKy0gICAgICAgIGRldGFpbDo6anNvbl9zYXhfZG9tX3BhcnNlcjxi YXNpY19qc29uPiBzZHAocmVzdWx0LCBhbGxvd19leGNlcHRpb25zKTsKKy0gICAgICAgIGF1dG8g aWEgPSBkZXRhaWw6OmlucHV0X2FkYXB0ZXIoc3RkOjpmb3J3YXJkPElucHV0VHlwZT4oaSkpOwor LSAgICAgICAgY29uc3QgYm9vbCByZXMgPSBiaW5hcnlfcmVhZGVyPGRlY2x0eXBlKGlhKT4oc3Rk Ojptb3ZlKGlhKSkuc2F4X3BhcnNlKGlucHV0X2Zvcm1hdF90Ojp1Ympzb24sICZzZHAsIHN0cmlj dCk7CistICAgICAgICByZXR1cm4gcmVzID8gcmVzdWx0IDogYmFzaWNfanNvbih2YWx1ZV90Ojpk aXNjYXJkZWQpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgY3JlYXRlIGEgSlNPTiB2YWx1 ZSBmcm9tIGFuIGlucHV0IGluIFVCSlNPTiBmb3JtYXQKKy0gICAgLy8vIEBzYSBodHRwczovL2pz b24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vZnJvbV91Ympzb24vCistICAgIHRlbXBsYXRl PHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKy0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVT VUxUCistICAgIHN0YXRpYyBiYXNpY19qc29uIGZyb21fdWJqc29uKEl0ZXJhdG9yVHlwZSBmaXJz dCwgSXRlcmF0b3JUeXBlIGxhc3QsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGJvb2wgc3RyaWN0ID0gdHJ1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgYm9vbCBhbGxvd19leGNlcHRpb25zID0gdHJ1ZSkKKy0gICAgeworLSAgICAg ICAgYmFzaWNfanNvbiByZXN1bHQ7CistICAgICAgICBkZXRhaWw6Ompzb25fc2F4X2RvbV9wYXJz ZXI8YmFzaWNfanNvbj4gc2RwKHJlc3VsdCwgYWxsb3dfZXhjZXB0aW9ucyk7CistICAgICAgICBh dXRvIGlhID0gZGV0YWlsOjppbnB1dF9hZGFwdGVyKHN0ZDo6bW92ZShmaXJzdCksIHN0ZDo6bW92 ZShsYXN0KSk7CistICAgICAgICBjb25zdCBib29sIHJlcyA9IGJpbmFyeV9yZWFkZXI8ZGVjbHR5 cGUoaWEpPihzdGQ6Om1vdmUoaWEpKS5zYXhfcGFyc2UoaW5wdXRfZm9ybWF0X3Q6OnVianNvbiwg JnNkcCwgc3RyaWN0KTsKKy0gICAgICAgIHJldHVybiByZXMgPyByZXN1bHQgOiBiYXNpY19qc29u KHZhbHVlX3Q6OmRpc2NhcmRlZCk7CistICAgIH0KKy0KKy0gICAgdGVtcGxhdGU8dHlwZW5hbWUg VD4KKy0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxUCistICAgIEpTT05fSEVETEVZ X0RFUFJFQ0FURURfRk9SKDMuOC4wLCBmcm9tX3VianNvbihwdHIsIHB0ciArIGxlbikpCistICAg IHN0YXRpYyBiYXNpY19qc29uIGZyb21fdWJqc29uKGNvbnN0IFQqIHB0ciwgc3RkOjpzaXplX3Qg bGVuLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHN0cmlj dCA9IHRydWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wg YWxsb3dfZXhjZXB0aW9ucyA9IHRydWUpCistICAgIHsKKy0gICAgICAgIHJldHVybiBmcm9tX3Vi anNvbihwdHIsIHB0ciArIGxlbiwgc3RyaWN0LCBhbGxvd19leGNlcHRpb25zKTsKKy0gICAgfQor LQorLSAgICBKU09OX0hFRExFWV9XQVJOX1VOVVNFRF9SRVNVTFQKKy0gICAgSlNPTl9IRURMRVlf REVQUkVDQVRFRF9GT1IoMy44LjAsIGZyb21fdWJqc29uKHB0ciwgcHRyICsgbGVuKSkKKy0gICAg c3RhdGljIGJhc2ljX2pzb24gZnJvbV91Ympzb24oZGV0YWlsOjpzcGFuX2lucHV0X2FkYXB0ZXIm JiBpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHN0cmlj dCA9IHRydWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wg YWxsb3dfZXhjZXB0aW9ucyA9IHRydWUpCistICAgIHsKKy0gICAgICAgIGJhc2ljX2pzb24gcmVz dWx0OworLSAgICAgICAgZGV0YWlsOjpqc29uX3NheF9kb21fcGFyc2VyPGJhc2ljX2pzb24+IHNk cChyZXN1bHQsIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICAgICAgYXV0byBpYSA9IGkuZ2V0KCk7 CistICAgICAgICAvLyBOT0xJTlRORVhUTElORShoaWNwcC1tb3ZlLWNvbnN0LWFyZyxwZXJmb3Jt YW5jZS1tb3ZlLWNvbnN0LWFyZykKKy0gICAgICAgIGNvbnN0IGJvb2wgcmVzID0gYmluYXJ5X3Jl YWRlcjxkZWNsdHlwZShpYSk+KHN0ZDo6bW92ZShpYSkpLnNheF9wYXJzZShpbnB1dF9mb3JtYXRf dDo6dWJqc29uLCAmc2RwLCBzdHJpY3QpOworLSAgICAgICAgcmV0dXJuIHJlcyA/IHJlc3VsdCA6 IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2FyZGVkKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJy aWVmIGNyZWF0ZSBhIEpTT04gdmFsdWUgZnJvbSBhbiBpbnB1dCBpbiBCU09OIGZvcm1hdAorLSAg ICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9mcm9tX2Jz b24vCistICAgIHRlbXBsYXRlPHR5cGVuYW1lIElucHV0VHlwZT4KKy0gICAgSlNPTl9IRURMRVlf V0FSTl9VTlVTRURfUkVTVUxUCistICAgIHN0YXRpYyBiYXNpY19qc29uIGZyb21fYnNvbihJbnB1 dFR5cGUmJiBpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBz dHJpY3QgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9v bCBhbGxvd19leGNlcHRpb25zID0gdHJ1ZSkKKy0gICAgeworLSAgICAgICAgYmFzaWNfanNvbiBy ZXN1bHQ7CistICAgICAgICBkZXRhaWw6Ompzb25fc2F4X2RvbV9wYXJzZXI8YmFzaWNfanNvbj4g c2RwKHJlc3VsdCwgYWxsb3dfZXhjZXB0aW9ucyk7CistICAgICAgICBhdXRvIGlhID0gZGV0YWls OjppbnB1dF9hZGFwdGVyKHN0ZDo6Zm9yd2FyZDxJbnB1dFR5cGU+KGkpKTsKKy0gICAgICAgIGNv bnN0IGJvb2wgcmVzID0gYmluYXJ5X3JlYWRlcjxkZWNsdHlwZShpYSk+KHN0ZDo6bW92ZShpYSkp LnNheF9wYXJzZShpbnB1dF9mb3JtYXRfdDo6YnNvbiwgJnNkcCwgc3RyaWN0KTsKKy0gICAgICAg IHJldHVybiByZXMgPyByZXN1bHQgOiBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7Cist ICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20gYW4gaW5w dXQgaW4gQlNPTiBmb3JtYXQKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUv YXBpL2Jhc2ljX2pzb24vZnJvbV9ic29uLworLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv clR5cGU+CistICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVAorLSAgICBzdGF0aWMg YmFzaWNfanNvbiBmcm9tX2Jzb24oSXRlcmF0b3JUeXBlIGZpcnN0LCBJdGVyYXRvclR5cGUgbGFz dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgc3RyaWN0ID0g dHJ1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYWxsb3df ZXhjZXB0aW9ucyA9IHRydWUpCistICAgIHsKKy0gICAgICAgIGJhc2ljX2pzb24gcmVzdWx0Owor LSAgICAgICAgZGV0YWlsOjpqc29uX3NheF9kb21fcGFyc2VyPGJhc2ljX2pzb24+IHNkcChyZXN1 bHQsIGFsbG93X2V4Y2VwdGlvbnMpOworLSAgICAgICAgYXV0byBpYSA9IGRldGFpbDo6aW5wdXRf YWRhcHRlcihzdGQ6Om1vdmUoZmlyc3QpLCBzdGQ6Om1vdmUobGFzdCkpOworLSAgICAgICAgY29u c3QgYm9vbCByZXMgPSBiaW5hcnlfcmVhZGVyPGRlY2x0eXBlKGlhKT4oc3RkOjptb3ZlKGlhKSku c2F4X3BhcnNlKGlucHV0X2Zvcm1hdF90Ojpic29uLCAmc2RwLCBzdHJpY3QpOworLSAgICAgICAg cmV0dXJuIHJlcyA/IHJlc3VsdCA6IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2FyZGVkKTsKKy0g ICAgfQorLQorLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLSAgICBKU09OX0hFRExFWV9XQVJO X1VOVVNFRF9SRVNVTFQKKy0gICAgSlNPTl9IRURMRVlfREVQUkVDQVRFRF9GT1IoMy44LjAsIGZy b21fYnNvbihwdHIsIHB0ciArIGxlbikpCistICAgIHN0YXRpYyBiYXNpY19qc29uIGZyb21fYnNv bihjb25zdCBUKiBwdHIsIHN0ZDo6c2l6ZV90IGxlbiwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGJvb2wgc3RyaWN0ID0gdHJ1ZSwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfZXhjZXB0aW9ucyA9IHRydWUpCistICAgIHsK Ky0gICAgICAgIHJldHVybiBmcm9tX2Jzb24ocHRyLCBwdHIgKyBsZW4sIHN0cmljdCwgYWxsb3df ZXhjZXB0aW9ucyk7CistICAgIH0KKy0KKy0gICAgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVT VUxUCistICAgIEpTT05fSEVETEVZX0RFUFJFQ0FURURfRk9SKDMuOC4wLCBmcm9tX2Jzb24ocHRy LCBwdHIgKyBsZW4pKQorLSAgICBzdGF0aWMgYmFzaWNfanNvbiBmcm9tX2Jzb24oZGV0YWlsOjpz cGFuX2lucHV0X2FkYXB0ZXImJiBpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgYm9vbCBzdHJpY3QgPSB0cnVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgYm9vbCBhbGxvd19leGNlcHRpb25zID0gdHJ1ZSkKKy0gICAgeworLSAgICAgICAg YmFzaWNfanNvbiByZXN1bHQ7CistICAgICAgICBkZXRhaWw6Ompzb25fc2F4X2RvbV9wYXJzZXI8 YmFzaWNfanNvbj4gc2RwKHJlc3VsdCwgYWxsb3dfZXhjZXB0aW9ucyk7CistICAgICAgICBhdXRv IGlhID0gaS5nZXQoKTsKKy0gICAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGhpY3BwLW1vdmUtY29u c3QtYXJnLHBlcmZvcm1hbmNlLW1vdmUtY29uc3QtYXJnKQorLSAgICAgICAgY29uc3QgYm9vbCBy ZXMgPSBiaW5hcnlfcmVhZGVyPGRlY2x0eXBlKGlhKT4oc3RkOjptb3ZlKGlhKSkuc2F4X3BhcnNl KGlucHV0X2Zvcm1hdF90Ojpic29uLCAmc2RwLCBzdHJpY3QpOworLSAgICAgICAgcmV0dXJuIHJl cyA/IHJlc3VsdCA6IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2FyZGVkKTsKKy0gICAgfQorLSAg ICAvLy8gQH0KKy0KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0gICAgLy8gSlNP TiBQb2ludGVyIHN1cHBvcnQgLy8KKy0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0K Ky0gICAgLy8vIEBuYW1lIEpTT04gUG9pbnRlciBmdW5jdGlvbnMKKy0gICAgLy8vIEB7CistCist ICAgIC8vLyBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZpYSBKU09OIFBvaW50ZXIK Ky0gICAgLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb3Bl cmF0b3IlNUIlNUQvCistICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKGNvbnN0IGpzb25fcG9pbnRl ciYgcHRyKQorLSAgICB7CistICAgICAgICByZXR1cm4gcHRyLmdldF91bmNoZWNrZWQodGhpcyk7 CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGVsZW1lbnQgdmlh IEpTT04gUG9pbnRlcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv YmFzaWNfanNvbi9vcGVyYXRvciU1QiU1RC8KKy0gICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y W10oY29uc3QganNvbl9wb2ludGVyJiBwdHIpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVy biBwdHIuZ2V0X3VuY2hlY2tlZCh0aGlzKTsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIGFj Y2VzcyBzcGVjaWZpZWQgZWxlbWVudCB2aWEgSlNPTiBQb2ludGVyCistICAgIC8vLyBAc2EgaHR0 cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL2F0LworLSAgICByZWZlcmVuY2Ug YXQoY29uc3QganNvbl9wb2ludGVyJiBwdHIpCistICAgIHsKKy0gICAgICAgIHJldHVybiBwdHIu Z2V0X2NoZWNrZWQodGhpcyk7CistICAgIH0KKy0KKy0gICAgLy8vIEBicmllZiBhY2Nlc3Mgc3Bl Y2lmaWVkIGVsZW1lbnQgdmlhIEpTT04gUG9pbnRlcgorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNv bi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9hdC8KKy0gICAgY29uc3RfcmVmZXJlbmNlIGF0 KGNvbnN0IGpzb25fcG9pbnRlciYgcHRyKSBjb25zdAorLSAgICB7CistICAgICAgICByZXR1cm4g cHRyLmdldF9jaGVja2VkKHRoaXMpOworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgcmV0dXJu IGZsYXR0ZW5lZCBKU09OIHZhbHVlCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5u Lm1lL2FwaS9iYXNpY19qc29uL2ZsYXR0ZW4vCistICAgIGJhc2ljX2pzb24gZmxhdHRlbigpIGNv bnN0CistICAgIHsKKy0gICAgICAgIGJhc2ljX2pzb24gcmVzdWx0KHZhbHVlX3Q6Om9iamVjdCk7 CistICAgICAgICBqc29uX3BvaW50ZXI6OmZsYXR0ZW4oIiIsICp0aGlzLCByZXN1bHQpOworLSAg ICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLQorLSAgICAvLy8gQGJyaWVmIHVuZmxhdHRl biBhIHByZXZpb3VzbHkgZmxhdHRlbmVkIEpTT04gdmFsdWUKKy0gICAgLy8vIEBzYSBodHRwczov L2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vdW5mbGF0dGVuLworLSAgICBiYXNpY19q c29uIHVuZmxhdHRlbigpIGNvbnN0CistICAgIHsKKy0gICAgICAgIHJldHVybiBqc29uX3BvaW50 ZXI6OnVuZmxhdHRlbigqdGhpcyk7CistICAgIH0KKy0KKy0gICAgLy8vIEB9CistCistICAgIC8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistICAgIC8vIEpTT04gUGF0Y2ggZnVuY3Rpb25zIC8v CistICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistCistICAgIC8vLyBAbmFtZSBKU09O IFBhdGNoIGZ1bmN0aW9ucworLSAgICAvLy8gQHsKKy0KKy0gICAgLy8vIEBicmllZiBhcHBsaWVz IGEgSlNPTiBwYXRjaAorLSAgICAvLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkv YmFzaWNfanNvbi9wYXRjaC8KKy0gICAgYmFzaWNfanNvbiBwYXRjaChjb25zdCBiYXNpY19qc29u JiBqc29uX3BhdGNoKSBjb25zdAorLSAgICB7CistICAgICAgICAvLyBtYWtlIGEgd29ya2luZyBj b3B5IHRvIGFwcGx5IHRoZSBwYXRjaCB0bworLSAgICAgICAgYmFzaWNfanNvbiByZXN1bHQgPSAq dGhpczsKKy0KKy0gICAgICAgIC8vIHRoZSB2YWxpZCBKU09OIFBhdGNoIG9wZXJhdGlvbnMKKy0g ICAgICAgIGVudW0gY2xhc3MgcGF0Y2hfb3BlcmF0aW9ucyB7YWRkLCByZW1vdmUsIHJlcGxhY2Us IG1vdmUsIGNvcHksIHRlc3QsIGludmFsaWR9OworLQorLSAgICAgICAgY29uc3QgYXV0byBnZXRf b3AgPSBbXShjb25zdCBzdGQ6OnN0cmluZyAmIG9wKQorLSAgICAgICAgeworLSAgICAgICAgICAg IGlmIChvcCA9PSAiYWRkIikKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVy biBwYXRjaF9vcGVyYXRpb25zOjphZGQ7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGlm IChvcCA9PSAicmVtb3ZlIikKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJldHVy biBwYXRjaF9vcGVyYXRpb25zOjpyZW1vdmU7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAg IGlmIChvcCA9PSAicmVwbGFjZSIpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBy ZXR1cm4gcGF0Y2hfb3BlcmF0aW9uczo6cmVwbGFjZTsKKy0gICAgICAgICAgICB9CistICAgICAg ICAgICAgaWYgKG9wID09ICJtb3ZlIikKKy0gICAgICAgICAgICB7CistICAgICAgICAgICAgICAg IHJldHVybiBwYXRjaF9vcGVyYXRpb25zOjptb3ZlOworLSAgICAgICAgICAgIH0KKy0gICAgICAg ICAgICBpZiAob3AgPT0gImNvcHkiKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg cmV0dXJuIHBhdGNoX29wZXJhdGlvbnM6OmNvcHk7CistICAgICAgICAgICAgfQorLSAgICAgICAg ICAgIGlmIChvcCA9PSAidGVzdCIpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBy ZXR1cm4gcGF0Y2hfb3BlcmF0aW9uczo6dGVzdDsKKy0gICAgICAgICAgICB9CistCistICAgICAg ICAgICAgcmV0dXJuIHBhdGNoX29wZXJhdGlvbnM6OmludmFsaWQ7CistICAgICAgICB9OworLQor LSAgICAgICAgLy8gd3JhcHBlciBmb3IgImFkZCIgb3BlcmF0aW9uOyBhZGQgdmFsdWUgYXQgcHRy CistICAgICAgICBjb25zdCBhdXRvIG9wZXJhdGlvbl9hZGQgPSBbJnJlc3VsdF0oanNvbl9wb2lu dGVyICYgcHRyLCBiYXNpY19qc29uIHZhbCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyBh ZGRpbmcgdG8gdGhlIHJvb3Qgb2YgdGhlIHRhcmdldCBkb2N1bWVudCBtZWFucyByZXBsYWNpbmcg aXQKKy0gICAgICAgICAgICBpZiAocHRyLmVtcHR5KCkpCistICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICByZXN1bHQgPSB2YWw7CistICAgICAgICAgICAgICAgIHJldHVybjsKKy0gICAg ICAgICAgICB9CistCistICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSB0b3AgZWxlbWVudCBv ZiB0aGUgcG9pbnRlciBleGlzdHMKKy0gICAgICAgICAgICBqc29uX3BvaW50ZXIgdG9wX3BvaW50 ZXIgPSBwdHIudG9wKCk7CistICAgICAgICAgICAgaWYgKHRvcF9wb2ludGVyICE9IHB0cikKKy0g ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIHJlc3VsdC5hdCh0b3BfcG9pbnRlcik7Cist ICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgIC8vIGdldCByZWZlcmVuY2UgdG8gcGFyZW50 IG9mIEpTT04gcG9pbnRlciBwdHIKKy0gICAgICAgICAgICBjb25zdCBhdXRvIGxhc3RfcGF0aCA9 IHB0ci5iYWNrKCk7CistICAgICAgICAgICAgcHRyLnBvcF9iYWNrKCk7CistICAgICAgICAgICAg YmFzaWNfanNvbiYgcGFyZW50ID0gcmVzdWx0W3B0cl07CistCistICAgICAgICAgICAgc3dpdGNo IChwYXJlbnQubV90eXBlKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgY2FzZSB2 YWx1ZV90OjpudWxsOgorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG9wZXJhdG9yW10g dG8gYWRkIHZhbHVlCistICAgICAgICAgICAgICAgICAgICBwYXJlbnRbbGFzdF9wYXRoXSA9IHZh bDsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9CistCist ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3BhdGggPT0gIi0iKQorLSAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogYXBw ZW5kIHRvIGJhY2sKKy0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQucHVzaF9iYWNrKHZh bCk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgICAgICBlbHNlCist ICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0 byBpZHggPSBqc29uX3BvaW50ZXI6OmFycmF5X2luZGV4KGxhc3RfcGF0aCk7CistICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKGlkeCA+IHBhcmVudC5zaXpl KCkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEpTT05fVEhST1cob3V0X29mX3JhbmdlOjpjcmVhdGUoNDAxLCAiYXJyYXkgaW5kZXgg IiArIHN0ZDo6dG9fc3RyaW5nKGlkeCkgKyAiIGlzIG91dCBvZiByYW5nZSIsIHBhcmVudCkpOwor LSAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAv LyBkZWZhdWx0IGNhc2U6IGluc2VydCBhZGQgb2Zmc2V0CistICAgICAgICAgICAgICAgICAgICAg ICAgcGFyZW50Lmluc2VydChwYXJlbnQuYmVnaW4oKSArIHN0YXRpY19jYXN0PGRpZmZlcmVuY2Vf dHlwZT4oaWR4KSwgdmFsKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIC8v IGlmIHRoZXJlIGV4aXN0cyBhIHBhcmVudCBpdCBjYW5ub3QgYmUgcHJpbWl0aXZlCistICAgICAg ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOiAvLyBMQ09WX0VYQ0xfTElORQorLSAgICAg ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46IC8vIExDT1ZfRVhDTF9MSU5FCistICAg ICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6IC8vIExDT1ZfRVhDTF9M SU5FCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOiAvLyBM Q09WX0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9h dDogLy8gTENPVl9FWENMX0xJTkUKKy0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpiaW5h cnk6IC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6ZGlz Y2FyZGVkOiAvLyBMQ09WX0VYQ0xfTElORQorLSAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAg ICAgICAgIC8vIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgICAgICAgICBKU09OX0FTU0VS VChmYWxzZSk7IC8vIE5PTElOVChjZXJ0LWRjbDAzLWMsaGljcHAtc3RhdGljLWFzc2VydCxtaXNj LXN0YXRpYy1hc3NlcnQpIExDT1ZfRVhDTF9MSU5FCistICAgICAgICAgICAgfQorLSAgICAgICAg fTsKKy0KKy0gICAgICAgIC8vIHdyYXBwZXIgZm9yICJyZW1vdmUiIG9wZXJhdGlvbjsgcmVtb3Zl IHZhbHVlIGF0IHB0cgorLSAgICAgICAgY29uc3QgYXV0byBvcGVyYXRpb25fcmVtb3ZlID0gW3Ro aXMsICZyZXN1bHRdKGpzb25fcG9pbnRlciAmIHB0cikKKy0gICAgICAgIHsKKy0gICAgICAgICAg ICAvLyBnZXQgcmVmZXJlbmNlIHRvIHBhcmVudCBvZiBKU09OIHBvaW50ZXIgcHRyCistICAgICAg ICAgICAgY29uc3QgYXV0byBsYXN0X3BhdGggPSBwdHIuYmFjaygpOworLSAgICAgICAgICAgIHB0 ci5wb3BfYmFjaygpOworLSAgICAgICAgICAgIGJhc2ljX2pzb24mIHBhcmVudCA9IHJlc3VsdC5h dChwdHIpOworLQorLSAgICAgICAgICAgIC8vIHJlbW92ZSBjaGlsZAorLSAgICAgICAgICAgIGlm IChwYXJlbnQuaXNfb2JqZWN0KCkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAv LyBwZXJmb3JtIHJhbmdlIGNoZWNrCistICAgICAgICAgICAgICAgIGF1dG8gaXQgPSBwYXJlbnQu ZmluZChsYXN0X3BhdGgpOworLSAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfTElLRUxZ KGl0ICE9IHBhcmVudC5lbmQoKSkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgICAgIHBhcmVudC5lcmFzZShpdCk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBKU09O X1RIUk9XKG91dF9vZl9yYW5nZTo6Y3JlYXRlKDQwMywgImtleSAnIiArIGxhc3RfcGF0aCArICIn IG5vdCBmb3VuZCIsICp0aGlzKSk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICB9 CistICAgICAgICAgICAgZWxzZSBpZiAocGFyZW50LmlzX2FycmF5KCkpCistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAvLyBub3RlIGVyYXNlIHBlcmZvcm1zIHJhbmdlIGNoZWNrCist ICAgICAgICAgICAgICAgIHBhcmVudC5lcmFzZShqc29uX3BvaW50ZXI6OmFycmF5X2luZGV4KGxh c3RfcGF0aCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH07CistCistICAgICAgICAvLyB0 eXBlIGNoZWNrOiB0b3AgbGV2ZWwgdmFsdWUgbXVzdCBiZSBhbiBhcnJheQorLSAgICAgICAgaWYg KEpTT05fSEVETEVZX1VOTElLRUxZKCFqc29uX3BhdGNoLmlzX2FycmF5KCkpKQorLSAgICAgICAg eworLSAgICAgICAgICAgIEpTT05fVEhST1cocGFyc2VfZXJyb3I6OmNyZWF0ZSgxMDQsIDAsICJK U09OIHBhdGNoIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyIsIGpzb25fcGF0Y2gpKTsKKy0g ICAgICAgIH0KKy0KKy0gICAgICAgIC8vIGl0ZXJhdGUgYW5kIGFwcGx5IHRoZSBvcGVyYXRpb25z CistICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbCA6IGpzb25fcGF0Y2gpCistICAgICAgICB7 CistICAgICAgICAgICAgLy8gd3JhcHBlciB0byBnZXQgYSB2YWx1ZSBmb3IgYW4gb3BlcmF0aW9u CistICAgICAgICAgICAgY29uc3QgYXV0byBnZXRfdmFsdWUgPSBbJnZhbF0oY29uc3Qgc3RkOjpz dHJpbmcgJiBvcCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzdGQ6OnN0cmluZyAmIG1lbWJlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIHN0cmluZ190eXBlKSAtPiBiYXNpY19qc29uICYKKy0gICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgIC8vIGZpbmQgdmFsdWUKKy0gICAgICAgICAgICAgICAg YXV0byBpdCA9IHZhbC5tX3ZhbHVlLm9iamVjdC0+ZmluZChtZW1iZXIpOworLQorLSAgICAgICAg ICAgICAgICAvLyBjb250ZXh0LXNlbnNpdGl2ZSBlcnJvciBtZXNzYWdlCistICAgICAgICAgICAg ICAgIGNvbnN0IGF1dG8gZXJyb3JfbXNnID0gKG9wID09ICJvcCIpID8gIm9wZXJhdGlvbiIgOiAi b3BlcmF0aW9uICciICsgb3AgKyAiJyI7CistCistICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlm IGRlc2lyZWQgdmFsdWUgaXMgcHJlc2VudAorLSAgICAgICAgICAgICAgICBpZiAoSlNPTl9IRURM RVlfVU5MSUtFTFkoaXQgPT0gdmFsLm1fdmFsdWUub2JqZWN0LT5lbmQoKSkpCistICAgICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIE5PTElOVE5FWFRMSU5FKHBlcmZvcm1h bmNlLWluZWZmaWNpZW50LXN0cmluZy1jb25jYXRlbmF0aW9uKQorLSAgICAgICAgICAgICAgICAg ICAgSlNPTl9USFJPVyhwYXJzZV9lcnJvcjo6Y3JlYXRlKDEwNSwgMCwgZXJyb3JfbXNnICsgIiBt dXN0IGhhdmUgbWVtYmVyICciICsgbWVtYmVyICsgIiciLCB2YWwpKTsKKy0gICAgICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiByZXN1bHQgaXMgb2YgdHlwZSBz dHJpbmcKKy0gICAgICAgICAgICAgICAgaWYgKEpTT05fSEVETEVZX1VOTElLRUxZKHN0cmluZ190 eXBlICYmICFpdC0+c2Vjb25kLmlzX3N0cmluZygpKSkKKy0gICAgICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICAgICAgLy8gTk9MSU5UTkVYVExJTkUocGVyZm9ybWFuY2UtaW5lZmZpY2ll bnQtc3RyaW5nLWNvbmNhdGVuYXRpb24pCistICAgICAgICAgICAgICAgICAgICBKU09OX1RIUk9X KHBhcnNlX2Vycm9yOjpjcmVhdGUoMTA1LCAwLCBlcnJvcl9tc2cgKyAiIG11c3QgaGF2ZSBzdHJp bmcgbWVtYmVyICciICsgbWVtYmVyICsgIiciLCB2YWwpKTsKKy0gICAgICAgICAgICAgICAgfQor LQorLSAgICAgICAgICAgICAgICAvLyBubyBlcnJvcjogcmV0dXJuIHZhbHVlCistICAgICAgICAg ICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworLSAgICAgICAgICAgIH07CistCistICAgICAgICAg ICAgLy8gdHlwZSBjaGVjazogZXZlcnkgZWxlbWVudCBvZiB0aGUgYXJyYXkgbXVzdCBiZSBhbiBv YmplY3QKKy0gICAgICAgICAgICBpZiAoSlNPTl9IRURMRVlfVU5MSUtFTFkoIXZhbC5pc19vYmpl Y3QoKSkpCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHBhcnNl X2Vycm9yOjpjcmVhdGUoMTA0LCAwLCAiSlNPTiBwYXRjaCBtdXN0IGJlIGFuIGFycmF5IG9mIG9i amVjdHMiLCB2YWwpKTsKKy0gICAgICAgICAgICB9CistCistICAgICAgICAgICAgLy8gY29sbGVj dCBtYW5kYXRvcnkgbWVtYmVycworLSAgICAgICAgICAgIGNvbnN0IGF1dG8gb3AgPSBnZXRfdmFs dWUoIm9wIiwgIm9wIiwgdHJ1ZSkudGVtcGxhdGUgZ2V0PHN0ZDo6c3RyaW5nPigpOworLSAgICAg ICAgICAgIGNvbnN0IGF1dG8gcGF0aCA9IGdldF92YWx1ZShvcCwgInBhdGgiLCB0cnVlKS50ZW1w bGF0ZSBnZXQ8c3RkOjpzdHJpbmc+KCk7CistICAgICAgICAgICAganNvbl9wb2ludGVyIHB0cihw YXRoKTsKKy0KKy0gICAgICAgICAgICBzd2l0Y2ggKGdldF9vcChvcCkpCistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6OmFkZDoKKy0gICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uX2FkZChwdHIsIGdldF92 YWx1ZSgiYWRkIiwgInZhbHVlIiwgZmFsc2UpKTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFr OworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3Bl cmF0aW9uczo6cmVtb3ZlOgorLSAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBvcGVyYXRpb25fcmVtb3ZlKHB0cik7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0g ICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIHBhdGNoX29wZXJhdGlv bnM6OnJlcGxhY2U6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8v IHRoZSAicGF0aCIgbG9jYXRpb24gbXVzdCBleGlzdCAtIHVzZSBhdCgpCistICAgICAgICAgICAg ICAgICAgICByZXN1bHQuYXQocHRyKSA9IGdldF92YWx1ZSgicmVwbGFjZSIsICJ2YWx1ZSIsIGZh bHNlKTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9Cist CistICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6bW92ZToKKy0gICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBmcm9tX3BhdGggPSBn ZXRfdmFsdWUoIm1vdmUiLCAiZnJvbSIsIHRydWUpLnRlbXBsYXRlIGdldDxzdGQ6OnN0cmluZz4o KTsKKy0gICAgICAgICAgICAgICAgICAgIGpzb25fcG9pbnRlciBmcm9tX3B0cihmcm9tX3BhdGgp OworLQorLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlICJmcm9tIiBsb2NhdGlvbiBtdXN0IGV4 aXN0IC0gdXNlIGF0KCkKKy0gICAgICAgICAgICAgICAgICAgIGJhc2ljX2pzb24gdiA9IHJlc3Vs dC5hdChmcm9tX3B0cik7CistCistICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbW92ZSBvcGVy YXRpb24gaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBhCistICAgICAgICAgICAgICAgICAg ICAvLyAicmVtb3ZlIiBvcGVyYXRpb24gb24gdGhlICJmcm9tIiBsb2NhdGlvbiwgZm9sbG93ZWQK Ky0gICAgICAgICAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGJ5IGFuICJhZGQiIG9wZXJhdGlv biBhdCB0aGUgdGFyZ2V0CistICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiB3aXRoIHRo ZSB2YWx1ZSB0aGF0IHdhcyBqdXN0IHJlbW92ZWQuCistICAgICAgICAgICAgICAgICAgICBvcGVy YXRpb25fcmVtb3ZlKGZyb21fcHRyKTsKKy0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbl9h ZGQocHRyLCB2KTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAg ICB9CistCistICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6Y29weToKKy0g ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBmcm9tX3Bh dGggPSBnZXRfdmFsdWUoImNvcHkiLCAiZnJvbSIsIHRydWUpLnRlbXBsYXRlIGdldDxzdGQ6OnN0 cmluZz4oKTsKKy0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcG9pbnRlciBmcm9tX3B0 cihmcm9tX3BhdGgpOworLQorLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlICJmcm9tIiBsb2Nh dGlvbiBtdXN0IGV4aXN0IC0gdXNlIGF0KCkKKy0gICAgICAgICAgICAgICAgICAgIGJhc2ljX2pz b24gdiA9IHJlc3VsdC5hdChmcm9tX3B0cik7CistCistICAgICAgICAgICAgICAgICAgICAvLyBU aGUgY29weSBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIGFuICJhZGQiCistICAgICAgICAg ICAgICAgICAgICAvLyBvcGVyYXRpb24gYXQgdGhlIHRhcmdldCBsb2NhdGlvbiB1c2luZyB0aGUg dmFsdWUKKy0gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiB0aGUgImZyb20iIG1l bWJlci4KKy0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbl9hZGQocHRyLCB2KTsKKy0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAg ICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6dGVzdDoKKy0gICAgICAgICAgICAgICAgewor LSAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CistICAgICAgICAgICAg ICAgICAgICBKU09OX1RSWQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGNoZWNrIGlmICJ2YWx1ZSIgbWF0Y2hlcyB0aGUgb25lIGF0ICJwYXRoIgor LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAicGF0aCIgbG9jYXRpb24gbXVzdCBleGlz dCAtIHVzZSBhdCgpCistICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IChyZXN1bHQu YXQocHRyKSA9PSBnZXRfdmFsdWUoInRlc3QiLCAidmFsdWUiLCBmYWxzZSkpOworLSAgICAgICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgSlNPTl9JTlRFUk5BTF9DQVRDSCAo b3V0X29mX3JhbmdlJikKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgICAgICAvLyBpZ25vcmUgb3V0IG9mIHJhbmdlIGVycm9yczogc3VjY2VzcyByZW1haW5zIGZh bHNlCistICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICAvLyB0 aHJvdyBhbiBleGNlcHRpb24gaWYgdGVzdCBmYWlscworLSAgICAgICAgICAgICAgICAgICAgaWYg KEpTT05fSEVETEVZX1VOTElLRUxZKCFzdWNjZXNzKSkKKy0gICAgICAgICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgICAgICAgICBKU09OX1RIUk9XKG90aGVyX2Vycm9yOjpjcmVhdGUo NTAxLCAidW5zdWNjZXNzZnVsOiAiICsgdmFsLmR1bXAoKSwgdmFsKSk7CistICAgICAgICAgICAg ICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAg ICAgfQorLQorLSAgICAgICAgICAgICAgICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6OmludmFsaWQ6 CistICAgICAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgIHsKKy0gICAgICAg ICAgICAgICAgICAgIC8vIG9wIG11c3QgYmUgImFkZCIsICJyZW1vdmUiLCAicmVwbGFjZSIsICJt b3ZlIiwgImNvcHkiLCBvcgorLSAgICAgICAgICAgICAgICAgICAgLy8gInRlc3QiCistICAgICAg ICAgICAgICAgICAgICBKU09OX1RIUk9XKHBhcnNlX2Vycm9yOjpjcmVhdGUoMTA1LCAwLCAib3Bl cmF0aW9uIHZhbHVlICciICsgb3AgKyAiJyBpcyBpbnZhbGlkIiwgdmFsKSk7CistICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICB9CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4g cmVzdWx0OworLSAgICB9CistCistICAgIC8vLyBAYnJpZWYgY3JlYXRlcyBhIGRpZmYgYXMgYSBK U09OIHBhdGNoCistICAgIC8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNp Y19qc29uL2RpZmYvCistICAgIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVAorLSAgICBz dGF0aWMgYmFzaWNfanNvbiBkaWZmKGNvbnN0IGJhc2ljX2pzb24mIHNvdXJjZSwgY29uc3QgYmFz aWNfanNvbiYgdGFyZ2V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6 c3RyaW5nJiBwYXRoID0gIiIpCistICAgIHsKKy0gICAgICAgIC8vIHRoZSBwYXRjaAorLSAgICAg ICAgYmFzaWNfanNvbiByZXN1bHQodmFsdWVfdDo6YXJyYXkpOworLQorLSAgICAgICAgLy8gaWYg dGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUsIHJldHVybiBlbXB0eSBwYXRjaAorLSAgICAgICAgaWYg KHNvdXJjZSA9PSB0YXJnZXQpCistICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIHJlc3Vs dDsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIGlmIChzb3VyY2UudHlwZSgpICE9IHRhcmdldC50 eXBlKCkpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gZGlmZmVyZW50IHR5cGVzOiByZXBs YWNlIHZhbHVlCistICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjaygKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIHsib3AiLCAicmVwbGFjZSJ9LCB7InBhdGgiLCBwYXRofSwgeyJ2 YWx1ZSIsIHRhcmdldH0KKy0gICAgICAgICAgICB9KTsKKy0gICAgICAgICAgICByZXR1cm4gcmVz dWx0OworLSAgICAgICAgfQorLQorLSAgICAgICAgc3dpdGNoIChzb3VyY2UudHlwZSgpKQorLSAg ICAgICAgeworLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CistICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAvLyBmaXJzdCBwYXNzOiB0cmF2ZXJzZSBjb21tb24gZWxlbWVu dHMKKy0gICAgICAgICAgICAgICAgc3RkOjpzaXplX3QgaSA9IDA7CistICAgICAgICAgICAgICAg IHdoaWxlIChpIDwgc291cmNlLnNpemUoKSAmJiBpIDwgdGFyZ2V0LnNpemUoKSkKKy0gICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzaXZlIGNhbGwgdG8gY29t cGFyZSBhcnJheSB2YWx1ZXMgYXQgaW5kZXggaQorLSAgICAgICAgICAgICAgICAgICAgYXV0byB0 ZW1wX2RpZmYgPSBkaWZmKHNvdXJjZVtpXSwgdGFyZ2V0W2ldLCBwYXRoICsgIi8iICsgc3RkOjp0 b19zdHJpbmcoaSkpOworLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydChyZXN1bHQu ZW5kKCksIHRlbXBfZGlmZi5iZWdpbigpLCB0ZW1wX2RpZmYuZW5kKCkpOworLSAgICAgICAgICAg ICAgICAgICAgKytpOworLSAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIC8v IFdlIG5vdyByZWFjaGVkIHRoZSBlbmQgb2YgYXQgbGVhc3Qgb25lIGFycmF5CistICAgICAgICAg ICAgICAgIC8vIGluIGEgc2Vjb25kIHBhc3MsIHRyYXZlcnNlIHRoZSByZW1haW5pbmcgZWxlbWVu dHMKKy0KKy0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG15IHJlbWFpbmluZyBlbGVtZW50cwor LSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGVuZF9pbmRleCA9IHN0YXRpY19jYXN0PGRpZmZl cmVuY2VfdHlwZT4ocmVzdWx0LnNpemUoKSk7CistICAgICAgICAgICAgICAgIHdoaWxlIChpIDwg c291cmNlLnNpemUoKSkKKy0gICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAg Ly8gYWRkIG9wZXJhdGlvbnMgaW4gcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBpbnZhbGlkCistICAg ICAgICAgICAgICAgICAgICAvLyBpbmRpY2VzCistICAgICAgICAgICAgICAgICAgICByZXN1bHQu aW5zZXJ0KHJlc3VsdC5iZWdpbigpICsgZW5kX2luZGV4LCBvYmplY3QoCistICAgICAgICAgICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgeyJvcCIsICJyZW1vdmUifSwKKy0g ICAgICAgICAgICAgICAgICAgICAgICB7InBhdGgiLCBwYXRoICsgIi8iICsgc3RkOjp0b19zdHJp bmcoaSl9CistICAgICAgICAgICAgICAgICAgICB9KSk7CistICAgICAgICAgICAgICAgICAgICAr K2k7CistICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgLy8gYWRkIG90aGVy IHJlbWFpbmluZyBlbGVtZW50cworLSAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHRhcmdldC5z aXplKCkpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5w dXNoX2JhY2soCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAg ICAgeyJvcCIsICJhZGQifSwKKy0gICAgICAgICAgICAgICAgICAgICAgICB7InBhdGgiLCBwYXRo ICsgIi8tIn0sCistICAgICAgICAgICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHRhcmdldFtpXX0K Ky0gICAgICAgICAgICAgICAgICAgIH0pOworLSAgICAgICAgICAgICAgICAgICAgKytpOworLSAg ICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKy0gICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBhc3M6IHRyYXZlcnNlIHRoaXMgb2JqZWN0J3Mg ZWxlbWVudHMKKy0gICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gc291cmNlLmNiZWdpbigp OyBpdCAhPSBzb3VyY2UuY2VuZCgpOyArK2l0KQorLSAgICAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgICAgICAvLyBlc2NhcGUgdGhlIGtleSBuYW1lIHRvIGJlIHVzZWQgaW4gYSBKU09O IHBhdGNoCistICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIHBhdGhfa2V5ID0gcGF0aCAr ICIvIiArIGRldGFpbDo6ZXNjYXBlKGl0LmtleSgpKTsKKy0KKy0gICAgICAgICAgICAgICAgICAg IGlmICh0YXJnZXQuZmluZChpdC5rZXkoKSkgIT0gdGFyZ2V0LmVuZCgpKQorLSAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZSBjYWxsIHRv IGNvbXBhcmUgb2JqZWN0IHZhbHVlcyBhdCBrZXkgaXQKKy0gICAgICAgICAgICAgICAgICAgICAg ICBhdXRvIHRlbXBfZGlmZiA9IGRpZmYoaXQudmFsdWUoKSwgdGFyZ2V0W2l0LmtleSgpXSwgcGF0 aF9rZXkpOworLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQocmVzdWx0LmVu ZCgpLCB0ZW1wX2RpZmYuYmVnaW4oKSwgdGVtcF9kaWZmLmVuZCgpKTsKKy0gICAgICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGtleSB0aGF0IGlzIG5vdCBp biBvIC0+IHJlbW92ZSBpdAorLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2Jh Y2sob2JqZWN0KAorLSAgICAgICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgeyJvcCIsICJyZW1vdmUifSwgeyJwYXRoIiwgcGF0aF9rZXl9CistICAgICAg ICAgICAgICAgICAgICAgICAgfSkpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAg ICAgICAgICB9CistCistICAgICAgICAgICAgICAgIC8vIHNlY29uZCBwYXNzOiB0cmF2ZXJzZSBv dGhlciBvYmplY3QncyBlbGVtZW50cworLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSB0 YXJnZXQuY2JlZ2luKCk7IGl0ICE9IHRhcmdldC5jZW5kKCk7ICsraXQpCistICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuZmluZChpdC5rZXkoKSkgPT0g c291cmNlLmVuZCgpKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAg ICAgICAgIC8vIGZvdW5kIGEga2V5IHRoYXQgaXMgbm90IGluIHRoaXMgLT4gYWRkIGl0CistICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBwYXRoX2tleSA9IHBhdGggKyAiLyIgKyBk ZXRhaWw6OmVzY2FwZShpdC5rZXkoKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0 LnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsib3AiLCAiYWRkIn0sIHsicGF0aCIsIHBhdGhfa2V5fSwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIGl0LnZhbHVlKCl9CistICAgICAgICAgICAg ICAgICAgICAgICAgfSk7CistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAg IH0KKy0KKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorLQorLSAgICAg ICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0 cmluZzoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CistICAgICAgICAgICAg Y2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6 Om51bWJlcl91bnNpZ25lZDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9h dDoKKy0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJpbmFyeToKKy0gICAgICAgICAgICBjYXNl IHZhbHVlX3Q6OmRpc2NhcmRlZDoKKy0gICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgLy8gYm90aCBwcmltaXRpdmUgdHlwZTogcmVwbGFjZSB2YWx1 ZQorLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKAorLSAgICAgICAgICAgICAgICB7 CistICAgICAgICAgICAgICAgICAgICB7Im9wIiwgInJlcGxhY2UifSwgeyJwYXRoIiwgcGF0aH0s IHsidmFsdWUiLCB0YXJnZXR9CistICAgICAgICAgICAgICAgIH0pOworLSAgICAgICAgICAgICAg ICBicmVhazsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistCistICAgICAgICByZXR1cm4g cmVzdWx0OworLSAgICB9CistCistICAgIC8vLyBAfQorLQorLSAgICAvLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworLSAgICAvLyBKU09OIE1lcmdlIFBhdGNoIGZ1bmN0aW9ucyAvLwor LSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLQorLSAgICAvLy8gQG5hbWUg SlNPTiBNZXJnZSBQYXRjaCBmdW5jdGlvbnMKKy0gICAgLy8vIEB7CistCistICAgIC8vLyBAYnJp ZWYgYXBwbGllcyBhIEpTT04gTWVyZ2UgUGF0Y2gKKy0gICAgLy8vIEBzYSBodHRwczovL2pzb24u bmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vbWVyZ2VfcGF0Y2gvCistICAgIHZvaWQgbWVyZ2Vf cGF0Y2goY29uc3QgYmFzaWNfanNvbiYgYXBwbHlfcGF0Y2gpCistICAgIHsKKy0gICAgICAgIGlm IChhcHBseV9wYXRjaC5pc19vYmplY3QoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBpZiAo IWlzX29iamVjdCgpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgKnRoaXMgPSBv YmplY3QoKTsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gYXBw bHlfcGF0Y2guYmVnaW4oKTsgaXQgIT0gYXBwbHlfcGF0Y2guZW5kKCk7ICsraXQpCistICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUoKS5pc19udWxsKCkpCistICAg ICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGVyYXNlKGl0LmtleSgpKTsKKy0g ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yW10oaXQua2V5KCkpLm1lcmdlX3BhdGNo KGl0LnZhbHVlKCkpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgfQorLSAgICAg ICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAgICAgICAgICAgICp0aGlzID0gYXBw bHlfcGF0Y2g7CistICAgICAgICB9CistICAgIH0KKy0KKy0gICAgLy8vIEB9CistfTsKKy0KKy0v Ly8gQGJyaWVmIHVzZXItZGVmaW5lZCB0b19zdHJpbmcgZnVuY3Rpb24gZm9yIEpTT04gdmFsdWVz CistLy8vIEBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vdG9fc3Ry aW5nLworLU5MT0hNQU5OX0JBU0lDX0pTT05fVFBMX0RFQ0xBUkFUSU9OCistc3RkOjpzdHJpbmcg dG9fc3RyaW5nKGNvbnN0IE5MT0hNQU5OX0JBU0lDX0pTT05fVFBMJiBqKQorLXsKKy0gICAgcmV0 dXJuIGouZHVtcCgpOworLX0KKy0KKy19IC8vIG5hbWVzcGFjZSBubG9obWFubgorLQorLS8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCistLy8gbm9ubWVtYmVyIHN1cHBvcnQgLy8KKy0vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLworLQorLW5hbWVzcGFjZSBzdGQgLy8gTk9MSU5UKGNlcnQtZGNsNTgtY3Bw KQorLXsKKy0KKy0vLy8gQGJyaWVmIGhhc2ggdmFsdWUgZm9yIEpTT04gb2JqZWN0cworLS8vLyBA c2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29uL3N0ZF9oYXNoLworLU5M T0hNQU5OX0JBU0lDX0pTT05fVFBMX0RFQ0xBUkFUSU9OCistc3RydWN0IGhhc2g8bmxvaG1hbm46 Ok5MT0hNQU5OX0JBU0lDX0pTT05fVFBMPgorLXsKKy0gICAgc3RkOjpzaXplX3Qgb3BlcmF0b3Io KShjb25zdCBubG9obWFubjo6TkxPSE1BTk5fQkFTSUNfSlNPTl9UUEwmIGopIGNvbnN0CistICAg IHsKKy0gICAgICAgIHJldHVybiBubG9obWFubjo6ZGV0YWlsOjpoYXNoKGopOworLSAgICB9Cist fTsKKy0KKy0vLyBzcGVjaWFsaXphdGlvbiBmb3Igc3RkOjpsZXNzPHZhbHVlX3Q+CistdGVtcGxh dGU8PgorLXN0cnVjdCBsZXNzPCA6Om5sb2htYW5uOjpkZXRhaWw6OnZhbHVlX3Q+IC8vIGRvIG5v dCByZW1vdmUgdGhlIHNwYWNlIGFmdGVyICc8Jywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9o bWFubi9qc29uL3B1bGwvNjc5CisteworLSAgICAvKiEKKy0gICAgQGJyaWVmIGNvbXBhcmUgdHdv IHZhbHVlX3QgZW51bSB2YWx1ZXMKKy0gICAgQHNpbmNlIHZlcnNpb24gMy4wLjAKKy0gICAgKi8K Ky0gICAgYm9vbCBvcGVyYXRvcigpKG5sb2htYW5uOjpkZXRhaWw6OnZhbHVlX3QgbGhzLAorLSAg ICAgICAgICAgICAgICAgICAgbmxvaG1hbm46OmRldGFpbDo6dmFsdWVfdCByaHMpIGNvbnN0IG5v ZXhjZXB0CistICAgIHsKKy0gICAgICAgIHJldHVybiBubG9obWFubjo6ZGV0YWlsOjpvcGVyYXRv cjwobGhzLCByaHMpOworLSAgICB9CistfTsKKy0KKy0vLyBDKysyMCBwcm9oaWJpdCBmdW5jdGlv biBzcGVjaWFsaXphdGlvbiBpbiB0aGUgc3RkIG5hbWVzcGFjZS4KKy0jaWZuZGVmIEpTT05fSEFT X0NQUF8yMAorLQorLS8vLyBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdHdvIEpTT04g b2JqZWN0cworLS8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2htYW5uLm1lL2FwaS9iYXNpY19qc29u L3N0ZF9zd2FwLworLU5MT0hNQU5OX0JBU0lDX0pTT05fVFBMX0RFQ0xBUkFUSU9OCistaW5saW5l IHZvaWQgc3dhcChubG9obWFubjo6TkxPSE1BTk5fQkFTSUNfSlNPTl9UUEwmIGoxLCBubG9obWFu bjo6TkxPSE1BTk5fQkFTSUNfSlNPTl9UUEwmIGoyKSBub2V4Y2VwdCggIC8vIE5PTElOVChyZWFk YWJpbGl0eS1pbmNvbnNpc3RlbnQtZGVjbGFyYXRpb24tcGFyYW1ldGVyLW5hbWUpCistICAgIGlz X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPG5sb2htYW5uOjpOTE9ITUFOTl9CQVNJQ19KU09O X1RQTD46OnZhbHVlJiYgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PTElOVChtaXNjLXJl ZHVuZGFudC1leHByZXNzaW9uKQorLSAgICBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxubG9o bWFubjo6TkxPSE1BTk5fQkFTSUNfSlNPTl9UUEw+Ojp2YWx1ZSkKKy17CistICAgIGoxLnN3YXAo ajIpOworLX0KKy0KKy0jZW5kaWYKKy0KKy19IC8vIG5hbWVzcGFjZSBzdGQKKy0KKy0vLy8gQGJy aWVmIHVzZXItZGVmaW5lZCBzdHJpbmcgbGl0ZXJhbCBmb3IgSlNPTiB2YWx1ZXMKKy0vLy8gQHNh IGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvYmFzaWNfanNvbi9vcGVyYXRvcl9saXRlcmFs X2pzb24vCistSlNPTl9IRURMRVlfTk9OX05VTEwoMSkKKy1pbmxpbmUgbmxvaG1hbm46Ompzb24g b3BlcmF0b3IgIiIgX2pzb24oY29uc3QgY2hhciogcywgc3RkOjpzaXplX3QgbikKKy17CistICAg IHJldHVybiBubG9obWFubjo6anNvbjo6cGFyc2UocywgcyArIG4pOworLX0KKy0KKy0vLy8gQGJy aWVmIHVzZXItZGVmaW5lZCBzdHJpbmcgbGl0ZXJhbCBmb3IgSlNPTiBwb2ludGVyCistLy8vIEBz YSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2Jhc2ljX2pzb24vb3BlcmF0b3JfbGl0ZXJh bF9qc29uX3BvaW50ZXIvCistSlNPTl9IRURMRVlfTk9OX05VTEwoMSkKKy1pbmxpbmUgbmxvaG1h bm46Ompzb246Ompzb25fcG9pbnRlciBvcGVyYXRvciAiIiBfanNvbl9wb2ludGVyKGNvbnN0IGNo YXIqIHMsIHN0ZDo6c2l6ZV90IG4pCisteworLSAgICByZXR1cm4gbmxvaG1hbm46Ompzb246Ompz b25fcG9pbnRlcihzdGQ6OnN0cmluZyhzLCBuKSk7CistfQorLQorLS8vICNpbmNsdWRlIDxubG9o bWFubi9kZXRhaWwvbWFjcm9fdW5zY29wZS5ocHA+CistCistCistLy8gcmVzdG9yZSBjbGFuZyBk aWFnbm9zdGljIHNldHRpbmdzCistI2lmIGRlZmluZWQoX19jbGFuZ19fKQorLSAgICAjcHJhZ21h IGNsYW5nIGRpYWdub3N0aWMgcG9wCistI2VuZGlmCistCistLy8gY2xlYW4gdXAKKy0jdW5kZWYg SlNPTl9BU1NFUlQKKy0jdW5kZWYgSlNPTl9JTlRFUk5BTF9DQVRDSAorLSN1bmRlZiBKU09OX0NB VENICistI3VuZGVmIEpTT05fVEhST1cKKy0jdW5kZWYgSlNPTl9UUlkKKy0jdW5kZWYgSlNPTl9Q UklWQVRFX1VOTEVTU19URVNURUQKKy0jdW5kZWYgSlNPTl9IQVNfQ1BQXzExCistI3VuZGVmIEpT T05fSEFTX0NQUF8xNAorLSN1bmRlZiBKU09OX0hBU19DUFBfMTcKKy0jdW5kZWYgSlNPTl9IQVNf Q1BQXzIwCistI3VuZGVmIEpTT05fSEFTX0ZJTEVTWVNURU0KKy0jdW5kZWYgSlNPTl9IQVNfRVhQ RVJJTUVOVEFMX0ZJTEVTWVNURU0KKy0jdW5kZWYgTkxPSE1BTk5fQkFTSUNfSlNPTl9UUExfREVD TEFSQVRJT04KKy0jdW5kZWYgTkxPSE1BTk5fQkFTSUNfSlNPTl9UUEwKKy0jdW5kZWYgSlNPTl9F WFBMSUNJVAorLSN1bmRlZiBOTE9ITUFOTl9DQU5fQ0FMTF9TVERfRlVOQ19JTVBMCistCistLy8g I2luY2x1ZGUgPG5sb2htYW5uL3RoaXJkcGFydHkvaGVkbGV5L2hlZGxleV91bmRlZi5ocHA+Cist CistCistI3VuZGVmIEpTT05fSEVETEVZX0FMV0FZU19JTkxJTkUKKy0jdW5kZWYgSlNPTl9IRURM RVlfQVJNX1ZFUlNJT04KKy0jdW5kZWYgSlNPTl9IRURMRVlfQVJNX1ZFUlNJT05fQ0hFQ0sKKy0j dW5kZWYgSlNPTl9IRURMRVlfQVJSQVlfUEFSQU0KKy0jdW5kZWYgSlNPTl9IRURMRVlfQVNTVU1F CistI3VuZGVmIEpTT05fSEVETEVZX0JFR0lOX0NfREVDTFMKKy0jdW5kZWYgSlNPTl9IRURMRVlf Q0xBTkdfSEFTX0FUVFJJQlVURQorLSN1bmRlZiBKU09OX0hFRExFWV9DTEFOR19IQVNfQlVJTFRJ TgorLSN1bmRlZiBKU09OX0hFRExFWV9DTEFOR19IQVNfQ1BQX0FUVFJJQlVURQorLSN1bmRlZiBK U09OX0hFRExFWV9DTEFOR19IQVNfREVDTFNQRUNfREVDTFNQRUNfQVRUUklCVVRFCistI3VuZGVm IEpTT05fSEVETEVZX0NMQU5HX0hBU19FWFRFTlNJT04KKy0jdW5kZWYgSlNPTl9IRURMRVlfQ0xB TkdfSEFTX0ZFQVRVUkUKKy0jdW5kZWYgSlNPTl9IRURMRVlfQ0xBTkdfSEFTX1dBUk5JTkcKKy0j dW5kZWYgSlNPTl9IRURMRVlfQ09NUENFUlRfVkVSU0lPTgorLSN1bmRlZiBKU09OX0hFRExFWV9D T01QQ0VSVF9WRVJTSU9OX0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX0NPTkNBVAorLSN1bmRl ZiBKU09OX0hFRExFWV9DT05DQVQzCistI3VuZGVmIEpTT05fSEVETEVZX0NPTkNBVDNfRVgKKy0j dW5kZWYgSlNPTl9IRURMRVlfQ09OQ0FUX0VYCistI3VuZGVmIEpTT05fSEVETEVZX0NPTlNUCist I3VuZGVmIEpTT05fSEVETEVZX0NPTlNURVhQUgorLSN1bmRlZiBKU09OX0hFRExFWV9DT05TVF9D QVNUCistI3VuZGVmIEpTT05fSEVETEVZX0NQUF9DQVNUCistI3VuZGVmIEpTT05fSEVETEVZX0NS QVlfVkVSU0lPTgorLSN1bmRlZiBKU09OX0hFRExFWV9DUkFZX1ZFUlNJT05fQ0hFQ0sKKy0jdW5k ZWYgSlNPTl9IRURMRVlfQ19ERUNMCistI3VuZGVmIEpTT05fSEVETEVZX0RFUFJFQ0FURUQKKy0j dW5kZWYgSlNPTl9IRURMRVlfREVQUkVDQVRFRF9GT1IKKy0jdW5kZWYgSlNPTl9IRURMRVlfRElB R05PU1RJQ19ESVNBQkxFX0NBU1RfUVVBTAorLSN1bmRlZiBKU09OX0hFRExFWV9ESUFHTk9TVElD X0RJU0FCTEVfQ1BQOThfQ09NUEFUX1dSQVBfCistI3VuZGVmIEpTT05fSEVETEVZX0RJQUdOT1NU SUNfRElTQUJMRV9ERVBSRUNBVEVECistI3VuZGVmIEpTT05fSEVETEVZX0RJQUdOT1NUSUNfRElT QUJMRV9VTktOT1dOX0NQUF9BVFRSSUJVVEVTCistI3VuZGVmIEpTT05fSEVETEVZX0RJQUdOT1NU SUNfRElTQUJMRV9VTktOT1dOX1BSQUdNQVMKKy0jdW5kZWYgSlNPTl9IRURMRVlfRElBR05PU1RJ Q19ESVNBQkxFX1VOVVNFRF9GVU5DVElPTgorLSN1bmRlZiBKU09OX0hFRExFWV9ESUFHTk9TVElD X1BPUAorLSN1bmRlZiBKU09OX0hFRExFWV9ESUFHTk9TVElDX1BVU0gKKy0jdW5kZWYgSlNPTl9I RURMRVlfRE1DX1ZFUlNJT04KKy0jdW5kZWYgSlNPTl9IRURMRVlfRE1DX1ZFUlNJT05fQ0hFQ0sK Ky0jdW5kZWYgSlNPTl9IRURMRVlfRU1QVFlfQkFTRVMKKy0jdW5kZWYgSlNPTl9IRURMRVlfRU1T Q1JJUFRFTl9WRVJTSU9OCistI3VuZGVmIEpTT05fSEVETEVZX0VNU0NSSVBURU5fVkVSU0lPTl9D SEVDSworLSN1bmRlZiBKU09OX0hFRExFWV9FTkRfQ19ERUNMUworLSN1bmRlZiBKU09OX0hFRExF WV9GTEFHUworLSN1bmRlZiBKU09OX0hFRExFWV9GTEFHU19DQVNUCistI3VuZGVmIEpTT05fSEVE TEVZX0dDQ19IQVNfQVRUUklCVVRFCistI3VuZGVmIEpTT05fSEVETEVZX0dDQ19IQVNfQlVJTFRJ TgorLSN1bmRlZiBKU09OX0hFRExFWV9HQ0NfSEFTX0NQUF9BVFRSSUJVVEUKKy0jdW5kZWYgSlNP Tl9IRURMRVlfR0NDX0hBU19ERUNMU1BFQ19BVFRSSUJVVEUKKy0jdW5kZWYgSlNPTl9IRURMRVlf R0NDX0hBU19FWFRFTlNJT04KKy0jdW5kZWYgSlNPTl9IRURMRVlfR0NDX0hBU19GRUFUVVJFCist I3VuZGVmIEpTT05fSEVETEVZX0dDQ19IQVNfV0FSTklORworLSN1bmRlZiBKU09OX0hFRExFWV9H Q0NfTk9UX0NMQU5HX1ZFUlNJT05fQ0hFQ0sKKy0jdW5kZWYgSlNPTl9IRURMRVlfR0NDX1ZFUlNJ T04KKy0jdW5kZWYgSlNPTl9IRURMRVlfR0NDX1ZFUlNJT05fQ0hFQ0sKKy0jdW5kZWYgSlNPTl9I RURMRVlfR05VQ19IQVNfQVRUUklCVVRFCistI3VuZGVmIEpTT05fSEVETEVZX0dOVUNfSEFTX0JV SUxUSU4KKy0jdW5kZWYgSlNPTl9IRURMRVlfR05VQ19IQVNfQ1BQX0FUVFJJQlVURQorLSN1bmRl ZiBKU09OX0hFRExFWV9HTlVDX0hBU19ERUNMU1BFQ19BVFRSSUJVVEUKKy0jdW5kZWYgSlNPTl9I RURMRVlfR05VQ19IQVNfRVhURU5TSU9OCistI3VuZGVmIEpTT05fSEVETEVZX0dOVUNfSEFTX0ZF QVRVUkUKKy0jdW5kZWYgSlNPTl9IRURMRVlfR05VQ19IQVNfV0FSTklORworLSN1bmRlZiBKU09O X0hFRExFWV9HTlVDX1ZFUlNJT04KKy0jdW5kZWYgSlNPTl9IRURMRVlfR05VQ19WRVJTSU9OX0NI RUNLCistI3VuZGVmIEpTT05fSEVETEVZX0hBU19BVFRSSUJVVEUKKy0jdW5kZWYgSlNPTl9IRURM RVlfSEFTX0JVSUxUSU4KKy0jdW5kZWYgSlNPTl9IRURMRVlfSEFTX0NQUF9BVFRSSUJVVEUKKy0j dW5kZWYgSlNPTl9IRURMRVlfSEFTX0NQUF9BVFRSSUJVVEVfTlMKKy0jdW5kZWYgSlNPTl9IRURM RVlfSEFTX0RFQ0xTUEVDX0FUVFJJQlVURQorLSN1bmRlZiBKU09OX0hFRExFWV9IQVNfRVhURU5T SU9OCistI3VuZGVmIEpTT05fSEVETEVZX0hBU19GRUFUVVJFCistI3VuZGVmIEpTT05fSEVETEVZ X0hBU19XQVJOSU5HCistI3VuZGVmIEpTT05fSEVETEVZX0lBUl9WRVJTSU9OCistI3VuZGVmIEpT T05fSEVETEVZX0lBUl9WRVJTSU9OX0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX0lCTV9WRVJT SU9OCistI3VuZGVmIEpTT05fSEVETEVZX0lCTV9WRVJTSU9OX0NIRUNLCistI3VuZGVmIEpTT05f SEVETEVZX0lNUE9SVAorLSN1bmRlZiBKU09OX0hFRExFWV9JTkxJTkUKKy0jdW5kZWYgSlNPTl9I RURMRVlfSU5URUxfQ0xfVkVSU0lPTgorLSN1bmRlZiBKU09OX0hFRExFWV9JTlRFTF9DTF9WRVJT SU9OX0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX0lOVEVMX1ZFUlNJT04KKy0jdW5kZWYgSlNP Tl9IRURMRVlfSU5URUxfVkVSU0lPTl9DSEVDSworLSN1bmRlZiBKU09OX0hFRExFWV9JU19DT05T VEFOVAorLSN1bmRlZiBKU09OX0hFRExFWV9JU19DT05TVEVYUFJfCistI3VuZGVmIEpTT05fSEVE TEVZX0xJS0VMWQorLSN1bmRlZiBKU09OX0hFRExFWV9NQUxMT0MKKy0jdW5kZWYgSlNPTl9IRURM RVlfTUNTVF9MQ0NfVkVSU0lPTgorLSN1bmRlZiBKU09OX0hFRExFWV9NQ1NUX0xDQ19WRVJTSU9O X0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX01FU1NBR0UKKy0jdW5kZWYgSlNPTl9IRURMRVlf TVNWQ19WRVJTSU9OCistI3VuZGVmIEpTT05fSEVETEVZX01TVkNfVkVSU0lPTl9DSEVDSworLSN1 bmRlZiBKU09OX0hFRExFWV9ORVZFUl9JTkxJTkUKKy0jdW5kZWYgSlNPTl9IRURMRVlfTk9OX05V TEwKKy0jdW5kZWYgSlNPTl9IRURMRVlfTk9fRVNDQVBFCistI3VuZGVmIEpTT05fSEVETEVZX05P X1JFVFVSTgorLSN1bmRlZiBKU09OX0hFRExFWV9OT19USFJPVworLSN1bmRlZiBKU09OX0hFRExF WV9OVUxMCistI3VuZGVmIEpTT05fSEVETEVZX1BFTExFU19WRVJTSU9OCistI3VuZGVmIEpTT05f SEVETEVZX1BFTExFU19WRVJTSU9OX0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX1BHSV9WRVJT SU9OCistI3VuZGVmIEpTT05fSEVETEVZX1BHSV9WRVJTSU9OX0NIRUNLCistI3VuZGVmIEpTT05f SEVETEVZX1BSRURJQ1QKKy0jdW5kZWYgSlNPTl9IRURMRVlfUFJJTlRGX0ZPUk1BVAorLSN1bmRl ZiBKU09OX0hFRExFWV9QUklWQVRFCistI3VuZGVmIEpTT05fSEVETEVZX1BVQkxJQworLSN1bmRl ZiBKU09OX0hFRExFWV9QVVJFCistI3VuZGVmIEpTT05fSEVETEVZX1JFSU5URVJQUkVUX0NBU1QK Ky0jdW5kZWYgSlNPTl9IRURMRVlfUkVRVUlSRQorLSN1bmRlZiBKU09OX0hFRExFWV9SRVFVSVJF X0NPTlNURVhQUgorLSN1bmRlZiBKU09OX0hFRExFWV9SRVFVSVJFX01TRworLSN1bmRlZiBKU09O X0hFRExFWV9SRVNUUklDVAorLSN1bmRlZiBKU09OX0hFRExFWV9SRVRVUk5TX05PTl9OVUxMCist I3VuZGVmIEpTT05fSEVETEVZX1NFTlRJTkVMCistI3VuZGVmIEpTT05fSEVETEVZX1NUQVRJQ19B U1NFUlQKKy0jdW5kZWYgSlNPTl9IRURMRVlfU1RBVElDX0NBU1QKKy0jdW5kZWYgSlNPTl9IRURM RVlfU1RSSU5HSUZZCistI3VuZGVmIEpTT05fSEVETEVZX1NUUklOR0lGWV9FWAorLSN1bmRlZiBK U09OX0hFRExFWV9TVU5QUk9fVkVSU0lPTgorLSN1bmRlZiBKU09OX0hFRExFWV9TVU5QUk9fVkVS U0lPTl9DSEVDSworLSN1bmRlZiBKU09OX0hFRExFWV9USU5ZQ19WRVJTSU9OCistI3VuZGVmIEpT T05fSEVETEVZX1RJTllDX1ZFUlNJT05fQ0hFQ0sKKy0jdW5kZWYgSlNPTl9IRURMRVlfVElfQVJN Q0xfVkVSU0lPTgorLSN1bmRlZiBKU09OX0hFRExFWV9USV9BUk1DTF9WRVJTSU9OX0NIRUNLCist I3VuZGVmIEpTT05fSEVETEVZX1RJX0NMMjAwMF9WRVJTSU9OCistI3VuZGVmIEpTT05fSEVETEVZ X1RJX0NMMjAwMF9WRVJTSU9OX0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX1RJX0NMNDMwX1ZF UlNJT04KKy0jdW5kZWYgSlNPTl9IRURMRVlfVElfQ0w0MzBfVkVSU0lPTl9DSEVDSworLSN1bmRl ZiBKU09OX0hFRExFWV9USV9DTDZYX1ZFUlNJT04KKy0jdW5kZWYgSlNPTl9IRURMRVlfVElfQ0w2 WF9WRVJTSU9OX0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX1RJX0NMN1hfVkVSU0lPTgorLSN1 bmRlZiBKU09OX0hFRExFWV9USV9DTDdYX1ZFUlNJT05fQ0hFQ0sKKy0jdW5kZWYgSlNPTl9IRURM RVlfVElfQ0xQUlVfVkVSU0lPTgorLSN1bmRlZiBKU09OX0hFRExFWV9USV9DTFBSVV9WRVJTSU9O X0NIRUNLCistI3VuZGVmIEpTT05fSEVETEVZX1RJX1ZFUlNJT04KKy0jdW5kZWYgSlNPTl9IRURM RVlfVElfVkVSU0lPTl9DSEVDSworLSN1bmRlZiBKU09OX0hFRExFWV9VTkFWQUlMQUJMRQorLSN1 bmRlZiBKU09OX0hFRExFWV9VTkxJS0VMWQorLSN1bmRlZiBKU09OX0hFRExFWV9VTlBSRURJQ1RB QkxFCistI3VuZGVmIEpTT05fSEVETEVZX1VOUkVBQ0hBQkxFCistI3VuZGVmIEpTT05fSEVETEVZ X1VOUkVBQ0hBQkxFX1JFVFVSTgorLSN1bmRlZiBKU09OX0hFRExFWV9WRVJTSU9OCistI3VuZGVm IEpTT05fSEVETEVZX1ZFUlNJT05fREVDT0RFX01BSk9SCistI3VuZGVmIEpTT05fSEVETEVZX1ZF UlNJT05fREVDT0RFX01JTk9SCistI3VuZGVmIEpTT05fSEVETEVZX1ZFUlNJT05fREVDT0RFX1JF VklTSU9OCistI3VuZGVmIEpTT05fSEVETEVZX1ZFUlNJT05fRU5DT0RFCistI3VuZGVmIEpTT05f SEVETEVZX1dBUk5JTkcKKy0jdW5kZWYgSlNPTl9IRURMRVlfV0FSTl9VTlVTRURfUkVTVUxUCist I3VuZGVmIEpTT05fSEVETEVZX1dBUk5fVU5VU0VEX1JFU1VMVF9NU0cKKy0jdW5kZWYgSlNPTl9I RURMRVlfRkFMTF9USFJPVUdICistCistCistCistI2VuZGlmICAvLyBJTkNMVURFX05MT0hNQU5O X0pTT05fSFBQXworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL25sb2htYW5uL2pzb25fZndkLmhw cCBiL2luY2x1ZGUvZHBwL25sb2htYW5uL2pzb25fZndkLmhwcAorZGVsZXRlZCBmaWxlIG1vZGUg MTAwNzU1CitpbmRleCAyZDViYTM4Li4wMDAwMDAwCistLS0gYS9pbmNsdWRlL2RwcC9ubG9obWFu bi9qc29uX2Z3ZC5ocHAKKysrKyAvZGV2L251bGwKK0BAIC0xLDY0ICswLDAgQEAKKy0jaWZuZGVm IElOQ0xVREVfTkxPSE1BTk5fSlNPTl9GV0RfSFBQXworLSNkZWZpbmUgSU5DTFVERV9OTE9ITUFO Tl9KU09OX0ZXRF9IUFBfCistCistI2luY2x1ZGUgPGNzdGRpbnQ+IC8vIGludDY0X3QsIHVpbnQ2 NF90CistI2luY2x1ZGUgPG1hcD4gLy8gbWFwCistI2luY2x1ZGUgPG1lbW9yeT4gLy8gYWxsb2Nh dG9yCistI2luY2x1ZGUgPHN0cmluZz4gLy8gc3RyaW5nCistI2luY2x1ZGUgPHZlY3Rvcj4gLy8g dmVjdG9yCistCistLyohCistQGJyaWVmIG5hbWVzcGFjZSBmb3IgTmllbHMgTG9obWFubgorLUBz ZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uCistQHNpbmNlIHZlcnNpb24gMS4wLjAKKy0q LworLW5hbWVzcGFjZSBubG9obWFubgorLXsKKy0vKiEKKy1AYnJpZWYgZGVmYXVsdCBKU09OU2Vy aWFsaXplciB0ZW1wbGF0ZSBhcmd1bWVudAorLQorLVRoaXMgc2VyaWFsaXplciBpZ25vcmVzIHRo ZSB0ZW1wbGF0ZSBhcmd1bWVudHMgYW5kIHVzZXMgQURMCistKFthcmd1bWVudC1kZXBlbmRlbnQg bG9va3VwXShodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvYWRsKSkK Ky1mb3Igc2VyaWFsaXphdGlvbi4KKy0qLworLXRlbXBsYXRlPHR5cGVuYW1lIFQgPSB2b2lkLCB0 eXBlbmFtZSBTRklOQUUgPSB2b2lkPgorLXN0cnVjdCBhZGxfc2VyaWFsaXplcjsKKy0KKy0vLy8g YSBjbGFzcyB0byBzdG9yZSBKU09OIHZhbHVlcworLS8vLyBAc2EgaHR0cHM6Ly9qc29uLm5sb2ht YW5uLm1lL2FwaS9iYXNpY19qc29uLworLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5 cGVuYW1lIFYsIHR5cGVuYW1lLi4uIEFyZ3M+IGNsYXNzIE9iamVjdFR5cGUgPQorLSAgICAgICAg IHN0ZDo6bWFwLAorLSAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFy Z3M+IGNsYXNzIEFycmF5VHlwZSA9IHN0ZDo6dmVjdG9yLAorLSAgICAgICAgIGNsYXNzIFN0cmlu Z1R5cGUgPSBzdGQ6OnN0cmluZywgY2xhc3MgQm9vbGVhblR5cGUgPSBib29sLAorLSAgICAgICAg IGNsYXNzIE51bWJlckludGVnZXJUeXBlID0gc3RkOjppbnQ2NF90LAorLSAgICAgICAgIGNsYXNz IE51bWJlclVuc2lnbmVkVHlwZSA9IHN0ZDo6dWludDY0X3QsCistICAgICAgICAgY2xhc3MgTnVt YmVyRmxvYXRUeXBlID0gZG91YmxlLAorLSAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGNs YXNzIEFsbG9jYXRvclR5cGUgPSBzdGQ6OmFsbG9jYXRvciwKKy0gICAgICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBULCB0eXBlbmFtZSBTRklOQUUgPSB2b2lkPiBjbGFzcyBKU09OU2VyaWFsaXplciA9 CistICAgICAgICAgYWRsX3NlcmlhbGl6ZXIsCistICAgICAgICAgY2xhc3MgQmluYXJ5VHlwZSA9 IHN0ZDo6dmVjdG9yPHN0ZDo6dWludDhfdD4+CistY2xhc3MgYmFzaWNfanNvbjsKKy0KKy0vLy8g QGJyaWVmIEpTT04gUG9pbnRlciBkZWZpbmVzIGEgc3RyaW5nIHN5bnRheCBmb3IgaWRlbnRpZnlp bmcgYSBzcGVjaWZpYyB2YWx1ZSB3aXRoaW4gYSBKU09OIGRvY3VtZW50CistLy8vIEBzYSBodHRw czovL2pzb24ubmxvaG1hbm4ubWUvYXBpL2pzb25fcG9pbnRlci8KKy10ZW1wbGF0ZTx0eXBlbmFt ZSBCYXNpY0pzb25UeXBlPgorLWNsYXNzIGpzb25fcG9pbnRlcjsKKy0KKy0vKiEKKy1AYnJpZWYg ZGVmYXVsdCBzcGVjaWFsaXphdGlvbgorLUBzYSBodHRwczovL2pzb24ubmxvaG1hbm4ubWUvYXBp L2pzb24vCistKi8KKy11c2luZyBqc29uID0gYmFzaWNfanNvbjw+OworLQorLS8vLyBAYnJpZWYg YSBtaW5pbWFsIG1hcC1saWtlIGNvbnRhaW5lciB0aGF0IHByZXNlcnZlcyBpbnNlcnRpb24gb3Jk ZXIKKy0vLy8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvb3JkZXJlZF9tYXAvCist dGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBULCBjbGFzcyBJZ25vcmVkTGVzcywgY2xhc3MgQWxs b2NhdG9yPgorLXN0cnVjdCBvcmRlcmVkX21hcDsKKy0KKy0vLy8gQGJyaWVmIHNwZWNpYWxpemF0 aW9uIHRoYXQgbWFpbnRhaW5zIHRoZSBpbnNlcnRpb24gb3JkZXIgb2Ygb2JqZWN0IGtleXMKKy0v Ly8gQHNhIGh0dHBzOi8vanNvbi5ubG9obWFubi5tZS9hcGkvb3JkZXJlZF9qc29uLworLXVzaW5n IG9yZGVyZWRfanNvbiA9IGJhc2ljX2pzb248bmxvaG1hbm46Om9yZGVyZWRfbWFwPjsKKy0KKy19 ICAvLyBuYW1lc3BhY2UgbmxvaG1hbm4KKy0KKy0jZW5kaWYgIC8vIElOQ0xVREVfTkxPSE1BTk5f SlNPTl9GV0RfSFBQXworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL3ByZXNlbmNlLmggYi9pbmNs dWRlL2RwcC9wcmVzZW5jZS5oCitpbmRleCBlMDE4ZjkyLi5iY2YzMjJiIDEwMDY0NAorLS0tIGEv aW5jbHVkZS9kcHAvcHJlc2VuY2UuaAorKysrIGIvaW5jbHVkZS9kcHAvcHJlc2VuY2UuaAorQEAg LTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2V4cG9ydC5oPgorICNpbmNsdWRlIDxkcHAv c25vd2ZsYWtlLmg+CisgI2luY2x1ZGUgPGRwcC9lbW9qaS5oPgorLSNpbmNsdWRlIDxkcHAvbmxv aG1hbm4vanNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3ZC5ocHA+Cisg I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisgI2luY2x1ZGUgPGRwcC9qc29uX2ludGVyZmFjZS5o PgorIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL3BydW5lLmggYi9pbmNsdWRlL2RwcC9wcnVu ZS5oCitpbmRleCBkZDFiMTliLi43NTI4YTM3IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kcHAvcHJ1 bmUuaAorKysrIGIvaW5jbHVkZS9kcHAvcHJ1bmUuaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjcHJh Z21hIG9uY2UKKyAjaW5jbHVkZSA8ZHBwL2V4cG9ydC5oPgorICNpbmNsdWRlIDxkcHAvc25vd2Zs YWtlLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uX2Z3ZC5ocHA+CisrI2luY2x1ZGUg PG5sb2htYW5uL2pzb25fZndkLmhwcD4KKyAjaW5jbHVkZSA8ZHBwL2pzb25faW50ZXJmYWNlLmg+ CisgCisgbmFtZXNwYWNlIGRwcCB7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvcmVzdHJlcXVl c3QuaCBiL2luY2x1ZGUvZHBwL3Jlc3RyZXF1ZXN0LmgKK2luZGV4IDJkMTkxNWMuLjIwYTRiM2Qg MTAwNjQ0CistLS0gYS9pbmNsdWRlL2RwcC9yZXN0cmVxdWVzdC5oCisrKysgYi9pbmNsdWRlL2Rw cC9yZXN0cmVxdWVzdC5oCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIDxkcHAvc25vd2Zs YWtlLmg+CisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9pbnZpdGUu aD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxv aG1hbm4vanNvbl9md2QuaHBwPgorIAorIG5hbWVzcGFjZSBkcHAgeworIAorZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHBwL3JvbGUuaCBiL2luY2x1ZGUvZHBwL3JvbGUuaAoraW5kZXggMDBkMzgwYS4u Mzg5Y2E0MyAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHBwL3JvbGUuaAorKysrIGIvaW5jbHVkZS9k cHAvcm9sZS5oCitAQCAtMjEsNyArMjEsNyBAQAorICNwcmFnbWEgb25jZQorICNpbmNsdWRlIDxk cHAvZXhwb3J0Lmg+CisgI2luY2x1ZGUgPGRwcC9tYW5hZ2VkLmg+CistI2luY2x1ZGUgPGRwcC9u bG9obWFubi9qc29uX2Z3ZC5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb25fZndkLmhwcD4K KyAjaW5jbHVkZSA8ZHBwL3Blcm1pc3Npb25zLmg+CisgI2luY2x1ZGUgPGRwcC9ndWlsZC5oPgor ICNpbmNsdWRlIDxkcHAvanNvbl9pbnRlcmZhY2UuaD4KK2RpZmYgLS1naXQgYS9pbmNsdWRlL2Rw cC9zY2hlZHVsZWRfZXZlbnQuaCBiL2luY2x1ZGUvZHBwL3NjaGVkdWxlZF9ldmVudC5oCitpbmRl eCAyY2RkZDYzLi4zOWJlOTk3IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kcHAvc2NoZWR1bGVkX2V2 ZW50LmgKKysrKyBiL2luY2x1ZGUvZHBwL3NjaGVkdWxlZF9ldmVudC5oCitAQCAtMjQsNyArMjQs NyBAQAorICNpbmNsdWRlIDxkcHAvbWFuYWdlZC5oPgorICNpbmNsdWRlIDxkcHAvdXNlci5oPgor ICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndk LmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbl9md2QuaHBwPgorICNpbmNsdWRlIDxkcHAv anNvbl9pbnRlcmZhY2UuaD4KKyAKKyBuYW1lc3BhY2UgZHBwIHsKK2RpZmYgLS1naXQgYS9pbmNs dWRlL2RwcC9zdGFnZV9pbnN0YW5jZS5oIGIvaW5jbHVkZS9kcHAvc3RhZ2VfaW5zdGFuY2UuaAor aW5kZXggOTBhMTM0Zi4uMGFiMjA1ZSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHBwL3N0YWdlX2lu c3RhbmNlLmgKKysrKyBiL2luY2x1ZGUvZHBwL3N0YWdlX2luc3RhbmNlLmgKK0BAIC0yMiw3ICsy Miw3IEBACisgI2luY2x1ZGUgPGRwcC9leHBvcnQuaD4KKyAjaW5jbHVkZSA8ZHBwL3Nub3dmbGFr ZS5oPgorICNpbmNsdWRlIDxkcHAvbWFuYWdlZC5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4v anNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3ZC5ocHA+CisgI2luY2x1 ZGUgPHVub3JkZXJlZF9tYXA+CisgI2luY2x1ZGUgPGRwcC9qc29uX2ludGVyZmFjZS5oPgorIAor ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL3VzZXIuaCBiL2luY2x1ZGUvZHBwL3VzZXIuaAoraW5k ZXggYTcyMzk0MS4uYTc3ZmNjZiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHBwL3VzZXIuaAorKysr IGIvaW5jbHVkZS9kcHAvdXNlci5oCitAQCAtMjAsNyArMjAsNyBAQAorICAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisgI3ByYWdtYSBvbmNlCisgI2luY2x1ZGUgPGRwcC9leHBvcnQuaD4K Ky0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1h bm4vanNvbl9md2QuaHBwPgorICNpbmNsdWRlIDxkcHAvc25vd2ZsYWtlLmg+CisgI2luY2x1ZGUg PGRwcC9tYW5hZ2VkLmg+CisgI2luY2x1ZGUgPGRwcC91dGlsaXR5Lmg+CitkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcHAvdm9pY2VyZWdpb24uaCBiL2luY2x1ZGUvZHBwL3ZvaWNlcmVnaW9uLmgKK2lu ZGV4IGExZGVmMGEuLmEwYTg4ZTUgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2RwcC92b2ljZXJlZ2lv bi5oCisrKysgYi9pbmNsdWRlL2RwcC92b2ljZXJlZ2lvbi5oCitAQCAtMjEsNyArMjEsNyBAQAor ICNwcmFnbWEgb25jZQorICNpbmNsdWRlIDxkcHAvZXhwb3J0Lmg+CisgI2luY2x1ZGUgPHVub3Jk ZXJlZF9tYXA+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uX2Z3ZC5ocHA+CisrI2luY2x1 ZGUgPG5sb2htYW5uL2pzb25fZndkLmhwcD4KKyAjaW5jbHVkZSA8ZHBwL2pzb25faW50ZXJmYWNl Lmg+CisgCisgbmFtZXNwYWNlIGRwcCB7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcHAvdm9pY2Vz dGF0ZS5oIGIvaW5jbHVkZS9kcHAvdm9pY2VzdGF0ZS5oCitpbmRleCA2NGYxNTE3Li5jMTQ0NjFl IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kcHAvdm9pY2VzdGF0ZS5oCisrKysgYi9pbmNsdWRlL2Rw cC92b2ljZXN0YXRlLmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI3ByYWdtYSBvbmNlCisgI2luY2x1 ZGUgPGRwcC9leHBvcnQuaD4KKyAjaW5jbHVkZSA8ZHBwL3Nub3dmbGFrZS5oPgorLSNpbmNsdWRl IDxkcHAvbmxvaG1hbm4vanNvbl9md2QuaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uX2Z3 ZC5ocHA+CisgI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisgI2luY2x1ZGUgPGRwcC9qc29uX2lu dGVyZmFjZS5oPgorIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHBwL3dlYmhvb2suaCBiL2luY2x1 ZGUvZHBwL3dlYmhvb2suaAoraW5kZXggOThmYTE3Ni4uOTVjMDlkYyAxMDA2NDQKKy0tLSBhL2lu Y2x1ZGUvZHBwL3dlYmhvb2suaAorKysrIGIvaW5jbHVkZS9kcHAvd2ViaG9vay5oCitAQCAtMjMs NyArMjMsNyBAQAorICNpbmNsdWRlIDxkcHAvc25vd2ZsYWtlLmg+CisgI2luY2x1ZGUgPGRwcC9t aXNjLWVudW0uaD4KKyAjaW5jbHVkZSA8ZHBwL21hbmFnZWQuaD4KKy0jaW5jbHVkZSA8ZHBwL25s b2htYW5uL2pzb25fZndkLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbl9md2QuaHBwPgor ICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorICNpbmNsdWRlIDxkcHAvanNvbl9pbnRlcmZhY2Uu aD4KKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2FwcGxpY2F0aW9uLmNwcCBiL3NyYy9kcHAvYXBw bGljYXRpb24uY3BwCitpbmRleCBiNWVlYTQxLi41ZmZjOWZjIDEwMDY0NAorLS0tIGEvc3JjL2Rw cC9hcHBsaWNhdGlvbi5jcHAKKysrKyBiL3NyYy9kcHAvYXBwbGljYXRpb24uY3BwCitAQCAtMjIs NyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgorICNpbmNsdWRlIDxk cHAvc25vd2ZsYWtlLmg+CisgI2luY2x1ZGUgPGRwcC9tYW5hZ2VkLmg+CistI2luY2x1ZGUgPGRw cC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgI2lu Y2x1ZGUgPGRwcC9mbXQtbWluaW1hbC5oPgorIAorIG5hbWVzcGFjZSBkcHAgeworZGlmZiAtLWdp dCBhL3NyYy9kcHAvYXVkaXRsb2cuY3BwIGIvc3JjL2RwcC9hdWRpdGxvZy5jcHAKK2luZGV4IDcy ZWYwNzguLjJhNDU3MjkgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2F1ZGl0bG9nLmNwcAorKysrIGIv c3JjL2RwcC9hdWRpdGxvZy5jcHAKK0BAIC0yMCw3ICsyMCw3IEBACisgICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKyAjaW5jbHVkZSA8ZHBwL2F1ZGl0bG9nLmg+CisgI2luY2x1ZGUgPGRw cC9kaXNjb3JkZXZlbnRzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysj aW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgbmFtZXNwYWNlIGRwcCB7CisgCitkaWZm IC0tZ2l0IGEvc3JjL2RwcC9iYW4uY3BwIGIvc3JjL2RwcC9iYW4uY3BwCitpbmRleCBiOTU5ZDc1 Li44NjBlNWE0IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9iYW4uY3BwCisrKysgYi9zcmMvZHBwL2Jh bi5jcHAKK0BAIC0yMCw3ICsyMCw3IEBACisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KyAjaW5jbHVkZSA8ZHBwL2Jhbi5oPgorICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgor LSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pz b24uaHBwPgorIAorIG5hbWVzcGFjZSBkcHAgeworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvY2hh bm5lbC5jcHAgYi9zcmMvZHBwL2NoYW5uZWwuY3BwCitpbmRleCA0MDUzNzJjLi42NDk1YjEwIDEw MDY0NAorLS0tIGEvc3JjL2RwcC9jaGFubmVsLmNwcAorKysrIGIvc3JjL2RwcC9jaGFubmVsLmNw cAorQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8ZHBwL3JvbGUuaD4KKyAjaW5jbHVkZSA8 ZHBwL2Rpc2NvcmRldmVudHMuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNs dWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBw PgorICNpbmNsdWRlIDxkcHAvZm10LW1pbmltYWwuaD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1h bm46Ompzb247CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9jbHVzdGVyLmNwcCBiL3NyYy9kcHAvY2x1 c3Rlci5jcHAKK2luZGV4IDIxMDc1M2YuLjYyOTA0MTMgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2Ns dXN0ZXIuY3BwCisrKysgYi9zcmMvZHBwL2NsdXN0ZXIuY3BwCitAQCAtMjksNyArMjksNyBAQAor ICNpbmNsdWRlIDxkcHAvc3luYy5oPgorICNpbmNsdWRlIDxjaHJvbm8+CisgI2luY2x1ZGUgPGlv c3RyZWFtPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5s b2htYW5uL2pzb24uaHBwPgorICNpbmNsdWRlIDx1dGlsaXR5PgorICNpbmNsdWRlIDxkcHAvZm10 LW1pbmltYWwuaD4KKyAjaW5jbHVkZSA8YWxnb3JpdGhtPgorZGlmZiAtLWdpdCBhL3NyYy9kcHAv Y2x1c3Rlci9jb25maXJtYXRpb24uY3BwIGIvc3JjL2RwcC9jbHVzdGVyL2NvbmZpcm1hdGlvbi5j cHAKK2luZGV4IGM3ZTU3OWIuLmZjY2NiNGMgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2NsdXN0ZXIv Y29uZmlybWF0aW9uLmNwcAorKysrIGIvc3JjL2RwcC9jbHVzdGVyL2NvbmZpcm1hdGlvbi5jcHAK K0BAIC0xOSw3ICsxOSw3IEBACisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor ICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5o cHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIG5hbWVzcGFjZSBkcHAgewor IAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvY2x1c3Rlci90aW1lci5jcHAgYi9zcmMvZHBwL2NsdXN0 ZXIvdGltZXIuY3BwCitpbmRleCBhNGI2ZDgzLi43MTU5NTc0IDEwMDY0NAorLS0tIGEvc3JjL2Rw cC9jbHVzdGVyL3RpbWVyLmNwcAorKysrIGIvc3JjL2RwcC9jbHVzdGVyL3RpbWVyLmNwcAorQEAg LTIwLDcgKzIwLDcgQEAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICNpbmNsdWRl IDxkcHAvdGltZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKy0jaW5jbHVkZSA8ZHBw L25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyBu YW1lc3BhY2UgZHBwIHsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2Rpc2NvcmRjbGllbnQuY3Bw IGIvc3JjL2RwcC9kaXNjb3JkY2xpZW50LmNwcAoraW5kZXggOTQ0NGZjYi4uOGE0OThiOCAxMDA2 NDQKKy0tLSBhL3NyYy9kcHAvZGlzY29yZGNsaWVudC5jcHAKKysrKyBiL3NyYy9kcHAvZGlzY29y ZGNsaWVudC5jcHAKK0BAIC0yNiw3ICsyNiw3IEBACisgI2luY2x1ZGUgPGRwcC9jYWNoZS5oPgor ICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRlIDx0aHJlYWQ+CistI2luY2x1ZGUg PGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+Cisg I2luY2x1ZGUgPGRwcC9mbXQtbWluaW1hbC5oPgorICNpbmNsdWRlIDxkcHAvZXRmLmg+CisgI2lu Y2x1ZGUgPHpsaWIuaD4KK2RpZmYgLS1naXQgYS9zcmMvZHBwL2Rpc2NvcmRldmVudHMuY3BwIGIv c3JjL2RwcC9kaXNjb3JkZXZlbnRzLmNwcAoraW5kZXggOTJiZDY2ZC4uNzNiMmIyZiAxMDA2NDQK Ky0tLSBhL3NyYy9kcHAvZGlzY29yZGV2ZW50cy5jcHAKKysrKyBiL3NyYy9kcHAvZGlzY29yZGV2 ZW50cy5jcHAKK0BAIC0zMCw3ICszMCw3IEBACisgI2luY2x1ZGUgPGRwcC9ldmVudC5oPgorICNp bmNsdWRlIDxkcHAvY2FjaGUuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNs dWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBw PgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPGlvbWFuaXA+CisgI2luY2x1ZGUgPHNz dHJlYW0+CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9kaXNjb3Jkdm9pY2VjbGllbnQuY3BwIGIvc3Jj L2RwcC9kaXNjb3Jkdm9pY2VjbGllbnQuY3BwCitpbmRleCBhMWI2MjQ3Li5lODA5ZDkxIDEwMDY0 NAorLS0tIGEvc3JjL2RwcC9kaXNjb3Jkdm9pY2VjbGllbnQuY3BwCisrKysgYi9zcmMvZHBwL2Rp c2NvcmR2b2ljZWNsaWVudC5jcHAKK0BAIC00Myw3ICs0Myw3IEBACisgI2luY2x1ZGUgPGRwcC9k aXNjb3Jkdm9pY2VjbGllbnQuaD4KKyAjaW5jbHVkZSA8ZHBwL2NhY2hlLmg+CisgI2luY2x1ZGUg PGRwcC9jbHVzdGVyLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5j bHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgI2luY2x1ZGUgPGRwcC9mbXQtbWluaW1hbC5oPgor IAorICNpZmRlZiBIQVZFX1ZPSUNFCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9kdGVtcGxhdGUuY3Bw IGIvc3JjL2RwcC9kdGVtcGxhdGUuY3BwCitpbmRleCAzMWY2YmJmLi5lM2M2N2VhIDEwMDY0NAor LS0tIGEvc3JjL2RwcC9kdGVtcGxhdGUuY3BwCisrKysgYi9zcmMvZHBwL2R0ZW1wbGF0ZS5jcHAK K0BAIC0yMCw3ICsyMCw3IEBACisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAjaW5j bHVkZSA8ZHBwL2R0ZW1wbGF0ZS5oPgorICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgor LSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pz b24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQg YS9zcmMvZHBwL2Vtb2ppLmNwcCBiL3NyYy9kcHAvZW1vamkuY3BwCitpbmRleCBjMGIzNjEzLi40 ZjAwOTU4IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9lbW9qaS5jcHAKKysrKyBiL3NyYy9kcHAvZW1v amkuY3BwCitAQCAtMjAsNyArMjAsNyBAQAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisgI2luY2x1ZGUgPGRwcC9lbW9qaS5oPgorICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5o PgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5u L2pzb24uaHBwPgorICNpbmNsdWRlIDxkcHAvZXhjZXB0aW9uLmg+CisgCisgbmFtZXNwYWNlIGRw cCB7CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldGYuY3BwIGIvc3JjL2RwcC9ldGYuY3BwCitpbmRl eCA2Mzk1ZDliLi4zYjYxNTllIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldGYuY3BwCisrKysgYi9z cmMvZHBwL2V0Zi5jcHAKK0BAIC0zNCw3ICszNCw3IEBACisgI2luY2x1ZGUgPGRwcC9zeXNkZXAu aD4KKyAjaW5jbHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMuaD4KKyAjaW5jbHVkZSA8ZHBwL2V4Y2Vw dGlvbi5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5s b2htYW5uL2pzb24uaHBwPgorICNpbmNsdWRlIDx6bGliLmg+CisgI2luY2x1ZGUgPGlvc3RyZWFt PgorIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2NoYW5uZWxfY3JlYXRlLmNwcCBiL3Ny Yy9kcHAvZXZlbnRzL2NoYW5uZWxfY3JlYXRlLmNwcAoraW5kZXggMDdiMGMyYy4uMWEwYjgxMiAx MDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL2NoYW5uZWxfY3JlYXRlLmNwcAorKysrIGIvc3Jj L2RwcC9ldmVudHMvY2hhbm5lbF9jcmVhdGUuY3BwCitAQCAtMjEsNyArMjEsNyBAQAorICNpbmNs dWRlIDxkcHAvY2hhbm5lbC5oPgorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRl IDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysj aW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpq c29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2NoYW5uZWxfZGVsZXRlLmNwcCBi L3NyYy9kcHAvZXZlbnRzL2NoYW5uZWxfZGVsZXRlLmNwcAoraW5kZXggMDlkMjNhNC4uNWU0OGY5 NiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL2NoYW5uZWxfZGVsZXRlLmNwcAorKysrIGIv c3JjL2RwcC9ldmVudHMvY2hhbm5lbF9kZWxldGUuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNp bmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRlIDxkcHAvY2hhbm5lbC5oPgorICNpbmNs dWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4K KysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5u Ojpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2NoYW5uZWxfcGluc191cGRh dGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvY2hhbm5lbF9waW5zX3VwZGF0ZS5jcHAKK2luZGV4IDNh NDI0NGIuLmNjMmY5MDggMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy9jaGFubmVsX3BpbnNf dXBkYXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvY2hhbm5lbF9waW5zX3VwZGF0ZS5jcHAK K0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUg PGRwcC9jaGFubmVsLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8 ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAK KyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9l dmVudHMvY2hhbm5lbF91cGRhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvY2hhbm5lbF91cGRhdGUu Y3BwCitpbmRleCA3ZTA1ZDhmLi5mZGU4MzZhIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMv Y2hhbm5lbF91cGRhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9jaGFubmVsX3VwZGF0ZS5j cHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1 ZGUgPGRwcC9jaGFubmVsLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVk ZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4K KyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2Rw cC9ldmVudHMvZ3VpbGRfYmFuX2FkZC5jcHAgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9iYW5fYWRk LmNwcAoraW5kZXggODcyYjg3NS4uNjFkZmI1YiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRz L2d1aWxkX2Jhbl9hZGQuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9iYW5fYWRkLmNw cAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2d1aWxkLmg+CisgI2luY2x1ZGUg PGRwcC9iYW4uaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAv bmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVz aW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50 cy9ndWlsZF9iYW5fcmVtb3ZlLmNwcCBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX2Jhbl9yZW1vdmUu Y3BwCitpbmRleCBlMTcwZmRlLi41MTBhMjgwIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMv Z3VpbGRfYmFuX3JlbW92ZS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX2Jhbl9yZW1v dmUuY3BwCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4KKyAjaW5j bHVkZSA8ZHBwL2Jhbi5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUg PGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+Cisg CisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAv ZXZlbnRzL2d1aWxkX2NyZWF0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9jcmVhdGUuY3Bw CitpbmRleCA2ZjFlMzY5Li45ZGUxYzM5IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvZ3Vp bGRfY3JlYXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvZ3VpbGRfY3JlYXRlLmNwcAorQEAg LTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2d1aWxkLmg+CisgI2luY2x1ZGUgPGRwcC9j YWNoZS5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9o bWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcg anNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2d1 aWxkX2RlbGV0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9kZWxldGUuY3BwCitpbmRleCA4 MmY3NWQzLi5lMzlmNGM4IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRfZGVsZXRl LmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvZ3VpbGRfZGVsZXRlLmNwcAorQEAgLTIzLDcgKzIz LDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2d1aWxkLmg+CisgI2luY2x1ZGUgPGRwcC9jYWNoZS5oPgor ICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29u LmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5s b2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2d1aWxkX2Vtb2pp c191cGRhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvZ3VpbGRfZW1vamlzX3VwZGF0ZS5jcHAKK2lu ZGV4IDYyNTg4YzAuLmVjNDMwM2QgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy9ndWlsZF9l bW9qaXNfdXBkYXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvZ3VpbGRfZW1vamlzX3VwZGF0 ZS5jcHAKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPGRwcC9lbW9qaS5oPgorICNpbmNs dWRlIDxkcHAvY2FjaGUuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRl IDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgor IAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBw L2V2ZW50cy9ndWlsZF9pbnRlZ3JhdGlvbnNfdXBkYXRlLmNwcCBiL3NyYy9kcHAvZXZlbnRzL2d1 aWxkX2ludGVncmF0aW9uc191cGRhdGUuY3BwCitpbmRleCA1ODE0NmFlLi4wZDIwMzZmIDEwMDY0 NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRfaW50ZWdyYXRpb25zX3VwZGF0ZS5jcHAKKysr KyBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX2ludGVncmF0aW9uc191cGRhdGUuY3BwCitAQCAtMjMs NyArMjMsNyBAQAorICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4KKyAjaW5jbHVkZSA8ZHBwL2ludGVn cmF0aW9uLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25s b2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2lu ZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMv Z3VpbGRfam9pbl9yZXF1ZXN0X2RlbGV0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9qb2lu X3JlcXVlc3RfZGVsZXRlLmNwcAoraW5kZXggNGI2ZGEyMi4uNTY0MmI0YyAxMDA2NDQKKy0tLSBh L3NyYy9kcHAvZXZlbnRzL2d1aWxkX2pvaW5fcmVxdWVzdF9kZWxldGUuY3BwCisrKysgYi9zcmMv ZHBwL2V2ZW50cy9ndWlsZF9qb2luX3JlcXVlc3RfZGVsZXRlLmNwcAorQEAgLTIxLDcgKzIxLDcg QEAKKyAjaW5jbHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMuaD4KKyAjaW5jbHVkZSA8ZHBwL2NsdXN0 ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1h bm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpz b24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9ndWls ZF9tZW1iZXJfYWRkLmNwcCBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX21lbWJlcl9hZGQuY3BwCitp bmRleCA2Yzg2NWJiLi4yYjNiOGU4IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRf bWVtYmVyX2FkZC5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX21lbWJlcl9hZGQuY3Bw CitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRl IDxkcHAvZ3VpbGQuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxk cHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAor IHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2 ZW50cy9ndWlsZF9tZW1iZXJfcmVtb3ZlLmNwcCBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX21lbWJl cl9yZW1vdmUuY3BwCitpbmRleCBmYTIzYmVkLi40NjY0NmI3IDEwMDY0NAorLS0tIGEvc3JjL2Rw cC9ldmVudHMvZ3VpbGRfbWVtYmVyX3JlbW92ZS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL2d1 aWxkX21lbWJlcl9yZW1vdmUuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAv Y2x1c3Rlci5oPgorICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmlu Z29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5s b2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2Rp ZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9ndWlsZF9tZW1iZXJfdXBkYXRlLmNwcCBiL3NyYy9k cHAvZXZlbnRzL2d1aWxkX21lbWJlcl91cGRhdGUuY3BwCitpbmRleCA2YTljM2I3Li42ODlhYWM0 IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRfbWVtYmVyX3VwZGF0ZS5jcHAKKysr KyBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX21lbWJlcl91cGRhdGUuY3BwCitAQCAtMjIsNyArMjIs NyBAQAorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4K KyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNv bi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBu bG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9ndWlsZF9tZW1i ZXJzX2NodW5rLmNwcCBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX21lbWJlcnNfY2h1bmsuY3BwCitp bmRleCAwM2UxZWIzLi4wZTY4MDg5IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRf bWVtYmVyc19jaHVuay5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX21lbWJlcnNfY2h1 bmsuY3BwCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4KKyAjaW5j bHVkZSA8ZHBwL2NhY2hlLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVk ZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4K KyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2Rw cC9ldmVudHMvZ3VpbGRfcm9sZV9jcmVhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvZ3VpbGRfcm9s ZV9jcmVhdGUuY3BwCitpbmRleCBiNjY4YmI1Li5lZDhiYzc5IDEwMDY0NAorLS0tIGEvc3JjL2Rw cC9ldmVudHMvZ3VpbGRfcm9sZV9jcmVhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9ndWls ZF9yb2xlX2NyZWF0ZS5jcHAKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGRwcC9ndWls ZC5oPgorICNpbmNsdWRlIDxkcHAvcm9sZS5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+ CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4v anNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdp dCBhL3NyYy9kcHAvZXZlbnRzL2d1aWxkX3JvbGVfZGVsZXRlLmNwcCBiL3NyYy9kcHAvZXZlbnRz L2d1aWxkX3JvbGVfZGVsZXRlLmNwcAoraW5kZXggNmM4Y2VkYy4uMzM2ZjExYiAxMDA2NDQKKy0t LSBhL3NyYy9kcHAvZXZlbnRzL2d1aWxkX3JvbGVfZGVsZXRlLmNwcAorKysrIGIvc3JjL2RwcC9l dmVudHMvZ3VpbGRfcm9sZV9kZWxldGUuY3BwCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRl IDxkcHAvZ3VpbGQuaD4KKyAjaW5jbHVkZSA8ZHBwL3JvbGUuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0 cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUg PG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAK K2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9ndWlsZF9yb2xlX3VwZGF0ZS5jcHAgYi9zcmMv ZHBwL2V2ZW50cy9ndWlsZF9yb2xlX3VwZGF0ZS5jcHAKK2luZGV4IDI5MTMwYzAuLjMyZTMxNDYg MTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy9ndWlsZF9yb2xlX3VwZGF0ZS5jcHAKKysrKyBi L3NyYy9kcHAvZXZlbnRzL2d1aWxkX3JvbGVfdXBkYXRlLmNwcAorQEAgLTIzLDcgKzIzLDcgQEAK KyAjaW5jbHVkZSA8ZHBwL2d1aWxkLmg+CisgI2luY2x1ZGUgPGRwcC9yb2xlLmg+CisgI2luY2x1 ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgor KyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46 Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRfc2NoZWR1bGVkX2V2 ZW50X2NyZWF0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9zY2hlZHVsZWRfZXZlbnRfY3Jl YXRlLmNwcAoraW5kZXggMDJiM2JhOS4uZTg0YzEzNCAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZl bnRzL2d1aWxkX3NjaGVkdWxlZF9ldmVudF9jcmVhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50 cy9ndWlsZF9zY2hlZHVsZWRfZXZlbnRfY3JlYXRlLmNwcAorQEAgLTIyLDcgKzIyLDcgQEAKKyAj aW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL3NjaGVkdWxlZF9ldmVudC5o PgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9q c29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9 IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2d1aWxkX3Nj aGVkdWxlZF9ldmVudF9kZWxldGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvZ3VpbGRfc2NoZWR1bGVk X2V2ZW50X2RlbGV0ZS5jcHAKK2luZGV4IGVhMTFlZDkuLmEwOThhMGYgMTAwNjQ0CistLS0gYS9z cmMvZHBwL2V2ZW50cy9ndWlsZF9zY2hlZHVsZWRfZXZlbnRfZGVsZXRlLmNwcAorKysrIGIvc3Jj L2RwcC9ldmVudHMvZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X2RlbGV0ZS5jcHAKK0BAIC0yMiw3ICsy Miw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9zY2hlZHVs ZWRfZXZlbnQuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAv bmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVz aW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50 cy9ndWlsZF9zY2hlZHVsZWRfZXZlbnRfdXBkYXRlLmNwcCBiL3NyYy9kcHAvZXZlbnRzL2d1aWxk X3NjaGVkdWxlZF9ldmVudF91cGRhdGUuY3BwCitpbmRleCBiNDNmMDJkLi42ZmQyNzk1IDEwMDY0 NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X3VwZGF0ZS5jcHAK KysrKyBiL3NyYy9kcHAvZXZlbnRzL2d1aWxkX3NjaGVkdWxlZF9ldmVudF91cGRhdGUuY3BwCitA QCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRlIDxk cHAvc2NoZWR1bGVkX2V2ZW50Lmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5j bHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhw cD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3Jj L2RwcC9ldmVudHMvZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X3VzZXJfYWRkLmNwcCBiL3NyYy9kcHAv ZXZlbnRzL2d1aWxkX3NjaGVkdWxlZF9ldmVudF91c2VyX2FkZC5jcHAKK2luZGV4IDM4ZTA3YjYu LmM1NDljMzkgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy9ndWlsZF9zY2hlZHVsZWRfZXZl bnRfdXNlcl9hZGQuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9zY2hlZHVsZWRfZXZl bnRfdXNlcl9hZGQuY3BwCitAQCAtMjEsNyArMjEsNyBAQAorICNpbmNsdWRlIDxkcHAvZGlzY29y ZGV2ZW50cy5oPgorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRlIDxkcHAvc3Ry aW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8 bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAor ZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2d1aWxkX3NjaGVkdWxlZF9ldmVudF91c2VyX3Jl bW92ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9ndWlsZF9zY2hlZHVsZWRfZXZlbnRfdXNlcl9yZW1v dmUuY3BwCitpbmRleCA0ZDZlOGEwLi4wOGJlMWU5IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVu dHMvZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X3VzZXJfcmVtb3ZlLmNwcAorKysrIGIvc3JjL2RwcC9l dmVudHMvZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X3VzZXJfcmVtb3ZlLmNwcAorQEAgLTIxLDcgKzIx LDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMuaD4KKyAjaW5jbHVkZSA8ZHBwL2Ns dXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxv aG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5n IGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9n dWlsZF9zdGlja2Vyc191cGRhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvZ3VpbGRfc3RpY2tlcnNf dXBkYXRlLmNwcAoraW5kZXggN2YwMGMyMy4uNTgzZDkzNiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAv ZXZlbnRzL2d1aWxkX3N0aWNrZXJzX3VwZGF0ZS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL2d1 aWxkX3N0aWNrZXJzX3VwZGF0ZS5jcHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRw cC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9tZXNzYWdlLmg+CisgI2luY2x1ZGUgPGRwcC9z dHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRl IDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247Cisg CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvZ3VpbGRfdXBkYXRlLmNwcCBiL3NyYy9kcHAv ZXZlbnRzL2d1aWxkX3VwZGF0ZS5jcHAKK2luZGV4IGQ4MGI0MGIuLmUxMTY2ODggMTAwNjQ0Cist LS0gYS9zcmMvZHBwL2V2ZW50cy9ndWlsZF91cGRhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50 cy9ndWlsZF91cGRhdGUuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvY2x1 c3Rlci5oPgorICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29w cy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2ht YW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYg LS1naXQgYS9zcmMvZHBwL2V2ZW50cy9pbnRlZ3JhdGlvbl9jcmVhdGUuY3BwIGIvc3JjL2RwcC9l dmVudHMvaW50ZWdyYXRpb25fY3JlYXRlLmNwcAoraW5kZXggZjcyMTkzYy4uMTEyMzIwYiAxMDA2 NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL2ludGVncmF0aW9uX2NyZWF0ZS5jcHAKKysrKyBiL3Ny Yy9kcHAvZXZlbnRzL2ludGVncmF0aW9uX2NyZWF0ZS5jcHAKK0BAIC0yMiw3ICsyMiw3IEBACisg I2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9pbnRlZ3JhdGlvbi5oPgor ICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29u LmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5s b2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2ludGVncmF0aW9u X2RlbGV0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9pbnRlZ3JhdGlvbl9kZWxldGUuY3BwCitpbmRl eCAwNDM4MDc2Li5lMGIyMjAyIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvaW50ZWdyYXRp b25fZGVsZXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvaW50ZWdyYXRpb25fZGVsZXRlLmNw cAorQEAgLTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVk ZSA8ZHBwL2ludGVncmF0aW9uLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5j bHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhw cD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3Jj L2RwcC9ldmVudHMvaW50ZWdyYXRpb25fdXBkYXRlLmNwcCBiL3NyYy9kcHAvZXZlbnRzL2ludGVn cmF0aW9uX3VwZGF0ZS5jcHAKK2luZGV4IDgxNzVmYWIuLjM4YjNlZGEgMTAwNjQ0CistLS0gYS9z cmMvZHBwL2V2ZW50cy9pbnRlZ3JhdGlvbl91cGRhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50 cy9pbnRlZ3JhdGlvbl91cGRhdGUuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxk cHAvY2x1c3Rlci5oPgorICNpbmNsdWRlIDxkcHAvaW50ZWdyYXRpb24uaD4KKyAjaW5jbHVkZSA8 ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2lu Y2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNv bjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9pbnRlcmFjdGlvbl9jcmVhdGUuY3Bw IGIvc3JjL2RwcC9ldmVudHMvaW50ZXJhY3Rpb25fY3JlYXRlLmNwcAoraW5kZXggYTdiZjQ2Ni4u YThhYTI1YiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL2ludGVyYWN0aW9uX2NyZWF0ZS5j cHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL2ludGVyYWN0aW9uX2NyZWF0ZS5jcHAKK0BAIC0yMiw3 ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9hcHBj b21tYW5kLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25s b2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2lu ZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMv aW52aXRlX2NyZWF0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9pbnZpdGVfY3JlYXRlLmNwcAoraW5k ZXggMzc3YmEzZi4uN2QwM2QwNiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL2ludml0ZV9j cmVhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9pbnZpdGVfY3JlYXRlLmNwcAorQEAgLTIy LDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL2lu dml0ZS5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9o bWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcg anNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL2lu dml0ZV9kZWxldGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvaW52aXRlX2RlbGV0ZS5jcHAKK2luZGV4 IDVmMmYwODQuLmM5ZDgxYmIgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy9pbnZpdGVfZGVs ZXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvaW52aXRlX2RlbGV0ZS5jcHAKK0BAIC0yMiw3 ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9pbnZp dGUuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1h bm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpz b24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9sb2dn ZXIuY3BwIGIvc3JjL2RwcC9ldmVudHMvbG9nZ2VyLmNwcAoraW5kZXggYWVmYzgyZi4uZWU5ZDIw MiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL2xvZ2dlci5jcHAKKysrKyBiL3NyYy9kcHAv ZXZlbnRzL2xvZ2dlci5jcHAKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGRwcC9kaXNj b3JkZXZlbnRzLmg+CisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9z dHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRl IDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247Cisg CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvbWVzc2FnZV9jcmVhdGUuY3BwIGIvc3JjL2Rw cC9ldmVudHMvbWVzc2FnZV9jcmVhdGUuY3BwCitpbmRleCBiZTU2ZWY4Li44MDQ4MWU4IDEwMDY0 NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvbWVzc2FnZV9jcmVhdGUuY3BwCisrKysgYi9zcmMvZHBw L2V2ZW50cy9tZXNzYWdlX2NyZWF0ZS5jcHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUg PGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9tZXNzYWdlLmg+CisgI2luY2x1ZGUgPGRw cC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNs dWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247 CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvbWVzc2FnZV9kZWxldGUuY3BwIGIvc3Jj L2RwcC9ldmVudHMvbWVzc2FnZV9kZWxldGUuY3BwCitpbmRleCBkN2JhMGVhLi45OGU3YzJjIDEw MDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvbWVzc2FnZV9kZWxldGUuY3BwCisrKysgYi9zcmMv ZHBwL2V2ZW50cy9tZXNzYWdlX2RlbGV0ZS5jcHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1 ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9tZXNzYWdlLmg+CisgI2luY2x1ZGUg PGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNp bmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompz b247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvbWVzc2FnZV9kZWxldGVfYnVsay5j cHAgYi9zcmMvZHBwL2V2ZW50cy9tZXNzYWdlX2RlbGV0ZV9idWxrLmNwcAoraW5kZXggYTE1OGJm MS4uY2JmZmNmMiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL21lc3NhZ2VfZGVsZXRlX2J1 bGsuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9tZXNzYWdlX2RlbGV0ZV9idWxrLmNwcAorQEAg LTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBw L21lc3NhZ2UuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAv bmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVz aW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50 cy9tZXNzYWdlX3JlYWN0aW9uX2FkZC5jcHAgYi9zcmMvZHBwL2V2ZW50cy9tZXNzYWdlX3JlYWN0 aW9uX2FkZC5jcHAKK2luZGV4IGZhYzcyMzcuLjVlNjE5NTkgMTAwNjQ0CistLS0gYS9zcmMvZHBw L2V2ZW50cy9tZXNzYWdlX3JlYWN0aW9uX2FkZC5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL21l c3NhZ2VfcmVhY3Rpb25fYWRkLmNwcAorQEAgLTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBw L2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL21lc3NhZ2UuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0 cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUg PG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAK K2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9tZXNzYWdlX3JlYWN0aW9uX3JlbW92ZS5jcHAg Yi9zcmMvZHBwL2V2ZW50cy9tZXNzYWdlX3JlYWN0aW9uX3JlbW92ZS5jcHAKK2luZGV4IDEwMzY3 NTcuLjFmNjAyYjEgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy9tZXNzYWdlX3JlYWN0aW9u X3JlbW92ZS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL21lc3NhZ2VfcmVhY3Rpb25fcmVtb3Zl LmNwcAorQEAgLTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5j bHVkZSA8ZHBwL21lc3NhZ2UuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNs dWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBw PgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMv ZHBwL2V2ZW50cy9tZXNzYWdlX3JlYWN0aW9uX3JlbW92ZV9hbGwuY3BwIGIvc3JjL2RwcC9ldmVu dHMvbWVzc2FnZV9yZWFjdGlvbl9yZW1vdmVfYWxsLmNwcAoraW5kZXggN2E2MzY2MC4uYTU2NGFm YiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL21lc3NhZ2VfcmVhY3Rpb25fcmVtb3ZlX2Fs bC5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL21lc3NhZ2VfcmVhY3Rpb25fcmVtb3ZlX2FsbC5j cHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1 ZGUgPGRwcC9tZXNzYWdlLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVk ZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4K KyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2Rw cC9ldmVudHMvbWVzc2FnZV9yZWFjdGlvbl9yZW1vdmVfZW1vamkuY3BwIGIvc3JjL2RwcC9ldmVu dHMvbWVzc2FnZV9yZWFjdGlvbl9yZW1vdmVfZW1vamkuY3BwCitpbmRleCBjODIwYmJlLi45M2Ez ZjljIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvbWVzc2FnZV9yZWFjdGlvbl9yZW1vdmVf ZW1vamkuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9tZXNzYWdlX3JlYWN0aW9uX3JlbW92ZV9l bW9qaS5jcHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+Cisg I2luY2x1ZGUgPGRwcC9tZXNzYWdlLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0j aW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29u LmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEv c3JjL2RwcC9ldmVudHMvbWVzc2FnZV91cGRhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvbWVzc2Fn ZV91cGRhdGUuY3BwCitpbmRleCAzMjU5ZDg4Li45MGI2NDE4IDEwMDY0NAorLS0tIGEvc3JjL2Rw cC9ldmVudHMvbWVzc2FnZV91cGRhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9tZXNzYWdl X3VwZGF0ZS5jcHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+ CisgI2luY2x1ZGUgPGRwcC9wcmVzZW5jZS5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+ CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4v anNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdp dCBhL3NyYy9kcHAvZXZlbnRzL3ByZXNlbmNlX3VwZGF0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy9w cmVzZW5jZV91cGRhdGUuY3BwCitpbmRleCBhZjE2MDg3Li43NzE4MDE5IDEwMDY0NAorLS0tIGEv c3JjL2RwcC9ldmVudHMvcHJlc2VuY2VfdXBkYXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMv cHJlc2VuY2VfdXBkYXRlLmNwcAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2Rp c2NvcmRldmVudHMuaD4KKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBw L3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1 ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsK KyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9yZWFkeS5jcHAgYi9zcmMvZHBwL2V2ZW50 cy9yZWFkeS5jcHAKK2luZGV4IDE0MzQ3OTQuLmI2ZGQ5MTcgMTAwNjQ0CistLS0gYS9zcmMvZHBw L2V2ZW50cy9yZWFkeS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL3JlYWR5LmNwcAorQEAgLTIx LDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMuaD4KKyAjaW5jbHVkZSA8 ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxk cHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorICNp bmNsdWRlIDxkcHAvZm10LW1pbmltYWwuaD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompz b247CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvcmVzdW1lZC5jcHAgYi9zcmMvZHBwL2V2 ZW50cy9yZXN1bWVkLmNwcAoraW5kZXggZTI4YzhkOC4uOThlMTc0ZSAxMDA2NDQKKy0tLSBhL3Ny Yy9kcHAvZXZlbnRzL3Jlc3VtZWQuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9yZXN1bWVkLmNw cAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMuaD4KKyAj aW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNp bmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24u aHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9z cmMvZHBwL2V2ZW50cy9zdGFnZV9pbnN0YW5jZV9jcmVhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMv c3RhZ2VfaW5zdGFuY2VfY3JlYXRlLmNwcAoraW5kZXggYmIxOTFkZi4uYTUzYjNiYyAxMDA2NDQK Ky0tLSBhL3NyYy9kcHAvZXZlbnRzL3N0YWdlX2luc3RhbmNlX2NyZWF0ZS5jcHAKKysrKyBiL3Ny Yy9kcHAvZXZlbnRzL3N0YWdlX2luc3RhbmNlX2NyZWF0ZS5jcHAKK0BAIC0yMiw3ICsyMiw3IEBA CisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9tZXNzYWdlLmg+Cisg I2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24u aHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxv aG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvc3RhZ2VfaW5zdGFu Y2VfZGVsZXRlLmNwcCBiL3NyYy9kcHAvZXZlbnRzL3N0YWdlX2luc3RhbmNlX2RlbGV0ZS5jcHAK K2luZGV4IDYzOWQyNTkuLmQ1YmI5N2MgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy9zdGFn ZV9pbnN0YW5jZV9kZWxldGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy9zdGFnZV9pbnN0YW5j ZV9kZWxldGUuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5o PgorICNpbmNsdWRlIDxkcHAvc3RhZ2VfaW5zdGFuY2UuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmlu Z29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5s b2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2Rp ZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy9zdGFnZV9pbnN0YW5jZV91cGRhdGUuY3BwIGIvc3Jj L2RwcC9ldmVudHMvc3RhZ2VfaW5zdGFuY2VfdXBkYXRlLmNwcAoraW5kZXggODQyMmZmYi4uNTM0 OWFhYiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL3N0YWdlX2luc3RhbmNlX3VwZGF0ZS5j cHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL3N0YWdlX2luc3RhbmNlX3VwZGF0ZS5jcHAKK0BAIC0y Miw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC9z dGFnZV9pbnN0YW5jZS5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUg PGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+Cisg CisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAv ZXZlbnRzL3RocmVhZF9jcmVhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvdGhyZWFkX2NyZWF0ZS5j cHAKK2luZGV4IDg5Njk5OWEuLjY4MGJjOTIgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy90 aHJlYWRfY3JlYXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvdGhyZWFkX2NyZWF0ZS5jcHAK K0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUg PGRwcC9jaGFubmVsLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8 ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAK KyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9l dmVudHMvdGhyZWFkX2RlbGV0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy90aHJlYWRfZGVsZXRlLmNw cAoraW5kZXggMzk2OTQ2OS4uZDE5NWRhYyAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL3Ro cmVhZF9kZWxldGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy90aHJlYWRfZGVsZXRlLmNwcAor QEAgLTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8 ZHBwL2NoYW5uZWwuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxk cHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAor IHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2 ZW50cy90aHJlYWRfbGlzdF9zeW5jLmNwcCBiL3NyYy9kcHAvZXZlbnRzL3RocmVhZF9saXN0X3N5 bmMuY3BwCitpbmRleCBjZTUxOGY1Li4xOWVlZTQ2IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVu dHMvdGhyZWFkX2xpc3Rfc3luYy5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL3RocmVhZF9saXN0 X3N5bmMuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgor ICNpbmNsdWRlIDxkcHAvY2hhbm5lbC5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+Cist I2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNv bi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBh L3NyYy9kcHAvZXZlbnRzL3RocmVhZF9tZW1iZXJfdXBkYXRlLmNwcCBiL3NyYy9kcHAvZXZlbnRz L3RocmVhZF9tZW1iZXJfdXBkYXRlLmNwcAoraW5kZXggMDBhNTk0OS4uNTg2OGU4ZCAxMDA2NDQK Ky0tLSBhL3NyYy9kcHAvZXZlbnRzL3RocmVhZF9tZW1iZXJfdXBkYXRlLmNwcAorKysrIGIvc3Jj L2RwcC9ldmVudHMvdGhyZWFkX21lbWJlcl91cGRhdGUuY3BwCitAQCAtMjIsNyArMjIsNyBAQAor ICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgorICNpbmNsdWRlIDxkcHAvY2hhbm5lbC5oPgorICNp bmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhw cD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2ht YW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvZXZlbnRzL3RocmVhZF9tZW1iZXJz X3VwZGF0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy90aHJlYWRfbWVtYmVyc191cGRhdGUuY3BwCitp bmRleCBjNzQ0MDI5Li5lYTcwMmEyIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9ldmVudHMvdGhyZWFk X21lbWJlcnNfdXBkYXRlLmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvdGhyZWFkX21lbWJlcnNf dXBkYXRlLmNwcAorQEAgLTIyLDcgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4K KyAjaW5jbHVkZSA8ZHBwL2NoYW5uZWwuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgor LSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pz b24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQg YS9zcmMvZHBwL2V2ZW50cy90aHJlYWRfdXBkYXRlLmNwcCBiL3NyYy9kcHAvZXZlbnRzL3RocmVh ZF91cGRhdGUuY3BwCitpbmRleCA2YmU5Y2I2Li5iOTdlMjcxIDEwMDY0NAorLS0tIGEvc3JjL2Rw cC9ldmVudHMvdGhyZWFkX3VwZGF0ZS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL3RocmVhZF91 cGRhdGUuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxkcHAvY2x1c3Rlci5oPgor ICNpbmNsdWRlIDxkcHAvY2hhbm5lbC5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+Cist I2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNv bi5ocHA+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBh L3NyYy9kcHAvZXZlbnRzL3R5cGluZ19zdGFydC5jcHAgYi9zcmMvZHBwL2V2ZW50cy90eXBpbmdf c3RhcnQuY3BwCitpbmRleCBmYzg2NjdiLi4xODkxMjlhIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9l dmVudHMvdHlwaW5nX3N0YXJ0LmNwcAorKysrIGIvc3JjL2RwcC9ldmVudHMvdHlwaW5nX3N0YXJ0 LmNwcAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMuaD4K KyAjaW5jbHVkZSA8ZHBwL2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgor LSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pz b24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQg YS9zcmMvZHBwL2V2ZW50cy91c2VyX3VwZGF0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy91c2VyX3Vw ZGF0ZS5jcHAKK2luZGV4IDMyMzZjMjcuLjYzZmRlMTYgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2 ZW50cy91c2VyX3VwZGF0ZS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL3VzZXJfdXBkYXRlLmNw cAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NhY2hlLmg+CisgI2luY2x1ZGUg PGRwcC91c2VyLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBw L25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1 c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVu dHMvdm9pY2Vfc2VydmVyX3VwZGF0ZS5jcHAgYi9zcmMvZHBwL2V2ZW50cy92b2ljZV9zZXJ2ZXJf dXBkYXRlLmNwcAoraW5kZXggYTcwYzgzMS4uZmQ1ZDk4NCAxMDA2NDQKKy0tLSBhL3NyYy9kcHAv ZXZlbnRzL3ZvaWNlX3NlcnZlcl91cGRhdGUuY3BwCisrKysgYi9zcmMvZHBwL2V2ZW50cy92b2lj ZV9zZXJ2ZXJfdXBkYXRlLmNwcAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2d1 aWxkLmg+CisgI2luY2x1ZGUgPGRwcC92b2ljZXN0YXRlLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJp bmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxu bG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247CisgCitk aWZmIC0tZ2l0IGEvc3JjL2RwcC9ldmVudHMvdm9pY2Vfc3RhdGVfdXBkYXRlLmNwcCBiL3NyYy9k cHAvZXZlbnRzL3ZvaWNlX3N0YXRlX3VwZGF0ZS5jcHAKK2luZGV4IDRiMzE2ZDQuLjc5ODk1ZTAg MTAwNjQ0CistLS0gYS9zcmMvZHBwL2V2ZW50cy92b2ljZV9zdGF0ZV91cGRhdGUuY3BwCisrKysg Yi9zcmMvZHBwL2V2ZW50cy92b2ljZV9zdGF0ZV91cGRhdGUuY3BwCitAQCAtMjQsNyArMjQsNyBA QAorICNpbmNsdWRlIDxkcHAvZ3VpbGQuaD4KKyAjaW5jbHVkZSA8ZHBwL3ZvaWNlc3RhdGUuaD4K KyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNv bi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIHVzaW5nIGpzb24gPSBu bG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2V2ZW50cy93ZWJob29rc191 cGRhdGUuY3BwIGIvc3JjL2RwcC9ldmVudHMvd2ViaG9va3NfdXBkYXRlLmNwcAoraW5kZXggZTk0 ZTU4NS4uZDRjNDlkMCAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZXZlbnRzL3dlYmhvb2tzX3VwZGF0 ZS5jcHAKKysrKyBiL3NyYy9kcHAvZXZlbnRzL3dlYmhvb2tzX3VwZGF0ZS5jcHAKK0BAIC0yMiw3 ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9jbHVzdGVyLmg+CisgI2luY2x1ZGUgPGRwcC93ZWJo b29rLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2ht YW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyB1c2luZyBq c29uID0gbmxvaG1hbm46Ompzb247CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9mb3JtYXQuY3Bw IGIvc3JjL2RwcC9mb3JtYXQuY3BwCitpbmRleCBmOTVhYjVkLi4yYzZhMWYyIDEwMDY0NAorLS0t IGEvc3JjL2RwcC9mb3JtYXQuY3BwCisrKysgYi9zcmMvZHBwL2Zvcm1hdC5jcHAKK0BAIC01LDcg KzUsNyBAQAorIC8vCisgLy8gRm9yIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGZv cm1hdC5oLgorIAorLSNpbmNsdWRlIDxkcHAvZm10L2Zvcm1hdC1pbmwuaD4KKysjaW5jbHVkZSA8 Zm10L2Zvcm1hdC1pbmwuaD4KKyAKKyBGTVRfQkVHSU5fTkFNRVNQQUNFCisgbmFtZXNwYWNlIGRl dGFpbCB7CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9ndWlsZC5jcHAgYi9zcmMvZHBwL2d1aWxkLmNw cAoraW5kZXggMWQ0N2U3Zi4uZGEyNmIwNCAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvZ3VpbGQuY3Bw CisrKysgYi9zcmMvZHBwL2d1aWxkLmNwcAorQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8 ZHBwL2d1aWxkLmg+CisgI2luY2x1ZGUgPGRwcC9kaXNjb3JkZXZlbnRzLmg+CisgI2luY2x1ZGUg PGRwcC9zdHJpbmdvcHMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNp bmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAjaW5jbHVkZSA8ZHBwL2ZtdC1taW5pbWFsLmg+ CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworZGlmZiAtLWdpdCBhL3NyYy9kcHAv aW50ZWdyYXRpb24uY3BwIGIvc3JjL2RwcC9pbnRlZ3JhdGlvbi5jcHAKK2luZGV4IDBkN2ZmYmEu LjIwNTcyNzEgMTAwNjQ0CistLS0gYS9zcmMvZHBwL2ludGVncmF0aW9uLmNwcAorKysrIGIvc3Jj L2RwcC9pbnRlZ3JhdGlvbi5jcHAKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGRwcC9k aXNjb3JkZXZlbnRzLmg+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4KKyAjaW5jbHVkZSA8 ZHBwL2ludGVncmF0aW9uLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysj aW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgI2luY2x1ZGUgPGRwcC9jYWNoZS5oPgorIAor IHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKK2RpZmYgLS1naXQgYS9zcmMvZHBwL2ludml0 ZS5jcHAgYi9zcmMvZHBwL2ludml0ZS5jcHAKK2luZGV4IGVjMDI5MDMuLjlhMzlmZWUgMTAwNjQ0 CistLS0gYS9zcmMvZHBwL2ludml0ZS5jcHAKKysrKyBiL3NyYy9kcHAvaW52aXRlLmNwcAorQEAg LTIwLDcgKzIwLDcgQEAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICNpbmNsdWRl IDxkcHAvaW52aXRlLmg+CisgI2luY2x1ZGUgPGRwcC9kaXNjb3JkZXZlbnRzLmg+CistI2luY2x1 ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+ CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworIAorZGlmZiAtLWdpdCBhL3NyYy9k cHAvbWVzc2FnZS5jcHAgYi9zcmMvZHBwL21lc3NhZ2UuY3BwCitpbmRleCAyODRmZDBkLi4yNTI4 MDdjIDEwMDY0NAorLS0tIGEvc3JjL2RwcC9tZXNzYWdlLmNwcAorKysrIGIvc3JjL2RwcC9tZXNz YWdlLmNwcAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZHBwL2NoYW5uZWwuaD4KKyAj aW5jbHVkZSA8ZHBwL2d1aWxkLmg+CisgI2luY2x1ZGUgPGRwcC9jYWNoZS5oPgorLSNpbmNsdWRl IDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgor ICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3Bz Lmg+CisgI2luY2x1ZGUgPGRwcC9leGNlcHRpb24uaD4KK2RpZmYgLS1naXQgYS9zcmMvZHBwL29z LmNwcCBiL3NyYy9kcHAvb3MuY3BwCitpbmRleCA5YTEyNmNhLi5mNzZlMDg2IDEwMDY0NAorLS0t IGEvc3JjL2RwcC9vcy5jcHAKKysrKyBiL3NyYy9kcHAvb3MuY3BwCitAQCAtMTAsNyArMTAsNyBA QAorICMgIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworICNlbmRpZgorIAorLSNpbmNs dWRlIDxkcHAvZm10L29zLmg+CisrI2luY2x1ZGUgPGZtdC9vcy5oPgorIAorICNpbmNsdWRlIDxj bGltaXRzPgorIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvcGVybWlzc2lvbnMuY3BwIGIvc3JjL2Rw cC9wZXJtaXNzaW9ucy5jcHAKK2luZGV4IDU5ODVlNmUuLmU3YWRhYjYgMTAwNjQ0CistLS0gYS9z cmMvZHBwL3Blcm1pc3Npb25zLmNwcAorKysrIGIvc3JjL2RwcC9wZXJtaXNzaW9ucy5jcHAKK0BA IC0xOSw3ICsxOSw3IEBACisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICNp bmNsdWRlIDxkcHAvcGVybWlzc2lvbnMuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24u aHBwPgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAKKyBuYW1lc3BhY2UgZHBwIHsK KyAKK2RpZmYgLS1naXQgYS9zcmMvZHBwL3ByZXNlbmNlLmNwcCBiL3NyYy9kcHAvcHJlc2VuY2Uu Y3BwCitpbmRleCBiNDMyMDQ0Li5hYjhiNWY0IDEwMDY0NAorLS0tIGEvc3JjL2RwcC9wcmVzZW5j ZS5jcHAKKysrKyBiL3NyYy9kcHAvcHJlc2VuY2UuY3BwCitAQCAtMjIsNyArMjIsNyBAQAorICNp bmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgorICNpbmNsdWRlIDxkcHAvdXRpbGl0eS5oPgor ICNpbmNsdWRlIDxkcHAvZW1vamkuaD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBw PgorKyNpbmNsdWRlIDxubG9obWFubi9qc29uLmhwcD4KKyAjaW5jbHVkZSA8ZHBwL2ZtdC1taW5p bWFsLmg+CisgCisgdXNpbmcganNvbiA9IG5sb2htYW5uOjpqc29uOworZGlmZiAtLWdpdCBhL3Ny Yy9kcHAvcHJ1bmUuY3BwIGIvc3JjL2RwcC9wcnVuZS5jcHAKK2luZGV4IDFkN2NkNDkuLjUwYjAz MTUgMTAwNjQ0CistLS0gYS9zcmMvZHBwL3BydW5lLmNwcAorKysrIGIvc3JjL2RwcC9wcnVuZS5j cHAKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGRwcC9wcnVuZS5oPgorICNpbmNsdWRl IDxkcHAvZGlzY29yZGV2ZW50cy5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2lu Y2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5o cHA+CisgCisgbmFtZXNwYWNlIGRwcCB7CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9yb2xlLmNw cCBiL3NyYy9kcHAvcm9sZS5jcHAKK2luZGV4IDYxOGUxNmQuLjNhODE4MmIgMTAwNjQ0CistLS0g YS9zcmMvZHBwL3JvbGUuY3BwCisrKysgYi9zcmMvZHBwL3JvbGUuY3BwCitAQCAtMjQsNyArMjQs NyBAQAorICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgorICNpbmNsdWRlIDxkcHAvcGVy bWlzc2lvbnMuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgorLSNpbmNsdWRlIDxkcHAv bmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorICNpbmNs dWRlIDxkcHAvZm10LW1pbmltYWwuaD4KKyAKKyB1c2luZyBqc29uID0gbmxvaG1hbm46Ompzb247 CitkaWZmIC0tZ2l0IGEvc3JjL2RwcC9zY2hlZHVsZWRfZXZlbnQuY3BwIGIvc3JjL2RwcC9zY2hl ZHVsZWRfZXZlbnQuY3BwCitpbmRleCBlMDQ5ODg5Li4zMTEzMjYwIDEwMDY0NAorLS0tIGEvc3Jj L2RwcC9zY2hlZHVsZWRfZXZlbnQuY3BwCisrKysgYi9zcmMvZHBwL3NjaGVkdWxlZF9ldmVudC5j cHAKK0BAIC0yMiw3ICsyMiw3IEBACisgI2luY2x1ZGUgPGRwcC9leGNlcHRpb24uaD4KKyAjaW5j bHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMuaD4KKyAjaW5jbHVkZSA8ZHBwL3N0cmluZ29wcy5oPgor LSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pz b24uaHBwPgorIAorIG5hbWVzcGFjZSBkcHAgeworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvc2xh c2hjb21tYW5kLmNwcCBiL3NyYy9kcHAvc2xhc2hjb21tYW5kLmNwcAoraW5kZXggOWFlMzAyNC4u Mjg3MmRhYyAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvc2xhc2hjb21tYW5kLmNwcAorKysrIGIvc3Jj L2RwcC9zbGFzaGNvbW1hbmQuY3BwCitAQCAtMjEsNyArMjEsNyBAQAorICNpbmNsdWRlIDxkcHAv YXBwY29tbWFuZC5oPgorICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgorICNpbmNsdWRl IDxkcHAvZXhjZXB0aW9uLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysj aW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgI2luY2x1ZGUgPGRwcC9zdHJpbmdvcHMuaD4K KyAjaW5jbHVkZSA8ZHBwL2NhY2hlLmg+CisgI2luY2x1ZGUgPGlvc3RyZWFtPgorZGlmZiAtLWdp dCBhL3NyYy9kcHAvc3RhZ2VfaW5zdGFuY2UuY3BwIGIvc3JjL2RwcC9zdGFnZV9pbnN0YW5jZS5j cHAKK2luZGV4IDJiMTA3NjAuLjM0ZTUxNGQgMTAwNjQ0CistLS0gYS9zcmMvZHBwL3N0YWdlX2lu c3RhbmNlLmNwcAorKysrIGIvc3JjL2RwcC9zdGFnZV9pbnN0YW5jZS5jcHAKK0BAIC0yMSw3ICsy MSw3IEBACisgI2luY2x1ZGUgPGRwcC9zdGFnZV9pbnN0YW5jZS5oPgorICNpbmNsdWRlIDxkcHAv ZGlzY29yZGV2ZW50cy5oPgorICNpbmNsdWRlIDxkcHAvc3RyaW5nb3BzLmg+CistI2luY2x1ZGUg PGRwcC9ubG9obWFubi9qc29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+Cisg CisgbmFtZXNwYWNlIGRwcCB7CisgCitkaWZmIC0tZ2l0IGEvc3JjL2RwcC91c2VyLmNwcCBiL3Ny Yy9kcHAvdXNlci5jcHAKK2luZGV4IGU4ZTRkY2QuLjUxMDdjMGYgMTAwNjQ0CistLS0gYS9zcmMv ZHBwL3VzZXIuY3BwCisrKysgYi9zcmMvZHBwL3VzZXIuY3BwCitAQCAtMjAsNyArMjAsNyBAQAor ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgI2luY2x1ZGUgPGRwcC91c2VyLmg+Cisg I2luY2x1ZGUgPGRwcC9kaXNjb3JkZXZlbnRzLmg+CistI2luY2x1ZGUgPGRwcC9ubG9obWFubi9q c29uLmhwcD4KKysjaW5jbHVkZSA8bmxvaG1hbm4vanNvbi5ocHA+CisgI2luY2x1ZGUgPGRwcC9m bXQtbWluaW1hbC5oPgorIAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKK2RpZmYgLS1n aXQgYS9zcmMvZHBwL3V0aWxpdHkuY3BwIGIvc3JjL2RwcC91dGlsaXR5LmNwcAoraW5kZXggNTdj OTg3NC4uODBhNmI4MiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvdXRpbGl0eS5jcHAKKysrKyBiL3Ny Yy9kcHAvdXRpbGl0eS5jcHAKK0BAIC0zMyw3ICszMyw3IEBACisgI2luY2x1ZGUgPGZzdHJlYW0+ CisgI2luY2x1ZGUgPHN0cmVhbWJ1Zj4KKyAjaW5jbHVkZSA8YXJyYXk+CistI2luY2x1ZGUgPGRw cC9mbXQvZm9ybWF0Lmg+CisrI2luY2x1ZGUgPGZtdC9mb3JtYXQuaD4KKyAjaW5jbHVkZSA8ZHBw L2NsdXN0ZXIuaD4KKyAjaW5jbHVkZSA8ZHBwL2Rpc3BhdGNoZXIuaD4KKyAKK2RpZmYgLS1naXQg YS9zcmMvZHBwL3ZvaWNlcmVnaW9uLmNwcCBiL3NyYy9kcHAvdm9pY2VyZWdpb24uY3BwCitpbmRl eCAwZTEzMTc5Li44OTVmNjU5IDEwMDY0NAorLS0tIGEvc3JjL2RwcC92b2ljZXJlZ2lvbi5jcHAK KysrKyBiL3NyYy9kcHAvdm9pY2VyZWdpb24uY3BwCitAQCAtMjAsNyArMjAsNyBAQAorICAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisgI2luY2x1ZGUgPGRwcC92b2ljZXJlZ2lvbi5oPgor ICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4v anNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorIAorIG5hbWVzcGFjZSBk cHAgeworIAorZGlmZiAtLWdpdCBhL3NyYy9kcHAvdm9pY2VzdGF0ZS5jcHAgYi9zcmMvZHBwL3Zv aWNlc3RhdGUuY3BwCitpbmRleCBlMWRkNTIxLi5hNjg4NjVmIDEwMDY0NAorLS0tIGEvc3JjL2Rw cC92b2ljZXN0YXRlLmNwcAorKysrIGIvc3JjL2RwcC92b2ljZXN0YXRlLmNwcAorQEAgLTIwLDcg KzIwLDcgQEAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICNpbmNsdWRlIDxkcHAv dm9pY2VzdGF0ZS5oPgorICNpbmNsdWRlIDxkcHAvZGlzY29yZGV2ZW50cy5oPgorLSNpbmNsdWRl IDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2luY2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgor IAorIHVzaW5nIGpzb24gPSBubG9obWFubjo6anNvbjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZHBw L3dlYmhvb2suY3BwIGIvc3JjL2RwcC93ZWJob29rLmNwcAoraW5kZXggYTVlNWU1My4uYWQ3Mzc5 NiAxMDA2NDQKKy0tLSBhL3NyYy9kcHAvd2ViaG9vay5jcHAKKysrKyBiL3NyYy9kcHAvd2ViaG9v ay5jcHAKK0BAIC0yMCw3ICsyMCw3IEBACisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KyAjaW5jbHVkZSA8ZHBwL3dlYmhvb2suaD4KKyAjaW5jbHVkZSA8ZHBwL2Rpc2NvcmRldmVudHMu aD4KKy0jaW5jbHVkZSA8ZHBwL25sb2htYW5uL2pzb24uaHBwPgorKyNpbmNsdWRlIDxubG9obWFu bi9qc29uLmhwcD4KKyAjaW5jbHVkZSA8ZHBwL2V4Y2VwdGlvbi5oPgorIAorIG5hbWVzcGFjZSBk cHAgeworZGlmZiAtLWdpdCBhL3NyYy90ZXN0LmggYi9zcmMvdGVzdC5oCitpbmRleCAwYjcxNGY5 Li40MjFjY2FkIDEwMDY0NAorLS0tIGEvc3JjL3Rlc3QuaAorKysrIGIvc3JjL3Rlc3QuaAorQEAg LTI0LDcgKzI0LDcgQEAgX1ByYWdtYSgid2FybmluZyggZGlzYWJsZSA6IDQyNTEgKSIpOyAvLyA0 MjUxIHdhcm5zIHdoZW4gd2UgZXhwb3J0IGNsYXNzZXMgb3Igc3QKKyBfUHJhZ21hKCJ3YXJuaW5n KCBkaXNhYmxlIDogNTEwNSApIik7IC8vIDQyNTEgd2FybnMgd2hlbiB3ZSBleHBvcnQgY2xhc3Nl cyBvciBzdHJ1Y3R1cmVzIHdpdGggc3RsIG1lbWJlciB2YXJpYWJsZXMKKyAjZW5kaWYKKyAjaW5j bHVkZSA8ZHBwL2RwcC5oPgorLSNpbmNsdWRlIDxkcHAvbmxvaG1hbm4vanNvbi5ocHA+CisrI2lu Y2x1ZGUgPG5sb2htYW5uL2pzb24uaHBwPgorICNpbmNsdWRlIDxpb21hbmlwPgorIAorICNpZmRl ZiBfV0lOMzIKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvbGliZHBwL2ZpbGVzL2ZpeC1pbnN0YWxsZWQt Y21ha2VmaWxlcyBiL3NyY3BrZ3MvbGliZHBwL2ZpbGVzL2ZpeC1pbnN0YWxsZWQtY21ha2VmaWxl cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkwZWZjMWEzOTM4ZQot LS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3MvbGliZHBwL2ZpbGVzL2ZpeC1pbnN0YWxsZWQtY21h a2VmaWxlcwpAQCAtMCwwICsxLDg2IEBACitkaWZmIC1ydU4gL3Vzci9saWIvY21ha2UvZHBwL2Rw cC1ub2NvbmZpZy5jbWFrZSAvdXNyL2xpYi9jbWFrZS9kcHBfcGF0Y2gvZHBwLW5vY29uZmlnLmNt YWtlCistLS0gL3Vzci9saWIvY21ha2UvZHBwL2RwcC1ub2NvbmZpZy5jbWFrZQkyMDIyLTA2LTE4 IDE0OjUwOjUyLjAwMDAwMDAwMCArMDgwMAorKysrIC91c3IvbGliL2NtYWtlL2RwcF9wYXRjaC9k cHAtbm9jb25maWcuY21ha2UJMjAyMi0wNi0xOCAxNDo1NTowOC4zNzE2NTMxNzggKzA4MDAKK0BA IC04LDEyICs4LDEyIEBACisgIyBJbXBvcnQgdGFyZ2V0ICJkcHA6OmRwcCIgZm9yIGNvbmZpZ3Vy YXRpb24gIiIKKyBzZXRfcHJvcGVydHkoVEFSR0VUIGRwcDo6ZHBwIEFQUEVORCBQUk9QRVJUWSBJ TVBPUlRFRF9DT05GSUdVUkFUSU9OUyBOT0NPTkZJRykKKyBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMo ZHBwOjpkcHAgUFJPUEVSVElFUworLSAgSU1QT1JURURfTE9DQVRJT05fTk9DT05GSUcgIiR7X0lN UE9SVF9QUkVGSVh9L2xpYjY0L2RwcC0xMC4wL2xpYmRwcC5zby4xMC4wLjExIgorKyAgSU1QT1JU RURfTE9DQVRJT05fTk9DT05GSUcgIiR7X0lNUE9SVF9QUkVGSVh9L2xpYjY0L2xpYmRwcC5zby4x MC4wLjExIgorICAgSU1QT1JURURfU09OQU1FX05PQ09ORklHICJsaWJkcHAuc28uMTAuMC4xMSIK KyAgICkKKyAKKyBsaXN0KEFQUEVORCBfSU1QT1JUX0NIRUNLX1RBUkdFVFMgZHBwOjpkcHAgKQor LWxpc3QoQVBQRU5EIF9JTVBPUlRfQ0hFQ0tfRklMRVNfRk9SX2RwcDo6ZHBwICIke19JTVBPUlRf UFJFRklYfS9saWI2NC9kcHAtMTAuMC9saWJkcHAuc28uMTAuMC4xMSIgKQorK2xpc3QoQVBQRU5E IF9JTVBPUlRfQ0hFQ0tfRklMRVNfRk9SX2RwcDo6ZHBwICIke19JTVBPUlRfUFJFRklYfS9saWI2 NC9saWJkcHAuc28uMTAuMC4xMSIgKQorIAorICMgQ29tbWFuZHMgYmV5b25kIHRoaXMgcG9pbnQg c2hvdWxkIG5vdCBuZWVkIHRvIGtub3cgdGhlIHZlcnNpb24uCisgc2V0KENNQUtFX0lNUE9SVF9G SUxFX1ZFUlNJT04pCitkaWZmIC1ydU4gL3Vzci9saWIvY21ha2UvZHBwL2RwcC10YXJnZXRzLW5v Y29uZmlnLmNtYWtlIC91c3IvbGliL2NtYWtlL2RwcF9wYXRjaC9kcHAtdGFyZ2V0cy1ub2NvbmZp Zy5jbWFrZQorLS0tIC91c3IvbGliL2NtYWtlL2RwcC9kcHAtdGFyZ2V0cy1ub2NvbmZpZy5jbWFr ZQkyMDIyLTA2LTE4IDE0OjUwOjUyLjAwMDAwMDAwMCArMDgwMAorKysrIC91c3IvbGliL2NtYWtl L2RwcF9wYXRjaC9kcHAtdGFyZ2V0cy1ub2NvbmZpZy5jbWFrZQkyMDIyLTA2LTE4IDE0OjU1OjA4 LjQ0NjY1MzE4MCArMDgwMAorQEAgLTYsMTQgKzYsMTQgQEAKKyBzZXQoQ01BS0VfSU1QT1JUX0ZJ TEVfVkVSU0lPTiAxKQorIAorICMgSW1wb3J0IHRhcmdldCAiZHBwIiBmb3IgY29uZmlndXJhdGlv biAiIgorLXNldF9wcm9wZXJ0eShUQVJHRVQgZHBwIEFQUEVORCBQUk9QRVJUWSBJTVBPUlRFRF9D T05GSUdVUkFUSU9OUyBOT0NPTkZJRykKKy1zZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZHBwIFBST1BF UlRJRVMKKytzZXRfcHJvcGVydHkoVEFSR0VUIGRwcDo6ZHBwIEFQUEVORCBQUk9QRVJUWSBJTVBP UlRFRF9DT05GSUdVUkFUSU9OUyBOT0NPTkZJRykKKytzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZHBw OjpkcHAgUFJPUEVSVElFUworICAgSU1QT1JURURfTE9DQVRJT05fTk9DT05GSUcgIiR7X0lNUE9S VF9QUkVGSVh9L2xpYjY0L2xpYmRwcC5zby4xMC4wLjExIgorICAgSU1QT1JURURfU09OQU1FX05P Q09ORklHICJsaWJkcHAuc28uMTAuMC4xMSIKKyAgICkKKyAKKy1saXN0KEFQUEVORCBfSU1QT1JU X0NIRUNLX1RBUkdFVFMgZHBwICkKKy1saXN0KEFQUEVORCBfSU1QT1JUX0NIRUNLX0ZJTEVTX0ZP Ul9kcHAgIiR7X0lNUE9SVF9QUkVGSVh9L2xpYjY0L2xpYmRwcC5zby4xMC4wLjExIiApCisrbGlz dChBUFBFTkQgX0lNUE9SVF9DSEVDS19UQVJHRVRTIGRwcDo6ZHBwICkKKytsaXN0KEFQUEVORCBf SU1QT1JUX0NIRUNLX0ZJTEVTX0ZPUl9kcHA6OmRwcCAiJHtfSU1QT1JUX1BSRUZJWH0vbGliNjQv bGliZHBwLnNvLjEwLjAuMTEiICkKKyAKKyAjIENvbW1hbmRzIGJleW9uZCB0aGlzIHBvaW50IHNo b3VsZCBub3QgbmVlZCB0byBrbm93IHRoZSB2ZXJzaW9uLgorIHNldChDTUFLRV9JTVBPUlRfRklM RV9WRVJTSU9OKQorZGlmZiAtcnVOIC91c3IvbGliL2NtYWtlL2RwcC9kcHAtdGFyZ2V0cy5jbWFr ZSAvdXNyL2xpYi9jbWFrZS9kcHBfcGF0Y2gvZHBwLXRhcmdldHMuY21ha2UKKy0tLSAvdXNyL2xp Yi9jbWFrZS9kcHAvZHBwLXRhcmdldHMuY21ha2UJMjAyMi0wNi0xOCAxNDo1MDo1Mi4wMDAwMDAw MDAgKzA4MDAKKysrKyAvdXNyL2xpYi9jbWFrZS9kcHBfcGF0Y2gvZHBwLXRhcmdldHMuY21ha2UJ MjAyMi0wNi0xOCAxNDo1NTowOC40NDI2NTMxODAgKzA4MDAKK0BAIC00Nyw3ICs0Nyw3IEBACisg IyBjcm9zcy1wcmVmaXggc3ltYm9saWMgbGluayBzdWNoIGFzIC9saWIgLT4gL3Vzci9saWIuCisg Z2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfcmVhbEN1cnIgIiR7X0lNUE9SVF9QUkVGSVh9IiBSRUFM UEFUSCkKKyBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9yZWFsT3JpZyAiL3Vzci9saWI2NCIgUkVB TFBBVEgpCistaWYoX3JlYWxDdXJyIFNUUkVRVUFMIF9yZWFsT3JpZykKKytpZigxKQorICAgc2V0 KF9JTVBPUlRfUFJFRklYICIvdXNyL2xpYjY0IikKKyBlbmRpZigpCisgdW5zZXQoX3JlYWxPcmln KQorQEAgLTYxLDcgKzYxLDcgQEAKKyBhZGRfbGlicmFyeShkcHAgU0hBUkVEIElNUE9SVEVEKQor IAorIHNldF90YXJnZXRfcHJvcGVydGllcyhkcHAgUFJPUEVSVElFUworLSAgSU5URVJGQUNFX0lO Q0xVREVfRElSRUNUT1JJRVMgIiR7X0lNUE9SVF9QUkVGSVh9L2luY2x1ZGUvZHBwLTEwLjAiCisr ICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtfSU1QT1JUX1BSRUZJWH0vaW5jbHVk ZSIKKyAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiL3Vzci9saWIvbGliY3J5cHRvLnNvOy91 c3IvbGliL2xpYnNzbC5zbzsvdXNyL2xpYi9saWJ6LnNvOy91c3IvbGliL2xpYnNvZGl1bS5zbzsv dXNyL2xpYi9saWJvcHVzLnNvOy91c3IvbGliL2xpYm0uc28iCisgKQorIAorZGlmZiAtcnVOIC91 c3IvbGliL2NtYWtlL2RwcC9kcHAuY21ha2UgL3Vzci9saWIvY21ha2UvZHBwX3BhdGNoL2RwcC5j bWFrZQorLS0tIC91c3IvbGliL2NtYWtlL2RwcC9kcHAuY21ha2UJMjAyMi0wNi0xOCAxNDo1MDo1 Mi4wMDAwMDAwMDAgKzA4MDAKKysrKyAvdXNyL2xpYi9jbWFrZS9kcHBfcGF0Y2gvZHBwLmNtYWtl CTIwMjItMDYtMTggMTQ6NTU6MDguMzgwNjUzMTc4ICswODAwCitAQCAtNDYsOSArNDYsOSBAQAor ICMgVXNlIG9yaWdpbmFsIGluc3RhbGwgcHJlZml4IHdoZW4gbG9hZGVkIHRocm91Z2ggYQorICMg Y3Jvc3MtcHJlZml4IHN5bWJvbGljIGxpbmsgc3VjaCBhcyAvbGliIC0+IC91c3IvbGliLgorIGdl dF9maWxlbmFtZV9jb21wb25lbnQoX3JlYWxDdXJyICIke19JTVBPUlRfUFJFRklYfSIgUkVBTFBB VEgpCistZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfcmVhbE9yaWcgIi91c3IvbGliNjQvZHBwLTEw LjAiIFJFQUxQQVRIKQorLWlmKF9yZWFsQ3VyciBTVFJFUVVBTCBfcmVhbE9yaWcpCistICBzZXQo X0lNUE9SVF9QUkVGSVggIi91c3IvbGliNjQvZHBwLTEwLjAiKQorK2dldF9maWxlbmFtZV9jb21w b25lbnQoX3JlYWxPcmlnICIvdXNyL2xpYjY0IiBSRUFMUEFUSCkKKytpZigxKQorKyAgc2V0KF9J TVBPUlRfUFJFRklYICIvdXNyL2xpYjY0IikKKyBlbmRpZigpCisgdW5zZXQoX3JlYWxPcmlnKQor IHVuc2V0KF9yZWFsQ3VycikKK0BAIC02Miw3ICs2Miw3IEBACisgYWRkX2xpYnJhcnkoZHBwOjpk cHAgU0hBUkVEIElNUE9SVEVEKQorIAorIHNldF90YXJnZXRfcHJvcGVydGllcyhkcHA6OmRwcCBQ Uk9QRVJUSUVTCistICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtfSU1QT1JUX1BS RUZJWH0vaW5jbHVkZS9kcHAtMTAuMCIKKysgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVT ICIke19JTVBPUlRfUFJFRklYfS9pbmNsdWRlIgorICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVT ICIvdXNyL2xpYi9saWJjcnlwdG8uc287L3Vzci9saWIvbGlic3NsLnNvOy91c3IvbGliL2xpYnou c287L3Vzci9saWIvbGlic29kaXVtLnNvOy91c3IvbGliL2xpYm9wdXMuc287L3Vzci9saWIvbGli bS5zbyIKKyApCisgCmRpZmYgLS1naXQgYS9zcmNwa2dzL2xpYmRwcC90ZW1wbGF0ZSBiL3NyY3Br Z3MvbGliZHBwL3RlbXBsYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uZTE5MGYwNDg1ZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtncy9saWJkcHAvdGVtcGxh dGUKQEAgLTAsMCArMSwzNyBAQAorIyBUZW1wbGF0ZSBmaWxlIGZvciAnbGliZHBwJworcGtnbmFt ZT1saWJkcHAKK3ZlcnNpb249MTAuMC4xMAorcmV2aXNpb249MQord3Jrc3JjPURQUC0ke3ZlcnNp b259CitidWlsZF9zdHlsZT1jbWFrZQorY21ha2VfYnVpbGRkaXI9YnVpbGQKK2hvc3RtYWtlZGVw ZW5kcz0icGtnLWNvbmZpZyBnaXQiCittYWtlZGVwZW5kcz0ibGlic29kaXVtLWRldmVsIG9wdXMt ZGV2ZWwgemxpYi1kZXZlbCBvcGVuc3NsLWRldmVsIGZtdC1kZXZlbCBqc29uLWMrKyIKK3Nob3J0 X2Rlc2M9IkMrKyBEaXNjb3JkIEFQSSBMaWJyYXJ5IGZvciBCb3RzIgorbWFpbnRhaW5lcj0iQm8t UnUgSnUgPHNjaG9vbC5zaHNwc0BnbWFpbC5jb20+IgorbGljZW5zZT1BcGFjaGUtMi4wCitob21l cGFnZT0iaHR0cHM6Ly9kcHAuZGV2IgorZGlzdGZpbGVzPSJodHRwczovL2dpdGh1Yi5jb20vYnJh aW5ib3hkb3RjYy9EUFAvYXJjaGl2ZS9yZWZzL3RhZ3MvdiR7dmVyc2lvbn0udGFyLmd6IgorY2hl Y2tzdW09MmExYzI2ZjYwNjI5OGU1YjY4M2QxZTE0MDIxOWM0MzRlNjFjNGIyMmU4NTEwZmEyYTJk NWY3YjY3NThkZmY5NQorCitwb3N0X2V4dHJhY3QoKSB7CisJZ2l0IGFwcGx5ICR7RklMRVNESVJ9 L2ZpeC1oZWFkZXJzLWFuZC1jbWFrZWZpbGVzCit9CisKK3Bvc3RfaW5zdGFsbCgpIHsKKwlybSAt ciAiJHtERVNURElSfS91c3IvbGliL2RwcC0ke3ZlcnNpb24lLip9IgorfQorCitsaWJkcHAtZGV2 ZWxfcGFja2FnZSgpIHsKKwlkZXBlbmRzPSIke21ha2VkZXBlbmRzfSAke3NvdXJjZXBrZ30tJHt2 ZXJzaW9ufV8ke3JldmlzaW9ufSIKKwlzaG9ydF9kZXNjKz0iIC0gZGV2ZWxvcG1lbnQgZmlsZXMi CisJcGtnX2luc3RhbGwoKSB7CisJCXZtb3ZlIHVzci9saWIvcGtnY29uZmlnCisJCXZtb3ZlIHVz ci9pbmNsdWRlCisJCXZta2RpciB1c3IvbGliL2NtYWtlL2RwcAorCQlmaW5kICIke0RFU1RESVJ9 L3Vzci9saWIiIC1pbmFtZSAiKi5jbWFrZSIgfCB3aGlsZSByZWFkIGZpbGU7IGRvIHZpbnN0YWxs ICIkZmlsZSIgNjQ0ICJ1c3IvbGliL2NtYWtlL2RwcCI7IGRvbmUKKwkJdmNvcHkgJHtGSUxFU0RJ Un0vZml4LWluc3RhbGxlZC1jbWFrZWZpbGVzICR7UEtHREVTVERJUn0vdXNyL2xpYi9jbWFrZQor CQlwYXRjaCAtcyAtcDAgPCAke1BLR0RFU1RESVJ9L3Vzci9saWIvY21ha2UvZml4LWluc3RhbGxl ZC1jbWFrZWZpbGVzCisJCW12ICR7UEtHREVTVERJUn0vdXNyL2xpYi9jbWFrZS9kcHBfcGF0Y2gg JHtQS0dERVNURElSfS91c3IvbGliL2NtYWtlL2RwcAorCX0KK30K --===============4326402664092844980==--