From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Adam Williamson To: git-commits@fedoraproject.org Subject: [rpms/rpm-ostree] rawhide: Backport PR #5624 to support relocated repo configs and GPG keys Date: Thu, 20 Aug 2026 17:42:24 GMT Message-ID: <178724774425.1.10495314858034049222.rpms-rpm-ostree-aa42a01c9894@fedoraproject.org> List-ID: X-Git-Repo: rpms/rpm-ostree X-Git-Branch: rawhide X-Git-Rev: aa42a01c98949b554b3179ab292c73d1528cab8b ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvcnBtLW9zdHJlZQogICAgICAgICAgICBCcmFuY2ggOiByYXdoaWRlCiAgICAg ICAgICAgIENvbW1pdCA6IGFhNDJhMDFjOTg5NDliNTU0YjMxNzlhYjI5MmM3M2QxNTI4Y2FiOGIK ICAgICAgICAgICAgQXV0aG9yIDogQWRhbSBXaWxsaWFtc29uIDxhd2lsbGlhbUByZWRoYXQuY29t PgogICAgICAgICAgICBEYXRlICAgOiAyMDI2LTA4LTIwVDEwOjMwOjAwLTA3OjAwCiAgICAgICAg ICAgIFN0YXRzICA6ICsxMzQ0My8tMCBpbiAzIGZpbGUocykKICAgICAgICAgICAgVVJMICAgIDog aHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9ycG0tb3N0cmVlL2MvYWE0MmEwMWM5 ODk0OWI1NTRiMzE3OWFiMjkyYzczZDE1MjhjYWI4Yj9icmFuY2g9cmF3aGlkZQoKICAgICAgICAg ICAgTG9nOgogICAgICAgICAgICBCYWNrcG9ydCBQUiAjNTYyNCB0byBzdXBwb3J0IHJlbG9jYXRl ZCByZXBvIGNvbmZpZ3MgYW5kIEdQRyBrZXlzCgpUaGUgcmVxdWlyZWQgY2hhbmdlIHRvIHRoZSBi dW5kbGVkIGxpYmRuZiBpcyBpbmNsdWRlZCBhcyBhCnNsaWdodGx5LW1vZGlmaWVkIHZlcnNpb24g b2YgdGhlIHVwc3RyZWFtIGNvbW1pdC4KCi0tLQpkaWZmIC0tZ2l0IGEvMDAwMS1rZXlyaW5nLUFs c28tc2VhcmNoLXVzci1zaGFyZS1wa2ktcnBtLWdwZy1mb3ItR1BHLWtlLnBhdGNoIGIvMDAwMS1r ZXlyaW5nLUFsc28tc2VhcmNoLXVzci1zaGFyZS1wa2ktcnBtLWdwZy1mb3ItR1BHLWtlLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTE4NWEKLS0tIC9kZXYvbnVs bAorKysgYi8wMDAxLWtleXJpbmctQWxzby1zZWFyY2gtdXNyLXNoYXJlLXBraS1ycG0tZ3BnLWZv ci1HUEcta2UucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorRnJvbSBhOGU5ZmNjNWM1YjgwZmUyNWU3 MjVkMDI4ZTlmOWI4MDhjYjAyNzNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9z ZXBoIE1hcnJlcm8gQ29yY2hhZG8gPGptYXJyZXJvQHJlZGhhdC5jb20+CitEYXRlOiBXZWQsIDE5 IEF1ZyAyMDI2IDE3OjEwOjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGtleXJpbmc6IEFsc28g c2VhcmNoIC91c3Ivc2hhcmUvcGtpL3JwbS1ncGcgZm9yIEdQRyBrZXlzCisKK1NlYXJjaCBib3Ro IC9ldGMvcGtpL3JwbS1ncGcgKHVzZXItYWRkZWQga2V5cykgYW5kIC91c3Ivc2hhcmUvcGtpL3Jw bS1ncGcKKyhkaXN0cmlidXRpb24tcHJvdmlkZWQga2V5cykgc28gdGhhdCBHUEcgc2lnbmF0dXJl IHZlcmlmaWNhdGlvbiB3b3JrcworcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUga2V5cyBhcmUgaW5z dGFsbGVkLgorCitDby1hdXRob3JlZC1ieTogQWRhbSBXaWxsaWFtc29uIDxhd2lsbGlhbUByZWRo YXQuY29tPgorQXNzaXN0ZWQtYnk6IEFJCistLS0KKyBsaWJkbmYvbGliZG5mL2RuZi1rZXlyaW5n LmNwcCB8IDU5ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEg ZmlsZSBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAt LWdpdCBhL2xpYmRuZi9saWJkbmYvZG5mLWtleXJpbmcuY3BwIGIvbGliZG5mL2xpYmRuZi9kbmYt a2V5cmluZy5jcHAKK2luZGV4IDJlMzhlZmRkLi5hNzI1ZGViYSAxMDA2NDQKKy0tLSBhL2xpYmRu Zi9saWJkbmYvZG5mLWtleXJpbmcuY3BwCisrKysgYi9saWJkbmYvbGliZG5mL2RuZi1rZXlyaW5n LmNwcAorQEAgLTM0NSwzNCArMzQ1LDQxIEBAIG91dDoKKyBnYm9vbGVhbgorIGRuZl9rZXlyaW5n X2FkZF9wdWJsaWNfa2V5cyhycG1LZXlyaW5nIGtleXJpbmcsIEdFcnJvciAqKmVycm9yKSB0cnkK KyB7CistICAgIGNvbnN0IGdjaGFyICpncGdfZGlyID0gIi9ldGMvcGtpL3JwbS1ncGciOworLSAg ICBnYm9vbGVhbiByZXQgPSBUUlVFOworLSAgICBnX2F1dG9wdHIoR0RpcikgZGlyID0gTlVMTDsK Ky0gICAgR0Vycm9yICpsb2NhbEVycm9yID0gTlVMTDsKKy0KKy0gICAgLyogc2VhcmNoIGFsbCB0 aGUgcHVibGljIGtleSBmaWxlcyAqLworLSAgICBkaXIgPSBnX2Rpcl9vcGVuKGdwZ19kaXIsIDAs ICZsb2NhbEVycm9yKTsKKy0gICAgaWYgKGRpciA9PSBOVUxMKSB7CistICAgICAgICBpZiAobG9j YWxFcnJvci0+ZG9tYWluICE9IEdfRklMRV9FUlJPUiB8fCBsb2NhbEVycm9yLT5jb2RlICE9IEdf RklMRV9FUlJPUl9OT0VOVCkgeworLSAgICAgICAgICAgIGdfd2FybmluZygiJXMiLCBsb2NhbEVy cm9yLT5tZXNzYWdlKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGdfZXJyb3JfZnJlZShsb2NhbEVy cm9yKTsKKy0gICAgICAgIHJldHVybiBUUlVFOworLSAgICB9CistICAgIGRvIHsKKy0gICAgICAg IGNvbnN0IGdjaGFyICpmaWxlbmFtZTsKKy0gICAgICAgIGdfYXV0b2ZyZWUgZ2NoYXIgKnBhdGhf dG1wID0gTlVMTDsKKy0gICAgICAgIGZpbGVuYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcik7Cist ICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKy0gICAgICAgICAgICBicmVhazsKKy0gICAg ICAgIHBhdGhfdG1wID0gZ19idWlsZF9maWxlbmFtZShncGdfZGlyLCBmaWxlbmFtZSwgTlVMTCk7 CistICAgICAgICByZXQgPSBkbmZfa2V5cmluZ19hZGRfcHVibGljX2tleShrZXlyaW5nLCBwYXRo X3RtcCwgJmxvY2FsRXJyb3IpOworLSAgICAgICAgaWYgKCFyZXQpIHsKKy0gICAgICAgICAgICBn X3dhcm5pbmcoIiVzIiwgbG9jYWxFcnJvci0+bWVzc2FnZSk7CisrICAgIC8qIFNlYXJjaCBib3Ro IEdQRyBrZXkgbG9jYXRpb25zOiAvZXRjL3BraS9ycG0tZ3BnIGZvciB1c2VyLWFkZGVkIGtleXMK KysgICAgICogYW5kIC91c3Ivc2hhcmUvcGtpL3JwbS1ncGcgZm9yIGRpc3RyaWJ1dGlvbi1wcm92 aWRlZCBrZXlzLgorKyAgICAgKi8KKysgICAgY29uc3QgZ2NoYXIgKmdwZ19kaXJzW10gPSB7ICIv ZXRjL3BraS9ycG0tZ3BnIiwgIi91c3Ivc2hhcmUvcGtpL3JwbS1ncGciLCBOVUxMIH07CisrCisr ICAgIGZvciAoY29uc3QgZ2NoYXIgKipncGdfZGlyX3AgPSBncGdfZGlyczsgKmdwZ19kaXJfcCAh PSBOVUxMOyBncGdfZGlyX3ArKykgeworKyAgICAgICAgY29uc3QgZ2NoYXIgKmdwZ19kaXIgPSAq Z3BnX2Rpcl9wOworKyAgICAgICAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKKysgICAgICAgIGdfYXV0 b3B0cihHRGlyKSBkaXIgPSBOVUxMOworKyAgICAgICAgR0Vycm9yICpsb2NhbEVycm9yID0gTlVM TDsKKysKKysgICAgICAgIC8qIHNlYXJjaCBhbGwgdGhlIHB1YmxpYyBrZXkgZmlsZXMgKi8KKysg ICAgICAgIGRpciA9IGdfZGlyX29wZW4oZ3BnX2RpciwgMCwgJmxvY2FsRXJyb3IpOworKyAgICAg ICAgaWYgKGRpciA9PSBOVUxMKSB7CisrICAgICAgICAgICAgaWYgKGxvY2FsRXJyb3ItPmRvbWFp biAhPSBHX0ZJTEVfRVJST1IgfHwgbG9jYWxFcnJvci0+Y29kZSAhPSBHX0ZJTEVfRVJST1JfTk9F TlQpIHsKKysgICAgICAgICAgICAgICAgZ193YXJuaW5nKCIlcyIsIGxvY2FsRXJyb3ItPm1lc3Nh Z2UpOworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBnX2Vycm9yX2ZyZWUobG9jYWxFcnJv cik7CistICAgICAgICAgICAgbG9jYWxFcnJvciA9IE5VTEw7CisrICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICB9CistICAgIH0gd2hpbGUgKHRydWUpOworKyAgICAgICAgZG8geworKyAg ICAgICAgICAgIGNvbnN0IGdjaGFyICpmaWxlbmFtZTsKKysgICAgICAgICAgICBnX2F1dG9mcmVl IGdjaGFyICpwYXRoX3RtcCA9IE5VTEw7CisrICAgICAgICAgICAgZmlsZW5hbWUgPSBnX2Rpcl9y ZWFkX25hbWUoZGlyKTsKKysgICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKysgICAg ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgcGF0aF90bXAgPSBnX2J1aWxkX2ZpbGVu YW1lKGdwZ19kaXIsIGZpbGVuYW1lLCBOVUxMKTsKKysgICAgICAgICAgICByZXQgPSBkbmZfa2V5 cmluZ19hZGRfcHVibGljX2tleShrZXlyaW5nLCBwYXRoX3RtcCwgJmxvY2FsRXJyb3IpOworKyAg ICAgICAgICAgIGlmICghcmV0KSB7CisrICAgICAgICAgICAgICAgIGdfd2FybmluZygiJXMiLCBs b2NhbEVycm9yLT5tZXNzYWdlKTsKKysgICAgICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGxvY2Fs RXJyb3IpOworKyAgICAgICAgICAgICAgICBsb2NhbEVycm9yID0gTlVMTDsKKysgICAgICAgICAg ICB9CisrICAgICAgICB9IHdoaWxlICh0cnVlKTsKKysgICAgfQorICAgICByZXR1cm4gVFJVRTsK KyB9IENBVENIX1RPX0dFUlJPUihGQUxTRSkKKyAKKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQg YS8yZDE3N2RmZDY2YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5YWE4MTU0LnBhdGNoIGIvMmQxNzdk ZmQ2NmFiNDVhZTI3NjYxYTA4OTlmMGM2NGQ0OWFhODE1NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4yMTQ0NDdkCi0tLSAvZGV2L251bGwKKysrIGIvMmQxNzdkZmQ2 NmFiNDVhZTI3NjYxYTA4OTlmMGM2NGQ0OWFhODE1NC5wYXRjaApAQCAtMCwwICsxLDEzMzQzIEBA CitGcm9tIDJkMTc3ZGZkNjZhYjQ1YWUyNzY2MWEwODk5ZjBjNjRkNDlhYTgxNTQgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3NlcGggTWFycmVybyBDb3JjaGFkbyA8am1hcnJlcm9A cmVkaGF0LmNvbT4KK0RhdGU6IFdlZCwgMTkgQXVnIDIwMjYgMjI6NTM6MjIgLTA0MDAKK1N1Ympl Y3Q6IFtQQVRDSF0gU3VwcG9ydCByZWxvY2F0ZWQgcmVwbyBjb25maWdzIChGZWRvcmEgNDUrKQor CitGZWRvcmEgNDUgQ2hhbmdlIFJlbG9jYXRlUnBtUmVwb0NvbmZpZ3NUb1VzciBtb3ZlZCBzeXN0 ZW0gcmVwb3NpdG9yeQorZGVmaW5pdGlvbnMgZnJvbSAvZXRjL3l1bS5yZXBvcy5kIHRvIC91c3Iv c2hhcmUvZG5mNS9yZXBvcy5kIGFuZCBHUEcKK2tleXMgZnJvbSAvZXRjL3BraS9ycG0tZ3BnIHRv IC91c3Ivc2hhcmUvcGtpL3JwbS1ncGcuIFRoaXMgYnJva2UKK3BhY2thZ2Ugb3ZlcmxheSBvcGVy YXRpb25zIChycG0tb3N0cmVlIGluc3RhbGwpIHdpdGg6CisgIGVycm9yOiBObyBlbmFibGVkIHJl cG9zaXRvcmllcworCitTd2l0Y2ggYWxsIHJlcG8gZGlyZWN0b3J5IHNldHVwIGZyb20gdGhlIHNp bmdsZS1kaXJlY3RvcnkKK2RuZl9jb250ZXh0X3NldF9yZXBvX2RpcigpIEFQSSB0byB0aGUgbXVs dGktZGlyZWN0b3J5CitkbmZfY29udGV4dF9zZXRfcmVwb3NfZGlyKCkgQVBJLCBwYXNzaW5nIGJv dGggdGhlIHVzZXItYWRkZWQgYW5kCitkaXN0cmlidXRpb24tcHJvdmlkZWQgbG9jYXRpb25zLiBU aGUgbGliZG5mIHJlcG8gbG9hZGVyIGFscmVhZHkKK2dyYWNlZnVsbHkgc2tpcHMgbm9uLWV4aXN0 ZW50IGRpcmVjdG9yaWVzLCBzbyB0aGlzIHdvcmtzIG9uIGJvdGggb2xkCisoRmVkb3JhIDw9NDQs IFJIRUwpIGFuZCBuZXcgKEZlZG9yYSA0NSspIGxheW91dHMgd2l0aG91dCB2ZXJzaW9uCitkZXRl Y3Rpb24uCisKK0NoYW5nZXM6CistIHJwbW9zdHJlZS1jb3JlLmN4eDogQWRkIGJ1aWxkX3JlcG9z X2RpcnMoKSBoZWxwZXIgdXNpbmcgY2Fub25pY2FsCisgIHBhdGggbGlzdCBmcm9tIFJ1c3Qgdmlh IGN4eCBicmlkZ2UuIFVwZGF0ZSBhbGwgY2FsbCBzaXRlcyB0byB1c2UgaXQuCisgIEFkZCBycG1v c3RyZWVfY29udGV4dF9zZXRfcmVwb3NfZGlycygpIGZvciBtdWx0aS1kaXIgb3ZlcnJpZGVzLgor LSBydXN0L2NvbXBvc2Vwb3N0OiBBZGQgc2hhcmVkIGNvbnN0YW50cyBmb3IgcmVwbyBkaXIgcGF0 aHMsIGV4cG9zZWQKKyAgdG8gQysrIHZpYSBnZXRfcmVwb3NfZGlycygpIGJyaWRnZSBmdW5jdGlv bi4KKy0gcnVzdC9jb3VudG1lOiBTY2FuIGJvdGggcmVwbyBkaXJlY3RvcmllcyBmb3IgQ291bnQg TWUgc3VwcG9ydC4KKy0gcnVzdC9jb21wb3NlOiBIYW5kbGUgYm90aCByZXBvIGxheW91dHMgaW4g bXV0YXRlX3NvdXJjZV9yb290KCkuCistIFRlc3RzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZWQg YWNjb3JkaW5nbHkuCisKK0Nsb3NlczogaHR0cHM6Ly9naXRodWIuY29tL2NvcmVvcy9ycG0tb3N0 cmVlL2lzc3Vlcy81NjIzCisKK0NvLWF1dGhvcmVkLWJ5OiBBZGFtIFdpbGxpYW1zb24gPGF3aWxs aWFtQHJlZGhhdC5jb20+CitBc3Npc3RlZC1ieTogQUkKKy0tLQorIGRvY3MvdHJlZWZpbGUubWQg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBtYW4vcnBtLW9zdHJlZS54bWwgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIzICstCisgcnBtb3N0cmVlLWN4eHJzLmN4eCAgICAgICAg ICAgICAgICAgICAgIHwgNzg0MSArKysrKysrKysrKysrKy0tLS0tLS0tLQorIHJwbW9zdHJlZS1j eHhycy5oICAgICAgICAgICAgICAgICAgICAgICB8IDIwOTkgKysrLS0tCisgcnVzdC9zcmMvY29t cG9zZS5ycyAgICAgICAgICAgICAgICAgICAgIHwgICA1OCArLQorIHJ1c3Qvc3JjL2NvbXBvc2Vw b3N0LnJzICAgICAgICAgICAgICAgICB8ICAgMTcgKworIHJ1c3Qvc3JjL2NvdW50bWUvcmVwby5y cyAgICAgICAgICAgICAgICB8ICAgMzIgKy0KKyBydXN0L3NyYy9saWIucnMgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICA3ICsKKyBzcmMvZGFlbW9uL3JwbW9zdHJlZS1zeXNyb290LXVwZ3Jh ZGVyLmggfCAgICAyICstCisgc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuY3h4ICAgICAgICAg IHwgICA1NSArLQorIHNyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmggICAgICAgICAgICB8ICAg IDEgKworIHRlc3RzL2NvbW1vbi9saWJ0ZXN0cmVwb3Muc2ggICAgICAgICAgICB8ICAgIDggKy0K KyB0ZXN0cy9jb21wb3NlLWltYWdlLnNoICAgICAgICAgICAgICAgICAgfCAgIDEwICstCisgMTMg ZmlsZXMgY2hhbmdlZCwgNjI0MyBpbnNlcnRpb25zKCspLCAzOTE1IGRlbGV0aW9ucygtKQorCitk aWZmIC0tZ2l0IGEvZG9jcy90cmVlZmlsZS5tZCBiL2RvY3MvdHJlZWZpbGUubWQKK2luZGV4IGE0 MDY4YjcyNzAuLmI5ZTA2M2RiOWUgMTAwNjQ0CistLS0gYS9kb2NzL3RyZWVmaWxlLm1kCisrKysg Yi9kb2NzL3RyZWVmaWxlLm1kCitAQCAtMzYsOCArMzYsOSBAQCBJdCBzdXBwb3J0cyB0aGUgZm9s bG93aW5nIHBhcmFtZXRlcnM6CisgICAgdXNlLCBmcm9tIGFueSBmaWxlcyB0aGF0IGVuZCBpbiBg LnJlcG9gLCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKKyAgICB0aGUgdHJlZWZpbGUuIElmIG1p c3NpbmcsIGFsbCB5dW0gcmVwb3MgZW5hYmxlZCBieSBkZWZhdWx0IGFyZSB1c2VkLgorICAgIGBy cG0tb3N0cmVlIGNvbXBvc2UgdHJlZWAgZG9lcyBub3QgdXNlIHRoZSBzeXN0ZW0KKy0gICBgL2V0 Yy95dW0ucmVwb3MuZGAsIGJlY2F1c2UgaXQncyBjb21tb24gdG8gd2FudCB0byBjb21wb3NlIGEg dGFyZ2V0CistICAgc3lzdGVtIGRpc3RpbmN0IGZyb20gdGhlIG9uZSB0aGUgaG9zdCBzeXRlbSBp cyBydW5uaW5nLgorKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcywgYmVj YXVzZSBpdCdzIGNvbW1vbiB0byB3YW50CisrICAgdG8gY29tcG9zZSBhIHRhcmdldCBzeXN0ZW0g ZGlzdGluY3QgZnJvbSB0aGUgb25lIHRoZSBob3N0IHN5dGVtCisrICAgaXMgcnVubmluZy4KKyAK KyAgKiBgc2VsaW51eGA6IGJvb2xlYW4sIG9wdGlvbmFsOiBEZWZhdWx0cyB0byBgdHJ1ZWAuICBJ ZiBgZmFsc2VgLCB0aGVuCisgICAgbm8gU0VMaW51eCBsYWJlbGluZyB3aWxsIGJlIHBlcmZvcm1l ZCBvbiB0aGUgc2VydmVyIHNpZGUuCitkaWZmIC0tZ2l0IGEvbWFuL3JwbS1vc3RyZWUueG1sIGIv bWFuL3JwbS1vc3RyZWUueG1sCitpbmRleCBjY2Y1ZDBmNWIzLi4yY2E4NWE4ZjY5IDEwMDY0NAor LS0tIGEvbWFuL3JwbS1vc3RyZWUueG1sCisrKysgYi9tYW4vcnBtLW9zdHJlZS54bWwKK0BAIC0y MjIsOCArMjIyLDggQEAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgIFRha2VzIG9uZSBvciBtb3Jl IHBhY2thZ2VzIGFzIGFyZ3VtZW50cy4gVGhlIHBhY2thZ2VzIGFyZQorLSAgICAgICAgICAgIGZl dGNoZWQgZnJvbSB0aGUgZW5hYmxlZCByZXBvc2l0b3JpZXMgaW4KKy0gICAgICAgICAgICA8Zmls ZW5hbWU+L2V0Yy95dW0ucmVwb3MuZC88L2ZpbGVuYW1lPiBhbmQgYXJlIG92ZXJsYXllZCBvbgor KyAgICAgICAgICAgIGZldGNoZWQgZnJvbSB0aGUgZW5hYmxlZCByZXBvc2l0b3JpZXMgaW4gdGhl IHN5c3RlbQorKyAgICAgICAgICAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBkaXJlY3Rvcmll cyBhbmQgYXJlIG92ZXJsYXllZCBvbgorICAgICAgICAgICAgIHRvcCBvZiBhIG5ldyBkZXBsb3lt ZW50LiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEKKyAgICAgICAgICAgICBsb2Nh bCBSUE0gcGFja2FnZSB0aGF0IHJlc2lkZXMgb24gdGhlIGhvc3QuIE92ZXJsYXllZAorICAgICAg ICAgICAgIHBhY2thZ2VzIGNhbiBsYXRlciBiZSByZW1vdmVkIHdpdGggdGhlCitAQCAtMzEwLDgg KzMxMCw4IEBAIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICAgICAgICAgICAgIFRha2Vz IG9uZSBvciBtb3JlIHBhY2thZ2VzIGFzIGFyZ3VtZW50cy4gVGhlIHBhY2thZ2VzIGFyZQorICAg ICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgc2V0IG9mIHBhY2thZ2VzIHRoYXQgYXJlIGN1cnJl bnRseQorICAgICAgICAgICAgIG92ZXJsYXllZC4gVGhlIHJlbWFpbmluZyBwYWNrYWdlcyBpbiB0 aGUgc2V0IChpZiBhbnkpIGFyZQorLSAgICAgICAgICAgIGZldGNoZWQgZnJvbSB0aGUgZW5hYmxl ZCByZXBvc2l0b3JpZXMgaW4KKy0gICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy95dW0ucmVwb3Mu ZC88L2ZpbGVuYW1lPiBhbmQgYXJlIG92ZXJsYXllZCBvbgorKyAgICAgICAgICAgIGZldGNoZWQg ZnJvbSB0aGUgZW5hYmxlZCByZXBvc2l0b3JpZXMgaW4gdGhlIHN5c3RlbQorKyAgICAgICAgICAg IHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcyBhbmQgYXJlIG92ZXJsYXllZCBv bgorICAgICAgICAgICAgIHRvcCBvZiBhIG5ldyBkZXBsb3ltZW50LgorICAgICAgICAgICA8L3Bh cmE+CisgCitAQCAtMzM0LDggKzMzNCw4IEBAIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor ICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICBUYWtl cyBvbmUgb3IgbW9yZSBxdWVyeSB0ZXJtcyBhcyBhcmd1bWVudHMuIFRoZSBwYWNrYWdlcyBhcmUK Ky0gICAgICAgICAgICBzZWFyY2hlZCB3aXRoaW4gdGhlIGVuYWJsZWQgcmVwb3NpdG9yaWVzIGlu CistICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMveXVtLnJlcG9zLmQvPC9maWxlbmFtZT4uIFBh Y2thZ2VzIGNhbiBiZQorKyAgICAgICAgICAgIHNlYXJjaGVkIHdpdGhpbiB0aGUgZW5hYmxlZCBy ZXBvc2l0b3JpZXMgaW4gdGhlIHN5c3RlbQorKyAgICAgICAgICAgIHJlcG9zaXRvcnkgY29uZmln dXJhdGlvbiBkaXJlY3Rvcmllcy4gUGFja2FnZXMgY2FuIGJlCisgICAgICAgICAgICAgb3Zlcmxh eWVkIGFuZCByZW1vdmVkIHVzaW5nIHRoZSA8Y29tbWFuZD5pbnN0YWxsPC9jb21tYW5kPgorICAg ICAgICAgICAgIGFuZCA8Y29tbWFuZD51bmluc3RhbGw8L2NvbW1hbmQ+IGNvbW1hbmRzLgorICAg ICAgICAgICA8L3BhcmE+CitAQCAtNTE5LDggKzUxOSw4IEBAIEJvc3RvbiwgTUEgMDIxMTEtMTMw NywgVVNBLgorICAgICAgICAgICAgIDxvcHRpb24+LS1jaGVjazwvb3B0aW9uPiB0byBqdXN0IGNo ZWNrIGlmIGFuIHVwZ3JhZGUgaXMKKyAgICAgICAgICAgICBhdmFpbGFibGUsIHdpdGhvdXQgZG93 bmxvYWRpbmcgaXQgb3IgcGVyZm9ybWluZyBhCisgICAgICAgICAgICAgcGFja2FnZS1sZXZlbCBk aWZmLiAgVXNpbmcgdGhpcyBmbGFnIHdpbGwgZm9yY2UgYW4gdXBkYXRlCistICAgICAgICAgICAg b2YgdGhlIFJQTSBtZXRhZGF0YSBmcm9tIHRoZSBlbmFibGVkIHJlcG9zIGluCistICAgICAgICAg ICAgPGZpbGVuYW1lPi9ldGMveXVtLnJlcG9zLmQvPC9maWxlbmFtZT4sIGlmIHRoZXJlIGFyZSBh bnkKKysgICAgICAgICAgICBvZiB0aGUgUlBNIG1ldGFkYXRhIGZyb20gdGhlIGVuYWJsZWQgcmVw b3MgaW4gdGhlIHN5c3RlbQorKyAgICAgICAgICAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBk aXJlY3RvcmllcywgaWYgdGhlcmUgYXJlIGFueQorICAgICAgICAgICAgIGxheWVyZWQgcGFja2Fn ZXMuCisgICAgICAgICAgIDwvcGFyYT4KKyAKK0BAIC05MTEsMTQgKzkxMSwxNyBAQCAkIHN5c3Rl bWN0bCBzdGFydCBwb3N0Z3Jlc3FsICAjIFNvbWUgc2V0dXAgcmVxdWlyZWQKKyAgICAgPHRpdGxl PlJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhbmQgR1BHIGtleXM8L3RpdGxlPgorIAorICAgICA8 cGFyYT4KKy0gICAgICBycG0tb3N0cmVlIHVzZXMgdGhlIGxpYmRuZiBzaGFyZWQgbGlicmFyeSwg d2hpY2ggaG9ub3JzIDxsaXRlcmFsPi9ldGMveXVtLnJlcG9zLmQ8L2xpdGVyYWw+LgorKyAgICAg IHJwbS1vc3RyZWUgdXNlcyB0aGUgbGliZG5mIHNoYXJlZCBsaWJyYXJ5LCB3aGljaCBob25vcnMg Ym90aAorKyAgICAgIDxsaXRlcmFsPi9ldGMveXVtLnJlcG9zLmQ8L2xpdGVyYWw+IChmb3IgdXNl ciBjb25maWd1cmF0aW9uKSBhbmQKKysgICAgICA8bGl0ZXJhbD4vdXNyL3NoYXJlL2RuZjUvcmVw b3MuZDwvbGl0ZXJhbD4gKGZvciBkaXN0cmlidXRpb24tcHJvdmlkZWQgY29uZmlndXJhdGlvbiku CisgICAgICAgTm90ZSB0aGF0IHJwbS1tZCAoeXVtL2RuZikgcmVwb3NpdG9yaWVzIGFyZSBvbmx5 IGNoZWNrZWQgaWYgY2xpZW50LXNpZGUgcGFja2FnZSBsYXllcmluZyBpcworICAgICAgIGVuYWJs ZWQuCisgICAgIDwvcGFyYT4KKyAKKyAgICAgPHBhcmE+CisgICAgICAgSG93ZXZlciwgdGhlIGJl aGF2aW9yIGZvciBHUEcga2V5cyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBhIHRyYWRpdGlv bmFsIDxjb21tYW5kPnJwbTwvY29tbWFuZD4KKy0gICAgICBzeXN0ZW0uICBFc3NlbnRpYWxseSwg YWxsIEdQRyBrZXlzIGluIDxsaXRlcmFsPi9ldGMvcGtpL3JwbS1ncGc8L2xpdGVyYWw+IGFyZSBs b2FkZWQgYW5kIHRydXN0ZWQuCisrICAgICAgc3lzdGVtLiAgRXNzZW50aWFsbHksIGFsbCBHUEcg a2V5cyBpbiA8bGl0ZXJhbD4vZXRjL3BraS9ycG0tZ3BnPC9saXRlcmFsPiBhbmQKKysgICAgICA8 bGl0ZXJhbD4vdXNyL3NoYXJlL3BraS9ycG0tZ3BnPC9saXRlcmFsPiBhcmUgbG9hZGVkIGFuZCB0 cnVzdGVkLgorICAgICAgIFRoZSA8bGl0ZXJhbD4ucmVwbzwvbGl0ZXJhbD4gZmlsZSBzaG91bGQg cmVmZXJlbmNlIHRoZSBmaWxlIHBhdGggaW4gdGhlcmUuCisgICAgIDwvcGFyYT4KKyAgICAgPHBh cmE+CitkaWZmIC0tZ2l0IGEvcnBtb3N0cmVlLWN4eHJzLmN4eCBiL3JwbW9zdHJlZS1jeHhycy5j eHgKK2luZGV4IDg3MTJhM2YyYzYuLmM3ZDA1ZjIzMTIgMTAwNjQ0CistLS0gYS9ycG1vc3RyZWUt Y3h4cnMuY3h4CisrKysgYi9ycG1vc3RyZWUtY3h4cnMuY3h4CitAQCAtMSwxNiArMSwxNSBAQAor LSNpbmNsdWRlICJzcmMvbGlicHJpdi9ycG1vc3RyZWUtY3h4cnMtcHJlbHVkZS5oIgorKyNpbmNs dWRlICJycG1vc3RyZWUtY3h4cnMuaCIKKysjaW5jbHVkZSAicnBtb3N0cmVlLWNsaWVudGxpYi5o IgorICNpbmNsdWRlICJycG1vc3RyZWUtY29udGFpbmVyLmhwcCIKKyAjaW5jbHVkZSAicnBtb3N0 cmVlLWN4eHJzdXRpbC5ocHAiCistI2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCistI2luY2x1 ZGUgInJwbW9zdHJlZW1haW4uaCIKKy0jaW5jbHVkZSAicnBtb3N0cmVlLWNsaWVudGxpYi5oIgor ICNpbmNsdWRlICJycG1vc3RyZWUtZGlmZi5ocHAiCisgI2luY2x1ZGUgInJwbW9zdHJlZS1saWJi dWlsdGluLmgiCistI2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCisgI2luY2x1ZGUgInJwbW9z dHJlZS1vdXRwdXQuaCIKKy0jaW5jbHVkZSAicnBtb3N0cmVlLXJwbS11dGlsLmgiCisgI2luY2x1 ZGUgInJwbW9zdHJlZS1wYWNrYWdlLXZhcmlhbnRzLmgiCistI2luY2x1ZGUgInJwbW9zdHJlZS1j eHhycy5oIgorKyNpbmNsdWRlICJycG1vc3RyZWUtcnBtLXV0aWwuaCIKKysjaW5jbHVkZSAicnBt b3N0cmVlLXV0aWwuaCIKKysjaW5jbHVkZSAicnBtb3N0cmVlbWFpbi5oIgorKyNpbmNsdWRlICJz cmMvbGlicHJpdi9ycG1vc3RyZWUtY3h4cnMtcHJlbHVkZS5oIgorICNpbmNsdWRlIDxhbGdvcml0 aG0+CisgI2luY2x1ZGUgPGFycmF5PgorICNpbmNsdWRlIDxjYXNzZXJ0PgorQEAgLTQwLDk0ICsz OSw5OCBAQAorICNlbmRpZiAvLyBfX2NsYW5nX18KKyAjZW5kaWYgLy8gX19HTlVDX18KKyAKKy1u YW1lc3BhY2UgcnVzdCB7CistaW5saW5lIG5hbWVzcGFjZSBjeHhicmlkZ2UxIHsKKytuYW1lc3Bh Y2UgcnVzdAorK3sKKytpbmxpbmUgbmFtZXNwYWNlIGN4eGJyaWRnZTEKKyt7CisgLy8gI2luY2x1 ZGUgInJ1c3QvY3h4LmgiCisgCisgI2lmbmRlZiBDWFhCUklER0UxX1BBTklDCisgI2RlZmluZSBD WFhCUklER0UxX1BBTklDCistdGVtcGxhdGUgPHR5cGVuYW1lIEV4Y2VwdGlvbj4KKy12b2lkIHBh bmljIFtbbm9yZXR1cm5dXSAoY29uc3QgY2hhciAqbXNnKTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg RXhjZXB0aW9uPiB2b2lkIHBhbmljIFtbbm9yZXR1cm5dXSAoY29uc3QgY2hhciAqbXNnKTsKKyAj ZW5kaWYgLy8gQ1hYQlJJREdFMV9QQU5JQworIAorIHN0cnVjdCB1bnNhZmVfYml0Y29weV90Owor IAorLW5hbWVzcGFjZSB7CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgaW1wbDsKKytu YW1lc3BhY2UKKyt7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIGltcGw7CisgfSAvLyBu YW1lc3BhY2UKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy06OnN0ZDo6c2l6ZV90IHNpemVf b2YoKTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy06OnN0ZDo6c2l6ZV90IGFsaWduX29mKCk7 CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+OjpzdGQ6OnNpemVfdCBzaXplX29mICgpOworK3RlbXBs YXRlIDx0eXBlbmFtZSBUPjo6c3RkOjpzaXplX3QgYWxpZ25fb2YgKCk7CisgCisgI2lmbmRlZiBD WFhCUklER0UxX1JVU1RfU1RSSU5HCisgI2RlZmluZSBDWFhCUklER0UxX1JVU1RfU1RSSU5HCist Y2xhc3MgU3RyaW5nIGZpbmFsIHsKKytjbGFzcyBTdHJpbmcgZmluYWwKKyt7CisgcHVibGljOgor LSAgU3RyaW5nKCkgbm9leGNlcHQ7CistICBTdHJpbmcoY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0 OworLSAgU3RyaW5nKFN0cmluZyAmJikgbm9leGNlcHQ7CistICB+U3RyaW5nKCkgbm9leGNlcHQ7 CistCistICBTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJik7CistICBTdHJpbmcoY29uc3QgY2hh ciAqKTsKKy0gIFN0cmluZyhjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KTsKKy0gIFN0cmluZyhj b25zdCBjaGFyMTZfdCAqKTsKKy0gIFN0cmluZyhjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVf dCk7CisrICBTdHJpbmcgKCkgbm9leGNlcHQ7CisrICBTdHJpbmcgKGNvbnN0IFN0cmluZyAmKSBu b2V4Y2VwdDsKKysgIFN0cmluZyAoU3RyaW5nICYmKSBub2V4Y2VwdDsKKysgIH5TdHJpbmcgKCkg bm9leGNlcHQ7CisrCisrICBTdHJpbmcgKGNvbnN0IHN0ZDo6c3RyaW5nICYpOworKyAgU3RyaW5n IChjb25zdCBjaGFyICopOworKyAgU3RyaW5nIChjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KTsK KysgIFN0cmluZyAoY29uc3QgY2hhcjE2X3QgKik7CisrICBTdHJpbmcgKGNvbnN0IGNoYXIxNl90 ICosIHN0ZDo6c2l6ZV90KTsKKyAjaWZkZWYgX19jcHBfY2hhcjhfdAorLSAgU3RyaW5nKGNvbnN0 IGNoYXI4X3QgKnMpOworLSAgU3RyaW5nKGNvbnN0IGNoYXI4X3QgKnMsIHN0ZDo6c2l6ZV90IGxl bik7CisrICBTdHJpbmcgKGNvbnN0IGNoYXI4X3QgKnMpOworKyAgU3RyaW5nIChjb25zdCBjaGFy OF90ICpzLCBzdGQ6OnNpemVfdCBsZW4pOworICNlbmRpZgorIAorLSAgc3RhdGljIFN0cmluZyBs b3NzeShjb25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsKKy0gIHN0YXRpYyBTdHJpbmcgbG9z c3koY29uc3QgY2hhciAqKSBub2V4Y2VwdDsKKy0gIHN0YXRpYyBTdHJpbmcgbG9zc3koY29uc3Qg Y2hhciAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CistICBzdGF0aWMgU3RyaW5nIGxvc3N5KGNv bnN0IGNoYXIxNl90ICopIG5vZXhjZXB0OworLSAgc3RhdGljIFN0cmluZyBsb3NzeShjb25zdCBj aGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CisrICBzdGF0aWMgU3RyaW5nIGxvc3N5 IChjb25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsKKysgIHN0YXRpYyBTdHJpbmcgbG9zc3kg KGNvbnN0IGNoYXIgKikgbm9leGNlcHQ7CisrICBzdGF0aWMgU3RyaW5nIGxvc3N5IChjb25zdCBj aGFyICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKysgIHN0YXRpYyBTdHJpbmcgbG9zc3kgKGNv bnN0IGNoYXIxNl90ICopIG5vZXhjZXB0OworKyAgc3RhdGljIFN0cmluZyBsb3NzeSAoY29uc3Qg Y2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OworIAorLSAgU3RyaW5nICZvcGVyYXRv cj0oY29uc3QgU3RyaW5nICYpICYgbm9leGNlcHQ7CistICBTdHJpbmcgJm9wZXJhdG9yPShTdHJp bmcgJiYpICYgbm9leGNlcHQ7CisrICBTdHJpbmcgJm9wZXJhdG9yPSAoY29uc3QgU3RyaW5nICYp ICYgbm9leGNlcHQ7CisrICBTdHJpbmcgJm9wZXJhdG9yPSAoU3RyaW5nICYmKSAmIG5vZXhjZXB0 OworIAorLSAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdDsKKysgIGV4cGxp Y2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nICgpIGNvbnN0OworIAorLSAgY29uc3QgY2hhciAqZGF0 YSgpIGNvbnN0IG5vZXhjZXB0OworLSAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0 OworLSAgc3RkOjpzaXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGVtcHR5 KCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdCBjaGFyICpkYXRhICgpIGNvbnN0IG5vZXhjZXB0 OworKyAgc3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHN0ZDo6c2l6ZV90 IGxlbmd0aCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZW1wdHkgKCkgY29uc3Qgbm9leGNl cHQ7CisgCistICBjb25zdCBjaGFyICpjX3N0cigpIG5vZXhjZXB0OworKyAgY29uc3QgY2hhciAq Y19zdHIgKCkgbm9leGNlcHQ7CisgCistICBzdGQ6OnNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IG5v ZXhjZXB0OworLSAgdm9pZCByZXNlcnZlKHNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKKysgIHN0 ZDo6c2l6ZV90IGNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCByZXNlcnZlIChz aXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7CisgCisgICB1c2luZyBpdGVyYXRvciA9IGNoYXIgKjsK Ky0gIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7CistICBpdGVyYXRvciBlbmQoKSBub2V4Y2Vw dDsKKysgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhjZXB0OworKyAgaXRlcmF0b3IgZW5kICgpIG5v ZXhjZXB0OworIAorICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBjb25zdCBjaGFyICo7CistICBj b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3Ig ZW5kKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCBu b2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNv bnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3Ig ZW5kICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgY2JlZ2luICgpIGNvbnN0 IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgY2VuZCAoKSBjb25zdCBub2V4Y2VwdDsKKyAK Ky0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7CistICBi b29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBv cGVyYXRvcjwoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRv cjw9KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+KGNv bnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+PShjb25zdCBT dHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IFN0cmlu ZyAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgU3RyaW5nICYp IGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IFN0cmluZyAmKSBjb25z dCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I8PSAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5v ZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2Vw dDsKKysgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0Owor IAorLSAgdm9pZCBzd2FwKFN0cmluZyAmKSBub2V4Y2VwdDsKKysgIHZvaWQgc3dhcCAoU3RyaW5n ICYpIG5vZXhjZXB0OworIAorLSAgU3RyaW5nKHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFN0cmlu ZyAmKSBub2V4Y2VwdDsKKysgIFN0cmluZyAodW5zYWZlX2JpdGNvcHlfdCwgY29uc3QgU3RyaW5n ICYpIG5vZXhjZXB0OworIAorIHByaXZhdGU6CisgICBzdHJ1Y3QgbG9zc3lfdDsKKy0gIFN0cmlu Zyhsb3NzeV90LCBjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKy0gIFN0cmlu Zyhsb3NzeV90LCBjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CistICBm cmllbmQgdm9pZCBzd2FwKFN0cmluZyAmbGhzLCBTdHJpbmcgJnJocykgbm9leGNlcHQgeyBsaHMu c3dhcChyaHMpOyB9CisrICBTdHJpbmcgKGxvc3N5X3QsIGNvbnN0IGNoYXIgKiwgc3RkOjpzaXpl X3QpIG5vZXhjZXB0OworKyAgU3RyaW5nIChsb3NzeV90LCBjb25zdCBjaGFyMTZfdCAqLCBzdGQ6 OnNpemVfdCkgbm9leGNlcHQ7CisrICBmcmllbmQgdm9pZAorKyAgc3dhcCAoU3RyaW5nICZsaHMs IFN0cmluZyAmcmhzKSBub2V4Y2VwdAorKyAgeworKyAgICBsaHMuc3dhcCAocmhzKTsKKysgIH0K KyAKKyAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+IHJlcHI7CisgfTsKK0BAIC0xMzUs NDggKzEzOCw0OSBAQCBjbGFzcyBTdHJpbmcgZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdF MV9SVVNUX1NUUgorICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1NUUgorLWNsYXNzIFN0ciBmaW5h bCB7CisrY2xhc3MgU3RyIGZpbmFsCisreworIHB1YmxpYzoKKy0gIFN0cigpIG5vZXhjZXB0Owor LSAgU3RyKGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKKy0gIFN0cihjb25zdCBzdGQ6OnN0cmlu ZyAmKTsKKy0gIFN0cihjb25zdCBjaGFyICopOworLSAgU3RyKGNvbnN0IGNoYXIgKiwgc3RkOjpz aXplX3QpOworKyAgU3RyICgpIG5vZXhjZXB0OworKyAgU3RyIChjb25zdCBTdHJpbmcgJikgbm9l eGNlcHQ7CisrICBTdHIgKGNvbnN0IHN0ZDo6c3RyaW5nICYpOworKyAgU3RyIChjb25zdCBjaGFy ICopOworKyAgU3RyIChjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KTsKKyAKKy0gIFN0ciAmb3Bl cmF0b3I9KGNvbnN0IFN0ciAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFN0ciAmb3BlcmF0 b3I9IChjb25zdCBTdHIgJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgCistICBleHBsaWNpdCBv cGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0OworKyAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpz dHJpbmcgKCkgY29uc3Q7CisgI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wKKy0gIGV4cGxpY2l0 IG9wZXJhdG9yIHN0ZDo6c3RyaW5nX3ZpZXcoKSBjb25zdDsKKysgIGV4cGxpY2l0IG9wZXJhdG9y IHN0ZDo6c3RyaW5nX3ZpZXcgKCkgY29uc3Q7CisgI2VuZGlmCisgCistICBjb25zdCBjaGFyICpk YXRhKCkgY29uc3Qgbm9leGNlcHQ7CistICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3Qgbm9leGNl cHQ7CistICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZW1w dHkoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0IGNoYXIgKmRhdGEgKCkgY29uc3Qgbm9leGNl cHQ7CisrICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OworKyAgc3RkOjpzaXpl X3QgbGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBlbXB0eSAoKSBjb25zdCBub2V4 Y2VwdDsKKyAKKy0gIFN0cihjb25zdCBTdHIgJikgbm9leGNlcHQgPSBkZWZhdWx0OworLSAgflN0 cigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFN0ciAoY29uc3QgU3RyICYpIG5vZXhjZXB0ID0g ZGVmYXVsdDsKKysgIH5TdHIgKCkgbm9leGNlcHQgPSBkZWZhdWx0OworIAorICAgdXNpbmcgaXRl cmF0b3IgPSBjb25zdCBjaGFyICo7CisgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IGNvbnN0IGNo YXIgKjsKKy0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25z dF9pdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNiZWdp bigpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3IgY2VuZCgpIGNvbnN0IG5vZXhj ZXB0OworKyAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25z dF9pdGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBjYmVn aW4gKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBjZW5kICgpIGNvbnN0IG5v ZXhjZXB0OworIAorLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2Vw dDsKKy0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CistICBi b29sIG9wZXJhdG9yPChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJh dG9yPD0oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcj4oY29u c3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFN0ciAm KSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgU3RyICYpIGNvbnN0 IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNl cHQ7CisrICBib29sIG9wZXJhdG9yPCAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCBvcGVyYXRvcjw9IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9w ZXJhdG9yPiAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj49 IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CisgCistICB2b2lkIHN3YXAoU3RyICYpIG5v ZXhjZXB0OworKyAgdm9pZCBzd2FwIChTdHIgJikgbm9leGNlcHQ7CisgCisgcHJpdmF0ZToKKyAg IGNsYXNzIHVuaW5pdDsKKy0gIFN0cih1bmluaXQpIG5vZXhjZXB0OworKyAgU3RyICh1bmluaXQp IG5vZXhjZXB0OworICAgZnJpZW5kIGltcGw8U3RyPjsKKyAKKyAgIHN0ZDo6YXJyYXk8c3RkOjp1 aW50cHRyX3QsIDI+IHJlcHI7CitAQCAtMTg1LDcyICsxODksNzIgQEAgY2xhc3MgU3RyIGZpbmFs IHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9TTElDRQorICNkZWZpbmUgQ1hYQlJJREdF MV9SVVNUX1NMSUNFCistbmFtZXNwYWNlIGRldGFpbCB7CistdGVtcGxhdGUgPGJvb2w+Cistc3Ry dWN0IGNvcHlfYXNzaWduYWJsZV9pZiB7fTsKKytuYW1lc3BhY2UgZGV0YWlsCisreworK3RlbXBs YXRlIDxib29sPiBzdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lmCisreworK307CisgCistdGVtcGxh dGUgPD4KKy1zdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lmPGZhbHNlPiB7CistICBjb3B5X2Fzc2ln bmFibGVfaWYoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CistICBjb3B5X2Fzc2lnbmFibGVfaWYoY29u c3QgY29weV9hc3NpZ25hYmxlX2lmICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0gIGNvcHlfYXNz aWduYWJsZV9pZiAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWduYWJsZV9pZiAmKSAmIG5vZXhj ZXB0ID0gZGVsZXRlOworLSAgY29weV9hc3NpZ25hYmxlX2lmICZvcGVyYXRvcj0oY29weV9hc3Np Z25hYmxlX2lmICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyt0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg Y29weV9hc3NpZ25hYmxlX2lmPGZhbHNlPgorK3sKKysgIGNvcHlfYXNzaWduYWJsZV9pZiAoKSBu b2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBjb3B5X2Fzc2lnbmFibGVfaWYgKGNvbnN0IGNvcHlfYXNz aWduYWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBjb3B5X2Fzc2lnbmFibGVfaWYg Jm9wZXJhdG9yPSAoY29uc3QgY29weV9hc3NpZ25hYmxlX2lmICYpICYgbm9leGNlcHQgPSBkZWxl dGU7CisrICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPSAoY29weV9hc3NpZ25hYmxlX2lm ICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyB9OworIH0gLy8gbmFtZXNwYWNlIGRldGFpbAor IAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIFNsaWNlIGZpbmFsCistICAgIDogcHJp dmF0ZSBkZXRhaWw6OmNvcHlfYXNzaWduYWJsZV9pZjxzdGQ6OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4g eworK2NsYXNzIFNsaWNlIGZpbmFsIDogcHJpdmF0ZSBkZXRhaWw6OmNvcHlfYXNzaWduYWJsZV9p ZjxzdGQ6OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4KKyt7CisgcHVibGljOgorICAgdXNpbmcgdmFsdWVf dHlwZSA9IFQ7CisgCistICBTbGljZSgpIG5vZXhjZXB0OworLSAgU2xpY2UoVCAqLCBzdGQ6OnNp emVfdCBjb3VudCkgbm9leGNlcHQ7CisrICBTbGljZSAoKSBub2V4Y2VwdDsKKysgIFNsaWNlIChU ICosIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2VwdDsKKyAKKy0gIHRlbXBsYXRlIDx0eXBlbmFt ZSBDPgorLSAgZXhwbGljaXQgU2xpY2UoQyAmYykgOiBTbGljZShjLmRhdGEoKSwgYy5zaXplKCkp IHt9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4gZXhwbGljaXQgU2xpY2UgKEMgJmMpIDogU2xp Y2UgKGMuZGF0YSAoKSwgYy5zaXplICgpKSB7fQorIAorLSAgU2xpY2UgJm9wZXJhdG9yPShjb25z dCBTbGljZTxUPiAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0gIFNsaWNlICZvcGVyYXRvcj0o U2xpY2U8VD4gJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworKyAgU2xpY2UgJm9wZXJhdG9yPSAo Y29uc3QgU2xpY2U8VD4gJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBTbGljZSAmb3BlcmF0 b3I9IChTbGljZTxUPiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgCistICBUICpkYXRhKCkg Y29uc3Qgbm9leGNlcHQ7CistICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3Qgbm9leGNlcHQ7Cist ICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZW1wdHkoKSBj b25zdCBub2V4Y2VwdDsKKysgIFQgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBzdGQ6OnNp emVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OworKyAgc3RkOjpzaXplX3QgbGVuZ3RoICgpIGNv bnN0IG5vZXhjZXB0OworKyAgYm9vbCBlbXB0eSAoKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIFQg Jm9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQ7CistICBUICZhdChzdGQ6 OnNpemVfdCBuKSBjb25zdDsKKy0gIFQgJmZyb250KCkgY29uc3Qgbm9leGNlcHQ7CistICBUICZi YWNrKCkgY29uc3Qgbm9leGNlcHQ7CisrICBUICZvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBj b25zdCBub2V4Y2VwdDsKKysgIFQgJmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdDsKKysgIFQgJmZy b250ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgVCAmYmFjayAoKSBjb25zdCBub2V4Y2VwdDsKKyAK Ky0gIFNsaWNlKGNvbnN0IFNsaWNlPFQ+ICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0gIH5TbGlj ZSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFNsaWNlIChjb25zdCBTbGljZTxUPiAmKSBub2V4 Y2VwdCA9IGRlZmF1bHQ7CisrICB+U2xpY2UgKCkgbm9leGNlcHQgPSBkZWZhdWx0OworIAorICAg Y2xhc3MgaXRlcmF0b3I7CistICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0OworLSAg aXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7CisrICBpdGVyYXRvciBiZWdpbiAoKSBjb25z dCBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIGVuZCAoKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIHZv aWQgc3dhcChTbGljZSAmKSBub2V4Y2VwdDsKKysgIHZvaWQgc3dhcCAoU2xpY2UgJikgbm9leGNl cHQ7CisgCisgcHJpdmF0ZToKKyAgIGNsYXNzIHVuaW5pdDsKKy0gIFNsaWNlKHVuaW5pdCkgbm9l eGNlcHQ7CisrICBTbGljZSAodW5pbml0KSBub2V4Y2VwdDsKKyAgIGZyaWVuZCBpbXBsPFNsaWNl PjsKKy0gIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCh2b2lkICosIGNvbnN0IHZvaWQgKiwgc3RkOjpz aXplX3QpIG5vZXhjZXB0OworLSAgZnJpZW5kIHZvaWQgKnNsaWNlUHRyKGNvbnN0IHZvaWQgKikg bm9leGNlcHQ7CistICBmcmllbmQgc3RkOjpzaXplX3Qgc2xpY2VMZW4oY29uc3Qgdm9pZCAqKSBu b2V4Y2VwdDsKKysgIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCAodm9pZCAqLCBjb25zdCB2b2lkICos IHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKysgIGZyaWVuZCB2b2lkICpzbGljZVB0ciAoY29uc3Qg dm9pZCAqKSBub2V4Y2VwdDsKKysgIGZyaWVuZCBzdGQ6OnNpemVfdCBzbGljZUxlbiAoY29uc3Qg dm9pZCAqKSBub2V4Y2VwdDsKKyAKKyAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDI+IHJl cHI7CisgfTsKKyAKKyAjaWZkZWYgX19jcHBfZGVkdWN0aW9uX2d1aWRlcworIHRlbXBsYXRlIDx0 eXBlbmFtZSBDPgorLWV4cGxpY2l0IFNsaWNlKEMgJmMpCistICAgIC0+IFNsaWNlPHN0ZDo6cmVt b3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKCpzdGQ6OmRlY2x2YWw8Qz4oKS5kYXRhKCkpPj47Cisr ZXhwbGljaXQgU2xpY2UgKEMgJmMpIC0+IFNsaWNlPHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PGRl Y2x0eXBlICgqc3RkOjpkZWNsdmFsPEM+ICgpLmRhdGEgKCkpPj47CisgI2VuZGlmIC8vIF9fY3Bw X2RlZHVjdGlvbl9ndWlkZXMKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jbGFzcyBTbGlj ZTxUPjo6aXRlcmF0b3IgZmluYWwgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBTbGlj ZTxUPjo6aXRlcmF0b3IgZmluYWwKKyt7CisgcHVibGljOgorICNpZiBfX2NwbHVzcGx1cyA+PSAy MDIwMDJMCisgICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6Y29udGlndW91c19pdGVy YXRvcl90YWc7CitAQCAtMjYyLDMwICsyNjYsMzIgQEAgY2xhc3MgU2xpY2U8VD46Oml0ZXJhdG9y IGZpbmFsIHsKKyAgIHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPFQ+ Ojp0eXBlOworICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgc3RkOjphZGRfbHZhbHVlX3Jl ZmVyZW5jZTxUPjo6dHlwZTsKKyAKKy0gIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCBub2V4 Y2VwdDsKKysgIHJlZmVyZW5jZSBvcGVyYXRvciogKCkgY29uc3Qgbm9leGNlcHQ7CisgICBwb2lu dGVyIG9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdDsKKy0gIHJlZmVyZW5jZSBvcGVyYXRvcltd KGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7CistCistICBpdGVyYXRvciAmb3BlcmF0 b3IrKygpIG5vZXhjZXB0OworLSAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIG5vZXhjZXB0Owor LSAgaXRlcmF0b3IgJm9wZXJhdG9yLS0oKSBub2V4Y2VwdDsKKy0gIGl0ZXJhdG9yIG9wZXJhdG9y LS0oaW50KSBub2V4Y2VwdDsKKy0KKy0gIGl0ZXJhdG9yICZvcGVyYXRvcis9KGRpZmZlcmVuY2Vf dHlwZSkgbm9leGNlcHQ7CistICBpdGVyYXRvciAmb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUp IG5vZXhjZXB0OworLSAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qg bm9leGNlcHQ7CistICBmcmllbmQgaW5saW5lIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNl X3R5cGUgbGhzLCBpdGVyYXRvciByaHMpIG5vZXhjZXB0IHsKKysgIHJlZmVyZW5jZSBvcGVyYXRv cltdIChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OworKworKyAgaXRlcmF0b3IgJm9w ZXJhdG9yKysgKCkgbm9leGNlcHQ7CisrICBpdGVyYXRvciBvcGVyYXRvcisrIChpbnQpIG5vZXhj ZXB0OworKyAgaXRlcmF0b3IgJm9wZXJhdG9yLS0gKCkgbm9leGNlcHQ7CisrICBpdGVyYXRvciBv cGVyYXRvci0tIChpbnQpIG5vZXhjZXB0OworKworKyAgaXRlcmF0b3IgJm9wZXJhdG9yKz0gKGRp ZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7CisrICBpdGVyYXRvciAmb3BlcmF0b3ItPSAoZGlmZmVy ZW5jZV90eXBlKSBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIG9wZXJhdG9yKyAoZGlmZmVyZW5jZV90 eXBlKSBjb25zdCBub2V4Y2VwdDsKKysgIGZyaWVuZCBpbmxpbmUgaXRlcmF0b3IKKysgIG9wZXJh dG9yKyAoZGlmZmVyZW5jZV90eXBlIGxocywgaXRlcmF0b3IgcmhzKSBub2V4Y2VwdAorKyAgewor ICAgICByZXR1cm4gcmhzICsgbGhzOworICAgfQorLSAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZl cmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7CistICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3It KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworKyAgaXRlcmF0b3Igb3BlcmF0b3It IChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OworKyAgZGlmZmVyZW5jZV90eXBlIG9w ZXJhdG9yLSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CisgCistICBib29sIG9w ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJh dG9yIT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9y PChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I8PShj b25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+KGNvbnN0 IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGl0 ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBpdGVy YXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgaXRlcmF0 b3IgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPCAoY29uc3QgaXRlcmF0b3Ig JikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IGl0ZXJhdG9yICYp IGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IGl0ZXJhdG9yICYpIGNv bnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj49IChjb25zdCBpdGVyYXRvciAmKSBjb25z dCBub2V4Y2VwdDsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIGNsYXNzIFNsaWNlOworQEAgLTI5 NCwzNjcgKzMwMCw0MzcgQEAgY2xhc3MgU2xpY2U8VD46Oml0ZXJhdG9yIGZpbmFsIHsKKyB9Owor IAorICNpZiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMCistc3RhdGljX2Fzc2VydChzdGQ6OnJhbmdl czo6Y29udGlndW91c19yYW5nZTxydXN0OjpTbGljZTxjb25zdCB1aW50OF90Pj4pOworLXN0YXRp Y19hc3NlcnQoc3RkOjpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4 X3Q+OjppdGVyYXRvcj4pOworK3N0YXRpY19hc3NlcnQgKHN0ZDo6cmFuZ2VzOjpjb250aWd1b3Vz X3JhbmdlPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+Pik7Cisrc3RhdGljX2Fzc2VydCAoc3Rk Ojpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+OjppdGVyYXRv cj4pOworICNlbmRpZgorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVNsaWNlPFQ+OjpTbGlj ZSgpIG5vZXhjZXB0IHsKKy0gIHNsaWNlSW5pdCh0aGlzLCByZWludGVycHJldF9jYXN0PHZvaWQg Kj4oYWxpZ25fb2Y8VD4oKSksIDApOworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBTbGljZTxUPjo6 U2xpY2UgKCkgbm9leGNlcHQKKyt7CisrICBzbGljZUluaXQgKHRoaXMsIHJlaW50ZXJwcmV0X2Nh c3Q8dm9pZCAqPiAoYWxpZ25fb2Y8VD4gKCkpLCAwKTsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CistU2xpY2U8VD46OlNsaWNlKFQgKnMsIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2Vw dCB7CistICBhc3NlcnQocyAhPSBudWxscHRyIHx8IGNvdW50ID09IDApOworLSAgc2xpY2VJbml0 KHRoaXMsCistICAgICAgICAgICAgcyA9PSBudWxscHRyICYmIGNvdW50ID09IDAKKy0gICAgICAg ICAgICAgICAgPyByZWludGVycHJldF9jYXN0PHZvaWQgKj4oYWxpZ25fb2Y8VD4oKSkKKy0gICAg ICAgICAgICAgICAgOiBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0 eXBlICo+KHMpLAorLSAgICAgICAgICAgIGNvdW50KTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g U2xpY2U8VD46OlNsaWNlIChUICpzLCBzdGQ6OnNpemVfdCBjb3VudCkgbm9leGNlcHQKKyt7Cisr ICBhc3NlcnQgKHMgIT0gbnVsbHB0ciB8fCBjb3VudCA9PSAwKTsKKysgIHNsaWNlSW5pdCAodGhp cywKKysgICAgICAgICAgICAgcyA9PSBudWxscHRyICYmIGNvdW50ID09IDAgPyByZWludGVycHJl dF9jYXN0PHZvaWQgKj4gKGFsaWduX29mPFQ+ICgpKQorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IGNvbnN0X2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8 VD46OnR5cGUgKj4gKHMpLAorKyAgICAgICAgICAgICBjb3VudCk7CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLVQgKlNsaWNlPFQ+OjpkYXRhKCkgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihzbGljZVB0cih0aGlzKSk7CisrVCAqCisrU2xp Y2U8VD46OmRhdGEgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcmVpbnRlcnByZXRf Y2FzdDxUICo+IChzbGljZVB0ciAodGhpcykpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKy1zdGQ6OnNpemVfdCBTbGljZTxUPjo6c2l6ZSgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJl dHVybiBzbGljZUxlbih0aGlzKTsKKytzdGQ6OnNpemVfdAorK1NsaWNlPFQ+OjpzaXplICgpIGNv bnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHNsaWNlTGVuICh0aGlzKTsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RkOjpzaXplX3QgU2xpY2U8VD46Omxlbmd0aCgpIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIHJldHVybiB0aGlzLT5zaXplKCk7Cisrc3RkOjpzaXplX3QKKytTbGlj ZTxUPjo6bGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPnNpemUg KCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWJvb2wgU2xpY2U8VD46OmVtcHR5 KCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOworK2Jvb2wK KytTbGljZTxUPjo6ZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gdGhpcy0+ c2l6ZSAoKSA9PSAwOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZTbGljZTxU Pjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdCB7CistICBhc3NlcnQo biA8IHRoaXMtPnNpemUoKSk7CistICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4oc2xp Y2VQdHIodGhpcykpICsgc2l6ZV9vZjxUPigpICogbjsKKy0gIHJldHVybiAqcmVpbnRlcnByZXRf Y2FzdDxUICo+KHB0cik7CisrVCAmCisrU2xpY2U8VD46Om9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90 IG4pIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAoKSk7Cisr ICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHNsaWNlUHRyICh0aGlzKSkgKyBzaXpl X29mPFQ+ICgpICogbjsKKysgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+IChwdHIpOwor IH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZTbGljZTxUPjo6YXQoc3RkOjpzaXpl X3QgbikgY29uc3QgeworLSAgaWYgKG4gPj0gdGhpcy0+c2l6ZSgpKSB7CistICAgIHBhbmljPHN0 ZDo6b3V0X29mX3JhbmdlPigicnVzdDo6U2xpY2UgaW5kZXggb3V0IG9mIHJhbmdlIik7CistICB9 CisrVCAmCisrU2xpY2U8VD46OmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdAorK3sKKysgIGlmIChu ID49IHRoaXMtPnNpemUgKCkpCisrICAgIHsKKysgICAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5n ZT4gKCJydXN0OjpTbGljZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKysgICAgfQorICAgcmV0dXJu ICgqdGhpcylbbl07CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgJlNsaWNlPFQ+ Ojpmcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7Cisr VCAmCisrU2xpY2U8VD46OmZyb250ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNzZXJ0ICgh dGhpcy0+ZW1wdHkgKCkpOworICAgcmV0dXJuICgqdGhpcylbMF07CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLVQgJlNsaWNlPFQ+OjpiYWNrKCkgY29uc3Qgbm9leGNlcHQgeworLSAg YXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKKy0gIHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUoKSAt IDFdOworK1QgJgorK1NsaWNlPFQ+OjpiYWNrICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNz ZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOworKyAgcmV0dXJuICgqdGhpcylbdGhpcy0+c2l6ZSAoKSAt IDFdOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyB0eXBlbmFtZSBTbGljZTxUPjo6 aXRlcmF0b3I6OnJlZmVyZW5jZQorLVNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29u c3Qgbm9leGNlcHQgeworLSAgcmV0dXJuICpzdGF0aWNfY2FzdDxUICo+KHRoaXMtPnBvcyk7Cisr U2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvciogKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBy ZXR1cm4gKnN0YXRpY19jYXN0PFQgKj4gKHRoaXMtPnBvcyk7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6cG9pbnRlcgorLVNsaWNl PFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBz dGF0aWNfY2FzdDxUICo+KHRoaXMtPnBvcyk7CisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRv ci0+KCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAodGhp cy0+cG9zKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yOjpyZWZlcmVuY2UgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcltdKAor LSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25z dCBub2V4Y2VwdCB7CistICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9z KSArIHRoaXMtPnN0cmlkZSAqIG47CistICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihw dHIpOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6cmVmZXJlbmNlCisrU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvcltdICh0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZl cmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGF1dG8gcHRyID0gc3RhdGljX2Nh c3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47CisrICByZXR1cm4gKnJl aW50ZXJwcmV0X2Nhc3Q8VCAqPiAocHRyKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yKysoKSBub2V4Y2VwdCB7CistICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRo aXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7CisrdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICYK KytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKysgKCkgbm9leGNlcHQKKyt7CisrICB0aGlz LT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlOwor ICAgcmV0dXJuICp0aGlzOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFt ZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisrKGludCkg bm9leGNlcHQgeworLSAgYXV0byByZXQgPSBpdGVyYXRvcigqdGhpcyk7CistICB0aGlzLT5wb3Mg PSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7CisrdHlwZW5h bWUgU2xpY2U8VD46Oml0ZXJhdG9yCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisrIChp bnQpIG5vZXhjZXB0CisreworKyAgYXV0byByZXQgPSBpdGVyYXRvciAoKnRoaXMpOworKyAgdGhp cy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZTsK KyAgIHJldHVybiByZXQ7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1l IFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0tKCkgbm9l eGNlcHQgeworLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0g dGhpcy0+c3RyaWRlOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmCisrU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvci0tICgpIG5vZXhjZXB0CisreworKyAgdGhpcy0+cG9zID0gc3Rh dGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZTsKKyAgIHJldHVybiAq dGhpczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46 Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItLShpbnQpIG5vZXhjZXB0IHsK Ky0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOworLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nh c3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlOworK3R5cGVuYW1lIFNsaWNlPFQ+ OjppdGVyYXRvcgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItLSAoaW50KSBub2V4Y2Vw dAorK3sKKysgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlzKTsKKysgIHRoaXMtPnBvcyA9IHN0 YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGU7CisgICByZXR1cm4g cmV0OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBTbGljZTxUPjo6 aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrPSgKKy0gICAgdHlwZW5hbWUg U2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNlcHQgeworLSAgdGhp cy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICog bjsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6 b3BlcmF0b3IrPSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUg bikgbm9leGNlcHQKKyt7CisrICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlz LT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKKyAgIHJldHVybiAqdGhpczsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGljZTxU Pjo6aXRlcmF0b3I6Om9wZXJhdG9yLT0oCistICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRv cjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0IHsKKy0gIHRoaXMtPnBvcyA9IHN0YXRpY19j YXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZSAqIG47CisrdHlwZW5hbWUgU2xp Y2U8VD46Oml0ZXJhdG9yICYKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLT0gKHR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0Cisrewor KyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMtPnN0 cmlkZSAqIG47CisgICByZXR1cm4gKnRoaXM7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgorLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yKygKKy0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUg bikgY29uc3Qgbm9leGNlcHQgeworLSAgYXV0byByZXQgPSBpdGVyYXRvcigqdGhpcyk7CistICBy ZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICog bjsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yKyAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikg Y29uc3Qgbm9leGNlcHQKKyt7CisrICBhdXRvIHJldCA9IGl0ZXJhdG9yICgqdGhpcyk7CisrICBy ZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAq IG47CisgICByZXR1cm4gcmV0OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0oCist ICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOworLSAgcmV0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZSAqIG47CisrdHlw ZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0g KHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5v ZXhjZXB0CisreworKyAgYXV0byByZXQgPSBpdGVyYXRvciAoKnRoaXMpOworKyAgcmV0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGUgKiBuOworICAg cmV0dXJuIHJldDsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgdHlwZW5hbWUgU2xp Y2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUKKy1TbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yLShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGF1dG8g ZGlmZiA9IHN0ZDo6ZGlzdGFuY2Uoc3RhdGljX2Nhc3Q8Y2hhciAqPihvdGhlci5wb3MpLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykp OworLSAgcmV0dXJuIGRpZmYgLyBzdGF0aWNfY2FzdDx0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0 b3I6OmRpZmZlcmVuY2VfdHlwZT4oCistICAgICAgICAgICAgICAgICAgICB0aGlzLT5zdHJpZGUp OworK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItIChjb25zdCBpdGVyYXRvciAmb3RoZXIp IGNvbnN0IG5vZXhjZXB0CisreworKyAgYXV0byBkaWZmID0gc3RkOjpkaXN0YW5jZSAoc3RhdGlj X2Nhc3Q8Y2hhciAqPiAob3RoZXIucG9zKSwgc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9z KSk7CisrICByZXR1cm4gZGlmZiAvIHN0YXRpY19jYXN0PHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjo6ZGlmZmVyZW5jZV90eXBlPiAodGhpcy0+c3RyaWRlKTsKKyB9CisgCisgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+CistYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3Qg aXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3I9PSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAor K3sKKyAgIHJldHVybiB0aGlzLT5wb3MgPT0gb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBp dGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvciE9IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Cisr eworICAgcmV0dXJuIHRoaXMtPnBvcyAhPSBvdGhlci5wb3M7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcjwoY29uc3QgaXRl cmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3I8IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Cisrewor ICAgcmV0dXJuIHRoaXMtPnBvcyA8IG90aGVyLnBvczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CistYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPD0oY29uc3QgaXRlcmF0 b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVyYXRvcjo6 b3BlcmF0b3I8PSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAorK3sKKyAg IHJldHVybiB0aGlzLT5wb3MgPD0gb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I+KGNvbnN0IGl0ZXJhdG9y ICZvdGhlcikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yPiAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIHJl dHVybiB0aGlzLT5wb3MgPiBvdGhlci5wb3M7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgorLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj49KGNvbnN0IGl0ZXJhdG9yICZv dGhlcikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yPj0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQKKyt7CisgICByZXR1 cm4gdGhpcy0+cG9zID49IG90aGVyLnBvczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjpiZWdpbigpIGNvbnN0IG5v ZXhjZXB0IHsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKKytTbGljZTxUPjo6YmVnaW4g KCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICBpdGVyYXRvciBpdDsKKy0gIGl0LnBvcyA9IHNsaWNl UHRyKHRoaXMpOworLSAgaXQuc3RyaWRlID0gc2l6ZV9vZjxUPigpOworKyAgaXQucG9zID0gc2xp Y2VQdHIgKHRoaXMpOworKyAgaXQuc3RyaWRlID0gc2l6ZV9vZjxUPiAoKTsKKyAgIHJldHVybiBp dDsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46Oml0 ZXJhdG9yIFNsaWNlPFQ+OjplbmQoKSBjb25zdCBub2V4Y2VwdCB7CistICBpdGVyYXRvciBpdCA9 IHRoaXMtPmJlZ2luKCk7CistICBpdC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KGl0LnBvcykg KyBpdC5zdHJpZGUgKiB0aGlzLT5zaXplKCk7CisrdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9y CisrU2xpY2U8VD46OmVuZCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGl0ZXJhdG9yIGl0ID0g dGhpcy0+YmVnaW4gKCk7CisrICBpdC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+IChpdC5wb3Mp ICsgaXQuc3RyaWRlICogdGhpcy0+c2l6ZSAoKTsKKyAgIHJldHVybiBpdDsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9pZCBTbGljZTxUPjo6c3dhcChTbGljZSAmcmhzKSBub2V4 Y2VwdCB7CistICBzdGQ6OnN3YXAoKnRoaXMsIHJocyk7Cisrdm9pZAorK1NsaWNlPFQ+Ojpzd2Fw IChTbGljZSAmcmhzKSBub2V4Y2VwdAorK3sKKysgIHN0ZDo6c3dhcCAoKnRoaXMsIHJocyk7Cisg fQorICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfU0xJQ0UKKyAKKyAjaWZuZGVmIENYWEJSSURH RTFfUlVTVF9CT1gKKyAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9CT1gKKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy1jbGFzcyBCb3ggZmluYWwgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFz cyBCb3ggZmluYWwKKyt7CisgcHVibGljOgorICAgdXNpbmcgZWxlbWVudF90eXBlID0gVDsKKy0g IHVzaW5nIGNvbnN0X3BvaW50ZXIgPQorLSAgICAgIHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8 dHlwZW5hbWUgc3RkOjphZGRfY29uc3Q8VD46OnR5cGU+Ojp0eXBlOworKyAgdXNpbmcgY29uc3Rf cG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8dHlwZW5hbWUgc3RkOjphZGRfY29u c3Q8VD46OnR5cGU+Ojp0eXBlOworICAgdXNpbmcgcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWRk X3BvaW50ZXI8VD46OnR5cGU7CisgCistICBCb3goKSA9IGRlbGV0ZTsKKy0gIEJveChCb3ggJiYp IG5vZXhjZXB0OworLSAgfkJveCgpIG5vZXhjZXB0OworKyAgQm94ICgpID0gZGVsZXRlOworKyAg Qm94IChCb3ggJiYpIG5vZXhjZXB0OworKyAgfkJveCAoKSBub2V4Y2VwdDsKKyAKKy0gIGV4cGxp Y2l0IEJveChjb25zdCBUICYpOworLSAgZXhwbGljaXQgQm94KFQgJiYpOworKyAgZXhwbGljaXQg Qm94IChjb25zdCBUICYpOworKyAgZXhwbGljaXQgQm94IChUICYmKTsKKyAKKy0gIEJveCAmb3Bl cmF0b3I9KEJveCAmJikgJiBub2V4Y2VwdDsKKysgIEJveCAmb3BlcmF0b3I9IChCb3ggJiYpICYg bm9leGNlcHQ7CisgCisgICBjb25zdCBUICpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQ7Cist ICBjb25zdCBUICZvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0IFQgJm9wZXJh dG9yKiAoKSBjb25zdCBub2V4Y2VwdDsKKyAgIFQgKm9wZXJhdG9yLT4oKSBub2V4Y2VwdDsKKy0g IFQgJm9wZXJhdG9yKigpIG5vZXhjZXB0OworKyAgVCAmb3BlcmF0b3IqICgpIG5vZXhjZXB0Owor IAorLSAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4KKy0gIHN0YXRpYyBCb3ggaW5fcGxh Y2UoRmllbGRzICYmLi4uKTsKKysgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBGaWVsZHM+IHN0YXRp YyBCb3ggaW5fcGxhY2UgKEZpZWxkcyAmJi4uLik7CisgCistICB2b2lkIHN3YXAoQm94ICYpIG5v ZXhjZXB0OworKyAgdm9pZCBzd2FwIChCb3ggJikgbm9leGNlcHQ7CisgCistICBzdGF0aWMgQm94 IGZyb21fcmF3KFQgKikgbm9leGNlcHQ7CisrICBzdGF0aWMgQm94IGZyb21fcmF3IChUICopIG5v ZXhjZXB0OworIAorLSAgVCAqaW50b19yYXcoKSBub2V4Y2VwdDsKKysgIFQgKmludG9fcmF3ICgp IG5vZXhjZXB0OworIAorICAgLyogRGVwcmVjYXRlZCAqLyB1c2luZyB2YWx1ZV90eXBlID0gZWxl bWVudF90eXBlOworIAorIHByaXZhdGU6CisgICBjbGFzcyB1bmluaXQ7CisgICBjbGFzcyBhbGxv Y2F0aW9uOworLSAgQm94KHVuaW5pdCkgbm9leGNlcHQ7CistICB2b2lkIGRyb3AoKSBub2V4Y2Vw dDsKKysgIEJveCAodW5pbml0KSBub2V4Y2VwdDsKKysgIHZvaWQgZHJvcCAoKSBub2V4Y2VwdDsK KyAKKy0gIGZyaWVuZCB2b2lkIHN3YXAoQm94ICZsaHMsIEJveCAmcmhzKSBub2V4Y2VwdCB7IGxo cy5zd2FwKHJocyk7IH0KKysgIGZyaWVuZCB2b2lkCisrICBzd2FwIChCb3ggJmxocywgQm94ICZy aHMpIG5vZXhjZXB0CisrICB7CisrICAgIGxocy5zd2FwIChyaHMpOworKyAgfQorIAorICAgVCAq cHRyOworIH07CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgQm94PFQ+Ojp1bmlu aXQge307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEJveDxUPjo6dW5pbml0Cisrewor K307CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgQm94PFQ+OjphbGxvY2F0aW9u IHsKKy0gIHN0YXRpYyBUICphbGxvYygpIG5vZXhjZXB0OworLSAgc3RhdGljIHZvaWQgZGVhbGxv YyhUICopIG5vZXhjZXB0OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBCb3g8VD46OmFs bG9jYXRpb24KKyt7CisrICBzdGF0aWMgVCAqYWxsb2MgKCkgbm9leGNlcHQ7CisrICBzdGF0aWMg dm9pZCBkZWFsbG9jIChUICopIG5vZXhjZXB0OworIAorIHB1YmxpYzoKKy0gIGFsbG9jYXRpb24o KSBub2V4Y2VwdCA6IHB0cihhbGxvYygpKSB7fQorLSAgfmFsbG9jYXRpb24oKSBub2V4Y2VwdCB7 CistICAgIGlmICh0aGlzLT5wdHIpIHsKKy0gICAgICBkZWFsbG9jKHRoaXMtPnB0cik7CistICAg IH0KKysgIGFsbG9jYXRpb24gKCkgbm9leGNlcHQgOiBwdHIgKGFsbG9jICgpKSB7fQorKyAgfmFs bG9jYXRpb24gKCkgbm9leGNlcHQKKysgIHsKKysgICAgaWYgKHRoaXMtPnB0cikKKysgICAgICB7 CisrICAgICAgICBkZWFsbG9jICh0aGlzLT5wdHIpOworKyAgICAgIH0KKyAgIH0KKyAgIFQgKnB0 cjsKKyB9OworIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLUJveDxUPjo6Qm94KEJveCAmJm90 aGVyKSBub2V4Y2VwdCA6IHB0cihvdGhlci5wdHIpIHsKKy0gIG90aGVyLnB0ciA9IG51bGxwdHI7 CistfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoQm94ICYmb3RoZXIpIG5v ZXhjZXB0IDogcHRyIChvdGhlci5wdHIpIHsgb3RoZXIucHRyID0gbnVsbHB0cjsgfQorIAorLXRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLUJveDxUPjo6Qm94KGNvbnN0IFQgJnZhbCkgeworK3RlbXBs YXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoY29uc3QgVCAmdmFsKQorK3sKKyAgIGFsbG9j YXRpb24gYWxsb2M7CistICA6Om5ldyAoYWxsb2MucHRyKSBUKHZhbCk7CisrICA6Om5ldyAoYWxs b2MucHRyKSBUICh2YWwpOworICAgdGhpcy0+cHRyID0gYWxsb2MucHRyOworICAgYWxsb2MucHRy ID0gbnVsbHB0cjsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+OjpCb3go VCAmJnZhbCkgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoVCAmJnZhbCkK Kyt7CisgICBhbGxvY2F0aW9uIGFsbG9jOworLSAgOjpuZXcgKGFsbG9jLnB0cikgVChzdGQ6Om1v dmUodmFsKSk7CisrICA6Om5ldyAoYWxsb2MucHRyKSBUIChzdGQ6Om1vdmUgKHZhbCkpOworICAg dGhpcy0+cHRyID0gYWxsb2MucHRyOworICAgYWxsb2MucHRyID0gbnVsbHB0cjsKKyB9CisgCist dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+Ojp+Qm94KCkgbm9leGNlcHQgeworLSAgaWYg KHRoaXMtPnB0cikgeworLSAgICB0aGlzLT5kcm9wKCk7CistICB9CisrdGVtcGxhdGUgPHR5cGVu YW1lIFQ+IEJveDxUPjo6fkJveCAoKSBub2V4Y2VwdAorK3sKKysgIGlmICh0aGlzLT5wdHIpCisr ICAgIHsKKysgICAgICB0aGlzLT5kcm9wICgpOworKyAgICB9CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLUJveDxUPiAmQm94PFQ+OjpvcGVyYXRvcj0oQm94ICYmb3RoZXIpICYgbm9l eGNlcHQgeworLSAgaWYgKHRoaXMtPnB0cikgeworLSAgICB0aGlzLT5kcm9wKCk7CistICB9Cisr Qm94PFQ+ICYKKytCb3g8VD46Om9wZXJhdG9yPSAoQm94ICYmb3RoZXIpICYgbm9leGNlcHQKKyt7 CisrICBpZiAodGhpcy0+cHRyKQorKyAgICB7CisrICAgICAgdGhpcy0+ZHJvcCAoKTsKKysgICAg fQorICAgdGhpcy0+cHRyID0gb3RoZXIucHRyOworICAgb3RoZXIucHRyID0gbnVsbHB0cjsKKyAg IHJldHVybiAqdGhpczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY29uc3QgVCAq Qm94PFQ+OjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQgeworK2NvbnN0IFQgKgorK0JveDxU Pjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0CisreworICAgcmV0dXJuIHRoaXMtPnB0cjsK KyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY29uc3QgVCAmQm94PFQ+OjpvcGVyYXRv ciooKSBjb25zdCBub2V4Y2VwdCB7CisrY29uc3QgVCAmCisrQm94PFQ+OjpvcGVyYXRvciogKCkg Y29uc3Qgbm9leGNlcHQKKyt7CisgICByZXR1cm4gKnRoaXMtPnB0cjsKKyB9CisgCisgdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CistVCAqQm94PFQ+OjpvcGVyYXRvci0+KCkgbm9leGNlcHQgeworK1Qg KgorK0JveDxUPjo6b3BlcmF0b3ItPigpIG5vZXhjZXB0CisreworICAgcmV0dXJuIHRoaXMtPnB0 cjsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmQm94PFQ+OjpvcGVyYXRvcioo KSBub2V4Y2VwdCB7CisrVCAmCisrQm94PFQ+OjpvcGVyYXRvciogKCkgbm9leGNlcHQKKyt7Cisg ICByZXR1cm4gKnRoaXMtPnB0cjsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgdGVt cGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4KKy1Cb3g8VD4gQm94PFQ+Ojppbl9wbGFjZShGaWVs ZHMgJiYuLi5maWVsZHMpIHsKKytCb3g8VD4KKytCb3g8VD46OmluX3BsYWNlIChGaWVsZHMgJiYu Li5maWVsZHMpCisreworICAgYWxsb2NhdGlvbiBhbGxvYzsKKyAgIGF1dG8gcHRyID0gYWxsb2Mu cHRyOworLSAgOjpuZXcgKHB0cikgVHtzdGQ6OmZvcndhcmQ8RmllbGRzPihmaWVsZHMpLi4ufTsK KysgIDo6bmV3IChwdHIpIFR7IHN0ZDo6Zm9yd2FyZDxGaWVsZHM+IChmaWVsZHMpLi4uIH07Cisg ICBhbGxvYy5wdHIgPSBudWxscHRyOworLSAgcmV0dXJuIGZyb21fcmF3KHB0cik7CisrICByZXR1 cm4gZnJvbV9yYXcgKHB0cik7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXZvaWQg Qm94PFQ+Ojpzd2FwKEJveCAmcmhzKSBub2V4Y2VwdCB7Cisrdm9pZAorK0JveDxUPjo6c3dhcCAo Qm94ICZyaHMpIG5vZXhjZXB0CisreworICAgdXNpbmcgc3RkOjpzd2FwOworLSAgc3dhcCh0aGlz LT5wdHIsIHJocy5wdHIpOworKyAgc3dhcCAodGhpcy0+cHRyLCByaHMucHRyKTsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+IEJveDxUPjo6ZnJvbV9yYXcoVCAqcmF3KSBu b2V4Y2VwdCB7CisrQm94PFQ+CisrQm94PFQ+Ojpmcm9tX3JhdyAoVCAqcmF3KSBub2V4Y2VwdAor K3sKKyAgIEJveCBib3ggPSB1bmluaXR7fTsKKyAgIGJveC5wdHIgPSByYXc7CisgICByZXR1cm4g Ym94OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICpCb3g8VD46OmludG9fcmF3 KCkgbm9leGNlcHQgeworK1QgKgorK0JveDxUPjo6aW50b19yYXcgKCkgbm9leGNlcHQKKyt7Cisg ICBUICpyYXcgPSB0aGlzLT5wdHI7CisgICB0aGlzLT5wdHIgPSBudWxscHRyOworICAgcmV0dXJu IHJhdzsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+OjpCb3godW5pbml0 KSBub2V4Y2VwdCB7fQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAodW5pbml0 KSBub2V4Y2VwdCB7fQorICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfQk9YCisgCisgI2lmbmRl ZiBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCisgI2RlZmluZSBDWFhCUklER0UxX1JVU1RfQklU Q09QWV9UCistc3RydWN0IHVuc2FmZV9iaXRjb3B5X3QgZmluYWwgeworLSAgZXhwbGljaXQgdW5z YWZlX2JpdGNvcHlfdCgpID0gZGVmYXVsdDsKKytzdHJ1Y3QgdW5zYWZlX2JpdGNvcHlfdCBmaW5h bAorK3sKKysgIGV4cGxpY2l0IHVuc2FmZV9iaXRjb3B5X3QgKCkgPSBkZWZhdWx0OworIH07Cisg I2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9CSVRDT1BZX1QKKyAKK0BAIC02NjUsMjU3ICs3NDEs MzA3IEBAIGNvbnN0ZXhwciB1bnNhZmVfYml0Y29weV90IHVuc2FmZV9iaXRjb3B5e307CisgCisg I2lmbmRlZiBDWFhCUklER0UxX1JVU1RfVkVDCisgI2RlZmluZSBDWFhCUklER0UxX1JVU1RfVkVD CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgVmVjIGZpbmFsIHsKKyt0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4gY2xhc3MgVmVjIGZpbmFsCisreworIHB1YmxpYzoKKyAgIHVzaW5nIHZhbHVl X3R5cGUgPSBUOworIAorLSAgVmVjKCkgbm9leGNlcHQ7CistICBWZWMoc3RkOjppbml0aWFsaXpl cl9saXN0PFQ+KTsKKy0gIFZlYyhjb25zdCBWZWMgJik7CistICBWZWMoVmVjICYmKSBub2V4Y2Vw dDsKKy0gIH5WZWMoKSBub2V4Y2VwdDsKKy0KKy0gIFZlYyAmb3BlcmF0b3I9KFZlYyAmJikgJiBu b2V4Y2VwdDsKKy0gIFZlYyAmb3BlcmF0b3I9KGNvbnN0IFZlYyAmKSAmOworLQorLSAgc3RkOjpz aXplX3Qgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhj ZXB0OworLSAgY29uc3QgVCAqZGF0YSgpIGNvbnN0IG5vZXhjZXB0OworLSAgVCAqZGF0YSgpIG5v ZXhjZXB0OworLSAgc3RkOjpzaXplX3QgY2FwYWNpdHkoKSBjb25zdCBub2V4Y2VwdDsKKy0KKy0g IGNvbnN0IFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQ7CistICBj b25zdCBUICZhdChzdGQ6OnNpemVfdCBuKSBjb25zdDsKKy0gIGNvbnN0IFQgJmZyb250KCkgY29u c3Qgbm9leGNlcHQ7CistICBjb25zdCBUICZiYWNrKCkgY29uc3Qgbm9leGNlcHQ7CistCistICBU ICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0OworLSAgVCAmYXQoc3RkOjpzaXpl X3Qgbik7CistICBUICZmcm9udCgpIG5vZXhjZXB0OworLSAgVCAmYmFjaygpIG5vZXhjZXB0Owor LQorLSAgdm9pZCByZXNlcnZlKHN0ZDo6c2l6ZV90IG5ld19jYXApOworLSAgdm9pZCBwdXNoX2Jh Y2soY29uc3QgVCAmdmFsdWUpOworLSAgdm9pZCBwdXNoX2JhY2soVCAmJnZhbHVlKTsKKy0gIHRl bXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorLSAgdm9pZCBlbXBsYWNlX2JhY2soQXJncyAmJi4u LmFyZ3MpOworLSAgdm9pZCB0cnVuY2F0ZShzdGQ6OnNpemVfdCBsZW4pOworLSAgdm9pZCBjbGVh cigpOworKyAgVmVjICgpIG5vZXhjZXB0OworKyAgVmVjIChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8 VD4pOworKyAgVmVjIChjb25zdCBWZWMgJik7CisrICBWZWMgKFZlYyAmJikgbm9leGNlcHQ7Cisr ICB+VmVjICgpIG5vZXhjZXB0OworKworKyAgVmVjICZvcGVyYXRvcj0gKFZlYyAmJikgJiBub2V4 Y2VwdDsKKysgIFZlYyAmb3BlcmF0b3I9IChjb25zdCBWZWMgJikgJjsKKysKKysgIHN0ZDo6c2l6 ZV90IHNpemUgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGVtcHR5ICgpIGNvbnN0IG5vZXhj ZXB0OworKyAgY29uc3QgVCAqZGF0YSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIFQgKmRhdGEgKCkg bm9leGNlcHQ7CisrICBzdGQ6OnNpemVfdCBjYXBhY2l0eSAoKSBjb25zdCBub2V4Y2VwdDsKKysK KysgIGNvbnN0IFQgJm9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0Owor KyAgY29uc3QgVCAmYXQgKHN0ZDo6c2l6ZV90IG4pIGNvbnN0OworKyAgY29uc3QgVCAmZnJvbnQg KCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdCBUICZiYWNrICgpIGNvbnN0IG5vZXhjZXB0Owor KworKyAgVCAmb3BlcmF0b3JbXSAoc3RkOjpzaXplX3Qgbikgbm9leGNlcHQ7CisrICBUICZhdCAo c3RkOjpzaXplX3Qgbik7CisrICBUICZmcm9udCAoKSBub2V4Y2VwdDsKKysgIFQgJmJhY2sgKCkg bm9leGNlcHQ7CisrCisrICB2b2lkIHJlc2VydmUgKHN0ZDo6c2l6ZV90IG5ld19jYXApOworKyAg dm9pZCBwdXNoX2JhY2sgKGNvbnN0IFQgJnZhbHVlKTsKKysgIHZvaWQgcHVzaF9iYWNrIChUICYm dmFsdWUpOworKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+IHZvaWQgZW1wbGFjZV9iYWNr IChBcmdzICYmLi4uYXJncyk7CisrICB2b2lkIHRydW5jYXRlIChzdGQ6OnNpemVfdCBsZW4pOwor KyAgdm9pZCBjbGVhciAoKTsKKyAKKyAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yOworLSAgaXRlcmF0b3IgYmVnaW4oKSBub2V4Y2VwdDsKKy0gIGl0ZXJhdG9y IGVuZCgpIG5vZXhjZXB0OworKyAgaXRlcmF0b3IgYmVnaW4gKCkgbm9leGNlcHQ7CisrICBpdGVy YXRvciBlbmQgKCkgbm9leGNlcHQ7CisgCisgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IHR5cGVu YW1lIFNsaWNlPGNvbnN0IFQ+OjppdGVyYXRvcjsKKy0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg Y29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsK Ky0gIGNvbnN0X2l0ZXJhdG9yIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRl cmF0b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkg Y29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICBjb25zdF9pdGVyYXRvciBjYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9p dGVyYXRvciBjZW5kICgpIGNvbnN0IG5vZXhjZXB0OworIAorLSAgdm9pZCBzd2FwKFZlYyAmKSBu b2V4Y2VwdDsKKysgIHZvaWQgc3dhcCAoVmVjICYpIG5vZXhjZXB0OworIAorLSAgVmVjKHVuc2Fm ZV9iaXRjb3B5X3QsIGNvbnN0IFZlYyAmKSBub2V4Y2VwdDsKKysgIFZlYyAodW5zYWZlX2JpdGNv cHlfdCwgY29uc3QgVmVjICYpIG5vZXhjZXB0OworIAorIHByaXZhdGU6CistICB2b2lkIHJlc2Vy dmVfdG90YWwoc3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7CistICB2b2lkIHNldF9sZW4o c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKy0gIHZvaWQgZHJvcCgpIG5vZXhjZXB0OworKyAg dm9pZCByZXNlcnZlX3RvdGFsIChzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKKysgIHZv aWQgc2V0X2xlbiAoc3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKysgIHZvaWQgZHJvcCAoKSBu b2V4Y2VwdDsKKyAKKy0gIGZyaWVuZCB2b2lkIHN3YXAoVmVjICZsaHMsIFZlYyAmcmhzKSBub2V4 Y2VwdCB7IGxocy5zd2FwKHJocyk7IH0KKysgIGZyaWVuZCB2b2lkCisrICBzd2FwIChWZWMgJmxo cywgVmVjICZyaHMpIG5vZXhjZXB0CisrICB7CisrICAgIGxocy5zd2FwIChyaHMpOworKyAgfQor IAorICAgc3RkOjphcnJheTxzdGQ6OnVpbnRwdHJfdCwgMz4gcmVwcjsKKyB9OworIAorLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLVZlYzxUPjo6VmVjKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBp bml0KSA6IFZlY3t9IHsKKy0gIHRoaXMtPnJlc2VydmVfdG90YWwoaW5pdC5zaXplKCkpOworLSAg c3RkOjptb3ZlKGluaXQuYmVnaW4oKSwgaW5pdC5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKCp0 aGlzKSk7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6VmVjIChzdGQ6OmluaXRpYWxp emVyX2xpc3Q8VD4gaW5pdCkgOiBWZWN7fQorK3sKKysgIHRoaXMtPnJlc2VydmVfdG90YWwgKGlu aXQuc2l6ZSAoKSk7CisrICBzdGQ6Om1vdmUgKGluaXQuYmVnaW4gKCksIGluaXQuZW5kICgpLCBz dGQ6OmJhY2tfaW5zZXJ0ZXIgKCp0aGlzKSk7CisgfQorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBU PgorLVZlYzxUPjo6VmVjKGNvbnN0IFZlYyAmb3RoZXIpIDogVmVjKCkgeworLSAgdGhpcy0+cmVz ZXJ2ZV90b3RhbChvdGhlci5zaXplKCkpOworLSAgc3RkOjpjb3B5KG90aGVyLmJlZ2luKCksIG90 aGVyLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoKnRoaXMpKTsKKyt0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4gVmVjPFQ+OjpWZWMgKGNvbnN0IFZlYyAmb3RoZXIpIDogVmVjICgpCisreworKyAgdGhp cy0+cmVzZXJ2ZV90b3RhbCAob3RoZXIuc2l6ZSAoKSk7CisrICBzdGQ6OmNvcHkgKG90aGVyLmJl Z2luICgpLCBvdGhlci5lbmQgKCksIHN0ZDo6YmFja19pbnNlcnRlciAoKnRoaXMpKTsKKyB9Cisg CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVmVjPFQ+OjpWZWMoVmVjICYmb3RoZXIpIG5vZXhj ZXB0IDogcmVwcihvdGhlci5yZXByKSB7CistICBuZXcgKCZvdGhlcikgVmVjKCk7CisrdGVtcGxh dGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6VmVjIChWZWMgJiZvdGhlcikgbm9leGNlcHQgOiByZXBy IChvdGhlci5yZXByKQorK3sKKysgIG5ldyAoJm90aGVyKSBWZWMgKCk7CisgfQorIAorLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLVZlYzxUPjo6flZlYygpIG5vZXhjZXB0IHsKKy0gIHRoaXMtPmRy b3AoKTsKKy19CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6flZlYyAoKSBub2V4Y2Vw dCB7IHRoaXMtPmRyb3AgKCk7IH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1WZWM8VD4g JlZlYzxUPjo6b3BlcmF0b3I9KFZlYyAmJm90aGVyKSAmIG5vZXhjZXB0IHsKKy0gIHRoaXMtPmRy b3AoKTsKKytWZWM8VD4gJgorK1ZlYzxUPjo6b3BlcmF0b3I9IChWZWMgJiZvdGhlcikgJiBub2V4 Y2VwdAorK3sKKysgIHRoaXMtPmRyb3AgKCk7CisgICB0aGlzLT5yZXByID0gb3RoZXIucmVwcjsK Ky0gIG5ldyAoJm90aGVyKSBWZWMoKTsKKysgIG5ldyAoJm90aGVyKSBWZWMgKCk7CisgICByZXR1 cm4gKnRoaXM7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVZlYzxUPiAmVmVjPFQ+ OjpvcGVyYXRvcj0oY29uc3QgVmVjICZvdGhlcikgJiB7CistICBpZiAodGhpcyAhPSAmb3RoZXIp IHsKKy0gICAgdGhpcy0+ZHJvcCgpOworLSAgICBuZXcgKHRoaXMpIFZlYyhvdGhlcik7CistICB9 CisrVmVjPFQ+ICYKKytWZWM8VD46Om9wZXJhdG9yPSAoY29uc3QgVmVjICZvdGhlcikgJgorK3sK KysgIGlmICh0aGlzICE9ICZvdGhlcikKKysgICAgeworKyAgICAgIHRoaXMtPmRyb3AgKCk7Cisr ICAgICAgbmV3ICh0aGlzKSBWZWMgKG90aGVyKTsKKysgICAgfQorICAgcmV0dXJuICp0aGlzOwor IH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1ib29sIFZlYzxUPjo6ZW1wdHkoKSBjb25z dCBub2V4Y2VwdCB7CistICByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7CisrYm9vbAorK1ZlYzxU Pjo6ZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gdGhpcy0+c2l6ZSAoKSA9 PSAwOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICpWZWM8VD46OmRhdGEoKSBu b2V4Y2VwdCB7CistICByZXR1cm4gY29uc3RfY2FzdDxUICo+KGNvbnN0X2Nhc3Q8Y29uc3QgVmVj PFQ+ICo+KHRoaXMpLT5kYXRhKCkpOworK1QgKgorK1ZlYzxUPjo6ZGF0YSAoKSBub2V4Y2VwdAor K3sKKysgIHJldHVybiBjb25zdF9jYXN0PFQgKj4gKGNvbnN0X2Nhc3Q8Y29uc3QgVmVjPFQ+ICo+ ICh0aGlzKS0+ZGF0YSAoKSk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNvbnN0 IFQgJlZlYzxUPjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdCB7Cist ICBhc3NlcnQobiA8IHRoaXMtPnNpemUoKSk7CistICBhdXRvIGRhdGEgPSByZWludGVycHJldF9j YXN0PGNvbnN0IGNoYXIgKj4odGhpcy0+ZGF0YSgpKTsKKy0gIHJldHVybiAqcmVpbnRlcnByZXRf Y2FzdDxjb25zdCBUICo+KGRhdGEgKyBuICogc2l6ZV9vZjxUPigpKTsKKytjb25zdCBUICYKKytW ZWM8VD46Om9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0CisreworKyAg YXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAoKSk7CisrICBhdXRvIGRhdGEgPSByZWludGVycHJldF9j YXN0PGNvbnN0IGNoYXIgKj4gKHRoaXMtPmRhdGEgKCkpOworKyAgcmV0dXJuICpyZWludGVycHJl dF9jYXN0PGNvbnN0IFQgKj4gKGRhdGEgKyBuICogc2l6ZV9vZjxUPiAoKSk7CisgfQorIAorIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLWNvbnN0IFQgJlZlYzxUPjo6YXQoc3RkOjpzaXplX3Qgbikg Y29uc3QgeworLSAgaWYgKG4gPj0gdGhpcy0+c2l6ZSgpKSB7CistICAgIHBhbmljPHN0ZDo6b3V0 X29mX3JhbmdlPigicnVzdDo6VmVjIGluZGV4IG91dCBvZiByYW5nZSIpOworLSAgfQorK2NvbnN0 IFQgJgorK1ZlYzxUPjo6YXQgKHN0ZDo6c2l6ZV90IG4pIGNvbnN0CisreworKyAgaWYgKG4gPj0g dGhpcy0+c2l6ZSAoKSkKKysgICAgeworKyAgICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPiAo InJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKysgICAgfQorICAgcmV0dXJuICgqdGhp cylbbl07CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNvbnN0IFQgJlZlYzxUPjo6 ZnJvbnQoKSBjb25zdCBub2V4Y2VwdCB7CistICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOworK2Nv bnN0IFQgJgorK1ZlYzxUPjo6ZnJvbnQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBhc3NlcnQg KCF0aGlzLT5lbXB0eSAoKSk7CisgICByZXR1cm4gKCp0aGlzKVswXTsKKyB9CisgCisgdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CistY29uc3QgVCAmVmVjPFQ+OjpiYWNrKCkgY29uc3Qgbm9leGNlcHQg eworLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKKy0gIHJldHVybiAoKnRoaXMpW3RoaXMtPnNp emUoKSAtIDFdOworK2NvbnN0IFQgJgorK1ZlYzxUPjo6YmFjayAoKSBjb25zdCBub2V4Y2VwdAor K3sKKysgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKKysgIHJldHVybiAoKnRoaXMpW3RoaXMt PnNpemUgKCkgLSAxXTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmVmVjPFQ+ OjpvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0IHsKKy0gIGFzc2VydChuIDwgdGhp cy0+c2l6ZSgpKTsKKy0gIGF1dG8gZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPih0aGlz LT5kYXRhKCkpOworLSAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQgKj4oZGF0YSArIG4gKiBz aXplX29mPFQ+KCkpOworK1QgJgorK1ZlYzxUPjo6b3BlcmF0b3JbXSAoc3RkOjpzaXplX3Qgbikg bm9leGNlcHQKKyt7CisrICBhc3NlcnQgKG4gPCB0aGlzLT5zaXplICgpKTsKKysgIGF1dG8gZGF0 YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPiAodGhpcy0+ZGF0YSAoKSk7CisrICByZXR1cm4g KnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAoZGF0YSArIG4gKiBzaXplX29mPFQ+ICgpKTsKKyB9Cisg CisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmVmVjPFQ+OjphdChzdGQ6OnNpemVfdCBuKSB7 CistICBpZiAobiA+PSB0aGlzLT5zaXplKCkpIHsKKy0gICAgcGFuaWM8c3RkOjpvdXRfb2ZfcmFu Z2U+KCJydXN0OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7CistICB9CisrVCAmCisrVmVjPFQ+ OjphdCAoc3RkOjpzaXplX3QgbikKKyt7CisrICBpZiAobiA+PSB0aGlzLT5zaXplICgpKQorKyAg ICB7CisrICAgICAgcGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+ICgicnVzdDo6VmVjIGluZGV4IG91 dCBvZiByYW5nZSIpOworKyAgICB9CisgICByZXR1cm4gKCp0aGlzKVtuXTsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmVmVjPFQ+Ojpmcm9udCgpIG5vZXhjZXB0IHsKKy0gIGFz c2VydCghdGhpcy0+ZW1wdHkoKSk7CisrVCAmCisrVmVjPFQ+Ojpmcm9udCAoKSBub2V4Y2VwdAor K3sKKysgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKKyAgIHJldHVybiAoKnRoaXMpWzBdOwor IH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZWZWM8VD46OmJhY2soKSBub2V4Y2Vw dCB7CistICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOworLSAgcmV0dXJuICgqdGhpcylbdGhpcy0+ c2l6ZSgpIC0gMV07CisrVCAmCisrVmVjPFQ+OjpiYWNrICgpIG5vZXhjZXB0CisreworKyAgYXNz ZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOworKyAgcmV0dXJuICgqdGhpcylbdGhpcy0+c2l6ZSAoKSAt IDFdOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy12b2lkIFZlYzxUPjo6cmVzZXJ2 ZShzdGQ6OnNpemVfdCBuZXdfY2FwKSB7CistICB0aGlzLT5yZXNlcnZlX3RvdGFsKG5ld19jYXAp OworK3ZvaWQKKytWZWM8VD46OnJlc2VydmUgKHN0ZDo6c2l6ZV90IG5ld19jYXApCisreworKyAg dGhpcy0+cmVzZXJ2ZV90b3RhbCAobmV3X2NhcCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgorLXZvaWQgVmVjPFQ+OjpwdXNoX2JhY2soY29uc3QgVCAmdmFsdWUpIHsKKy0gIHRoaXMt PmVtcGxhY2VfYmFjayh2YWx1ZSk7Cisrdm9pZAorK1ZlYzxUPjo6cHVzaF9iYWNrIChjb25zdCBU ICZ2YWx1ZSkKKyt7CisrICB0aGlzLT5lbXBsYWNlX2JhY2sgKHZhbHVlKTsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9pZCBWZWM8VD46OnB1c2hfYmFjayhUICYmdmFsdWUpIHsK Ky0gIHRoaXMtPmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUodmFsdWUpKTsKKyt2b2lkCisrVmVjPFQ+ OjpwdXNoX2JhY2sgKFQgJiZ2YWx1ZSkKKyt7CisrICB0aGlzLT5lbXBsYWNlX2JhY2sgKHN0ZDo6 bW92ZSAodmFsdWUpKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgdGVtcGxhdGUg PHR5cGVuYW1lLi4uIEFyZ3M+Cistdm9pZCBWZWM8VD46OmVtcGxhY2VfYmFjayhBcmdzICYmLi4u YXJncykgeworLSAgYXV0byBzaXplID0gdGhpcy0+c2l6ZSgpOworLSAgdGhpcy0+cmVzZXJ2ZV90 b3RhbChzaXplICsgMSk7CistICA6Om5ldyAocmVpbnRlcnByZXRfY2FzdDxUICo+KHJlaW50ZXJw cmV0X2Nhc3Q8Y2hhciAqPih0aGlzLT5kYXRhKCkpICsKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZSAqIHNpemVfb2Y8VD4oKSkpCistICAgICAgVChzdGQ6OmZvcndhcmQ8QXJn cz4oYXJncykuLi4pOworLSAgdGhpcy0+c2V0X2xlbihzaXplICsgMSk7Cisrdm9pZAorK1ZlYzxU Pjo6ZW1wbGFjZV9iYWNrIChBcmdzICYmLi4uYXJncykKKyt7CisrICBhdXRvIHNpemUgPSB0aGlz LT5zaXplICgpOworKyAgdGhpcy0+cmVzZXJ2ZV90b3RhbCAoc2l6ZSArIDEpOworKyAgOjpuZXcg KHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAocmVpbnRlcnByZXRfY2FzdDxjaGFyICo+ICh0aGlzLT5k YXRhICgpKSArIHNpemUgKiBzaXplX29mPFQ+ICgpKSkKKysgICAgICBUIChzdGQ6OmZvcndhcmQ8 QXJncz4gKGFyZ3MpLi4uKTsKKysgIHRoaXMtPnNldF9sZW4gKHNpemUgKyAxKTsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9pZCBWZWM8VD46OmNsZWFyKCkgeworLSAgdGhpcy0+ dHJ1bmNhdGUoMCk7Cisrdm9pZAorK1ZlYzxUPjo6Y2xlYXIgKCkKKyt7CisrICB0aGlzLT50cnVu Y2F0ZSAoMCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFZlYzxU Pjo6aXRlcmF0b3IgVmVjPFQ+OjpiZWdpbigpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBTbGljZTxU Pih0aGlzLT5kYXRhKCksIHRoaXMtPnNpemUoKSkuYmVnaW4oKTsKKyt0eXBlbmFtZSBWZWM8VD46 Oml0ZXJhdG9yCisrVmVjPFQ+OjpiZWdpbiAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBTbGlj ZTxUPiAodGhpcy0+ZGF0YSAoKSwgdGhpcy0+c2l6ZSAoKSkuYmVnaW4gKCk7CisgfQorIAorIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFZlYzxUPjo6aXRlcmF0b3IgVmVjPFQ+Ojpl bmQoKSBub2V4Y2VwdCB7CistICByZXR1cm4gU2xpY2U8VD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5z aXplKCkpLmVuZCgpOworK3R5cGVuYW1lIFZlYzxUPjo6aXRlcmF0b3IKKytWZWM8VD46OmVuZCAo KSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBTbGljZTxUPiAodGhpcy0+ZGF0YSAoKSwgdGhpcy0+ c2l6ZSAoKSkuZW5kICgpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFt ZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yIFZlYzxUPjo6YmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7 CistICByZXR1cm4gdGhpcy0+Y2JlZ2luKCk7CisrdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVy YXRvcgorK1ZlYzxUPjo6YmVnaW4gKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gdGhp cy0+Y2JlZ2luICgpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBW ZWM8VD46OmNvbnN0X2l0ZXJhdG9yIFZlYzxUPjo6ZW5kKCkgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHRoaXMtPmNlbmQoKTsKKyt0eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yCisr VmVjPFQ+OjplbmQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gdGhpcy0+Y2VuZCAo KTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgVmVjPFQ+Ojpjb25z dF9pdGVyYXRvciBWZWM8VD46OmNiZWdpbigpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBT bGljZTxjb25zdCBUPih0aGlzLT5kYXRhKCksIHRoaXMtPnNpemUoKSkuYmVnaW4oKTsKKyt0eXBl bmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yCisrVmVjPFQ+OjpjYmVnaW4gKCkgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gU2xpY2U8Y29uc3QgVD4gKHRoaXMtPmRhdGEgKCksIHRoaXMt PnNpemUgKCkpLmJlZ2luICgpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBl bmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yIFZlYzxUPjo6Y2VuZCgpIGNvbnN0IG5vZXhjZXB0 IHsKKy0gIHJldHVybiBTbGljZTxjb25zdCBUPih0aGlzLT5kYXRhKCksIHRoaXMtPnNpemUoKSku ZW5kKCk7CisrdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvcgorK1ZlYzxUPjo6Y2VuZCAo KSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBTbGljZTxjb25zdCBUPiAodGhpcy0+ZGF0 YSAoKSwgdGhpcy0+c2l6ZSAoKSkuZW5kICgpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKy12b2lkIFZlYzxUPjo6c3dhcChWZWMgJnJocykgbm9leGNlcHQgeworK3ZvaWQKKytWZWM8 VD46OnN3YXAgKFZlYyAmcmhzKSBub2V4Y2VwdAorK3sKKyAgIHVzaW5nIHN0ZDo6c3dhcDsKKy0g IHN3YXAodGhpcy0+cmVwciwgcmhzLnJlcHIpOworKyAgc3dhcCAodGhpcy0+cmVwciwgcmhzLnJl cHIpOworIH0KKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1WZWM8VD46OlZlYyh1bnNhZmVf Yml0Y29weV90LCBjb25zdCBWZWMgJmJpdHMpIG5vZXhjZXB0IDogcmVwcihiaXRzLnJlcHIpIHt9 CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6VmVjICh1bnNhZmVfYml0Y29weV90LCBj b25zdCBWZWMgJmJpdHMpIG5vZXhjZXB0IDogcmVwciAoYml0cy5yZXByKSB7fQorICNlbmRpZiAv LyBDWFhCUklER0UxX1JVU1RfVkVDCisgCisgI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfRVJST1IK KyAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9FUlJPUgorLWNsYXNzIEVycm9yIGZpbmFsIDogcHVi bGljIHN0ZDo6ZXhjZXB0aW9uIHsKKytjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBzdGQ6OmV4 Y2VwdGlvbgorK3sKKyBwdWJsaWM6CistICBFcnJvcihjb25zdCBFcnJvciAmKTsKKy0gIEVycm9y KEVycm9yICYmKSBub2V4Y2VwdDsKKy0gIH5FcnJvcigpIG5vZXhjZXB0IG92ZXJyaWRlOworKyAg RXJyb3IgKGNvbnN0IEVycm9yICYpOworKyAgRXJyb3IgKEVycm9yICYmKSBub2V4Y2VwdDsKKysg IH5FcnJvciAoKSBub2V4Y2VwdCBvdmVycmlkZTsKKyAKKy0gIEVycm9yICZvcGVyYXRvcj0oY29u c3QgRXJyb3IgJikgJjsKKy0gIEVycm9yICZvcGVyYXRvcj0oRXJyb3IgJiYpICYgbm9leGNlcHQ7 CisrICBFcnJvciAmb3BlcmF0b3I9IChjb25zdCBFcnJvciAmKSAmOworKyAgRXJyb3IgJm9wZXJh dG9yPSAoRXJyb3IgJiYpICYgbm9leGNlcHQ7CisgCistICBjb25zdCBjaGFyICp3aGF0KCkgY29u c3Qgbm9leGNlcHQgb3ZlcnJpZGU7CisrICBjb25zdCBjaGFyICp3aGF0ICgpIGNvbnN0IG5vZXhj ZXB0IG92ZXJyaWRlOworIAorIHByaXZhdGU6CistICBFcnJvcigpIG5vZXhjZXB0ID0gZGVmYXVs dDsKKysgIEVycm9yICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgIGZyaWVuZCBpbXBsPEVycm9y PjsKKyAgIGNvbnN0IGNoYXIgKm1zZzsKKyAgIHN0ZDo6c2l6ZV90IGxlbjsKK0BAIC05MjQsMTg4 ICsxMDUwLDIzOSBAQCBjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7 CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfT1BBUVVFCisgI2RlZmluZSBDWFhCUklER0Ux X1JVU1RfT1BBUVVFCistY2xhc3MgT3BhcXVlIHsKKytjbGFzcyBPcGFxdWUKKyt7CisgcHVibGlj OgorLSAgT3BhcXVlKCkgPSBkZWxldGU7CistICBPcGFxdWUoY29uc3QgT3BhcXVlICYpID0gZGVs ZXRlOworLSAgfk9wYXF1ZSgpID0gZGVsZXRlOworKyAgT3BhcXVlICgpID0gZGVsZXRlOworKyAg T3BhcXVlIChjb25zdCBPcGFxdWUgJikgPSBkZWxldGU7CisrICB+T3BhcXVlICgpID0gZGVsZXRl OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9PUEFRVUUKKyAKKyAjaWZuZGVmIENY WEJSSURHRTFfSVNfQ09NUExFVEUKKyAjZGVmaW5lIENYWEJSSURHRTFfSVNfQ09NUExFVEUKKy1u YW1lc3BhY2UgZGV0YWlsIHsKKy1uYW1lc3BhY2UgeworLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0 eXBlbmFtZSA9IHN0ZDo6c2l6ZV90PgorLXN0cnVjdCBpc19jb21wbGV0ZSA6IHN0ZDo6ZmFsc2Vf dHlwZSB7fTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1zdHJ1Y3QgaXNfY29tcGxldGU8VCwg ZGVjbHR5cGUoc2l6ZW9mKFQpKT4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKKytuYW1lc3BhY2UgZGV0 YWlsCisreworK25hbWVzcGFjZQorK3sKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg PSBzdGQ6OnNpemVfdD4gc3RydWN0IGlzX2NvbXBsZXRlIDogc3RkOjpmYWxzZV90eXBlCisrewor K307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBpc19jb21wbGV0ZTxULCBkZWNsdHlw ZSAoc2l6ZW9mIChUKSk+IDogc3RkOjp0cnVlX3R5cGUKKyt7CisrfTsKKyB9IC8vIG5hbWVzcGFj ZQorIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorICNlbmRpZiAvLyBDWFhCUklER0UxX0lTX0NPTVBM RVRFCisgCisgI2lmbmRlZiBDWFhCUklER0UxX0xBWU9VVAorICNkZWZpbmUgQ1hYQlJJREdFMV9M QVlPVVQKKy1jbGFzcyBsYXlvdXQgeworLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBmcmll bmQgc3RkOjpzaXplX3Qgc2l6ZV9vZigpOworK2NsYXNzIGxheW91dAorK3sKKysgIHRlbXBsYXRl IDx0eXBlbmFtZSBUPiBmcmllbmQgc3RkOjpzaXplX3Qgc2l6ZV9vZiAoKTsKKysgIHRlbXBsYXRl IDx0eXBlbmFtZSBUPiBmcmllbmQgc3RkOjpzaXplX3QgYWxpZ25fb2YgKCk7CisgICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KKy0gIGZyaWVuZCBzdGQ6OnNpemVfdCBhbGlnbl9vZigpOworLSAgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk Ojppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQorLSAgZG9fc2l6ZV9vZigpIHsKKy0gICAgcmV0 dXJuIFQ6OmxheW91dDo6c2l6ZSgpOworKyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm PHN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCisr ICBkb19zaXplX29mICgpCisrICB7CisrICAgIHJldHVybiBUOjpsYXlvdXQ6OnNpemUgKCk7Cisg ICB9CisgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy0gIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVu YWJsZV9pZjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQorLSAgZG9fc2l6ZV9vZigp IHsKKy0gICAgcmV0dXJuIHNpemVvZihUKTsKKysgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJs ZV9pZjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5 cGUKKysgIGRvX3NpemVfb2YgKCkKKysgIHsKKysgICAgcmV0dXJuIHNpemVvZiAoVCk7CisgICB9 CisgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy0gIHN0YXRpYworLSAgICAgIHR5cGVuYW1lIHN0 ZDo6ZW5hYmxlX2lmPGRldGFpbDo6aXNfY29tcGxldGU8VD46OnZhbHVlLCBzdGQ6OnNpemVfdD46 OnR5cGUKKy0gICAgICBzaXplX29mKCkgeworLSAgICByZXR1cm4gZG9fc2l6ZV9vZjxUPigpOwor KyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGRldGFpbDo6aXNfY29tcGxldGU8VD46 OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKKysgIHNpemVfb2YgKCkKKysgIHsKKysgICAgcmV0 dXJuIGRvX3NpemVfb2Y8VD4gKCk7CisgICB9CisgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy0g IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBU Pjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3Q+ Ojp0eXBlCistICBkb19hbGlnbl9vZigpIHsKKy0gICAgcmV0dXJuIFQ6OmxheW91dDo6YWxpZ24o KTsKKysgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3Bh cXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQorKyAgZG9fYWxpZ25fb2YgKCkKKysg IHsKKysgICAgcmV0dXJuIFQ6OmxheW91dDo6YWxpZ24gKCk7CisgICB9CisgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy0gIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19i YXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQorLSAgZG9fYWxpZ25fb2YoKSB7CistICAgIHJldHVybiBh bGlnbm9mKFQpOworKyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jh c2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQorKyAgZG9fYWxpZ25f b2YgKCkKKysgIHsKKysgICAgcmV0dXJuIGFsaWdub2YgKFQpOworICAgfQorICAgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+CistICBzdGF0aWMKKy0gICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxk ZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCistICAgICAg YWxpZ25fb2YoKSB7CistICAgIHJldHVybiBkb19hbGlnbl9vZjxUPigpOworKyAgc3RhdGljIHR5 cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGRldGFpbDo6aXNfY29tcGxldGU8VD46OnZhbHVlLCBzdGQ6 OnNpemVfdD46OnR5cGUKKysgIGFsaWduX29mICgpCisrICB7CisrICAgIHJldHVybiBkb19hbGln bl9vZjxUPiAoKTsKKyAgIH0KKyB9OworIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXN0ZDo6 c2l6ZV90IHNpemVfb2YoKSB7CistICByZXR1cm4gbGF5b3V0OjpzaXplX29mPFQ+KCk7Cisrc3Rk OjpzaXplX3QKKytzaXplX29mICgpCisreworKyAgcmV0dXJuIGxheW91dDo6c2l6ZV9vZjxUPiAo KTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RkOjpzaXplX3QgYWxpZ25fb2Yo KSB7CistICByZXR1cm4gbGF5b3V0OjphbGlnbl9vZjxUPigpOworK3N0ZDo6c2l6ZV90CisrYWxp Z25fb2YgKCkKKyt7CisrICByZXR1cm4gbGF5b3V0OjphbGlnbl9vZjxUPiAoKTsKKyB9CisgI2Vu ZGlmIC8vIENYWEJSSURHRTFfTEFZT1VUCisgCistY2xhc3MgU3RyOjp1bmluaXQge307CistaW5s aW5lIFN0cjo6U3RyKHVuaW5pdCkgbm9leGNlcHQge30KKytjbGFzcyBTdHI6OnVuaW5pdAorK3sK Kyt9OworK2lubGluZSBTdHI6OlN0ciAodW5pbml0KSBub2V4Y2VwdCB7fQorIAorLXRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLWNsYXNzIFNsaWNlPFQ+Ojp1bmluaXQge307CistdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CistaW5saW5lIFNsaWNlPFQ+OjpTbGljZSh1bmluaXQpIG5vZXhjZXB0IHt9Cisr dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFNsaWNlPFQ+Ojp1bmluaXQKKyt7CisrfTsKKyt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFNsaWNlPFQ+OjpTbGljZSAodW5pbml0KSBub2V4 Y2VwdCB7fQorIAorLW5hbWVzcGFjZSByZXByIHsKKytuYW1lc3BhY2UgcmVwcgorK3sKKyB1c2lu ZyBGYXQgPSA6OnN0ZDo6YXJyYXk8OjpzdGQ6OnVpbnRwdHJfdCwgMj47CisgCistc3RydWN0IFB0 ckxlbiBmaW5hbCB7Cisrc3RydWN0IFB0ckxlbiBmaW5hbAorK3sKKyAgIHZvaWQgKnB0cjsKKyAg IDo6c3RkOjpzaXplX3QgbGVuOworIH07CisgfSAvLyBuYW1lc3BhY2UgcmVwcgorIAorLW5hbWVz cGFjZSBkZXRhaWwgeworLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQgKj4K Ky1zdHJ1Y3Qgb3BlcmF0b3JfbmV3IHsKKy0gIHZvaWQgKm9wZXJhdG9yKCkoOjpzdGQ6OnNpemVf dCBzeikgeyByZXR1cm4gOjpvcGVyYXRvciBuZXcoc3opOyB9CisrbmFtZXNwYWNlIGRldGFpbAor K3sKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkICo+IHN0cnVjdCBvcGVy YXRvcl9uZXcKKyt7CisrICB2b2lkICoKKysgIG9wZXJhdG9yKCkgKDo6c3RkOjpzaXplX3Qgc3op CisrICB7CisrICAgIHJldHVybiA6Om9wZXJhdG9yIG5ldyAoc3opOworKyAgfQorIH07CisgCist dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RydWN0IG9wZXJhdG9yX25ldzxULCBkZWNsdHlwZShU OjpvcGVyYXRvciBuZXcoc2l6ZW9mKFQpKSk+IHsKKy0gIHZvaWQgKm9wZXJhdG9yKCkoOjpzdGQ6 OnNpemVfdCBzeikgeyByZXR1cm4gVDo6b3BlcmF0b3IgbmV3KHN6KTsgfQorK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiBzdHJ1Y3Qgb3BlcmF0b3JfbmV3PFQsIGRlY2x0eXBlIChUOjpvcGVyYXRvciBu ZXcgKHNpemVvZiAoVCkpKT4KKyt7CisrICB2b2lkICoKKysgIG9wZXJhdG9yKCkgKDo6c3RkOjpz aXplX3Qgc3opCisrICB7CisrICAgIHJldHVybiBUOjpvcGVyYXRvciBuZXcgKHN6KTsKKysgIH0K KyB9OworIAorLWNsYXNzIEZhaWwgZmluYWwgeworK2NsYXNzIEZhaWwgZmluYWwKKyt7CisgICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiAmdGhyb3ckOworKworIHB1YmxpYzoKKy0gIEZhaWwoOjpydXN0 OjpyZXByOjpQdHJMZW4gJnRocm93JCkgbm9leGNlcHQgOiB0aHJvdyQodGhyb3ckKSB7fQorLSAg dm9pZCBvcGVyYXRvcigpKGNoYXIgY29uc3QgKikgbm9leGNlcHQ7CistICB2b2lkIG9wZXJhdG9y KCkoc3RkOjpzdHJpbmcgY29uc3QgJikgbm9leGNlcHQ7CisrICBGYWlsICg6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiAmdGhyb3ckKSBub2V4Y2VwdCA6IHRocm93JCAodGhyb3ckKSB7fQorKyAgdm9pZCBv cGVyYXRvcigpIChjaGFyIGNvbnN0ICopIG5vZXhjZXB0OworKyAgdm9pZCBvcGVyYXRvcigpIChz dGQ6OnN0cmluZyBjb25zdCAmKSBub2V4Y2VwdDsKKyB9OworIH0gLy8gbmFtZXNwYWNlIGRldGFp bAorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXVuaW9uIE1hbnVhbGx5RHJvcCB7CisrdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IHVuaW9uIE1hbnVhbGx5RHJvcAorK3sKKyAgIFQgdmFsdWU7Cist ICBNYW51YWxseURyb3AoVCAmJnZhbHVlKSA6IHZhbHVlKDo6c3RkOjptb3ZlKHZhbHVlKSkge30K Ky0gIH5NYW51YWxseURyb3AoKSB7fQorKyAgTWFudWFsbHlEcm9wIChUICYmdmFsdWUpIDogdmFs dWUgKDo6c3RkOjptb3ZlICh2YWx1ZSkpIHt9CisrICB+TWFudWFsbHlEcm9wICgpIHt9CisgfTsK KyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy11bmlvbiBNYXliZVVuaW5pdCB7CisrdGVtcGxh dGUgPHR5cGVuYW1lIFQ+IHVuaW9uIE1heWJlVW5pbml0CisreworICAgVCB2YWx1ZTsKKy0gIHZv aWQgKm9wZXJhdG9yIG5ldyg6OnN0ZDo6c2l6ZV90IHN6KSB7IHJldHVybiBkZXRhaWw6Om9wZXJh dG9yX25ldzxUPnt9KHN6KTsgfQorLSAgTWF5YmVVbmluaXQoKSB7fQorLSAgfk1heWJlVW5pbml0 KCkge30KKysgIHZvaWQgKgorKyAgb3BlcmF0b3IgbmV3ICg6OnN0ZDo6c2l6ZV90IHN6KQorKyAg eworKyAgICByZXR1cm4gZGV0YWlsOjpvcGVyYXRvcl9uZXc8VD57fShzeik7CisrICB9CisrICBN YXliZVVuaW5pdCAoKSB7fQorKyAgfk1heWJlVW5pbml0ICgpIHt9CisgfTsKKyAKKy1uYW1lc3Bh Y2UgeworLXRlbXBsYXRlIDw+CistY2xhc3MgaW1wbDxTdHI+IGZpbmFsIHsKKytuYW1lc3BhY2UK Kyt7CisrdGVtcGxhdGUgPD4gY2xhc3MgaW1wbDxTdHI+IGZpbmFsCisreworIHB1YmxpYzoKKy0g IHN0YXRpYyBTdHIgbmV3X3VuY2hlY2tlZChyZXByOjpGYXQgcmVwcikgbm9leGNlcHQgeworKyAg c3RhdGljIFN0cgorKyAgbmV3X3VuY2hlY2tlZCAocmVwcjo6RmF0IHJlcHIpIG5vZXhjZXB0Cisr ICB7CisgICAgIFN0ciBzdHIgPSBTdHI6OnVuaW5pdHt9OworICAgICBzdHIucmVwciA9IHJlcHI7 CisgICAgIHJldHVybiBzdHI7CisgICB9CisgfTsKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K Ky1jbGFzcyBpbXBsPFNsaWNlPFQ+PiBmaW5hbCB7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs YXNzIGltcGw8U2xpY2U8VD4+IGZpbmFsCisreworIHB1YmxpYzoKKy0gIHN0YXRpYyBTbGljZTxU PiBzbGljZShyZXByOjpGYXQgcmVwcikgbm9leGNlcHQgeworKyAgc3RhdGljIFNsaWNlPFQ+Cisr ICBzbGljZSAocmVwcjo6RmF0IHJlcHIpIG5vZXhjZXB0CisrICB7CisgICAgIFNsaWNlPFQ+IHNs aWNlID0gdHlwZW5hbWUgU2xpY2U8VD46OnVuaW5pdHt9OworICAgICBzbGljZS5yZXByID0gcmVw cjsKKyAgICAgcmV0dXJuIHNsaWNlOworICAgfQorIH07CisgCistdGVtcGxhdGUgPD4KKy1jbGFz cyBpbXBsPEVycm9yPiBmaW5hbCB7CisrdGVtcGxhdGUgPD4gY2xhc3MgaW1wbDxFcnJvcj4gZmlu YWwKKyt7CisgcHVibGljOgorLSAgc3RhdGljIEVycm9yIGVycm9yKHJlcHI6OlB0ckxlbiByZXBy KSBub2V4Y2VwdCB7CisrICBzdGF0aWMgRXJyb3IKKysgIGVycm9yIChyZXByOjpQdHJMZW4gcmVw cikgbm9leGNlcHQKKysgIHsKKyAgICAgRXJyb3IgZXJyb3I7CistICAgIGVycm9yLm1zZyA9IHN0 YXRpY19jYXN0PGNoYXIgY29uc3QgKj4ocmVwci5wdHIpOworKyAgICBlcnJvci5tc2cgPSBzdGF0 aWNfY2FzdDxjaGFyIGNvbnN0ICo+IChyZXByLnB0cik7CisgICAgIGVycm9yLmxlbiA9IHJlcHIu bGVuOworICAgICByZXR1cm4gZXJyb3I7CisgICB9CisgfTsKKyAKKy10ZW1wbGF0ZSA8Ym9vbD4g c3RydWN0IGRlbGV0ZXJfaWYgeworLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgb3BlcmF0 b3IoKShUICopIHt9CisrdGVtcGxhdGUgPGJvb2w+IHN0cnVjdCBkZWxldGVyX2lmCisreworKyAg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICB2b2lkCisrICBvcGVyYXRvcigpIChUICopCisrICB7 CisrICB9CisgfTsKKy10ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVsZXRlcl9pZjx0cnVlPiB7CistICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBvcGVyYXRvcigpKFQgKnB0cikgeyBwdHItPn5UKCk7 IH0KKyt0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVsZXRlcl9pZjx0cnVlPgorK3sKKysgIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorKyAgdm9pZAorKyAgb3BlcmF0b3IoKSAoVCAqcHRyKQorKyAgeworKyAg ICBwdHItPn5UICgpOworKyAgfQorIH07CisgfSAvLyBuYW1lc3BhY2UKKyB9IC8vIG5hbWVzcGFj ZSBjeHhicmlkZ2UxCisgCistbmFtZXNwYWNlIGJlaGF2aW9yIHsKKy1jbGFzcyBtaXNzaW5nIHt9 OworLW1pc3NpbmcgdHJ5Y2F0Y2goLi4uKTsKKytuYW1lc3BhY2UgYmVoYXZpb3IKKyt7CisrY2xh c3MgbWlzc2luZworK3sKKyt9OworK21pc3NpbmcgdHJ5Y2F0Y2ggKC4uLik7CisgCisgdGVtcGxh dGUgPHR5cGVuYW1lIFRyeSwgdHlwZW5hbWUgRmFpbD4KKyBzdGF0aWMgdHlwZW5hbWUgOjpzdGQ6 OmVuYWJsZV9pZjw6OnN0ZDo6aXNfc2FtZTwKKy0gICAgZGVjbHR5cGUodHJ5Y2F0Y2goOjpzdGQ6 OmRlY2x2YWw8VHJ5PigpLCA6OnN0ZDo6ZGVjbHZhbDxGYWlsPigpKSksCistICAgIG1pc3Npbmc+ Ojp2YWx1ZT46OnR5cGUKKy10cnljYXRjaChUcnkgJiZmdW5jLCBGYWlsICYmZmFpbCkgbm9leGNl cHQgdHJ5IHsKKy0gIGZ1bmMoKTsKKy19IGNhdGNoICg6OnN0ZDo6ZXhjZXB0aW9uIGNvbnN0ICZl KSB7CistICBmYWlsKGUud2hhdCgpKTsKKy19CisrICAgIGRlY2x0eXBlICh0cnljYXRjaCAoOjpz dGQ6OmRlY2x2YWw8VHJ5PiAoKSwgOjpzdGQ6OmRlY2x2YWw8RmFpbD4gKCkpKSwgbWlzc2luZz46 OnZhbHVlPjo6dHlwZQorK3RyeWNhdGNoIChUcnkgJiZmdW5jLCBGYWlsICYmZmFpbCkgbm9leGNl cHQKKyt0cnkKKysgIHsKKysgICAgZnVuYyAoKTsKKysgIH0KKytjYXRjaCAoOjpzdGQ6OmV4Y2Vw dGlvbiBjb25zdCAmZSkKKysgIHsKKysgICAgZmFpbCAoZS53aGF0ICgpKTsKKysgIH0KKyB9IC8v IG5hbWVzcGFjZSBiZWhhdmlvcgorIH0gLy8gbmFtZXNwYWNlIHJ1c3QKKyAKK0BAIC0xMTE1LDUx ICsxMjkyLDUzIEBAIHRyeWNhdGNoKFRyeSAmJmZ1bmMsIEZhaWwgJiZmYWlsKSBub2V4Y2VwdCB0 cnkgeworICNkZWZpbmUgQ1hYX0RFRkFVTFRfVkFMVUUodmFsdWUpCisgI2VuZGlmCisgCistbmFt ZXNwYWNlIHJwbW9zdHJlZWN4eCB7CistICBzdHJ1Y3QgU3RyaW5nTWFwcGluZzsKKy0gIGVudW0g Y2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdDsKKy0gIGVudW0gY2xhc3MgQnVi Ymxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdDsKKy0gIHN0cnVjdCBCdWJibGV3cmFw OworLSAgc3RydWN0IENvbnRhaW5lckltYWdlU3RhdGU7CistICBzdHJ1Y3QgRXhwb3J0ZWRNYW5p ZmVzdERpZmY7CistICBzdHJ1Y3QgUHJ1bmVkQ29udGFpbmVySW5mbzsKKy0gIGVudW0gY2xhc3Mg UmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdDsKKy0gIHN0cnVjdCBUZW1wRXRjR3VhcmQ7Cist ICBzdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXA7CistICBzdHJ1Y3QgRGVwbG95bWVudExheWVy ZWRNZXRhOworLSAgc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2U7CistICBlbnVtIGNs YXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90OworLSAgc3RydWN0IFBhcnNl ZFJldmlzaW9uOworLSAgc3RydWN0IFJwbUltcG9ydGVyRmxhZ3M7CistICBzdHJ1Y3QgUnBtSW1w b3J0ZXI7CistICBzdHJ1Y3QgSGlzdG9yeUVudHJ5OworLSAgc3RydWN0IEhpc3RvcnlDdHg7Cist ICBzdHJ1Y3QgVG9raW9IYW5kbGU7CistICBzdHJ1Y3QgVG9raW9FbnRlckd1YXJkOworLSAgZW51 bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsKKy0gIGVudW0gY2xh c3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7CistICBzdHJ1Y3Qg UmVmc3BlYzsKKy0gIGVudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6 dWludDhfdDsKKy0gIHN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50OworLSAgZW51bSBjbGFzcyBP cHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90OworLSAgc3RydWN0IFRyZWVmaWxlOworLSAgc3Ry dWN0IFJlcG9QYWNrYWdlOworLSAgc3RydWN0IExpdmVBcHBseVN0YXRlOworLSAgc3RydWN0IFBh c3N3ZERCOworLSAgc3RydWN0IFBhc3N3ZEVudHJpZXM7CistICBzdHJ1Y3QgRXh0ZW5zaW9uczsK Ky0gIHN0cnVjdCBMb2NrZWRQYWNrYWdlOworLSAgc3RydWN0IExvY2tmaWxlQ29uZmlnOworLSAg dXNpbmcgQ3h4R09iamVjdEFycmF5ID0gOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTsK Ky0gIHVzaW5nIENsaWVudENvbm5lY3Rpb24gPSA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVj dGlvbjsKKy0gIHVzaW5nIFJQTURpZmYgPSA6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjsKKy0gIHVz aW5nIFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCA9IDo6cnBtb3N0cmVlY3h4OjpScG1Pc3RyZWVE aWZmUHJpbnRGb3JtYXQ7CistICB1c2luZyBQcm9ncmVzcyA9IDo6cnBtb3N0cmVlY3h4OjpQcm9n cmVzczsKKy0gIHVzaW5nIFJwbVRzID0gOjpycG1vc3RyZWVjeHg6OlJwbVRzOworLSAgdXNpbmcg UGFja2FnZU1ldGEgPSA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE7CistfQorLQorLW5hbWVz cGFjZSBycG1vc3RyZWVjeHggeworK25hbWVzcGFjZSBycG1vc3RyZWVjeHgKKyt7Cisrc3RydWN0 IFN0cmluZ01hcHBpbmc7CisrZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50 OF90OworK2VudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdDsK KytzdHJ1Y3QgQnViYmxld3JhcDsKKytzdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZTsKKytzdHJ1 Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmY7Cisrc3RydWN0IFBydW5lZENvbnRhaW5lckluZm87Cisr ZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90OworK3N0cnVjdCBUZW1wRXRj R3VhcmQ7Cisrc3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQcmVwOworK3N0cnVjdCBEZXBsb3ltZW50 TGF5ZXJlZE1ldGE7Cisrc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2U7CisrZW51bSBj bGFzcyBQYXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdDsKKytzdHJ1Y3QgUGFyc2Vk UmV2aXNpb247Cisrc3RydWN0IFJwbUltcG9ydGVyRmxhZ3M7Cisrc3RydWN0IFJwbUltcG9ydGVy OworK3N0cnVjdCBIaXN0b3J5RW50cnk7Cisrc3RydWN0IEhpc3RvcnlDdHg7Cisrc3RydWN0IFRv a2lvSGFuZGxlOworK3N0cnVjdCBUb2tpb0VudGVyR3VhcmQ7CisrZW51bSBjbGFzcyBSZXBvTWV0 YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsKKytlbnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRh ZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90OworK3N0cnVjdCBSZWZzcGVjOworK2VudW0gY2xh c3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhfdDsKKytzdHJ1Y3QgT3Zl cnJpZGVSZXBsYWNlbWVudDsKKytlbnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4 X3Q7Cisrc3RydWN0IFRyZWVmaWxlOworK3N0cnVjdCBSZXBvUGFja2FnZTsKKytzdHJ1Y3QgTGl2 ZUFwcGx5U3RhdGU7Cisrc3RydWN0IFBhc3N3ZERCOworK3N0cnVjdCBQYXNzd2RFbnRyaWVzOwor K3N0cnVjdCBFeHRlbnNpb25zOworK3N0cnVjdCBMb2NrZWRQYWNrYWdlOworK3N0cnVjdCBMb2Nr ZmlsZUNvbmZpZzsKKyt1c2luZyBDeHhHT2JqZWN0QXJyYXkgPSA6OnJwbW9zdHJlZWN4eDo6Q3h4 R09iamVjdEFycmF5OworK3VzaW5nIENsaWVudENvbm5lY3Rpb24gPSA6OnJwbW9zdHJlZWN4eDo6 Q2xpZW50Q29ubmVjdGlvbjsKKyt1c2luZyBSUE1EaWZmID0gOjpycG1vc3RyZWVjeHg6OlJQTURp ZmY7CisrdXNpbmcgUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0ID0gOjpycG1vc3RyZWVjeHg6OlJw bU9zdHJlZURpZmZQcmludEZvcm1hdDsKKyt1c2luZyBQcm9ncmVzcyA9IDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzczsKKyt1c2luZyBScG1UcyA9IDo6cnBtb3N0cmVlY3h4OjpScG1UczsKKyt1c2lu ZyBQYWNrYWdlTWV0YSA9IDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTsKKyt9CisrCisrbmFt ZXNwYWNlIHJwbW9zdHJlZWN4eAorK3sKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRTdHJpbmdNYXBwaW5nCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkU3RyaW5nTWFwcGluZworIC8vIEN1cnJlbnRseSBjeHgtcnMgZG9lc24ndCBzdXBwb3J0 IG1hcHBpbmdzOyBsaWtlIHByb2JhYmx5IG1vc3QgcHJvamVjdHMsCitAQCAtMTE2Nyw3ICsxMzQ2 LDggQEAgbmFtZXNwYWNlIHJwbW9zdHJlZWN4eCB7CisgLy8gb3VyIGRhdGEgc2l6ZXMgYXJlbid0 IGxhcmdlLCB3ZSBzZXJpYWxpemUgdGhpcyBhcyBhIHZlY3RvciBvZiBzdHJpbmdzIHBhaXJzLgor IC8vIEluIHRoZSBmdXR1cmUgaXQncyBhbHNvIGxpa2VseSB0aGF0IGN4eC1ycyB3aWxsIHN1cHBv cnQgYSBDKysgc3RyaW5nX3ZpZXcKKyAvLyBzbyB3ZSBjb3VsZCBhdm9pZCBkdXBsaWNhdGluZyBp biB0aGF0IGRpcmVjdGlvbi4KKy1zdHJ1Y3QgU3RyaW5nTWFwcGluZyBmaW5hbCB7Cisrc3RydWN0 IFN0cmluZ01hcHBpbmcgZmluYWwKKyt7CisgICA6OnJ1c3Q6OlN0cmluZyBrOworICAgOjpydXN0 OjpTdHJpbmcgdjsKKyAKK0BAIC0xMTc4LDcgKzEzNTgsOCBAQCBzdHJ1Y3QgU3RyaW5nTWFwcGlu ZyBmaW5hbCB7CisgI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFN5c3RlbUhv c3RUeXBlCisgI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFN5c3RlbUhvc3RU eXBlCisgLy8gQ2xhc3NpZnkgdGhlIHJ1bm5pbmcgc3lzdGVtLgorLWVudW0gY2xhc3MgU3lzdGVt SG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6 IDo6c3RkOjp1aW50OF90CisreworICAgT3N0cmVlQ29udGFpbmVyID0gMCwKKyAgIE9zdHJlZUhv c3QgPSAxLAorICAgVW5rbm93biA9IDIsCitAQCAtMTE4Nyw3ICsxMzY4LDggQEAgZW51bSBjbGFz cyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAjaWZuZGVmIENYWEJSSURH RTFfRU5VTV9ycG1vc3RyZWVjeHgkQnViYmxld3JhcE11dGFiaWxpdHkKKyAjZGVmaW5lIENYWEJS SURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQnViYmxld3JhcE11dGFiaWxpdHkKKy1lbnVtIGNsYXNz IEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3MgQnVi Ymxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdAorK3sKKyAgIEltbXV0YWJsZSA9IDAs CisgICBSb0ZpbGVzID0gMSwKKyAgIE11dGF0ZUZyZWVseSA9IDIsCitAQCAtMTE5Niw0OSArMTM3 OCw1MiBAQCBlbnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3Qg eworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAK KyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwCistc3Ry dWN0IEJ1YmJsZXdyYXAgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgeworLSAgOjpzdGQ6 OmludDMyX3QgZ2V0X3Jvb3Rmc19mZCgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBhcHBlbmRf YndyYXBfYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CistICB2b2lkIGFwcGVuZF9jaGls ZF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0ZW52KDo6cnVzdDo6 U3RyIGssIDo6cnVzdDo6U3RyIHYpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX2ZkKDo6c3RkOjpp bnQzMl90IHNvdXJjZV9mZCwgOjpzdGQ6OmludDMyX3QgdGFyZ2V0X2ZkKSBub2V4Y2VwdDsKKy0g IHZvaWQgc2V0X2luaGVyaXRfc3RkaW4oKSBub2V4Y2VwdDsKKy0gIHZvaWQgdGFrZV9zdGRpbl9m ZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX3N0ZG91 dF9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX3N0 ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtl X3N0ZG91dF9hbmRfc3RkZXJyX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7 CistICB2b2lkIGJpbmRfcmVhZCg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5v ZXhjZXB0OworLSAgdm9pZCBiaW5kX3JlYWR3cml0ZSg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6 U3RyIGRlc3QpIG5vZXhjZXB0OworLSAgdm9pZCBzZXR1cF9jb21wYXRfdmFyKCk7CistICB2b2lk IHJ1big6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7Cist ICB+QnViYmxld3JhcCgpID0gZGVsZXRlOworK3N0cnVjdCBCdWJibGV3cmFwIGZpbmFsIDogcHVi bGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgOjpzdGQ6OmludDMyX3QgZ2V0X3Jvb3Rmc19mZCAo KSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgYXBwZW5kX2J3cmFwX2FyZyAoOjpydXN0OjpTdHIg YXJnKSBub2V4Y2VwdDsKKysgIHZvaWQgYXBwZW5kX2NoaWxkX2FyZyAoOjpydXN0OjpTdHIgYXJn KSBub2V4Y2VwdDsKKysgIHZvaWQgc2V0ZW52ICg6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2 KSBub2V4Y2VwdDsKKysgIHZvaWQgdGFrZV9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkLCA6 OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0OworKyAgdm9pZCBzZXRfaW5oZXJpdF9z dGRpbiAoKSBub2V4Y2VwdDsKKysgIHZvaWQgdGFrZV9zdGRpbl9mZCAoOjpzdGQ6OmludDMyX3Qg c291cmNlX2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQgdGFrZV9zdGRvdXRfZmQgKDo6c3RkOjppbnQz Ml90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CisrICB2b2lkIHRha2Vfc3RkZXJyX2ZkICg6OnN0ZDo6 aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworKyAgdm9pZCB0YWtlX3N0ZG91dF9hbmRfc3Rk ZXJyX2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworKyAgdm9pZCBiaW5k X3JlYWQgKDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7CisrICB2 b2lkIGJpbmRfcmVhZHdyaXRlICg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5v ZXhjZXB0OworKyAgdm9pZCBzZXR1cF9jb21wYXRfdmFyICgpOworKyAgdm9pZCBydW4gKDo6cnBt b3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKKysgIH5CdWJibGV3 cmFwICgpID0gZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7 CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5v ZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAg c3RydWN0IGxheW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5v ZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAg IH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEJ1YmJs ZXdyYXAKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRFeHBvcnRl ZE1hbmlmZXN0RGlmZgorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4 cG9ydGVkTWFuaWZlc3REaWZmCistc3RydWN0IEV4cG9ydGVkTWFuaWZlc3REaWZmIGZpbmFsIHsK KytzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmYgZmluYWwKKyt7CisgICAvLyBDaGVjayBpZiB0 aGUgc3RydWN0IGlzIGluaXRpYWxpemVkCistICBib29sIGluaXRpYWxpemVkIENYWF9ERUZBVUxU X1ZBTFVFKGZhbHNlKTsKKysgIGJvb2wgaW5pdGlhbGl6ZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKGZh bHNlKTsKKyAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBn cmFkZQorLSAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsIENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAg OjpzdGQ6OnVpbnQ2NF90IHRvdGFsIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRoZSBz aXplIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQor LSAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6 OnN0ZDo6dWludDY0X3QgdG90YWxfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBU aGUgdG90YWwgbnVtYmVyIG9mIHJlbW92ZWQgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQor LSAgOjpzdGQ6OnVpbnQ2NF90IG5fcmVtb3ZlZCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6 c3RkOjp1aW50NjRfdCBuX3JlbW92ZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8gVGhl IHNpemUgb2YgdG90YWwgbnVtYmVyIG9mIHJlbW92ZWQgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBn cmFkZQorLSAgOjpzdGQ6OnVpbnQ2NF90IHJlbW92ZWRfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSgw KTsKKysgIDo6c3RkOjp1aW50NjRfdCByZW1vdmVkX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUgKDAp OworICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBhZGRlZCBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1 cGdyYWRlCistICA6OnN0ZDo6dWludDY0X3Qgbl9hZGRlZCBDWFhfREVGQVVMVF9WQUxVRSgwKTsK KysgIDo6c3RkOjp1aW50NjRfdCBuX2FkZGVkIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8v IFRoZSBzaXplIG9mIHRvdGFsIG51bWJlciBvZiBhZGRlZCBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1 cGdyYWRlCistICA6OnN0ZDo6dWludDY0X3QgYWRkZWRfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSgw KTsKKysgIDo6c3RkOjp1aW50NjRfdCBhZGRlZF9zaXplIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsK KyAgIC8vIFRoZSB2ZXJzaW9uIG9mIHRoZSBuZXh0IHVwZ3JhZGUKKyAgIDo6cnVzdDo6U3RyaW5n IHZlcnNpb247CisgCitAQCAtMTI0OCwxMCArMTQzMywxMSBAQCBzdHJ1Y3QgRXhwb3J0ZWRNYW5p ZmVzdERpZmYgZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JENvbnRhaW5lckltYWdlU3RhdGUKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlCistLy8gYENvbnRhaW5lckltYWdlU3RhdGVgIGlz IGN1cnJlbnRseSBpZGVudGljYWwgdG8gb3N0cmVlLXJzLWV4dCdzIGBMYXllcmVkSW1hZ2VTdGF0 ZWAgc3RydWN0LCBiZWNhdXNlCistLy8gY3h4LnJzIGN1cnJlbnRseSByZXF1aXJlcyB0eXBlcyB1 c2VkIGFzIGV4dGVybiBSdXN0IHR5cGVzIHRvIGJlIGRlZmluZWQgYnkgdGhlIHNhbWUgY3JhdGUK KysvLyBgQ29udGFpbmVySW1hZ2VTdGF0ZWAgaXMgY3VycmVudGx5IGlkZW50aWNhbCB0byBvc3Ry ZWUtcnMtZXh0J3MgYExheWVyZWRJbWFnZVN0YXRlYCBzdHJ1Y3QsCisrLy8gYmVjYXVzZSBjeHgu cnMgY3VycmVudGx5IHJlcXVpcmVzIHR5cGVzIHVzZWQgYXMgZXh0ZXJuIFJ1c3QgdHlwZXMgdG8g YmUgZGVmaW5lZCBieSB0aGUgc2FtZSBjcmF0ZQorIC8vIHRoYXQgY29udGFpbnMgdGhlIGJyaWRn ZSB1c2luZyB0aGVtLCBzbyB3ZSByZWRlZmluZSBhbiBgQ29udGFpbmVySW1wb3J0YCBzdHJ1Y3Qg aGVyZS4KKy1zdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZSBmaW5hbCB7Cisrc3RydWN0IENvbnRh aW5lckltYWdlU3RhdGUgZmluYWwKKyt7CisgICA6OnJ1c3Q6OlN0cmluZyBiYXNlX2NvbW1pdDsK KyAgIDo6cnVzdDo6U3RyaW5nIG1lcmdlX2NvbW1pdDsKKyAgIDo6cnVzdDo6U3RyaW5nIGltYWdl X2RpZ2VzdDsKK0BAIC0xMjY1LDE5ICsxNDUxLDIxIEBAIHN0cnVjdCBDb250YWluZXJJbWFnZVN0 YXRlIGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQ cnVuZWRDb250YWluZXJJbmZvCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVj eHgkUHJ1bmVkQ29udGFpbmVySW5mbworLXN0cnVjdCBQcnVuZWRDb250YWluZXJJbmZvIGZpbmFs IHsKKy0gIDo6c3RkOjp1aW50MzJfdCBpbWFnZXMgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CistICA6 OnN0ZDo6dWludDMyX3QgbGF5ZXJzIENYWF9ERUZBVUxUX1ZBTFVFKDApOworK3N0cnVjdCBQcnVu ZWRDb250YWluZXJJbmZvIGZpbmFsCisreworKyAgOjpzdGQ6OnVpbnQzMl90IGltYWdlcyBDWFhf REVGQVVMVF9WQUxVRSAoMCk7CisrICA6OnN0ZDo6dWludDMyX3QgbGF5ZXJzIENYWF9ERUZBVUxU X1ZBTFVFICgwKTsKKyAKKy0gIGJvb2wgb3BlcmF0b3I9PShQcnVuZWRDb250YWluZXJJbmZvIGNv bnN0ICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvciE9KFBydW5lZENvbnRhaW5l ckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKFBydW5l ZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9y IT0gKFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisgICB1c2lu ZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsKKyB9OworICNlbmRpZiAvLyBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUHJ1bmVkQ29udGFpbmVySW5mbworIAorICNpZm5k ZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZWZzcGVjVHlwZQorICNkZWZpbmUgQ1hY QlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZWZzcGVjVHlwZQorLWVudW0gY2xhc3MgUmVmc3Bl Y1R5cGUgOiA6OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3Rk Ojp1aW50OF90CisreworICAgT3N0cmVlID0gMCwKKyAgIENoZWNrc3VtID0gMSwKKyAgIENvbnRh aW5lciA9IDIsCitAQCAtMTI4Niw0MCArMTQ3NCw0NSBAQCBlbnVtIGNsYXNzIFJlZnNwZWNUeXBl IDogOjpzdGQ6OnVpbnQ4X3QgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JFRlbXBFdGNHdWFyZAorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JFRlbXBFdGNHdWFyZAorLXN0cnVjdCBUZW1wRXRjR3VhcmQgZmluYWwgOiBwdWJsaWMgOjpy dXN0OjpPcGFxdWUgeworLSAgdm9pZCB1bmRvKCkgY29uc3Q7CistICB+VGVtcEV0Y0d1YXJkKCkg PSBkZWxldGU7Cisrc3RydWN0IFRlbXBFdGNHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9w YXF1ZQorK3sKKysgIHZvaWQgdW5kbyAoKSBjb25zdDsKKysgIH5UZW1wRXRjR3VhcmQgKCkgPSBk ZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVj dCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Cist ICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5 b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Cisr ICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9Owor ICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkCisg CisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlw dFByZXAKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRGaWxlc3lzdGVt U2NyaXB0UHJlcAorLXN0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcCBmaW5hbCA6IHB1YmxpYyA6 OnJ1c3Q6Ok9wYXF1ZSB7CistICB2b2lkIHVuZG8oKTsKKy0gIH5GaWxlc3lzdGVtU2NyaXB0UHJl cCgpID0gZGVsZXRlOworK3N0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcCBmaW5hbCA6IHB1Ymxp YyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIHZvaWQgdW5kbyAoKTsKKysgIH5GaWxlc3lzdGVtU2Ny aXB0UHJlcCAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5 b3V0OworLSAgc3RydWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUo KSBub2V4Y2VwdDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsK KysgIHN0cnVjdCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAo KSBub2V4Y2VwdDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7 CisgICB9OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRG aWxlc3lzdGVtU2NyaXB0UHJlcAorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JERlcGxveW1lbnRMYXllcmVkTWV0YQorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JERlcGxveW1lbnRMYXllcmVkTWV0YQorLXN0cnVjdCBEZXBsb3ltZW50TGF5 ZXJlZE1ldGEgZmluYWwgeworLSAgYm9vbCBpc19sYXllcmVkIENYWF9ERUZBVUxUX1ZBTFVFKGZh bHNlKTsKKytzdHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRhIGZpbmFsCisreworKyAgYm9vbCBp c19sYXllcmVkIENYWF9ERUZBVUxUX1ZBTFVFIChmYWxzZSk7CisgICA6OnJ1c3Q6OlN0cmluZyBi YXNlX2NvbW1pdDsKKy0gIDo6c3RkOjp1aW50MzJfdCBjbGllbnRsYXllcl92ZXJzaW9uIENYWF9E RUZBVUxUX1ZBTFVFKDApOworKyAgOjpzdGQ6OnVpbnQzMl90IGNsaWVudGxheWVyX3ZlcnNpb24g Q1hYX0RFRkFVTFRfVkFMVUUgKDApOworIAorICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3Rk Ojp0cnVlX3R5cGU7CisgfTsKK0BAIC0xMzI3LDcgKzE1MjAsOCBAQCBzdHJ1Y3QgRGVwbG95bWVu dExheWVyZWRNZXRhIGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50U291cmNlCisgI2RlZmluZSBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZQorLXN0cnVjdCBPdmVy cmlkZVJlcGxhY2VtZW50U291cmNlIGZpbmFsIHsKKytzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVu dFNvdXJjZSBmaW5hbAorK3sKKyAgIDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50 VHlwZSBraW5kOworICAgOjpydXN0OjpTdHJpbmcgbmFtZTsKKyAKK0BAIC0xMzM3LDcgKzE1MzEs OCBAQCBzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBmaW5hbCB7CisgCisgI2lmbmRl ZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9uS2luZAorICNkZWZp bmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbktpbmQKKy1lbnVt IGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNz IFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90CisreworICAgVmVyc2lvbiA9IDAs CisgICBDaGVja3N1bSA9IDEsCisgfTsKK0BAIC0xMzQ1LDcgKzE1NDAsOCBAQCBlbnVtIGNsYXNz IFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAjaWZuZGVmIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbgorICNkZWZpbmUgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9uCistc3RydWN0IFBhcnNlZFJl dmlzaW9uIGZpbmFsIHsKKytzdHJ1Y3QgUGFyc2VkUmV2aXNpb24gZmluYWwKKyt7CisgICA6OnJw bW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb25LaW5kIGtpbmQ7CisgICA6OnJ1c3Q6OlN0cmluZyB2 YWx1ZTsKKyAKK0BAIC0xMzU1LDQ0ICsxNTUxLDUwIEBAIHN0cnVjdCBQYXJzZWRSZXZpc2lvbiBm aW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1w b3J0ZXJGbGFncworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUlt cG9ydGVyRmxhZ3MKKy1zdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFncyBmaW5hbCA6IHB1YmxpYyA6OnJ1 c3Q6Ok9wYXF1ZSB7CistICBib29sIGlzX2ltYV9lbmFibGVkKCkgY29uc3Qgbm9leGNlcHQ7Cist ICB+UnBtSW1wb3J0ZXJGbGFncygpID0gZGVsZXRlOworK3N0cnVjdCBScG1JbXBvcnRlckZsYWdz IGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgYm9vbCBpc19pbWFfZW5hYmxl ZCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIH5ScG1JbXBvcnRlckZsYWdzICgpID0gZGVsZXRlOwor IAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0 IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0 aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAg eworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0 aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYg Ly8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MKKyAKKyAj aWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBvcnRlcgorICNkZWZp bmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyCistc3RydWN0IFJw bUltcG9ydGVyIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIDo6cnVzdDo6U3Ry aW5nIGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7 CistICA6OnJ1c3Q6OlN0cmluZyBvc3RyZWVfYnJhbmNoKCkgY29uc3Qgbm9leGNlcHQ7CistICA6 OnJ1c3Q6OlN0cmluZyBwa2dfbmFtZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBkb2NfZmls ZXNfYXJlX2ZpbHRlcmVkKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIGRvY19maWxlc19pbnNl cnQoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CistICBib29sIGRvY19maWxlc19jb250YWlu cyg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgcnBtZmlfb3ZlcnJp ZGVzX2luc2VydCg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnN0ZDo6dWludDY0X3QgaW5kZXgpIG5vZXhj ZXB0OworLSAgYm9vbCBycG1maV9vdmVycmlkZXNfY29udGFpbnMoOjpydXN0OjpTdHIgcGF0aCkg Y29uc3Qgbm9leGNlcHQ7CistICA6OnN0ZDo6dWludDY0X3QgcnBtZmlfb3ZlcnJpZGVzX2dldCg6 OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgaXNfaW1hX2VuYWJsZWQo KSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgdHdlYWtfaW1wb3J0ZWRfZmlsZV9pbmZvKDo6cnBt b3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Qgbm9leGNlcHQ7Cist ICBib29sIGlzX2ZpbGVfZmlsdGVyZWQoOjpydXN0OjpTdHIgcGF0aCwgOjpycG1vc3RyZWVjeHg6 OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdDsKKy0gIHZvaWQgdHJhbnNsYXRlX3Rv X3RtcGZpbGVzX2VudHJ5KDo6cnVzdDo6U3RyIGFic19wYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0Zp bGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0 ciBncm91cG5hbWUpOworLSAgYm9vbCBoYXNfdG1wZmlsZXNfZW50cmllcygpIGNvbnN0IG5vZXhj ZXB0OworLSAgOjpydXN0OjpTdHJpbmcgc2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQoKSBjb25z dCBub2V4Y2VwdDsKKy0gIH5ScG1JbXBvcnRlcigpID0gZGVsZXRlOworK3N0cnVjdCBScG1JbXBv cnRlciBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIDo6cnVzdDo6U3RyaW5n IGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0Owor KyAgOjpydXN0OjpTdHJpbmcgb3N0cmVlX2JyYW5jaCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6U3RyaW5nIHBrZ19uYW1lICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBkb2NfZmls ZXNfYXJlX2ZpbHRlcmVkICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBkb2NfZmlsZXNfaW5z ZXJ0ICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKysgIGJvb2wgZG9jX2ZpbGVzX2NvbnRh aW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgcnBtZmlfb3Zl cnJpZGVzX2luc2VydCAoOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90IGluZGV4KSBu b2V4Y2VwdDsKKysgIGJvb2wgcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zICg6OnJ1c3Q6OlN0ciBw YXRoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6c3RkOjp1aW50NjRfdCBycG1maV9vdmVycmlkZXNf Z2V0ICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgaXNfaW1hX2Vu YWJsZWQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5m byAoOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdCBub2V4 Y2VwdDsKKysgIGJvb2wgaXNfZmlsZV9maWx0ZXJlZCAoOjpydXN0OjpTdHIgcGF0aCwgOjpycG1v c3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdDsKKysgIHZvaWQgdHJh bnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5ICg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNv bnN0ICZmaWxlX2luZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy dXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSk7CisrICBib29sIGhhc190 bXBmaWxlc19lbnRyaWVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgc2Vy aWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB+UnBtSW1wb3J0 ZXIgKCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsK Ky0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9l eGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBz dHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9l eGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAg fTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1w b3J0ZXIKK0BAIC0xNDAxLDczICsxNjAzLDgxIEBAIHN0cnVjdCBScG1JbXBvcnRlciBmaW5hbCA6 IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1v c3RyZWVjeHgkSGlzdG9yeUVudHJ5CisgLy8gQSBoaXN0b3J5IGVudHJ5IGluIHRoZSBqb3VybmFs LiBJdCBtYXkgcmVwcmVzZW50IG11bHRpcGxlIGNvbnNlY3V0aXZlIGJvb3RzCisgLy8gaW50byB0 aGUgc2FtZSBkZXBsb3ltZW50LiBUaGlzIHN0cnVjdCBpcyBleHBvc2VkIGRpcmVjdGx5IHZpYSBG RkkgdG8gQy4KKy1zdHJ1Y3QgSGlzdG9yeUVudHJ5IGZpbmFsIHsKKytzdHJ1Y3QgSGlzdG9yeUVu dHJ5IGZpbmFsCisreworICAgLy8gVGhlIGRlcGxveW1lbnQgcm9vdCB0aW1lc3RhbXAuCistICA6 OnN0ZDo6dWludDY0X3QgZGVwbG95X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysg IDo6c3RkOjp1aW50NjRfdCBkZXBsb3lfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsK KyAgIC8vIFRoZSBjb21tYW5kLWxpbmUgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIGRlcGxv eW1lbnQsIGlmIGFueS4KKyAgIDo6cnVzdDo6U3RyaW5nIGRlcGxveV9jbWRsaW5lOworICAgLy8g VGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSB0aW1lcyB0aGUgZGVwbG95bWVudCB3YXMgYm9vdGVk LgorLSAgOjpzdGQ6OnVpbnQ2NF90IGJvb3RfY291bnQgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7Cisr ICA6OnN0ZDo6dWludDY0X3QgYm9vdF9jb3VudCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAv LyBUaGUgZmlyc3QgdGltZSB0aGUgZGVwbG95bWVudCB3YXMgYm9vdGVkIGlmIG11bHRpcGxlIGNv bnNlY3V0aXZlIHRpbWVzLgorLSAgOjpzdGQ6OnVpbnQ2NF90IGZpcnN0X2Jvb3RfdGltZXN0YW1w IENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAgOjpzdGQ6OnVpbnQ2NF90IGZpcnN0X2Jvb3RfdGlt ZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRoZSBsYXN0IHRpbWUgdGhlIGRl cGxveW1lbnQgd2FzIGJvb3RlZCBpZiBtdWx0aXBsZSBjb25zZWN1dGl2ZSB0aW1lcy4KKy0gIDo6 c3RkOjp1aW50NjRfdCBsYXN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFKDApOwor KyAgOjpzdGQ6OnVpbnQ2NF90IGxhc3RfYm9vdF90aW1lc3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUg KDApOworICAgLy8gYHRydWVgIGlmIHRoZXJlIGFyZSBubyBtb3JlIGVudHJpZXMuCistICBib29s IGVvZiBDWFhfREVGQVVMVF9WQUxVRShmYWxzZSk7CisrICBib29sIGVvZiBDWFhfREVGQVVMVF9W QUxVRSAoZmFsc2UpOworIAorLSAgYm9vbCBvcGVyYXRvcj09KEhpc3RvcnlFbnRyeSBjb25zdCAm KSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3IhPShIaXN0b3J5RW50cnkgY29uc3Qg JikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKEhpc3RvcnlFbnRyeSBjb25z dCAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoSGlzdG9yeUVudHJ5IGNv bnN0ICYpIGNvbnN0IG5vZXhjZXB0OworICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0 cnVlX3R5cGU7CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JEhpc3RvcnlFbnRyeQorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JEhpc3RvcnlDdHgKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRIaXN0 b3J5Q3R4Cistc3RydWN0IEhpc3RvcnlDdHggZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUg eworLSAgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSBuZXh0X2VudHJ5KCk7CistICB+SGlz dG9yeUN0eCgpID0gZGVsZXRlOworK3N0cnVjdCBIaXN0b3J5Q3R4IGZpbmFsIDogcHVibGljIDo6 cnVzdDo6T3BhcXVlCisreworKyAgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSBuZXh0X2Vu dHJ5ICgpOworKyAgfkhpc3RvcnlDdHggKCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZy aWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFs aWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFs aWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkSGlzdG9yeUN0eAorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1v c3RyZWVjeHgkVG9raW9IYW5kbGUKKy1zdHJ1Y3QgVG9raW9IYW5kbGUgZmluYWwgOiBwdWJsaWMg OjpydXN0OjpPcGFxdWUgeworLSAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50 ZXJHdWFyZD4gZW50ZXIoKSBjb25zdCBub2V4Y2VwdDsKKy0gIH5Ub2tpb0hhbmRsZSgpID0gZGVs ZXRlOworK3N0cnVjdCBUb2tpb0hhbmRsZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQor K3sKKysgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+IGVudGVy ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgflRva2lvSGFuZGxlICgpID0gZGVsZXRlOworIAorIHBy aXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0g ICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgeworKyAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlCisgCisgI2lmbmRlZiBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCisgI2RlZmluZSBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCistc3RydWN0IFRva2lv RW50ZXJHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CistICB+VG9raW9FbnRl ckd1YXJkKCkgPSBkZWxldGU7Cisrc3RydWN0IFRva2lvRW50ZXJHdWFyZCBmaW5hbCA6IHB1Ymxp YyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIH5Ub2tpb0VudGVyR3VhcmQgKCkgPSBkZWxldGU7Cisg CisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQg eworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7 CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAv LyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCisgCisgI2lm bmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlcG9NZXRhZGF0YVRhcmdldAorICNk ZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZXBvTWV0YWRhdGFUYXJnZXQKKy1l bnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNs YXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90CisreworICAgSW5saW5lID0g MCwKKyAgIERldGFjaGVkID0gMSwKKyAgIERpc2FibGVkID0gMiwKK0BAIC0xNDc2LDcgKzE2ODYs OCBAQCBlbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90IHsKKyAK KyAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQWR2aXNvcmllc01ldGFkYXRh VGFyZ2V0CisgI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JEFkdmlzb3JpZXNN ZXRhZGF0YVRhcmdldAorLWVudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpz dGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpz dGQ6OnVpbnQ4X3QKKyt7CisgICBJbmxpbmUgPSAwLAorICAgRGV0YWNoZWQgPSAxLAorICAgRGlz YWJsZWQgPSAyLAorQEAgLTE0ODUsMzkgKzE2OTYsNDMgQEAgZW51bSBjbGFzcyBBZHZpc29yaWVz TWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdCB7CisgCisgI2lmbmRlZiBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVmc3BlYworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFJlZnNwZWMKKy1zdHJ1Y3QgUmVmc3BlYyBmaW5hbCB7Cisrc3RydWN0IFJl ZnNwZWMgZmluYWwKKyt7CisgICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5cGUga2luZDsKKyAg IDo6cnVzdDo6U3RyaW5nIHJlZnNwZWM7CisgCistICBib29sIG9wZXJhdG9yPT0oUmVmc3BlYyBj b25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3IhPShSZWZzcGVjIGNvbnN0 ICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChSZWZzcGVjIGNvbnN0ICYp IGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChSZWZzcGVjIGNvbnN0ICYpIGNv bnN0IG5vZXhjZXB0OworICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7 CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlZnNwZWMK KyAKKyAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNl bWVudFR5cGUKKyAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVS ZXBsYWNlbWVudFR5cGUKKy1lbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlIDogOjpz dGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0 ZDo6dWludDhfdAorK3sKKyAgIFJlcG8gPSAwLAorIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFf RU5VTV9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUKKyAKKyAjaWZuZGVmIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50CisgI2RlZmlu ZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudAorLXN0 cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50IGZpbmFsIHsKKytzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNl bWVudCBmaW5hbAorK3sKKyAgIDo6cnVzdDo6U3RyaW5nIGZyb207CisgICA6OnJwbW9zdHJlZWN4 eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgZnJvbV9raW5kOworICAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IHBhY2thZ2VzOworIAorLSAgYm9vbCBvcGVyYXRvcj09KE92ZXJyaWRlUmVw bGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yIT0oT3Zl cnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0 b3I9PSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJv b2wgb3BlcmF0b3IhPSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2Vw dDsKKyAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBlOworIH07CisgI2Vu ZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50 CisgCisgI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE9wdFVzckxvY2FsCisg I2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE9wdFVzckxvY2FsCistZW51bSBj bGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNzIE9wdFVzckxv Y2FsIDogOjpzdGQ6OnVpbnQ4X3QKKyt7CisgICBWYXIgPSAwLAorICAgUm9vdCA9IDEsCisgICBT dGF0ZU92ZXJsYXkgPSAyLAorQEAgLTE1MjYsMTI1ICsxNzQxLDEzMSBAQCBlbnVtIGNsYXNzIE9w dFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3QgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JFRyZWVmaWxlCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1v c3RyZWVjeHgkVHJlZWZpbGUKKy1zdHJ1Y3QgVHJlZWZpbGUgZmluYWwgOiBwdWJsaWMgOjpydXN0 OjpPcGFxdWUgeworLSAgOjpydXN0OjpTdHIgZ2V0X3dvcmtkaXIoKSBjb25zdCBub2V4Y2VwdDsK Ky0gIDo6c3RkOjppbnQzMl90IGdldF9wYXNzd2RfZmQoKSBub2V4Y2VwdDsKKy0gIDo6c3RkOjpp bnQzMl90IGdldF9ncm91cF9mZCgpIG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X2pz b25fc3RyaW5nKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gZ2V0X29zdHJlZV9sYXllcnMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0 OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9hbGxfb3N0cmVlX2xheWVycygp IGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9yZXBv cygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9w YWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgcmVxdWlyZV9hdXRv bWF0aWNfdmVyc2lvbl9wcmVmaXgoKSBjb25zdDsKKy0gIGJvb2wgYWRkX3BhY2thZ2VzKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7Cist ICBib29sIGhhc19wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGdldF9sb2NhbF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9v bCBhZGRfbG9jYWxfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2Vz LCBib29sIGFsbG93X2V4aXN0aW5nKTsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBn ZXRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29s IGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKKy0gIGJvb2wgcmVtb3ZlX3BhY2th Z2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19ub2Vu dCk7CistICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4g Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wg aGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wg YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVw bGFjZW1lbnQgcmVwbGFjZW1lbnQpIG5vZXhjZXB0OworLSAgYm9vbCByZW1vdmVfcGFja2FnZV9v dmVycmlkZV9yZXBsYWNlKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworLSAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2Fs KCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNl X2xvY2FsKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcyk7CistICBib29sIHJl bW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpydXN0OjpTdHIgcGFja2FnZSkg bm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzX292 ZXJyaWRlX3JlbW92ZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBhZGRfcGFja2FnZXNfb3Zl cnJpZGVfcmVtb3ZlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcyk7CistICBi b29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBu b2V4Y2VwdDsKKy0gIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZV9uYW1lKDo6cnVz dDo6U3RyIG5hbWUpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCByZW1vdmVfYWxsX292ZXJyaWRl cygpIG5vZXhjZXB0OworLSAgYm9vbCByZW1vdmVfYWxsX3BhY2thZ2VzKCkgbm9leGNlcHQ7Cist ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V4Y2x1ZGVfcGFja2FnZXMoKSBjb25z dCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9wbGF0Zm9ybV9tb2R1bGUoKSBjb25z dCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5zdGFsbF9s YW5ncygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZm9ybWF0X2luc3RhbGxf bGFuZ3NfbWFjcm8oKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBnZXRfbG9ja2ZpbGVfcmVwb3MoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3Ry IGdldF9yZWYoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X2NsaXdyYXAoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfY2xpd3JhcF9iaW5h cmllcygpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBzZXRfY2xpd3JhcChib29sIGVuYWJsZWQp IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9jb250YWluZXJf Y21kKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGdldF9yZWFkb25seV9leGVjdXRhYmxlcygp IGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfZG9jdW1lbnRhdGlvbigpIGNvbnN0IG5vZXhj ZXB0OworLSAgYm9vbCBnZXRfcmVjb21tZW5kcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBn ZXRfc2VsaW51eCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfc3lzdXNlcnNfaXNfZm9y Y2VkKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnN0ZDo6dWludDMyX3QgZ2V0X3NlbGludXhfbGFi ZWxfdmVyc2lvbigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X2dwZ19r ZXkoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9hdXRvbWF0aWNfdmVy c2lvbl9zdWZmaXgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X2NvbnRhaW5lcigpIGNv bnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfbWFjaGluZWlkX2NvbXBhdCgpIGNvbnN0IG5vZXhj ZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9ldGNfZ3JvdXBfbWVtYmVy cygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVz KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCgpIGNvbnN0IG5v ZXhjZXB0OworLSAgYm9vbCBnZXRfaW1hKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0 cmluZyBnZXRfcmVsZWFzZXZlcigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpycG1vc3RyZWVjeHg6 OlJlcG9NZXRhZGF0YVRhcmdldCBnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQoKSBjb25zdCBub2V4 Y2VwdDsKKy0gIDo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgZ2V0X2Fk dmlzb3JpZXNfbWV0YWRhdGFfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHJwbWRi X2JhY2tlbmRfaXNfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHNob3VsZF9ub3Jt YWxpemVfcnBtZGIoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnBtb3N0cmVlY3h4OjpPcHRVc3JM b2NhbCBnZXRfb3B0X3VzcmxvY2FsKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCg6OnJ1c3Q6OlN0ciBwYWNrYWdl KSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9jaGVja3N1bSg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgY29uc3Q7CistICA6OnJ1c3Q6OlN0cmlu ZyBnZXRfb3N0cmVlX3JlZigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTbGljZTw6OnJw bW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9yZXBvX3BhY2thZ2VzKCkgY29uc3Qg bm9leGNlcHQ7CistICB2b2lkIGNsZWFyX3JlcG9fcGFja2FnZXMoKSBub2V4Y2VwdDsKKy0gIHZv aWQgcHJldHR5cHJpbnRfanNvbl9zdGRvdXQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgcHJp bnRfZGVwcmVjYXRpb25fd2FybmluZ3MoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgcHJpbnRf ZXhwZXJpbWVudGFsX25vdGljZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgc2FuaXR5Y2hl Y2tfZXh0ZXJuYWxzKCkgY29uc3Q7CistICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBt SW1wb3J0ZXJGbGFncz4gaW1wb3J0ZXJfZmxhZ3MoOjpydXN0OjpTdHIgcGtnX25hbWUpIGNvbnN0 IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgd3JpdGVfcmVwb3ZhcnMoOjpzdGQ6OmludDMy X3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdDsKKy0gIHZvaWQgc2V0X3JlbGVhc2V2ZXIoOjpydXN0 OjpTdHIgcmVsZWFzZXZlcik7CistICB2b2lkIHNldF9yZWNvbW1lbmRzKGJvb2wgdmFsKTsKKy0g IHZvaWQgZW5hYmxlX3JlcG8oOjpydXN0OjpTdHIgcmVwbyk7CistICB2b2lkIGRpc2FibGVfcmVw byg6OnJ1c3Q6OlN0ciByZXBvKTsKKy0gIHZvaWQgdmFsaWRhdGVfZm9yX2NvbnRhaW5lcigpIGNv bnN0OworLSAgOjpycG1vc3RyZWVjeHg6OlJlZnNwZWMgZ2V0X2Jhc2VfcmVmc3BlYygpIGNvbnN0 IG5vZXhjZXB0OworLSAgdm9pZCByZWJhc2UoOjpydXN0OjpTdHIgbmV3X3JlZnNwZWMsIDo6cnVz dDo6U3RyIGN1c3RvbV9vcmlnaW5fdXJsLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2Ny aXB0aW9uKSBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX3Vy bCgpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X29yaWdpbl9jdXN0b21f ZGVzY3JpcHRpb24oKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9vdmVy cmlkZV9jb21taXQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0X292ZXJyaWRlX2NvbW1p dCg6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJv b2wgaGFzX2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgaW5p dHJhbWZzX2V0Y19maWxlc190cmFjayg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMp IG5vZXhjZXB0OworLSAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2soOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsKKy0gIGJvb2wgaW5pdHJhbWZzX2V0 Y19maWxlc191bnRyYWNrX2FsbCgpIG5vZXhjZXB0OworLSAgYm9vbCBnZXRfaW5pdHJhbWZzX3Jl Z2VuZXJhdGUoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfaW5pdHJhbWZzX2FyZ3MoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0X2luaXRy YW1mc19yZWdlbmVyYXRlKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGFyZ3MpIG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X3VuY29uZmlndXJlZF9zdGF0 ZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSgp IGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBoYXNfYW55X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNl cHQ7CistICBib29sIG1lcmdlX3RyZWVmaWxlKDo6cnVzdDo6U3RyIHRyZWVmaWxlKTsKKy0gIGJv b2wgZ2V0X25vX2luaXRyYW1mcygpIGNvbnN0IG5vZXhjZXB0OworLSAgflRyZWVmaWxlKCkgPSBk ZWxldGU7Cisrc3RydWN0IFRyZWVmaWxlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisr eworKyAgOjpydXN0OjpTdHIgZ2V0X3dvcmtkaXIgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnN0 ZDo6aW50MzJfdCBnZXRfcGFzc3dkX2ZkICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OmludDMyX3Qg Z2V0X2dyb3VwX2ZkICgpIG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2pzb25fc3Ry aW5nICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdl dF9vc3RyZWVfbGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0Owor KyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9hbGxfb3N0cmVlX2xheWVycyAoKSBj b25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVwb3Mg KCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3Bh Y2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgcmVxdWlyZV9hdXRv bWF0aWNfdmVyc2lvbl9wcmVmaXggKCkgY29uc3Q7CisrICBib29sIGFkZF9wYWNrYWdlcyAoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsK KysgIGJvb2wgaGFzX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGJvb2wgYWRkX2xvY2FsX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFj a2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7Cisr ICBib29sIGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7CisrICBib29sIHJlbW92 ZV9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFs bG93X25vZW50KTsKKysgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxh Y2VtZW50PiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKSBjb25zdCBub2V4Y2VwdDsK KysgIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICBib29sIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICg6OnJwbW9zdHJlZWN4eDo6 T3ZlcnJpZGVSZXBsYWNlbWVudCByZXBsYWNlbWVudCkgbm9leGNlcHQ7CisrICBib29sIHJlbW92 ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UgKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0 OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19vdmVycmlkZV9y ZXBsYWNlX2xvY2FsICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBhZGRfcGFja2FnZXNfb3Zl cnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2Vz KTsKKysgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpydXN0 OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQg YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IHBhY2thZ2VzKTsKKysgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVtb3ZlICg6OnJ1 c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKKysgIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRl X3JlbW92ZV9uYW1lICg6OnJ1c3Q6OlN0ciBuYW1lKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wg cmVtb3ZlX2FsbF9vdmVycmlkZXMgKCkgbm9leGNlcHQ7CisrICBib29sIHJlbW92ZV9hbGxfcGFj a2FnZXMgKCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V4 Y2x1ZGVfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRf cGxhdGZvcm1fbW9kdWxlICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGdldF9pbnN0YWxsX2xhbmdzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0 OjpTdHJpbmcgZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8gKCkgY29uc3Qgbm9leGNlcHQ7Cisr ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2tmaWxlX3JlcG9zICgpIGNvbnN0 IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHIgZ2V0X3JlZiAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGJvb2wgZ2V0X2NsaXdyYXAgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gZ2V0X2NsaXdyYXBfYmluYXJpZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2 b2lkIHNldF9jbGl3cmFwIChib29sIGVuYWJsZWQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGdldF9jb250YWluZXJfY21kICgpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCBnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29s IGdldF9kb2N1bWVudGF0aW9uICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBnZXRfcmVjb21t ZW5kcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZ2V0X3NlbGludXggKCkgY29uc3Qgbm9l eGNlcHQ7CisrICBib29sIGdldF9zeXN1c2Vyc19pc19mb3JjZWQgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICA6OnN0ZDo6dWludDMyX3QgZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbiAoKSBjb25zdCBu b2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIGdldF9ncGdfa2V5ICgpIGNvbnN0IG5vZXhjZXB0 OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCAoKSBjb25z dCBub2V4Y2VwdDsKKysgIGJvb2wgZ2V0X2NvbnRhaW5lciAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGJvb2wgZ2V0X21hY2hpbmVpZF9jb21wYXQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V0Y19ncm91cF9tZW1iZXJzICgpIGNvbnN0IG5vZXhj ZXB0OworKyAgYm9vbCBnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzICgpIGNvbnN0IG5vZXhj ZXB0OworKyAgYm9vbCB1c2Vfa2VybmVsX2luc3RhbGwgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBi b29sIGdldF9pbWEgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfcmVs ZWFzZXZlciAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpSZXBvTWV0YWRh dGFUYXJnZXQgZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0ICgpIGNvbnN0IG5vZXhjZXB0OworKyAg OjpycG1vc3RyZWVjeHg6OkFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCBnZXRfYWR2aXNvcmllc19t ZXRhZGF0YV90YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIHJwbWRiX2JhY2tlbmRf aXNfdGFyZ2V0ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBzaG91bGRfbm9ybWFsaXplX3Jw bWRiICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6Ok9wdFVzckxvY2FsIGdl dF9vcHRfdXNybG9jYWwgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCAoOjpydXN0OjpTdHIgcGFja2FnZSkgY29u c3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfY2hlY2tzdW0gKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdDsKKysgIDo6cnVzdDo6U3RyaW5nIGdl dF9vc3RyZWVfcmVmICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTbGljZTw6OnJwbW9z dHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9yZXBvX3BhY2thZ2VzICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgdm9pZCBjbGVhcl9yZXBvX3BhY2thZ2VzICgpIG5vZXhjZXB0OworKyAgdm9p ZCBwcmV0dHlwcmludF9qc29uX3N0ZG91dCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgcHJp bnRfZGVwcmVjYXRpb25fd2FybmluZ3MgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHByaW50 X2V4cGVyaW1lbnRhbF9ub3RpY2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBzYW5pdHlj aGVja19leHRlcm5hbHMgKCkgY29uc3Q7CisrICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXJGbGFncz4KKysgIGltcG9ydGVyX2ZsYWdzICg6OnJ1c3Q6OlN0ciBwa2dfbmFt ZSkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyB3cml0ZV9yZXBvdmFycyAoOjpz dGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdDsKKysgIHZvaWQgc2V0X3JlbGVhc2V2 ZXIgKDo6cnVzdDo6U3RyIHJlbGVhc2V2ZXIpOworKyAgdm9pZCBzZXRfcmVjb21tZW5kcyAoYm9v bCB2YWwpOworKyAgdm9pZCBlbmFibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVwbyk7CisrICB2b2lk IGRpc2FibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVwbyk7CisrICB2b2lkIHZhbGlkYXRlX2Zvcl9j b250YWluZXIgKCkgY29uc3Q7CisrICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlYyBnZXRfYmFzZV9y ZWZzcGVjICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCByZWJhc2UgKDo6cnVzdDo6U3RyIG5l d19yZWZzcGVjLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX3VybCwKKysgICAgICAgICAgICAg ICA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX3VybCAoKSBjb25zdCBub2V4Y2VwdDsKKysg IDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX2Rlc2NyaXB0aW9uICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X292ZXJyaWRlX2NvbW1pdCAoKSBjb25zdCBu b2V4Y2VwdDsKKysgIHZvaWQgc2V0X292ZXJyaWRlX2NvbW1pdCAoOjpydXN0OjpTdHIgY2hlY2tz dW0pIG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbml0cmFt ZnNfZXRjX2ZpbGVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBoYXNfaW5pdHJhbWZzX2V0 Y19maWxlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc190 cmFjayAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsKKysgIGJv b2wgaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gZmlsZXMpIG5vZXhjZXB0OworKyAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2tf YWxsICgpIG5vZXhjZXB0OworKyAgYm9vbCBnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKCkgY29u c3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2luaXRyYW1m c19hcmdzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBzZXRfaW5pdHJhbWZzX3JlZ2VuZXJh dGUgKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIG5vZXhj ZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X3VuY29uZmlndXJlZF9zdGF0ZSAoKSBjb25zdCBu b2V4Y2VwdDsKKysgIGJvb2wgbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkgKCkgY29uc3Qgbm9l eGNlcHQ7CisrICBib29sIGhhc19hbnlfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBi b29sIG1lcmdlX3RyZWVmaWxlICg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSk7CisrICBib29sIGdldF9u b19pbml0cmFtZnMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB+VHJlZWZpbGUgKCkgPSBkZWxldGU7 CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlv dXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0Cisr ICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRp ZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVHJlZWZpbGUKKyAKKyAjaWZuZGVm IENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZXBvUGFja2FnZQorICNkZWZpbmUgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlcG9QYWNrYWdlCistc3RydWN0IFJlcG9QYWNr YWdlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIDo6cnVzdDo6U3RyIGdldF9y ZXBvKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICB+UmVwb1BhY2thZ2UoKSA9IGRlbGV0ZTsK KytzdHJ1Y3QgUmVwb1BhY2thZ2UgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7Cisr ICA6OnJ1c3Q6OlN0ciBnZXRfcmVwbyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB+UmVw b1BhY2thZ2UgKCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6Omxh eW91dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXpl KCkgbm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7 CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUg KCkgbm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0 OworICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk UmVwb1BhY2thZ2UKK0BAIC0xNjU0LDcgKzE4NzUsOCBAQCBzdHJ1Y3QgUmVwb1BhY2thZ2UgZmlu YWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgeworIC8vIEEgY29weSBvZiBMaXZlRnNTdGF0ZSB0 aGF0IGlzIGJyaWRnZWQgdG8gQysrOyB0aGUgbWFpbgorIC8vIGNoYW5nZSBoZXJlIGlzIHdlIGNh bid0IHVzZSBPcHRpb248PiB5ZXQsIHNvIGVtcHR5IHZhbHVlcworIC8vIGFyZSByZXByZXNlbnRl ZCBieSB0aGUgZW1wdHkgc3RyaW5nLgorLXN0cnVjdCBMaXZlQXBwbHlTdGF0ZSBmaW5hbCB7Cisr c3RydWN0IExpdmVBcHBseVN0YXRlIGZpbmFsCisreworICAgOjpydXN0OjpTdHJpbmcgaW5wcm9n cmVzczsKKyAgIDo6cnVzdDo6U3RyaW5nIGNvbW1pdDsKKyAKK0BAIC0xNjY0LDY0ICsxODg2LDcy IEBAIHN0cnVjdCBMaXZlQXBwbHlTdGF0ZSBmaW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkREIKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRQYXNzd2REQgorLXN0cnVjdCBQYXNzd2REQiBmaW5hbCA6IHB1YmxpYyA6 OnJ1c3Q6Ok9wYXF1ZSB7CistICA6OnJ1c3Q6OlN0cmluZyBsb29rdXBfdXNlcig6OnN0ZDo6dWlu dDMyX3QgdWlkKSBjb25zdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGxvb2t1cF9ncm91cCg6OnN0ZDo6 dWludDMyX3QgZ2lkKSBjb25zdDsKKy0gIH5QYXNzd2REQigpID0gZGVsZXRlOworK3N0cnVjdCBQ YXNzd2REQiBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIDo6cnVzdDo6U3Ry aW5nIGxvb2t1cF91c2VyICg6OnN0ZDo6dWludDMyX3QgdWlkKSBjb25zdDsKKysgIDo6cnVzdDo6 U3RyaW5nIGxvb2t1cF9ncm91cCAoOjpzdGQ6OnVpbnQzMl90IGdpZCkgY29uc3Q7CisrICB+UGFz c3dkREIgKCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91 dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkg bm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Cisr ICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkg bm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0Owor ICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFz c3dkREIKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNzd2RF bnRyaWVzCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkRW50 cmllcworLXN0cnVjdCBQYXNzd2RFbnRyaWVzIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVl IHsKKy0gIHZvaWQgYWRkX2dyb3VwX2NvbnRlbnQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1 c3Q6OlN0ciBwYXRoKTsKKy0gIHZvaWQgYWRkX3Bhc3N3ZF9jb250ZW50KDo6c3RkOjppbnQzMl90 IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCk7CistICBib29sIGNvbnRhaW5zX2dyb3VwKDo6cnVz dDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBjb250YWluc191c2VyKDo6cnVz dDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpzdGQ6OnVpbnQzMl90IGxvb2t1cF91 c2VyX2lkKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0OworLSAgOjpzdGQ6OnVpbnQzMl90IGxvb2t1 cF9ncm91cF9pZCg6OnJ1c3Q6OlN0ciBncm91cCkgY29uc3Q7CistICB+UGFzc3dkRW50cmllcygp ID0gZGVsZXRlOworK3N0cnVjdCBQYXNzd2RFbnRyaWVzIGZpbmFsIDogcHVibGljIDo6cnVzdDo6 T3BhcXVlCisreworKyAgdm9pZCBhZGRfZ3JvdXBfY29udGVudCAoOjpzdGQ6OmludDMyX3Qgcm9v dGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKKysgIHZvaWQgYWRkX3Bhc3N3ZF9jb250ZW50ICg6OnN0 ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpOworKyAgYm9vbCBjb250YWluc19n cm91cCAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGNvbnRhaW5z X3VzZXIgKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpzdGQ6OnVpbnQz Ml90IGxvb2t1cF91c2VyX2lkICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdDsKKysgIDo6c3RkOjp1 aW50MzJfdCBsb29rdXBfZ3JvdXBfaWQgKDo6cnVzdDo6U3RyIGdyb3VwKSBjb25zdDsKKysgIH5Q YXNzd2RFbnRyaWVzICgpID0gZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0 OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg c2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhj ZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBz aXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4 Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JFBhc3N3ZEVudHJpZXMKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRFeHRlbnNpb25zCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk RXh0ZW5zaW9ucworLXN0cnVjdCBFeHRlbnNpb25zIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3Bh cXVlIHsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVwb3MoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3NfZXh0ZW5zaW9u X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gZ2V0X2RldmVsb3BtZW50X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHN0 YXRlX2NoZWNrc3VtX2NoYW5nZWQoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRw dXRfZGlyKSBjb25zdDsKKy0gIHZvaWQgdXBkYXRlX3N0YXRlX2NoZWNrc3VtKDo6cnVzdDo6U3Ry IGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7CistICB2b2lkIHNlcmlhbGl6 ZV90b19kaXIoOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7CistICA6OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IGdlbmVyYXRlX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBjb25zdDsKKy0gIH5FeHRlbnNpb25zKCkgPSBkZWxldGU7 Cisrc3RydWN0IEV4dGVuc2lvbnMgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7Cisr ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0 OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc19leHRlbnNpb25fcGFja2Fn ZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X2RldmVsb3BtZW50X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBzdGF0ZV9j aGVja3N1bV9jaGFuZ2VkICg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9k aXIpIGNvbnN0OworKyAgdm9pZCB1cGRhdGVfc3RhdGVfY2hlY2tzdW0gKDo6cnVzdDo6U3RyIGNo a3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7CisrICB2b2lkIHNlcmlhbGl6ZV90 b19kaXIgKDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OworKyAgOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPgorKyAgZ2VuZXJhdGVfdHJlZWZpbGUgKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBjb25zdDsKKysgIH5FeHRlbnNpb25zICgpID0gZGVs ZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3Qg bGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91 dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAj ZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMKKyAKKyAj aWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlCisgI2Rl ZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZQorLXN0cnVj dCBMb2NrZWRQYWNrYWdlIGZpbmFsIHsKKytzdHJ1Y3QgTG9ja2VkUGFja2FnZSBmaW5hbAorK3sK KyAgIDo6cnVzdDo6U3RyaW5nIG5hbWU7CisgICA6OnJ1c3Q6OlN0cmluZyBldnI7CisgICA6OnJ1 c3Q6OlN0cmluZyBhcmNoOworQEAgLTE3MzMsMzI2MiArMTk2Myw0OTg1IEBAIHN0cnVjdCBMb2Nr ZWRQYWNrYWdlIGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRMb2NrZmlsZUNvbmZpZworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JExvY2tmaWxlQ29uZmlnCistc3RydWN0IExvY2tmaWxlQ29uZmlnIGZpbmFsIDogcHVibGlj IDo6cnVzdDo6T3BhcXVlIHsKKy0gIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQ YWNrYWdlPiBnZXRfbG9ja2VkX3BhY2thZ2VzKCkgY29uc3Q7CistICB+TG9ja2ZpbGVDb25maWco KSA9IGRlbGV0ZTsKKytzdHJ1Y3QgTG9ja2ZpbGVDb25maWcgZmluYWwgOiBwdWJsaWMgOjpydXN0 OjpPcGFxdWUKKyt7CisrICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2Fn ZT4gZ2V0X2xvY2tlZF9wYWNrYWdlcyAoKSBjb25zdDsKKysgIH5Mb2NrZmlsZUNvbmZpZyAoKSA9 IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3Ry dWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsK Ky0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBs YXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsK KysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07 CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZp ZworIAorLXN0YXRpY19hc3NlcnQoOjpzdGQ6OmlzX2VudW08UnBtT3N0cmVlRGlmZlByaW50Rm9y bWF0Pjo6dmFsdWUsICJleHBlY3RlZCBlbnVtIik7Cistc3RhdGljX2Fzc2VydChzaXplb2YoUnBt T3N0cmVlRGlmZlByaW50Rm9ybWF0KSA9PSBzaXplb2YoOjpzdGQ6OnVpbnQ4X3QpLCAiaW5jb3Jy ZWN0IHNpemUiKTsKKy1zdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PDo6c3RkOjp1aW50OF90PihS cG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZPUk1BVF9TVU1N QVJZKSA9PSAwLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7 Cistc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4oUnBtT3N0cmVlRGlm ZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfRlVMTF9BTElHTkVEKSA9 PSAxLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Cistc3Rh dGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4oUnBtT3N0cmVlRGlmZlByaW50 Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfRlVMTF9NVUxUSUxJTkUpID09IDIs ICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKKy0KKy1leHRl cm4gIkMiIHsKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkaXNfYmFyZV9zcGxpdF94YXR0cnMoYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CistCistYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfaHR0cF9hcmcoOjpydXN0OjpTdHIgYXJn KSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkaXNfb3N0cmVlX2NvbnRhaW5lcihib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKy0K Ky06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X3N5 c3RlbV9ob3N0X3R5cGUoOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlICpyZXR1cm4kKSBu b2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkcmVxdWlyZV9zeXN0ZW1faG9zdF90eXBlKDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0 VHlwZSB0KSBub2V4Y2VwdDsKKytzdGF0aWNfYXNzZXJ0ICg6OnN0ZDo6aXNfZW51bTxScG1Pc3Ry ZWVEaWZmUHJpbnRGb3JtYXQ+Ojp2YWx1ZSwgImV4cGVjdGVkIGVudW0iKTsKKytzdGF0aWNfYXNz ZXJ0IChzaXplb2YgKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCkgPT0gc2l6ZW9mICg6OnN0ZDo6 dWludDhfdCksICJpbmNvcnJlY3Qgc2l6ZSIpOworK3N0YXRpY19hc3NlcnQgKAorKyAgICBzdGF0 aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4gKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NU UkVFX0RJRkZfUFJJTlRfRk9STUFUX1NVTU1BUlkpCisrICAgICAgICA9PSAwLAorKyAgICAiZGlz YWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Cisrc3RhdGljX2Fzc2Vy dCAoCisrICAgIHN0YXRpY19jYXN0PDo6c3RkOjp1aW50OF90PiAoUnBtT3N0cmVlRGlmZlByaW50 Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfRlVMTF9BTElHTkVEKQorKyAgICAg ICAgPT0gMSwKKysgICAgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdl XSIpOworK3N0YXRpY19hc3NlcnQgKHN0YXRpY19jYXN0PDo6c3RkOjp1aW50OF90PiAoCisrICAg ICAgICAgICAgICAgICAgIFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZf UFJJTlRfRk9STUFUX0ZVTExfTVVMVElMSU5FKQorKyAgICAgICAgICAgICAgICAgICA9PSAyLAor KyAgICAgICAgICAgICAgICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJyaWRn ZV0iKTsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19ycG1fYXJnKDo6 cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CisrZXh0ZXJuICJDIgorK3sKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19iYXJlX3NwbGl0X3hhdHRy cyAoYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9zdGFydF9kYWVtb24oKSBub2V4Y2VwdDsK KysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2h0dHBfYXJnICg6OnJ1c3Q6 OlN0ciBhcmcpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfaGFuZGxlX2ZkX2FyZ3VtZW50KDo6cnVzdDo6U3RyIGFy ZywgOjpydXN0OjpTdHIgYXJjaCwgYm9vbCBpc19yZXBsYWNlLCA6OnJ1c3Q6OlZlYzw6OnN0ZDo6 aW50MzJfdD4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX29zdHJlZV9jb250YWluZXIgKGJvb2wgKnJldHVy biQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVu dF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0 ICZwcm9ncmVzcywgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9zeXN0ZW1faG9z dF90eXBlICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6U3lzdGVtSG9zdFR5cGUgKnJldHVybiQp IG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bm5pbmdf aW5fY29udGFpbmVyKCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJlcXVpcmVfc3lzdGVtX2hvc3RfdHlwZSAoOjpycG1v c3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlIHQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25maXJtKGJvb2wgKnJldHVybiQp IG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfcnBtX2Fy ZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybV9vcl9hYm9ydCgpIG5vZXhjZXB0Owor LTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkb3Bl cmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQnViYmxld3JhcCRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50X3N0 YXJ0X2RhZW1vbiAoKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9zZWxmdGVzdCgpIG5vZXhjZXB0OworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9o YW5kbGVfZmRfYXJndW1lbnQgKAorKyAgICAgIDo6cnVzdDo6U3RyIGFyZywgOjpydXN0OjpTdHIg YXJjaCwgYm9vbCBpc19yZXBsYWNlLAorKyAgICAgIDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90 PiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfcnVuX3N5bmMoOjpzdGQ6OmludDMyX3Qgcm9v dGZzX2RmZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzLCBib29sIGNh cHR1cmVfc3Rkb3V0LCA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJp bGl0eSwgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ4X3Q+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysg IHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9yZW5kZXJfZG93bmxvYWRf cHJvZ3Jlc3MgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmcHJvZ3Jl c3MsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9uZXcoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cD4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcnVubmluZ19pbl9jb250YWluZXIgKCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3X3dpdGhfbXV0 YWJpbGl0eSg6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQsIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3 cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5LCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnVi Ymxld3JhcD4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm0gKGJvb2wgKnJldHVybiQpIG5vZXhjZXB0 OworIAorLTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3 cmFwJGdldF9yb290ZnNfZmQoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgY29uc3QgJnNlbGYp IG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNvbmZpcm1fb3JfYWJvcnQgKCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJG9wZXJhdG9yJHNpemVvZiAoKSBu b2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1 YmJsZXdyYXAkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGFwcGVuZF9id3JhcF9hcmcoOjpycG1vc3Ry ZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsIDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3Jh cF9zZWxmdGVzdCAoKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRCdWJibGV3cmFwJGFwcGVuZF9jaGlsZF9hcmcoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdy YXAgJnNlbGYsIDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9ydW5fc3luYyAoCisr ICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGNvbnN0ICZhcmdzLCBib29sIGNhcHR1cmVfc3Rkb3V0LAorKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5LAorKyAgICAgIDo6cnVzdDo6VmVj PDo6c3RkOjp1aW50OF90PiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRlbnYoOjpycG1vc3RyZWVjeHg6OkJ1YmJs ZXdyYXAgJnNlbGYsIDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6U3RyIHYpIG5vZXhjZXB0OworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdy YXBfbmV3ICgKKysgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQsIDo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX2ZkKDo6cnBtb3N0cmVl Y3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQsIDo6c3RkOjpp bnQzMl90IHRhcmdldF9mZCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9uZXdfd2l0aF9tdXRhYmlsaXR5ICgK KysgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQsIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3 cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5LAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpCdWJibGV3cmFwPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRfaW5oZXJpdF9zdGRpbig6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9leGNlcHQ7CisrICA6OnN0ZDo6aW50MzJfdCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRnZXRfcm9vdGZzX2ZkICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCist dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGluX2Zk KDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnN0ZDo6aW50MzJfdCBzb3VyY2Vf ZmQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxl d3JhcCRhcHBlbmRfYndyYXBfYXJnICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2ZkKDo6cnBtb3N0cmVlY3h4 OjpCdWJibGV3cmFwICZzZWxmLCA6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0Owor KyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfY2hp bGRfYXJnICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0 OjpTdHIgYXJnKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRCdWJibGV3cmFwJHRha2Vfc3RkZXJyX2ZkKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZz ZWxmLCA6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRlbnYgKDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6U3RyIHYpIG5vZXhjZXB0Owor IAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRv dXRfYW5kX3N0ZGVycl9mZCg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpzdGQ6 OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9mZCAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAg JnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OmludDMyX3QgdGFyZ2V0X2Zk KSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3 cmFwJGJpbmRfcmVhZCg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpydXN0OjpT dHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0X2luaGVyaXRfc3RkaW4gKAorKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZHdyaXRlKDo6cnBtb3N0 cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRl c3QpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxl d3JhcCR0YWtlX3N0ZGluX2ZkICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXR1cF9jb21w YXRfdmFyKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmKSBub2V4Y2VwdDsKKysgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRvdXRfZmQg KDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OmludDMyX3Qg c291cmNlX2ZkKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRydW4oOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdy YXAgJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxl KSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdy YXAkdGFrZV9zdGRlcnJfZmQgKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4 eDo6QnViYmxld3JhcE11dGFiaWxpdHkgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG11dGFi aWxpdHlfZm9yX3VuaWZpZWRfY29yZShib29sIHVuaWZpZWRfY29yZSkgbm9leGNlcHQ7CisrICB2 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2Fu ZF9zdGRlcnJfZmQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6 OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR1c3JvdmVybGF5X2VudHJ5cG9pbnQoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSBub2V4Y2VwdDsKKysgIHZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkYmluZF9yZWFkICg6OnJwbW9z dHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBzcmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHIgZGVzdCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGFwcGx5bGl2ZV9lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBjb25zdCAmYXJncykgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZHdyaXRlICg6OnJwbW9zdHJlZWN4eDo6QnVi Ymxld3JhcCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHNyYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3Ry IGRlc3QpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZmluaXNoKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNy b290IGNvbnN0ICZzeXNyb290KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHNldHVwX2NvbXBhdF92YXIgKAor KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZXV0 aWxfbGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4oOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9l eGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkQnViYmxld3JhcCRydW4gKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZz ZWxmLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSkgbm9l eGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJpbnRfb3N0cmVl X3R4bl9zdGF0cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwb1RyYW5zYWN0aW9uU3RhdHMgJnN0 YXRzKSBub2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eQor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG11dGFiaWxpdHlfZm9yX3VuaWZpZWRfY29y ZSAoYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3cml0ZV9jb21taXRfaWQoOjpydXN0OjpTdHIg dGFyZ2V0X3BhdGgsIDo6cnVzdDo6U3RyIHJldmlzaW9uKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR1c3JvdmVybGF5X2VudHJ5 cG9pbnQgKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykg bm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNsaXdyYXBfd3JpdGVfd3JhcHBlcnMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4 Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRhcHBseWxpdmVfZW50cnlwb2ludCAoCisrICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGNvbnN0ICZhcmdzKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF93cml0ZV9zb21lX3dyYXBwZXJzKDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdz KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRhcHBseWxpdmVfZmluaXNoICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVl U3lzcm9vdCBjb25zdCAmc3lzcm9vdCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY2xpd3JhcF9kZXN0ZGlyKDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjb21wb3NldXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5kX3J1biAoCisrICAgICAgOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9lbmNhcHN1bGF0ZSg6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkcHJpbnRfb3N0cmVlX3R4bl9zdGF0cyAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG9UcmFuc2FjdGlvblN0YXRzICZzdGF0cykgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxv eV9mcm9tX3NlbGZfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3Mp IG5vZXhjZXB0OworLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBydW5lZENvbnRh aW5lckluZm8kb3BlcmF0b3IkZXEoUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmLCBQcnVuZWRD b250YWluZXJJbmZvIGNvbnN0ICYpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHdyaXRlX2NvbW1pdF9pZCAoOjpydXN0OjpTdHIg dGFyZ2V0X3BhdGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciByZXZpc2lvbikgbm9leGNlcHQ7 CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHB1 bGxfY29udGFpbmVyKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJw bW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIg aW1ncmVmLCA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUsIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBf d3JpdGVfd3JhcHBlcnMgKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7CisgCistOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9w cnVuZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1v c3RyZWVjeHg6OlBydW5lZENvbnRhaW5lckluZm8gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3Jp dGVfc29tZV93cmFwcGVycyAoCisrICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRxdWVyeV9jb250YWluZXJf aW1hZ2VfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1 c3Q6OlN0ciBjLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0 ZT4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY2xpd3JhcF9kZXN0ZGlyICg6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHB1cmdl X3JlZnNwZWMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6 U3RyIHJlZnNwZWMpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfZW5jYXBzdWxhdGUgKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX2NvbnRhaW5lcl91cGRhdGUoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2Fu Y2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnJ1c3Q6OlN0ciBpbWdyZWYsIGJvb2wgKnJl dHVybiQpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRlbXBFdGNHdWFyZCRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3IkYWxp Z25vZigpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OworLTo6 c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQ cmVwJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQg KAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7Cisr ICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQcnVuZWRDb250YWluZXJJbmZvJG9w ZXJhdG9yJGVxICgKKysgICAgICBQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYsIFBydW5lZENv bnRhaW5lckluZm8gY29uc3QgJikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfdGVtcGV0Y19ndWFyZCg6OnN0ZDo6 aW50MzJfdCByb290ZnMsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRwdWxsX2NvbnRhaW5lciAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29u c3QgJmNhbmNlbGxhYmxlLAorKyAgICAgIDo6cnVzdDo6U3RyIGltZ3JlZiwgOjpydXN0OjpTdHIg ZGlnZXN0X292ZXJyaWRlLAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250 YWluZXJJbWFnZVN0YXRlPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCR1bmRvKDo6cnBt b3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9wcnVu ZSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qs CisrICAgICAgOjpycG1vc3RyZWVjeHg6OlBydW5lZENvbnRhaW5lckluZm8gKnJldHVybiQpIG5v ZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRwcmVwYXJlX2ZpbGVzeXN0ZW1fc2NyaXB0X3ByZXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz LCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNjcmlwdFByZXAkdW5kbyg6OnJwbW9zdHJlZWN4eDo6Rmls ZXN5c3RlbVNjcmlwdFByZXAgJnNlbGYpIG5vZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5fZGVwbW9kKDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQsIDo6cnVzdDo6U3RyIGt2ZXIsIGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2Vw dDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cnVuX3N5c3VzZXJzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgZm9yY2UpIG5vZXhj ZXB0OworLQorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvZ190cmVlZmlsZSg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKSBub2V4Y2VwdDsKKy0KKy1ib29sIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNlKDo6 cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OworLQorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGlzX2NvbnRhaW5lcl9pbWFnZV9kaWdlc3RfcmVmZXJlbmNlKDo6cnVzdDo6U3Ry IHJlZnNwZWMpIG5vZXhjZXB0OworLQorLTo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmVmc3BlY19jbGFzc2lmeSg6OnJ1c3Q6OlN0ciByZWZz cGVjKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdmVyaWZ5X2tlcm5lbF9obWFjKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpy dXN0OjpTdHIgbW9kZGlyKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVyX3JwbXMoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+ICpycG1zLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVy biQpIG5vZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRzdGFnZV9jb250YWluZXJfcnBtX3Jhd19mZHMoOjpydXN0OjpWZWM8OjpzdGQ6 OmludDMyX3Q+ICpmZHMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9l eGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNvbW1pdF9oYXNfbWF0Y2hpbmdfc2Vwb2xpY3koOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50 IGNvbnN0ICZjb21taXQsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBjb25zdCAmcG9s aWN5LCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2hlYWRlcl92YXJpYW50KDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjYWNoZWJyYW5jaCwgOjpy cG1vc3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0dXJuJCkgbm9leGNlcHQ7CistCistOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfYnVpbGRfY2h1 bmtlZF9vY2lfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5v ZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjb21wb3NlX2ltYWdlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9l eGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICphcmdzKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29uZmlndXJlX2J1aWxkX3JlcG9fZnJvbV90YXJnZXQoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmJ1aWxkX3JlcG8sIDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZ0YXJnZXRfcmVwbykgbm9leGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcHJlcGFyZV9yb290ZnMo OjpzdGQ6OmludDMyX3Qgc3JjX3Jvb3Rmc19kZmQsIDo6c3RkOjppbnQzMl90IGRlc3Rfcm9vdGZz X2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkgbm9leGNlcHQ7CistCist OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vw b3N0X25zc3dpdGNoX2FsdGZpbGVzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpIG5vZXhjZXB0 OworLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b21wb3NlX3Bvc3Rwcm9jZXNzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6U3RyIG5leHRfdmVyc2lvbiwgYm9vbCB1 bmlmaWVkX2NvcmUpIG5vZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsX3ByZSg6OnN0ZDo6 aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVm aWxlKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbCg6OnN0ZDo6aW50MzJfdCByb290 ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKSBub2V4Y2Vw dDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y29udmVydF92YXJfdG9fdG1wZmlsZXNfZCg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJw bW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSkgbm9leGNlcHQ7Cist CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJvb3Rm c19wcmVwYXJlX2xpbmtzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUsIGJvb2wgc2tpcF91c3Jsb2NhbCkgbm9leGNlcHQ7 CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHdv cmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZk LCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSkgbm9leGNlcHQ7Cist CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBvc3Rw cm9jZXNzX2NsZWFudXBfcnBtZGIoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7 CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJl d3JpdGVfcnBtZGJfZm9yX3RhcmdldCg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCBib29sIG5v cm1hbGl6ZSkgbm9leGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGRpcmVjdG9yeV9zaXplKDo6c3RkOjppbnQzMl90IGRmZCwgOjpycG1v c3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6c3RkOjp1aW50NjRf dCAqcmV0dXJuJCkgbm9leGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9yZWJ1aWxkKDo6cnVzdDo6U3RyIHRyZWVmaWxl KSBub2V4Y2VwdCB7CistICB2b2lkICgqY29udGFpbmVyX3JlYnVpbGQkKSg6OnJ1c3Q6OlN0cikg PSA6OnJwbW9zdHJlZWN4eDo6Y29udGFpbmVyX3JlYnVpbGQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiB0aHJvdyQ7CistICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0g eworLSAgICAgICAgY29udGFpbmVyX3JlYnVpbGQkKHRyZWVmaWxlKTsKKy0gICAgICAgIHRocm93 JC5wdHIgPSBudWxscHRyOworLSAgICAgIH0sCistICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwo dGhyb3ckKSk7CistICByZXR1cm4gdGhyb3ckOworLX0KKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0 ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0 OjpTdHIgYywKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1h Z2VTdGF0ZT4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2Zvcl9pZCg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIgZGVwbG95X2lkLCA6OnJwbW9z dHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdXJnZV9yZWZz cGVjICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciByZWZzcGVjKSBu b2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkZGVwbG95bWVudF9jaGVja3N1bV9mb3JfaWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxveV9pZCwgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNoZWNrX2NvbnRhaW5lcl91cGRhdGUgKAorKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxl IGNvbnN0ICZjYW5jZWxsYWJsZSwKKysgICAgICA6OnJ1c3Q6OlN0ciBpbWdyZWYsIGJvb2wgKnJl dHVybiQpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVGVtcEV0Y0d1YXJkJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKKysgIDo6c3Rk OjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCRvcGVyYXRv ciRhbGlnbm9mICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNjcmlwdFByZXAkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhj ZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRmlsZXN5 c3RlbVNjcmlwdFByZXAkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9nZXRf YmFzZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIg b3B0X2RlcGxveV9pZCwgOjpydXN0OjpTdHIgb3B0X29zX25hbWUsIDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVEZXBsb3ltZW50ICoqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV90ZW1wZXRjX2d1YXJkICgK KysgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpUZW1wRXRjR3VhcmQ+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2FkZF9tYW5pZmVzdF9kaWZmKDo6cnBtb3N0cmVl Y3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QsIDo6cnBtb3N0cmVlY3h4OjpFeHBvcnRlZE1h bmlmZXN0RGlmZiBjb25zdCAmZGlmZikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl bgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCR1bmRvICg6OnJw bW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGFlbW9uX3Nhbml0 eWNoZWNrX2Vudmlyb25tZW50KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZz eXNyb290KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRwcmVwYXJlX2ZpbGVzeXN0ZW1fc2NyaXB0X3ByZXAgKAorKyAgICAgIDo6 c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0 ZW1TY3JpcHRQcmVwPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9nZW5lcmF0ZV9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQp IG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJHVuZG8gKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfcG9wdWxhdGVf dmFyaWFudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnBtb3N0 cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpIG5vZXhjZXB0OworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9kZXBtb2QgKDo6c3Rk OjppbnQzMl90IHJvb3Rmc19kZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIga3ZlciwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIHVuaWZpZWRfY29yZSkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX2Jhc2VsYXllcl9yZWZzKDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAm Y2FuY2VsbGFibGUpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9zeXN1c2VycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2wgZm9yY2UpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2YXJpYW50X2FkZF9yZW1vdGVfc3RhdHVz KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZz cGVjLCA6OnJ1c3Q6OlN0ciBiYXNlX2NoZWNrc3VtLCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnRE aWN0IGNvbnN0ICZkaWN0KSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGxvZ190cmVlZmlsZSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0Zikg bm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQoOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnBtb3N0cmVlY3h4OjpHVmFy aWFudCBjb25zdCAmY29tbWl0LCA6OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRh ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGlzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhj ZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2xvYWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBs b3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysgIGJvb2wKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250 YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZSAoOjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNl cHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHBhcnNlX292ZXJyaWRlX3NvdXJjZSg6OnJ1c3Q6OlN0ciBzb3VyY2UsIDo6cnBtb3N0cmVlY3h4 OjpPdmVycmlkZVJlcGxhY2VtZW50U291cmNlICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnBt b3N0cmVlY3h4OjpSZWZzcGVjVHlwZQorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJl ZnNwZWNfY2xhc3NpZnkgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OworIAorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXJzZV9yZXZpc2lv big6OnJ1c3Q6OlN0ciBzb3VyY2UsIDo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbiAqcmV0 dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdmVyaWZ5X2tlcm5lbF9obWFjICg6OnN0ZDo6aW50MzJfdCByb290ZnMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBtb2RkaXIpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9vYmplY3Rf cGF0aCg6OnJ1c3Q6OlN0ciBiYXNlLCA6OnJ1c3Q6OlN0ciBuZXh0X3NlZ21lbnQsIDo6cnVzdDo6 U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVyX3JwbXMgKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiAqcnBtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkZmFpbHBvaW50KDo6cnVzdDo6U3RyIHApIG5vZXhjZXB0OworLTo6c3RkOjpz aXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0 b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7Cisr ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2Vf Y29udGFpbmVyX3JwbV9yYXdfZmRzICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJf dD4gKmZkcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy06OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyAqcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkoKSBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21taXRfaGFz X21hdGNoaW5nX3NlcG9saWN5ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29u c3QgJmNvbW1pdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVNlUG9saWN5IGNvbnN0ICZwb2xpY3ks CisrICAgICAgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRpc19pbWFfZW5hYmxlZCg6OnJwbW9zdHJl ZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyBjb25zdCAmc2VsZikgbm9leGNlcHQ7CistOjpzdGQ6OnNp emVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkb3BlcmF0b3Ikc2l6 ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfaGVhZGVyX3Zh cmlhbnQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY2Fj aGVicmFuY2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKipyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtX2ltcG9y dGVyX25ldyg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSwgOjpydXN0OjpTdHIgb3N0cmVlX2JyYW5jaCwg OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgY29uc3QgJmZsYWdzLCA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX2J1 aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQgKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUnBtSW1wb3J0ZXIkaGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSg6OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgsIDo6cnVzdDo6U3RyaW5nICpy ZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9pbWFnZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICphcmdzKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRScG1JbXBvcnRlciRvc3RyZWVfYnJhbmNoKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBj b25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vfcm9vdGZz X2VudHJ5cG9pbnQgKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykg bm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0 ZXIkcGtnX25hbWUoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlndXJlX2J1aWxkX3JlcG9fZnJvbV90YXJn ZXQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZidWlsZF9yZXBv LAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZ0YXJnZXRfcmVwbykg bm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0 ZXIkZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29u c3QgJnNlbGYpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3ByZXBhcmVfcm9vdGZzICg6OnN0ZDo6aW50MzJf dCBzcmNfcm9vdGZzX2RmZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCBkZXN0X3Jvb3Rmc19kZmQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2luc2VydCg6OnJwbW9zdHJl ZWN4eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21w b3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9l eGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIk ZG9jX2ZpbGVzX2NvbnRhaW5zKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2Vs ZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2VzcyAoCisrICAgICAg OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVl ZmlsZSwgOjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLAorKyAgICAgIGJvb2wgdW5pZmllZF9jb3Jl KSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBv cnRlciRycG1maV9vdmVycmlkZXNfaW5zZXJ0KDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAm c2VsZiwgOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90IGluZGV4KSBub2V4Y2VwdDsK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21w b3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsX3ByZSAoCisrICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZz X2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkgbm9leGNlcHQ7 CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlf b3ZlcnJpZGVzX2NvbnRhaW5zKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2Vs ZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbCAoCisr ICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZ0cmVlZmlsZSkgbm9leGNlcHQ7CisgCistOjpzdGQ6OnVpbnQ2NF90IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNfZ2V0KDo6cnBt b3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9l eGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29udmVydF92YXJfdG9fdG1wZmlsZXNfZCAoCisrICAgICAgOjpzdGQ6OmludDMyX3Qgcm9v dGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUp IG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9y dGVyJGlzX2ltYV9lbmFibGVkKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2Vs Zikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHJvb3Rmc19wcmVwYXJlX2xpbmtzICg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZGZkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNraXBfdXNybG9j YWwpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXIgY29uc3QgJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5m bykgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkd29ya2Fyb3VuZF9zZWxpbnV4X2Nyb3NzX2xhYmVsaW5nICgKKysgICAgICA6OnN0 ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5j ZWxsYWJsZSkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ZpbGVfZmlsdGVyZWQoOjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJwbW9zdHJl ZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0 OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRwb3N0cHJvY2Vzc19jbGVhbnVwX3JwbWRiICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSBu b2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUnBtSW1wb3J0ZXIkdHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5KDo6cnBtb3N0cmVl Y3h4OjpScG1JbXBvcnRlciAmc2VsZiwgOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVl Y3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6 cnVzdDo6U3RyIGdyb3VwbmFtZSkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJld3JpdGVfcnBtZGJfZm9yX3RhcmdldCAo OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplKSBub2V4Y2VwdDsKKyAK Ky1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRoYXNfdG1wZmls ZXNfZW50cmllcyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYpIG5vZXhj ZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRkaXJlY3Rvcnlfc2l6ZSAoOjpzdGQ6OmludDMyX3QgZGZkLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxh YmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpzdGQ6OnVpbnQ2NF90ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRzZXJpYWxpemVfdG1w ZmlsZXNfY29udGVudCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6 cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udGFpbmVyX3JlYnVpbGQgKDo6cnVz dDo6U3RyIHRyZWVmaWxlKSBub2V4Y2VwdAorKyAgeworKyAgICB2b2lkICgqY29udGFpbmVyX3Jl YnVpbGQkKSAoOjpydXN0OjpTdHIpID0gOjpycG1vc3RyZWVjeHg6OmNvbnRhaW5lcl9yZWJ1aWxk OworKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CisrICAgIDo6cnVzdDo6YmVoYXZp b3I6OnRyeWNhdGNoICgKKysgICAgICAgIFsmXQorKyAgICAgICAgICB7CisrICAgICAgICAgICAg Y29udGFpbmVyX3JlYnVpbGQkICh0cmVlZmlsZSk7CisrICAgICAgICAgICAgdGhyb3ckLnB0ciA9 IG51bGxwdHI7CisrICAgICAgICAgIH0sCisrICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAo dGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7CisrICB9CisgCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRtcGZpbGVzX3RyYW5zbGF0ZSg6OnJ1 c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9p bmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwgOjpydXN0OjpTdHIgZ3JvdXBuYW1lLCA6OnJ1c3Q6 OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9mb3JfaWQgKAorKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQs CisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgKipyZXR1cm4kKSBub2V4 Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkYXBwZW5kX2RyYWN1dF9yYW5kb21fY3Bpbyg6OnN0ZDo6aW50MzJfdCBmZCkgbm9leGNlcHQ7 CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9v dCAmc3lzcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgZGVwbG95X2lkLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAq cmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGluaXRyYW1mc19vdmVybGF5X2dlbmVyYXRlKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZXMsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUg JmNhbmNlbGxhYmxlLCA6OnN0ZDo6aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9n ZXRfYmFzZSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3Qs IDo6cnVzdDo6U3RyIG9wdF9kZXBsb3lfaWQsIDo6cnVzdDo6U3RyIG9wdF9vc19uYW1lLAorKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICoqcmV0dXJuJCkgbm9leGNlcHQ7 CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkam91cm5hbF9wcmludF9zdGFn aW5nX2ZhaWx1cmUoKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGRlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QsCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkV4cG9y dGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2soOjpydXN0OjpT dHIgbXNnKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRkYWVtb25fc2FuaXR5Y2hlY2tfZW52aXJvbm1lbnQgKAorKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSBub2V4Y2VwdDsKKyAK Ky12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2lu X25faXRlbXMoOjpydXN0OjpTdHIgbXNnLCA6OnN0ZDo6dWludDY0X3Qgbikgbm9leGNlcHQ7Cisr ICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2dlbmVyYXRlX2lk ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95 bWVudCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fcGVyY2VudCg6OnJ1 c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfcG9wdWxhdGVfdmFyaWFudCAoCisrICAgICAg OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisrICAgICAgOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsCisrICAgICAg OjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCkgbm9leGNlcHQ7CisgCist dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19zZXRfbWVz c2FnZSg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX2Jhc2VsYXllcl9yZWZzICgKKysg ICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIG5vZXhjZXB0OworIAorLXZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X3N1Yl9tZXNzYWdl KDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyAoCisrICAg ICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJl ZnNwZWMsIDo6cnVzdDo6U3RyIGJhc2VfY2hlY2tzdW0sCisrICAgICAgOjpycG1vc3RyZWVjeHg6 OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc191cGRhdGUoOjpzdGQ6OnVpbnQ2NF90 IG4pIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQgKAorKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9z dHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCwKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6 RGVwbG95bWVudExheWVyZWRNZXRhICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2VuZCg6OnJ1c3Q6OlN0ciBz dWZmaXgpIG5vZXhjZXB0OworLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3Rv cnlFbnRyeSRvcGVyYXRvciRlcShIaXN0b3J5RW50cnkgY29uc3QgJiwgSGlzdG9yeUVudHJ5IGNv bnN0ICYpIG5vZXhjZXB0OworLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3Rv cnlFbnRyeSRvcGVyYXRvciRuZShIaXN0b3J5RW50cnkgY29uc3QgJiwgSGlzdG9yeUVudHJ5IGNv bnN0ICYpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEhpc3RvcnlDdHgkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVf dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9yeUN0eCRvcGVyYXRvciRhbGlnbm9m KCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2FkICgKKysgICAgICA6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxv eW1lbnQgY29uc3QgJmRlcGxveW1lbnQsCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkRlcGxveW1l bnRMYXllcmVkTWV0YSAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhpc3RvcnlfY3R4X25ldyg6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX292ZXJy aWRlX3NvdXJjZSAoCisrICAgICAgOjpydXN0OjpTdHIgc291cmNlLCA6OnJwbW9zdHJlZWN4eDo6 T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkbmV4 dF9lbnRyeSg6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAmc2VsZiwgOjpycG1vc3RyZWVjeHg6 Okhpc3RvcnlFbnRyeSAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl bgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX3JldmlzaW9uICg6OnJ1c3Q6 OlN0ciBzb3VyY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbiAqcmV0dXJuJCkgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhpc3Rv cnlfcHJ1bmUoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUb2tpb0hhbmRsZSRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6 c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRvcGVyYXRvciRh bGlnbm9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OworLTo6c3Rk OjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvRW50ZXJHdWFyZCRvcGVy YXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX29iamVjdF9wYXRoICg6OnJ1c3Q6OlN0 ciBiYXNlLCA6OnJ1c3Q6OlN0ciBuZXh0X3NlZ21lbnQsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKnJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCR0b2tpb19oYW5kbGVfZ2V0KCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZmFpbHBvaW50ICg6OnJ1c3Q6 OlN0ciBwKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OworKyAg OjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFn cyRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVlY3h4OjpUb2tp b0VudGVyR3VhcmQgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRlbnRl cig6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAg OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKgorKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkgKCkgbm9leGNlcHQ7CisgCist Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2NyaXB0X2lzX2lnbm9yZWQoOjpydXN0 OjpTdHIgcGtnLCA6OnJ1c3Q6OlN0ciBzY3JpcHQsIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsKSBu b2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVy RmxhZ3MkaXNfaW1hX2VuYWJsZWQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRl ckZsYWdzIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2Vw dDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9y dGVyJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRlc3R1dGlsc19lbnRyeXBvaW50KDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJndikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtX2ltcG9ydGVyX25ldyAoCisr ICAgICAgOjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVzdDo6U3RyIG9zdHJlZV9icmFuY2gsCisr ICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgY29uc3QgJmZsYWdzLAorKyAg ICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj4gKnJldHVybiQpIG5v ZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1heWJlX3NoZWxs X3F1b3RlKDo6cnVzdDo6U3RyIGlucHV0LCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNl cHQ7CistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVmc3BlYyRvcGVyYXRvciRl cShSZWZzcGVjIGNvbnN0ICYsIFJlZnNwZWMgY29uc3QgJikgbm9leGNlcHQ7CistYm9vbCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkT3ZlcnJpZGVSZXBsYWNlbWVudCRvcGVyYXRvciRlcShP dmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYsIE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikg bm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0 OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFuZGxl X3RyYW5zbGF0ZV9wYXRobmFtZSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNl cHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHRyZWVmaWxlX25ldyg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gs IDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0 OworKyAgdm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9z dHJlZV9icmFuY2ggKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19lbXB0eSg6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHBrZ19uYW1lICg6OnJw bW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcoOjpydXN0OjpTdHIgYnVmLCBi b29sIGNsaWVudCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJu JCkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBv cnRlciRkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBt SW1wb3J0ZXIgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfY29tcG9zZSg6OnJ1c3Q6 OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2luc2VydCAoOjpycG1vc3Ry ZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcGF0aCkgbm9l eGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHRyZWVmaWxlX25ld19jbGllbnQoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3Ry IGJhc2VhcmNoLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4k KSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9y dGVyJGRvY19maWxlc19jb250YWlucyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2Ns aWVudF9mcm9tX2V0Yyg6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwgOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNfaW5zZXJ0ICgKKysg ICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgs IDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX2RlbGV0ZV9jbGllbnRfZXRj KDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNfY29udGFpbnMgKAor KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpT dHIgcGF0aCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpGYXQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF93b3JrZGlyKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICA6OnN0ZDo6dWludDY0X3QgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHJwbWZpX292ZXJyaWRlc19nZXQgKAorKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0 aCkgbm9leGNlcHQ7CisgCistOjpzdGQ6OmludDMyX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9wYXNzd2RfZmQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxm KSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9y dGVyJGlzX2ltYV9lbmFibGVkICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIg Y29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3JvdXBfZmQoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFJwbUltcG9ydGVyJHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyAoCisrICAgICAgOjpycG1vc3Ry ZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZv IGNvbnN0ICZmaWxlX2luZm8pIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9qc29uX3N0cmluZyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ciRpc19maWxlX2ZpbHRlcmVkICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIg Y29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgsCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkdG aWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX2xheWVy cyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkdHJhbnNsYXRlX3RvX3RtcGZp bGVzX2VudHJ5ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6 cnVzdDo6U3RyIGFic19wYXRoLAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29u c3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUsCisrICAgICAgOjpydXN0OjpTdHIg Z3JvdXBuYW1lKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycyg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkg bm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ciRoYXNfdG1wZmlsZXNfZW50cmllcyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfYWxsX29zdHJlZV9sYXllcnMoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQp IG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0 ZXIkc2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0 OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBv cyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG1wZmlsZXNfdHJhbnNsYXRlICgKKysgICAgICA6 OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmls ZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwKKysgICAgICA6OnJ1c3Q6OlN0ciBncm91cG5h bWUsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVy biQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRhcHBlbmRfZHJhY3V0X3JhbmRvbV9jcGlvICg6OnN0ZDo6aW50MzJfdCBm ZCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4KDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQp IG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSAoOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGNvbnN0ICZmaWxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAm Y2FuY2VsbGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk YWRkX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZywgYm9vbCAqcmV0 dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRqb3Vy bmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSAoKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fdGFzayAoOjpydXN0OjpTdHIgbXNn KSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfbG9jYWxfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl9uX2l0 ZW1zICg6OnJ1c3Q6OlN0ciBtc2csCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjp1aW50NjRfdCBuKSBub2V4 Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkYWRkX2xvY2FsX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAm c2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdlcywgYm9vbCBhbGxvd19l eGlzdGluZywgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQgKDo6cnVzdDo6U3Ry IG1zZykgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkg bm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3By b2dyZXNzX3NldF9tZXNzYWdlICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OworIAorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRf bG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2Vs ZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdlcywgYm9vbCBhbGxvd19leGlz dGluZywgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3NldF9zdWJfbWVzc2FnZSAoOjpydXN0OjpTdHIg bXNnKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdlcywgYm9vbCBh bGxvd19ub2VudCwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3VwZGF0ZSAoOjpzdGQ6OnVpbnQ2NF90 IG4pIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFj ZW1lbnQ+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfZW5kICg6OnJ1c3Q6OlN0ciBzdWZmaXgpIG5vZXhjZXB0 OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9yeUVudHJ5JG9wZXJh dG9yJGVxIChIaXN0b3J5RW50cnkgY29uc3QgJiwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeUVudHJ5IGNvbnN0ICYp IG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9yeUVu dHJ5JG9wZXJhdG9yJG5lIChIaXN0b3J5RW50cnkgY29uc3QgJiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeUVudHJ5 IGNvbnN0ICYpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkSGlzdG9yeUN0eCRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7CisrICA6OnN0 ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG9wZXJhdG9y JGFsaWdub2YgKCkgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X2N0eF9uZXcgKAorKyAgICAgIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4PiAqcmV0dXJuJCkgbm9leGNlcHQ7 CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2th Z2VzX292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJw bW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCAqcmVwbGFjZW1lbnQpIG5vZXhjZXB0Owor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3Rv cnlDdHgkbmV4dF9lbnRyeSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggJnNl bGYsIDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgKnJldHVybiQpIG5vZXhjZXB0OworIAor LWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdl X292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6 OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X3BydW5lICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6 OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3Ik c2l6ZW9mICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKKysgIDo6 c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvRW50ZXJHdWFyZCRv cGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4 Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf cGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNl cHQ7CisrICA6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKnJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCR0b2tpb19oYW5kbGVfZ2V0ICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNf b3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMpIG5vZXhjZXB0OworKyAgOjpycG1v c3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZCAqCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVG9raW9IYW5kbGUkZW50ZXIgKDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZSBjb25zdCAm c2VsZikgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworKyAgYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2NyaXB0X2lzX2lnbm9yZWQgKDo6cnVzdDo6 U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsKSBub2V4 Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf cGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm c2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdGVz dHV0aWxzX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJndikgbm9l eGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzKSBu b2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1heWJlX3NoZWxs X3F1b3RlICg6OnJ1c3Q6OlN0ciBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNl cHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZWZzcGVjJG9wZXJhdG9y JGVxIChSZWZzcGVjIGNvbnN0ICYsIFJlZnNwZWMgY29uc3QgJikgbm9leGNlcHQ7CisrICBib29s IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRPdmVycmlkZVJlcGxhY2VtZW50JG9wZXJhdG9y JGVxICgKKysgICAgICBPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYsIE92ZXJyaWRlUmVwbGFj ZW1lbnQgY29uc3QgJikgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7CisrICA6 OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRvcGVyYXRv ciRhbGlnbm9mICgpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25l dyAoCisrICAgICAgOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLAor KyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5v ZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhh c19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIG5hbWUpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19lbXB0eSAo CisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkg bm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk cmVtb3ZlX2FsbF9vdmVycmlkZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4 Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcgKAorKyAgICAgIDo6cnVzdDo6U3RyIGJ1ZiwgYm9v bCBjbGllbnQsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQp IG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JHJlbW92ZV9hbGxfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4 Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR0cmVlZmlsZV9uZXdfY29tcG9zZSAoCisrICAgICAgOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6 cnVzdDo6U3RyIGJhc2VhcmNoLAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9leGNsdWRlX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4k KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCR0cmVlZmlsZV9uZXdfY2xpZW50ICgKKysgICAgICA6OnJ1c3Q6OlN0ciBmaWxlbmFt ZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gsCisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BsYXRmb3JtX21vZHVsZSg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0 cmVlZmlsZV9uZXdfY2xpZW50X2Zyb21fZXRjICgKKysgICAgICA6OnJ1c3Q6OlN0ciBiYXNlYXJj aCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNl cHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2lu c3RhbGxfbGFuZ3MoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9kZWxldGVf Y2xpZW50X2V0YyAoOjpzdGQ6OnVpbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRmb3JtYXRfaW5zdGFsbF9sYW5n c19tYWNybyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3Ry aW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6RmF0CisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3dvcmtkaXIgKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2tmaWxlX3JlcG9zKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKKysgIDo6c3RkOjppbnQzMl90CisrICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Bhc3N3ZF9mZCAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OkZhdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlZig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnNlbGYpIG5vZXhjZXB0OworKyAgOjpzdGQ6OmludDMyX3QKKysgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3JvdXBfZmQgKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmc2VsZikgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2NsaXdyYXAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZz ZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9qc29uX3N0cmluZyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NsaXdyYXBfYmluYXJpZXMoOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9sYXllcnMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRzZXRfY2xpd3JhcCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIGJvb2wgZW5h YmxlZCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVy biQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9jb250YWluZXJfY21kKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2Vs ZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hbGxfb3N0cmVlX2xh eWVycyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLWJvb2wgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWFkb25seV9leGVjdXRhYmxl cyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgdm9p ZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvcyAoOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfZG9jdW1lbnRhdGlvbig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnNlbGYpIG5vZXhjZXB0OworKyAgdm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlcyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAK Ky1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVjb21tZW5k cyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJl cXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51 eCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRhZGRfcGFja2FnZXMgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X2V4aXN0aW5nLCBib29sICpyZXR1 cm4kKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfc3lzdXNlcnNfaXNfZm9yY2VkKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7CisrICBib29sCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OworIAorLTo6c3RkOjp1aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbig6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2FsX3BhY2thZ2VzICgKKysgICAgICA6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2dwZ19rZXkoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX2xvY2Fs X3BhY2thZ2VzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcsCisr ICAgICAgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4k KSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfY29udGFpbmVyKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9l eGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkYWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoCisrICAgICAgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g KnBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nLAorKyAgICAgIGJvb2wgKnJldHVybiQpIG5v ZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9tYWNoaW5laWRfY29tcGF0KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlcyAoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdlcywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg YWxsb3dfbm9lbnQsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ldGNfZ3JvdXBfbWVtYmVycyg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCist Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Jvb3RfbG9jYXRp b25faXNfbW9kdWxlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhj ZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3Bh Y2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkdXNlX2tlcm5lbF9pbnN0YWxsKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoCisrICAgICAgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudCAqcmVwbGFjZW1lbnQpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbWEoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UgKAorKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7 CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlbGVh c2V2ZXIoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmlu ZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoCisrICAgICAg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVlY3h4OjpSZXBvTWV0 YWRhdGFUYXJnZXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBv X21ldGFkYXRhX3RhcmdldCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5v ZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqcGFja2FnZXMpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVz TWV0YWRhdGFUYXJnZXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9h ZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoCisrICAgICAgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2Vw dDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRycG1kYl9i YWNrZW5kX2lzX3RhcmdldCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5v ZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5v ZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNo b3VsZF9ub3JtYWxpemVfcnBtZGIoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICgKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiAqcGFja2FnZXMpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVlY3h4OjpPcHRVc3JMb2NhbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29wdF91c3Jsb2NhbCg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgYm9vbCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVf cmVtb3ZlICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6 U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9maWxlc19yZW1vdmVfcmVnZXgoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZV9uYW1lICgKKysg ICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIG5h bWUpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2hlY2tzdW0oOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpy dXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX2FsbF9vdmVycmlkZXMgKAorKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9yZWYoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7 CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfYWxs X3BhY2thZ2VzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYpIG5vZXhj ZXB0OworIAorLTo6cnVzdDo6cmVwcjo6RmF0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfcmVwb19wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X2V4Y2x1ZGVfcGFja2FnZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBu b2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRj bGVhcl9yZXBvX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNl cHQ7CisrICB2b2lkCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X3BsYXRmb3JtX21vZHVsZSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmV0dHlwcmludF9qc29uX3N0ZG91dCg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luc3RhbGxfbGFuZ3MgKAorKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9kZXByZWNhdGlvbl93YXJuaW5ncyg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8g KAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpT dHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJHByaW50X2V4cGVyaW1lbnRhbF9ub3RpY2VzKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9ja2ZpbGVfcmVwb3MgKAorKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2FuaXR5Y2hlY2tfZXh0ZXJuYWxzKDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJl cHI6OkZhdAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWYg KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRpbXBvcnRlcl9mbGFncyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYsIDo6cnVzdDo6U3RyIHBrZ19uYW1lKSBub2V4Y2VwdDsKKysgIGJvb2wKKysgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xpd3JhcCAoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkd3JpdGVfcmVwb3ZhcnMo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnN0ZDo6aW50MzJfdCB3b3Jr ZGlyX2RmZF9yYXcsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3cmFwX2JpbmFyaWVz ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9yZWxlYXNl dmVyKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgcmVsZWFzZXZl cikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRzZXRfY2xpd3JhcCAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5h YmxlZCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9yZWNvbW1lbmRzKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmc2VsZiwgYm9vbCB2YWwpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NvbnRhaW5lcl9jbWQgKAorKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZW5hYmxlX3JlcG8oOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciByZXBvKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWFkb25seV9leGVjdXRhYmxlcyAo CisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsK KyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZGlzYWJsZV9yZXBvKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0 OjpTdHIgcmVwbykgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfZG9jdW1lbnRhdGlvbiAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdmFsaWRhdGVfZm9yX2NvbnRhaW5l cig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlY29tbWVuZHMgKAor KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Cisg Cistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Jhc2VfcmVm c3BlYyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnBtb3N0cmVlY3h4 OjpSZWZzcGVjICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIGJvb2wKKysgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51eCAoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRyZWJhc2UoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6 OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsIDo6 cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24pIG5vZXhjZXB0OworKyAgYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3N5c3VzZXJzX2lzX2ZvcmNl ZCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2Vw dDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3Jp Z2luX2N1c3RvbV91cmwoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6dWludDMyX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24g KAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7 CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29yaWdp bl9jdXN0b21fZGVzY3JpcHRpb24oOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3BnX2tleSAoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3ZlcnJp ZGVfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpT dHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCAoCisrICAgICAgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJu JCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkc2V0X292ZXJyaWRlX2NvbW1pdCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6 cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXIgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g KnJldHVybiQpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X21hY2hpbmVpZF9jb21wYXQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX2luaXRyYW1mc19ldGNfZmlsZXMoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ldGNfZ3JvdXBfbWVtYmVycyAoCisrICAgICAg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2soOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmZpbGVzKSBu b2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpmaWxlcykg bm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR1 c2Vfa2VybmVsX2luc3RhbGwgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrX2FsbCg6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2ltYSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZz ZWxmKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9yZWxlYXNldmVyICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfYXJncyg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4eDo6UmVwb01ldGFk YXRhVGFyZ2V0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb19t ZXRhZGF0YV90YXJnZXQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm c2VsZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkc2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAm c2VsZiwgYm9vbCBlbmFibGVkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5v ZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6OkFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldAorKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hZHZpc29yaWVzX21ldGFk YXRhX3RhcmdldCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm KSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfdW5jb25maWd1cmVkX3N0YXRlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm c2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcnBtZGJfYmFja2VuZF9pc190YXJnZXQgKAor KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Cisg CistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkbWF5X3JlcXVpcmVf bG9jYWxfYXNzZW1ibHkoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNob3Vs ZF9ub3JtYWxpemVfcnBtZGIgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkaGFzX2FueV9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6Ok9wdFVzckxvY2FsIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3B0X3VzcmxvY2FsICgKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRtZXJn ZV90cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHRy ZWVmaWxlLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9maWxlc19yZW1vdmVfcmVnZXggKAorKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGFja2FnZSwK KysgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0Owor IAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ub19pbml0 cmFtZnMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKy06 OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVy YXRvciRzaXplb2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9jaGVja3N1bSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJu JCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpGYXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJlcG9QYWNrYWdlJGdldF9yZXBvKDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBj b25zdCAmc2VsZikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfb3N0cmVlX3JlZiAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRnZXRfcGFja2FnZXMoOjpy cG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpGYXQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvX3BhY2thZ2VzICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2YXJzdWJzdGl0 dXRlKDo6cnVzdDo6U3RyIHMsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBw aW5nPiBjb25zdCAmdmFycywgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAg dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkY2xlYXJfcmVwb19wYWNr YWdlcyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsK KyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfZmVhdHVyZXMoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHByZXR0eXByaW50X2pzb25fc3Rkb3V0ICgK KysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0Owor IAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9ycG1fYmFzZWFyY2goOjpy dXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MgKAorKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNlYWxlZF9tZW1m ZCg6OnJ1c3Q6OlN0ciBkZXNjcmlwdGlvbiwgOjpydXN0OjpTbGljZTw6OnN0ZDo6dWludDhfdCBj b25zdD4gY29udGVudCwgOjpzdGQ6OmludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZXhwZXJpbWVudGFs X25vdGljZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikg bm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVubmluZ19p bl9zeXN0ZW1kKCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2FuaXR5Y2hlY2tfZXh0ZXJuYWxzICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWxjdWxhdGVf YWR2aXNvcmllc19kaWZmKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6 OnJ1c3Q6OlN0ciBjaGVja3N1bV9mcm9tLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV90bywgOjpycG1v c3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXJGbGFncyAqCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkaW1wb3J0ZXJfZmxhZ3MgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2Vs ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpydXN0OjpTdHIgcGtnX25hbWUpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHRyYW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUoOjpydXN0OjpTdHIgcGF0 aCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR3cml0ZV9yZXBv dmFycyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJf dCB3b3JrZGlyX2RmZF9yYXcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAK Ky06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2xp dmVfYXBwbHlfc3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jv b3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6 OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGUgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRzZXRfcmVsZWFzZXZlciAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6 OlN0ciByZWxlYXNldmVyKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGFzX2xpdmVfYXBwbHlfc3RhdGUoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVE ZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkc2V0X3JlY29tbWVuZHMgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCB2YWwpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfc3luY19yZWYoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4K KysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRlbmFibGVfcmVwbyAoOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciByZXBvKSBub2V4Y2VwdDsKKyAK Ky06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJhbnNh Y3Rpb25fYXBwbHlfbGl2ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lz cm9vdCwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZ0YXJnZXQpIG5vZXhjZXB0Owor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRkaXNhYmxlX3JlcG8gKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6U3RyIHJlcG8pIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRub3JtYWxpemVfZXRjX3NoYWRvdyg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZGZkKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR2YWxpZGF0ZV9mb3JfY29udGFpbmVyICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX3Jw bV9sYXllcmluZyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6c3RkOjppbnQzMl90IG1lcmdlX3Bh c3N3ZF9kaXIsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZAorKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9iYXNlX3JlZnNwZWMgKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlYyAqcmV0 dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNvbXBsZXRlX3JwbV9sYXllcmluZyg6OnN0ZDo6aW50MzJfdCByb290ZnMp IG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk cmViYXNlICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIG5ld19yZWZz cGVjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX3VybCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl9k ZXNjcmlwdGlvbikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGRlZHVwbGljYXRlX3RtcGZpbGVzX2VudHJpZXMoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV91cmwgKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4 Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcGFzc3dkX2NsZWFudXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKKysgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcmlnaW5fY3VzdG9t X2Rlc2NyaXB0aW9uICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWlncmF0ZV9ncm91cF9leGNlcHRf cm9vdCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBj b25zdCAmcHJlc2VydmVkX2dyb3Vwcykgbm9leGNlcHQ7CisrICB2b2lkCisrICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X292ZXJyaWRlX2NvbW1pdCAoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4k KSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkbWlncmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3QoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JHNldF9vdmVycmlkZV9jb21taXQgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcCg6 OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUp IG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X2luaXRyYW1mc19ldGNfZmlsZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcGFzc3dkX2NvbXBvc2VfcHJlcF9yZXBvKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHByZXZpb3VzX2NoZWNrc3VtLCBib29sIHVuaWZpZWRf Y29yZSkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRoYXNfaW5pdHJhbWZzX2V0Y19maWxlcyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyX2NvbnRhaW5zX3VpZCg6OnN0ZDo6aW50MzJf dCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKysg IGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNf ZmlsZXNfdHJhY2sgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpmaWxlcykgbm9leGNlcHQ7CisgCistOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc19naWQo OjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCwgYm9vbCAqcmV0dXJuJCkg bm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRp bml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2sgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpmaWxlcykgbm9leGNlcHQ7 CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNo ZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0 ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgcHJldmlvdXNfcmV2KSBub2V4Y2VwdDsKKysg IGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNf ZmlsZXNfdW50cmFja19hbGwgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2Vs Zikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHBhc3N3ZGRiX29wZW4oOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKy06OnN0ZDo6 c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRvcGVyYXRvciRzaXpl b2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRQYXNzd2REQiRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKAor KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3 ZERCJGxvb2t1cF91c2VyKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQiBjb25zdCAmc2VsZiwgOjpz dGQ6OnVpbnQzMl90IHVpZCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAg dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19h cmdzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF9n cm91cCg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgY29uc3QgJnNlbGYsIDo6c3RkOjp1aW50MzJf dCBnaWQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSAo CisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCBib29sIGVuYWJsZWQsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7CisgCistOjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZEVudHJpZXMgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRuZXdfcGFz c3dkX2VudHJpZXMoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OworLTo6 c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkb3Bl cmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OworKyAgdm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF91bmNvbmZpZ3VyZWRfc3RhdGUgKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkg bm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX2dyb3VwX2NvbnRlbnQoOjpycG1vc3RyZWVjeHg6OlBh c3N3ZEVudHJpZXMgJnNlbGYsIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0 aCkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRhZGRfcGFzc3dkX2NvbnRl bnQoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgJnNlbGYsIDo6c3RkOjppbnQzMl90IHJv b3RmcywgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfYW55X3BhY2thZ2VzICgKKysgICAgICA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkY29udGFpbnNfZ3JvdXAoOjpycG1v c3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHVzZXIpIG5v ZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJG1lcmdlX3RyZWVmaWxlICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHRyZWVmaWxlLCBib29sICpyZXR1cm4kKSBub2V4Y2Vw dDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGNv bnRhaW5zX3VzZXIoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNlbGYsIDo6 cnVzdDo6U3RyIHVzZXIpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X25vX2luaXRyYW1mcyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4 Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9Q YWNrYWdlJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX3Vz ZXJfaWQoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNlbGYsIDo6cnVzdDo6 U3RyIHVzZXIsIDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6 OnJlcHI6OkZhdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2UkZ2V0X3Jl cG8gKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdCAmc2VsZikgbm9l eGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX2dyb3VwX2lkKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RF bnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBncm91cCwgOjpzdGQ6OnVpbnQzMl90ICpy ZXR1cm4kKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OworLTo6c3RkOjpzaXpl X3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkb3BlcmF0b3IkYWxpZ25v ZigpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1Bh Y2thZ2UkZ2V0X3BhY2thZ2VzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2Ug Y29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNl cHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGV4dGVuc2lvbnNfbG9hZCg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwg OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZiYXNlX3Br Z3MsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiAqcmV0dXJuJCkgbm9l eGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcmVwb3NfZGly cyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9yZXBvcyg6OnJw bW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyc3Vic3RpdHV0ZSAoOjpydXN0OjpTdHIgcywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZl Yzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJnZhcnMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVy biQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVu c2lvbnMkZ2V0X29zX2V4dGVuc2lvbl9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9u cyBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9mZWF0dXJlcyAo OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9kZXZlbG9wbWVudF9w YWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGdldF9ycG1fYmFzZWFyY2ggKDo6cnVzdDo6U3RyaW5nICpyZXR1 cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzdGF0ZV9jaGVja3N1bV9jaGFuZ2VkKDo6cnBtb3N0cmVl Y3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6 U3RyIG91dHB1dF9kaXIsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzZWFsZWRfbWVtZmQgKDo6 cnVzdDo6U3RyIGRlc2NyaXB0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpTbGljZTw6OnN0ZDo6dWludDhfdCBjb25zdD4gY29udGVudCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQz Ml90ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyR1cGRhdGVfc3RhdGVfY2hlY2tzdW0oOjpy cG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIGNoa3N1bSwg OjpydXN0OjpTdHIgb3V0cHV0X2Rpcikgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRydW5uaW5nX2luX3N5c3RlbWQgKCkgbm9leGNlcHQ7CisgCistOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkc2Vy aWFsaXplX3RvX2Rpcig6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpy dXN0OjpTdHIgb3V0cHV0X2Rpcikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FsY3VsYXRlX2Fkdmlzb3JpZXNfZGlmZiAoCisr ICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3Ry IGNoZWNrc3VtX2Zyb20sIDo6cnVzdDo6U3RyIGNoZWNrc3VtX3RvLAorKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdlbmVyYXRlX3Ry ZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7 CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25m aWckb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJlZSAoOjpydXN0OjpTdHIgcGF0aCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2ZpbGVfcmVhZCg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcywgOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2xpdmVfYXBw bHlfc3RhdGUgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZz eXNyb290LAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZk ZXBsb3ltZW50LAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpMaXZlQXBwbHlTdGF0ZSAqcmV0dXJu JCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGxvY2tmaWxlX3dyaXRlKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJl ZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNrYWdlcywgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmpl Y3RBcnJheSAmcnBtbWRfcmVwb3MpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhhc19saXZlX2FwcGx5X3N0YXRlICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgYm9vbCAq cmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJGdldF9sb2NrZWRfcGFja2FnZXMoOjpycG1v c3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFwcGx5bGl2ZV9zeW5jX3Jl ZiAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qp IG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRvcmlnaW5fdG9fdHJlZWZpbGUoOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0 ICZrZiwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9l eGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50 IGNvbnN0ICZ0YXJnZXQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV90b19vcmlnaW4oOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZ0ZiwgOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlICoqcmV0dXJuJCkg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JG5vcm1hbGl6ZV9ldGNfc2hhZG93ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZk KSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvcmlnaW5f dmFsaWRhdGVfcm91bmR0cmlwKDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIG5v ZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHByZXBhcmVfcnBtX2xheWVyaW5nICgKKysgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnMs IDo6c3RkOjppbnQzMl90IG1lcmdlX3Bhc3N3ZF9kaXIsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0 OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNhY2hlX2JyYW5jaF90b19u ZXZyYSg6OnJ1c3Q6OlN0ciBuZXZyYSwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0 OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb21wbGV0ZV9ycG1fbGF5ZXJpbmcgKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7 CisgCistOjpzdGQ6OnVpbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDeHhHT2Jq ZWN0QXJyYXkkbGVuZ3RoKDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnNlbGYpIG5v ZXhjZXB0IHsKKy0gIDo6c3RkOjp1aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RB cnJheTo6Kmxlbmd0aCQpKCkgPSAmOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6bGVu Z3RoOworLSAgcmV0dXJuIChzZWxmLipsZW5ndGgkKSgpOworLX0KKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVkdXBsaWNhdGVfdG1wZmls ZXNfZW50cmllcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDeHhHT2JqZWN0QXJyYXkkZ2V0KDo6cnBtb3N0cmVl Y3h4OjpDeHhHT2JqZWN0QXJyYXkgJnNlbGYsIDo6c3RkOjp1aW50MzJfdCBpLCA6OnJwbW9zdHJl ZWN4eDo6R09iamVjdCAqKnJldHVybiQpIG5vZXhjZXB0IHsKKy0gIDo6cnBtb3N0cmVlY3h4OjpH T2JqZWN0ICYoOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6KmdldCQpKDo6c3RkOjp1 aW50MzJfdCkgPSAmOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6Z2V0OworLSAgbmV3 IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6R09iamVjdCAqKCYoc2VsZi4qZ2V0JCkoaSkpOwor LX0KKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRw YXNzd2RfY2xlYW51cCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKKyAKKy06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdXRpbF9uZXh0X3Zl cnNpb24oOjpydXN0OjpTdHIgYXV0b192ZXJzaW9uX3ByZWZpeCwgOjpydXN0OjpTdHIgdmVyc2lv bl9zdWZmaXgsIDo6cnVzdDo6U3RyIGxhc3RfdmVyc2lvbiwgOjpydXN0OjpTdHJpbmcgKnJldHVy biQpIG5vZXhjZXB0IHsKKy0gIDo6cnVzdDo6U3RyaW5nICgqdXRpbF9uZXh0X3ZlcnNpb24kKSg6 OnJ1c3Q6OlN0ciwgOjpydXN0OjpTdHIsIDo6cnVzdDo6U3RyKSA9IDo6cnBtb3N0cmVlY3h4Ojp1 dGlsX25leHRfdmVyc2lvbjsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKy0gIDo6 cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAorLSAgICAgIFsmXSB7CistICAgICAgICBuZXcgKHJl dHVybiQpIDo6cnVzdDo6U3RyaW5nKHV0aWxfbmV4dF92ZXJzaW9uJChhdXRvX3ZlcnNpb25fcHJl Zml4LCB2ZXJzaW9uX3N1ZmZpeCwgbGFzdF92ZXJzaW9uKSk7CistICAgICAgICB0aHJvdyQucHRy ID0gbnVsbHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93 JCkpOworLSAgcmV0dXJuIHRocm93JDsKKy19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCAoCisrICAg ICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29u c3QgJnByZXNlcnZlZF9ncm91cHMpIG5vZXhjZXB0OworIAorLTo6c3RkOjppbnQzMl90IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3Vn aCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgbm9leGNlcHQgeworLSAg OjpzdGQ6OmludDMyX3QgKCp0ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCQpKDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICYpID0gOjpycG1vc3RyZWVjeHg6OnRlc3R1 dGlsX3ZhbGlkYXRlX2N4eHJzX3Bhc3N0aHJvdWdoOworLSAgcmV0dXJuIHRlc3R1dGlsX3ZhbGlk YXRlX2N4eHJzX3Bhc3N0aHJvdWdoJChyZXBvKTsKKy19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl bgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVfcGFzc3dkX2V4Y2VwdF9y b290ICg6OnN0ZDo6aW50MzJfdCByb290ZnMpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGVhcmx5X21haW4oKSBub2V4Y2VwdCB7CistICB2b2lkICgqZWFy bHlfbWFpbiQpKCkgPSA6OnJwbW9zdHJlZWN4eDo6ZWFybHlfbWFpbjsKKy0gIGVhcmx5X21haW4k KCk7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRwYXNzd2RfY29tcG9zZV9wcmVwICg6OnN0ZDo6aW50MzJfdCByb290ZnMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbW9zdHJlZV9tYWluKDo6cnVzdDo6 U2xpY2U8OjpydXN0OjpTdHIgY29uc3Q+IGFyZ3MsIDo6c3RkOjppbnQzMl90ICpyZXR1cm4kKSBu b2V4Y2VwdCB7CistICA6OnN0ZDo6aW50MzJfdCAoKnJwbW9zdHJlZV9tYWluJCkoOjpydXN0OjpT bGljZTw6OnJ1c3Q6OlN0ciBjb25zdD4pID0gOjpycG1vc3RyZWVjeHg6OnJwbW9zdHJlZV9tYWlu OworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworLSAgOjpydXN0OjpiZWhhdmlvcjo6 dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIG5ldyAocmV0dXJuJCkgOjpzdGQ6Omlu dDMyX3QocnBtb3N0cmVlX21haW4kKGFyZ3MpKTsKKy0gICAgICAgIHRocm93JC5wdHIgPSBudWxs cHRyOworLSAgICAgIH0sCistICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Cist ICByZXR1cm4gdGhyb3ckOworLX0KKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RfY29tcG9zZV9wcmVwX3JlcG8gKAorKyAgICAgIDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwKKysg ICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIg cHJldmlvdXNfY2hlY2tzdW0sCisrICAgICAgYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0Owor IAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbW9zdHJlZV9wcm9jZXNzX2ds b2JhbF90ZWFyZG93bigpIG5vZXhjZXB0IHsKKy0gIHZvaWQgKCpycG1vc3RyZWVfcHJvY2Vzc19n bG9iYWxfdGVhcmRvd24kKSgpID0gOjpycG1vc3RyZWVjeHg6OnJwbW9zdHJlZV9wcm9jZXNzX2ds b2JhbF90ZWFyZG93bjsKKy0gIHJwbW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93biQoKTsK Ky19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk ZGlyX2NvbnRhaW5zX3VpZCAoOjpzdGQ6OmludDMyX3QgZGlyZmQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpz dGQ6OnVpbnQzMl90IGlkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0Owor IAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjX3Vu aXRfdGVzdHMoKSBub2V4Y2VwdCB7CistICB2b2lkICgqY191bml0X3Rlc3RzJCkoKSA9IDo6cnBt b3N0cmVlY3h4OjpjX3VuaXRfdGVzdHM7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7 CistICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAgICAg Y191bml0X3Rlc3RzJCgpOworLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CistICAgICAg fSwKKy0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKKy0gIHJldHVybiB0aHJv dyQ7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGRpcl9jb250YWluc19naWQgKDo6c3RkOjppbnQzMl90IGRpcmZkLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6c3RkOjp1aW50MzJfdCBpZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpyZXR1cm4kKSBub2V4Y2Vw dDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y2xpZW50X3JlcXVpcmVfcm9vdCgpIG5vZXhjZXB0IHsKKy0gIHZvaWQgKCpjbGllbnRfcmVxdWly ZV9yb290JCkoKSA9IDo6cnBtb3N0cmVlY3h4OjpjbGllbnRfcmVxdWlyZV9yb290OworLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2go CistICAgICAgWyZdIHsKKy0gICAgICAgIGNsaWVudF9yZXF1aXJlX3Jvb3QkKCk7CistICAgICAg ICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWls OjpGYWlsKHRocm93JCkpOworLSAgcmV0dXJuIHRocm93JDsKKy19CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2hlY2tfcGFzc3dkX2dyb3VwX2Vu dHJpZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZmZmlfcmVw bywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgJnRyZWVmaWxlLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19yZXYpIG5vZXhjZXB0OworIAor LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRuZXdfY2xp ZW50X2Nvbm5lY3Rpb24oOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24gKipyZXR1cm4k KSBub2V4Y2VwdCB7CistICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50 Q29ubmVjdGlvbj4gKCpuZXdfY2xpZW50X2Nvbm5lY3Rpb24kKSgpID0gOjpycG1vc3RyZWVjeHg6 Om5ld19jbGllbnRfY29ubmVjdGlvbjsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsK Ky0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAorLSAgICAgIFsmXSB7CistICAgICAgICBu ZXcgKHJldHVybiQpIDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uICoobmV3X2NsaWVu dF9jb25uZWN0aW9uJCgpLnJlbGVhc2UoKSk7CistICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0 cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOworLSAg cmV0dXJuIHRocm93JDsKKy19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcGFzc3dkZGJfb3BlbiAoCisrICAgICAgOjpzdGQ6OmludDMyX3Qgcm9v dGZzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3 ZERCJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNl cHQ7CisgCistOjpycG1vc3RyZWVjeHg6OkdEQnVzQ29ubmVjdGlvbiBjb25zdCAqcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JENsaWVudENvbm5lY3Rpb24kZ2V0X2Nvbm5lY3Rpb24oOjpycG1v c3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24gJnNlbGYpIG5vZXhjZXB0IHsKKy0gIDo6cnBtb3N0 cmVlY3h4OjpHREJ1c0Nvbm5lY3Rpb24gY29uc3QgJig6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbjo6KmdldF9jb25uZWN0aW9uJCkoKSA9ICY6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbjo6Z2V0X2Nvbm5lY3Rpb247CistICByZXR1cm4gJihzZWxmLipnZXRfY29ubmVjdGlv biQpKCk7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF91c2VyICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UGFz c3dkREIgY29uc3QgJnNlbGYsIDo6c3RkOjp1aW50MzJfdCB1aWQsIDo6cnVzdDo6U3RyaW5nICpy ZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQ2xpZW50Q29ubmVjdGlvbiR0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dy ZXNzX3N5bmMoOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24gY29uc3QgJnNlbGYsIDo6 cnVzdDo6U3RyIGFkZHJlc3MpIG5vZXhjZXB0IHsKKy0gIHZvaWQgKDo6cnBtb3N0cmVlY3h4OjpD bGllbnRDb25uZWN0aW9uOjoqdHJhbnNhY3Rpb25fY29ubmVjdF9wcm9ncmVzc19zeW5jJCkoOjpy dXN0OjpTdHIpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOjp0cmFu c2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmM7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0 aHJvdyQ7CistICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAg ICAgICAgKHNlbGYuKnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jlc3Nfc3luYyQpKGFkZHJlc3Mp OworLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CistICAgICAgfSwKKy0gICAgICA6OnJ1 c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKKy0gIHJldHVybiB0aHJvdyQ7CistfQorKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJGxv b2t1cF9ncm91cCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCIGNvbnN0ICZzZWxm LCA6OnN0ZDo6dWludDMyX3QgZ2lkLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7 CisgCistOjpzdGQ6OmludDMyX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJQTURpZmYk bl9yZW1vdmVkKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmIGNvbnN0ICZzZWxmKSBub2V4Y2VwdCB7 CistICA6OnN0ZDo6aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OipuX3JlbW92ZWQk KSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpuX3JlbW92ZWQ7CistICByZXR1 cm4gKHNlbGYuKm5fcmVtb3ZlZCQpKCk7CistfQorLQorLTo6c3RkOjppbnQzMl90IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJG5fYWRkZWQoOjpycG1vc3RyZWVjeHg6OlJQTURp ZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0IHsKKy0gIDo6c3RkOjppbnQzMl90ICg6OnJwbW9zdHJl ZWN4eDo6UlBNRGlmZjo6Km5fYWRkZWQkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1E aWZmOjpuX2FkZGVkOworLSAgcmV0dXJuIChzZWxmLipuX2FkZGVkJCkoKTsKKy19CistCistOjpz dGQ6OmludDMyX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJQTURpZmYkbl9tb2RpZmll ZCg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNlcHQgeworLSAgOjpz dGQ6OmludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqbl9tb2RpZmllZCQpKCkgY29u c3QgPSAmOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6Om5fbW9kaWZpZWQ7CistICByZXR1cm4gKHNl bGYuKm5fbW9kaWZpZWQkKSgpOworLX0KKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtZGJfZGlmZig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVw byBjb25zdCAmcmVwbywgOjpzdGQ6OnN0cmluZyBjb25zdCAmc3JjLCA6OnN0ZDo6c3RyaW5nIGNv bnN0ICZkZXN0LCBib29sIGFsbG93X25vZW50LCA6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiAqKnJl dHVybiQpIG5vZXhjZXB0IHsKKy0gIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpS UE1EaWZmPiAoKnJwbWRiX2RpZmYkKSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm LCA6OnN0ZDo6c3RyaW5nIGNvbnN0ICYsIDo6c3RkOjpzdHJpbmcgY29uc3QgJiwgYm9vbCkgPSA6 OnJwbW9zdHJlZWN4eDo6cnBtZGJfZGlmZjsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93 JDsKKy0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAorLSAgICAgIFsmXSB7CistICAgICAg ICBuZXcgKHJldHVybiQpIDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmICoocnBtZGJfZGlmZiQocmVw bywgc3JjLCBkZXN0LCBhbGxvd19ub2VudCkucmVsZWFzZSgpKTsKKy0gICAgICAgIHRocm93JC5w dHIgPSBudWxscHRyOworLSAgICAgIH0sCistICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhy b3ckKSk7CistICByZXR1cm4gdGhyb3ckOworLX0KKysgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RF bnRyaWVzICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV3X3Bhc3N3ZF9lbnRyaWVzICgp IG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UGFzc3dkRW50cmllcyRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJG9wZXJhdG9yJGFs aWdub2YgKCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UlBNRGlmZiRwcmludCg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNl cHQgeworLSAgdm9pZCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OipwcmludCQpKCkgY29uc3Qg PSAmOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OnByaW50OworLSAgKHNlbGYuKnByaW50JCkoKTsK Ky19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UGFzc3dkRW50cmllcyRhZGRfZ3JvdXBfY29udGVudCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6 OlBhc3N3ZEVudHJpZXMgJnNlbGYsIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIg cGF0aCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJp bnRfdHJlZXBrZ19kaWZmX2Zyb21fc3lzcm9vdF9wYXRoKDo6cnVzdDo6U3RyIHN5c3Jvb3RfcGF0 aCwgOjpycG1vc3RyZWVjeHg6OlJwbU9zdHJlZURpZmZQcmludEZvcm1hdCBmb3JtYXQsIDo6c3Rk Ojp1aW50MzJfdCBtYXhfa2V5X2xlbiwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAqY2Fu Y2VsbGFibGUpIG5vZXhjZXB0IHsKKy0gIHZvaWQgKCpwcmludF90cmVlcGtnX2RpZmZfZnJvbV9z eXNyb290X3BhdGgkKSg6OnJ1c3Q6OlN0ciwgOjpycG1vc3RyZWVjeHg6OlJwbU9zdHJlZURpZmZQ cmludEZvcm1hdCwgOjpzdGQ6OnVpbnQzMl90LCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxl ICopID0gOjpycG1vc3RyZWVjeHg6OnByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jvb3RfcGF0 aDsKKy0gIHByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jvb3RfcGF0aCQoc3lzcm9vdF9wYXRo LCBmb3JtYXQsIG1heF9rZXlfbGVuLCBjYW5jZWxsYWJsZSk7CistfQorKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX3Bh c3N3ZF9jb250ZW50ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAmc2Vs ZiwgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKyAK Ky06OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3MgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRw cm9ncmVzc19iZWdpbl90YXNrKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgeworLSAgOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAoKnByb2dyZXNzX2JlZ2luX3Rh c2skKSg6OnJ1c3Q6OlN0cikgPSA6OnJwbW9zdHJlZWN4eDo6cHJvZ3Jlc3NfYmVnaW5fdGFzazsK Ky0gIHJldHVybiBwcm9ncmVzc19iZWdpbl90YXNrJChtc2cpLnJlbGVhc2UoKTsKKy19CistCist dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUHJvZ3Jlc3MkZW5kKDo6cnBtb3N0cmVl Y3h4OjpQcm9ncmVzcyAmc2VsZiwgOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdCB7CistICB2b2lk ICg6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M6OiplbmQkKSg6OnJ1c3Q6OlN0cikgPSAmOjpycG1v c3RyZWVjeHg6OlByb2dyZXNzOjplbmQ7CistICAoc2VsZi4qZW5kJCkobXNnKTsKKy19CistCist dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3V0cHV0X21lc3NhZ2UoOjpydXN0OjpT dHIgbXNnKSBub2V4Y2VwdCB7CistICB2b2lkICgqb3V0cHV0X21lc3NhZ2UkKSg6OnJ1c3Q6OlN0 cikgPSA6OnJwbW9zdHJlZWN4eDo6b3V0cHV0X21lc3NhZ2U7CistICBvdXRwdXRfbWVzc2FnZSQo bXNnKTsKKy19CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JG5ldnJhX3RvX2NhY2hlX2JyYW5jaCg6OnN0ZDo6c3RyaW5nIGNvbnN0ICZuZXZyYSwg OjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0IHsKKy0gIDo6cnVzdDo6U3RyaW5nICgq bmV2cmFfdG9fY2FjaGVfYnJhbmNoJCkoOjpzdGQ6OnN0cmluZyBjb25zdCAmKSA9IDo6cnBtb3N0 cmVlY3h4OjpuZXZyYV90b19jYWNoZV9icmFuY2g7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0 aHJvdyQ7CistICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAg ICAgICAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlN0cmluZyhuZXZyYV90b19jYWNoZV9icmFuY2gk KG5ldnJhKSk7CistICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKy0gICAgICB9LAorLSAg ICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOworLSAgcmV0dXJuIHRocm93JDsKKy19 CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdl dF9yZXBvZGF0YV9jaGtzdW1fcmVwcig6OmRuZmN4eDo6RkZJRG5mUGFja2FnZSAmcGtnLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQgeworLSAgOjpydXN0OjpTdHJpbmcgKCpnZXRf cmVwb2RhdGFfY2hrc3VtX3JlcHIkKSg6OmRuZmN4eDo6RkZJRG5mUGFja2FnZSAmKSA9IDo6cnBt b3N0cmVlY3h4OjpnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHI7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiB0aHJvdyQ7CistICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0g eworLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlN0cmluZyhnZXRfcmVwb2RhdGFfY2hr c3VtX3JlcHIkKHBrZykpOworLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CistICAgICAg fSwKKy0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKKy0gIHJldHVybiB0aHJv dyQ7CistfQorKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmll cyRjb250YWluc19ncm91cCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMg Y29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHVzZXIpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG10c19mb3JfY29tbWl0KDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZXYsIDo6 cnBtb3N0cmVlY3h4OjpScG1UcyAqKnJldHVybiQpIG5vZXhjZXB0IHsKKy0gIDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gKCpycG10c19mb3JfY29tbWl0JCkoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJiwgOjpydXN0OjpTdHIpID0gOjpycG1vc3RyZWVj eHg6OnJwbXRzX2Zvcl9jb21taXQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Cist ICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAgICAgbmV3 IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6UnBtVHMgKihycG10c19mb3JfY29tbWl0JChyZXBv LCByZXYpLnJlbGVhc2UoKSk7CistICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKy0gICAg ICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOworLSAgcmV0dXJuIHRo cm93JDsKKy19CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRy aWVzJGNvbnRhaW5zX3VzZXIgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVz IGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtZGJfcGFja2FnZV9uYW1l X2xpc3QoOjpzdGQ6OmludDMyX3QgZGZkLCA6OnJ1c3Q6OlN0cmluZyBjb25zdCAqcGF0aCwgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKCpycG1kYl9wYWNrYWdlX25hbWVfbGlzdCQpKDo6c3RkOjpp bnQzMl90LCA6OnJ1c3Q6OlN0cmluZykgPSA6OnJwbW9zdHJlZWN4eDo6cnBtZGJfcGFja2FnZV9u YW1lX2xpc3Q7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CistICA6OnJ1c3Q6OmJl aGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAgICAgbmV3IChyZXR1cm4kKSA6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4ocnBtZGJfcGFja2FnZV9uYW1lX2xpc3QkKGRmZCwg OjpydXN0OjpTdHJpbmcoOjpydXN0Ojp1bnNhZmVfYml0Y29weSwgKnBhdGgpKSk7CistICAgICAg ICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWls OjpGYWlsKHRocm93JCkpOworLSAgcmV0dXJuIHRocm93JDsKKy19CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRsb29rdXBf dXNlcl9pZCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNl bGYsIDo6cnVzdDo6U3RyIHVzZXIsCisrICAgICAgOjpzdGQ6OnVpbnQzMl90ICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRQYXNzd2RFbnRyaWVzJGxvb2t1cF9ncm91cF9pZCAoCisrICAgICAgOjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZEVudHJpZXMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIGdyb3VwLAorKyAg ICAgIDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJHNpemVvZiAo KSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JEV4dGVuc2lvbnMkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKKysKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRleHRlbnNpb25zX2xvYWQg KAorKyAgICAgIDo6cnVzdDo6U3RyIHBhdGgsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLAorKyAgICAg IDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9w a2dzLAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiAqcmV0 dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbVRzJHBhY2thZ2VfbWV0YSg6OnJwbW9zdHJlZWN4eDo6UnBtVHMgY29u c3QgJnNlbGYsIDo6cnVzdDo6U3RyIG5hbWUsIDo6cnVzdDo6U3RyIGFyY2gsIDo6cnBtb3N0cmVl Y3h4OjpQYWNrYWdlTWV0YSAqKnJldHVybiQpIG5vZXhjZXB0IHsKKy0gIDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKDo6cnBtb3N0cmVlY3h4OjpScG1Uczo6 KnBhY2thZ2VfbWV0YSQpKDo6cnVzdDo6U3RyLCA6OnJ1c3Q6OlN0cikgY29uc3QgPSAmOjpycG1v c3RyZWVjeHg6OlJwbVRzOjpwYWNrYWdlX21ldGE7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0 aHJvdyQ7CistICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAg ICAgICAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgKigoc2VsZi4q cGFja2FnZV9tZXRhJCkobmFtZSwgYXJjaCkucmVsZWFzZSgpKTsKKy0gICAgICAgIHRocm93JC5w dHIgPSBudWxscHRyOworLSAgICAgIH0sCistICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhy b3ckKSk7CistICByZXR1cm4gdGhyb3ckOworLX0KKy0KKy06OnN0ZDo6dWludDY0X3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHNpemUoOjpycG1vc3RyZWVjeHg6OlBh Y2thZ2VNZXRhIGNvbnN0ICZzZWxmKSBub2V4Y2VwdCB7CistICA6OnN0ZDo6dWludDY0X3QgKDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6KnNpemUkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVl Y3h4OjpQYWNrYWdlTWV0YTo6c2l6ZTsKKy0gIHJldHVybiAoc2VsZi4qc2l6ZSQpKCk7CistfQor LQorLTo6c3RkOjp1aW50NjRfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFja2FnZU1l dGEkYnVpbGR0aW1lKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZikgbm9l eGNlcHQgeworLSAgOjpzdGQ6OnVpbnQ2NF90ICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6 OipidWlsZHRpbWUkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6YnVp bGR0aW1lOworLSAgcmV0dXJuIChzZWxmLipidWlsZHRpbWUkKSgpOworLX0KKysgIHZvaWQKKysg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9yZXBvcyAoOjpycG1v c3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrCisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRFeHRlbnNpb25zJGdldF9vc19leHRlbnNpb25fcGFja2FnZXMgKAorKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFBhY2thZ2VNZXRhJGNoYW5nZWxvZ3MoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRh IGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDY0X3Q+ICpyZXR1cm4kKSBub2V4 Y2VwdCB7CistICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDY0X3Q+ICg6OnJwbW9zdHJlZWN4eDo6 UGFja2FnZU1ldGE6OipjaGFuZ2Vsb2dzJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGE6OmNoYW5nZWxvZ3M7CistICBuZXcgKHJldHVybiQpIDo6cnVzdDo6VmVjPDo6c3Rk Ojp1aW50NjRfdD4oKHNlbGYuKmNoYW5nZWxvZ3MkKSgpKTsKKy19CisrICB2b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9kZXZlbG9wbWVudF9wYWNrYWdlcyAo CisrICAgICAgOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEkc3JjX3BrZyg6OnJwbW9zdHJlZWN4eDo6 UGFja2FnZU1ldGEgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyICpyZXR1cm4kKSBub2V4Y2VwdCB7 CistICA6OnJ1c3Q6OlN0ciAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqc3JjX3BrZyQp KCkgY29uc3QgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjpzcmNfcGtnOworLSAgbmV3 IChyZXR1cm4kKSA6OnJ1c3Q6OlN0cigoc2VsZi4qc3JjX3BrZyQpKCkpOworLX0KKy0KKy06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEk cHJvdmlkZWRfcGF0aHMoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0IHsKKy0gIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqcHJv dmlkZWRfcGF0aHMkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6cHJv dmlkZWRfcGF0aHM7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CistICA6OnJ1c3Q6 OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAgICAgbmV3IChyZXR1cm4k KSA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4oKHNlbGYuKnByb3ZpZGVkX3BhdGhzJCkoKSk7 CistICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVz dDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOworLSAgcmV0dXJuIHRocm93JDsKKy19CistCistOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhY2thZ2VfdmFy aWFudF9saXN0X2Zvcl9jb21taXQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJl cG8sIDo6cnVzdDo6U3RyIHJldiwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAm Y2FuY2VsbGFibGUsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0 IHsKKy0gIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKCpwYWNrYWdlX3ZhcmlhbnRfbGlzdF9m b3JfY29tbWl0JCkoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJiwgOjpydXN0OjpT dHIsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJikgPSA6OnJwbW9zdHJlZWN4 eDo6cGFja2FnZV92YXJpYW50X2xpc3RfZm9yX2NvbW1pdDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRy TGVuIHRocm93JDsKKy0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAorLSAgICAgIFsmXSB7 CistICAgICAgICBuZXcgKHJldHVybiQpIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKHBhY2th Z2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQkKHJlcG8sIHJldiwgY2FuY2VsbGFibGUpKTsKKy0g ICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOworLSAgICAgIH0sCistICAgICAgOjpydXN0Ojpk ZXRhaWw6OkZhaWwodGhyb3ckKSk7CistICByZXR1cm4gdGhyb3ckOworLX0KKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHN0YXRl X2NoZWNrc3VtX2NoYW5nZWQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNv bnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIsCisr ICAgICAgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyR1cGRhdGVfc3RhdGVfY2hl Y2tzdW0gKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIG5vZXhjZXB0OworKwor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRF eHRlbnNpb25zJHNlcmlhbGl6ZV90b19kaXIgKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNv bnN0ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgb3V0cHV0X2Rpcikgbm9leGNlcHQ7CisrCisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9u cyRnZW5lcmF0ZV90cmVlZmlsZSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMg Y29uc3QgJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjLAorKyAgICAg IDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0 OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVD b25maWckb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3IkYWxpZ25vZiAo KSBub2V4Y2VwdDsKKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRsb2NrZmlsZV9yZWFkICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gY29uc3QgJmZpbGVuYW1lcywKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6TG9ja2ZpbGVDb25maWc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2NrZmlsZV93cml0ZSAoCisr ICAgICAgOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJy YXkgJnBhY2thZ2VzLAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnJw bW1kX3JlcG9zKSBub2V4Y2VwdDsKKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRnZXRfbG9ja2VkX3BhY2thZ2VzICgK KysgICAgICA6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgY29uc3QgJnNlbGYsCisrICAg ICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRvcmlnaW5fdG9fdHJlZWZpbGUgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHS2V5 RmlsZSBjb25zdCAma2YsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJl dHVybiQpIG5vZXhjZXB0OworKworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV90b19vcmlnaW4gKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmdGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgKipyZXR1cm4kKSBub2V4Y2Vw dDsKKysKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG9yaWdpbl92YWxpZGF0 ZV9yb3VuZHRyaXAgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2Yp IG5vZXhjZXB0OworKworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FjaGVf YnJhbmNoX3RvX25ldnJhICg6OnJ1c3Q6OlN0ciBuZXZyYSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OworKworKyAgOjpzdGQ6OnVpbnQzMl90CisrICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQ3h4R09iamVjdEFycmF5JGxlbmd0aCAoCisrICAgICAgOjpycG1vc3Ry ZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmc2VsZikgbm9leGNlcHQKKysgIHsKKysgICAgOjpzdGQ6 OnVpbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5OjoqbGVuZ3RoJCkgKCkK KysgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6Omxlbmd0aDsKKysg ICAgcmV0dXJuIChzZWxmLipsZW5ndGgkKSAoKTsKKysgIH0KKysKKysgIHZvaWQKKysgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDeHhHT2JqZWN0QXJyYXkkZ2V0ICg6OnJwbW9zdHJlZWN4 eDo6Q3h4R09iamVjdEFycmF5ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjp1aW50MzJfdCBpLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHT2Jq ZWN0ICoqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysgICAgOjpycG1vc3RyZWVjeHg6OkdPYmpl Y3QgJig6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5OjoqZ2V0JCkgKDo6c3RkOjp1aW50 MzJfdCkKKysgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6OmdldDsK KysgICAgbmV3IChyZXR1cm4kKTo6cnBtb3N0cmVlY3h4OjpHT2JqZWN0ICooJihzZWxmLipnZXQk KSAoaSkpOworKyAgfQorKworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCR1dGlsX25leHRfdmVyc2lvbiAoOjpydXN0OjpTdHIgYXV0b192ZXJz aW9uX3ByZWZpeCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpTdHIgdmVyc2lvbl9zdWZmaXgsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGxhc3RfdmVyc2lvbiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHJpbmcgKnJldHVybiQpIG5vZXhjZXB0CisrICB7CisrICAgIDo6cnVzdDo6U3RyaW5nICgqdXRp bF9uZXh0X3ZlcnNpb24kKSAoOjpydXN0OjpTdHIsIDo6cnVzdDo6U3RyLCA6OnJ1c3Q6OlN0cikK KysgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnV0aWxfbmV4dF92ZXJzaW9uOworKyAgICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CisrICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNo ICgKKysgICAgICAgIFsmXQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgbmV3IChyZXR1cm4k KTo6cnVzdDo6U3RyaW5nICgKKysgICAgICAgICAgICAgICAgdXRpbF9uZXh0X3ZlcnNpb24kIChh dXRvX3ZlcnNpb25fcHJlZml4LCB2ZXJzaW9uX3N1ZmZpeCwgbGFzdF92ZXJzaW9uKSk7CisrICAg ICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisrICAgICAgICA6 OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7CisrICB9 CisrCisrICA6OnN0ZDo6aW50MzJfdAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRl c3R1dGlsX3ZhbGlkYXRlX2N4eHJzX3Bhc3N0aHJvdWdoICgKKysgICAgICA6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgbm9leGNlcHQKKysgIHsKKysgICAgOjpzdGQ6Omlu dDMyX3QgKCp0ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCQpICg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmKQorKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6dGVz dHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFzc3Rocm91Z2g7CisrICAgIHJldHVybiB0ZXN0dXRpbF92 YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCQgKHJlcG8pOworKyAgfQorKworKyAgdm9pZAorKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGVhcmx5X21haW4gKCkgbm9leGNlcHQKKysgIHsK KysgICAgdm9pZCAoKmVhcmx5X21haW4kKSAoKSA9IDo6cnBtb3N0cmVlY3h4OjplYXJseV9tYWlu OworKyAgICBlYXJseV9tYWluJCAoKTsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtb3N0cmVlX21haW4gKDo6cnVzdDo6 U2xpY2U8OjpydXN0OjpTdHIgY29uc3Q+IGFyZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdAor KyAgeworKyAgICA6OnN0ZDo6aW50MzJfdCAoKnJwbW9zdHJlZV9tYWluJCkgKDo6cnVzdDo6U2xp Y2U8OjpydXN0OjpTdHIgY29uc3Q+KQorKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6cnBtb3N0 cmVlX21haW47CisrICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKysgICAgOjpydXN0 OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAorKyAgICAgICAgWyZdCisrICAgICAgICAgIHsKKysgICAg ICAgICAgICBuZXcgKHJldHVybiQpOjpzdGQ6OmludDMyX3QgKHJwbW9zdHJlZV9tYWluJCAoYXJn cykpOworKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOworKyAgICAgICAgICB9LAor KyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOworKyAgICByZXR1cm4gdGhy b3ckOworKyAgfQorKworKyAgdm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJw bW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93biAoKSBub2V4Y2VwdAorKyAgeworKyAgICB2 b2lkICgqcnBtb3N0cmVlX3Byb2Nlc3NfZ2xvYmFsX3RlYXJkb3duJCkgKCkKKysgICAgICAgID0g OjpycG1vc3RyZWVjeHg6OnJwbW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93bjsKKysgICAg cnBtb3N0cmVlX3Byb2Nlc3NfZ2xvYmFsX3RlYXJkb3duJCAoKTsKKysgIH0KKysKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY191bml0X3Rl c3RzICgpIG5vZXhjZXB0CisrICB7CisrICAgIHZvaWQgKCpjX3VuaXRfdGVzdHMkKSAoKSA9IDo6 cnBtb3N0cmVlY3h4OjpjX3VuaXRfdGVzdHM7CisrICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRo cm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAorKyAgICAgICAgWyZdCisr ICAgICAgICAgIHsKKysgICAgICAgICAgICBjX3VuaXRfdGVzdHMkICgpOworKyAgICAgICAgICAg IHRocm93JC5wdHIgPSBudWxscHRyOworKyAgICAgICAgICB9LAorKyAgICAgICAgOjpydXN0Ojpk ZXRhaWw6OkZhaWwgKHRocm93JCkpOworKyAgICByZXR1cm4gdGhyb3ckOworKyAgfQorKworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGll bnRfcmVxdWlyZV9yb290ICgpIG5vZXhjZXB0CisrICB7CisrICAgIHZvaWQgKCpjbGllbnRfcmVx dWlyZV9yb290JCkgKCkgPSA6OnJwbW9zdHJlZWN4eDo6Y2xpZW50X3JlcXVpcmVfcm9vdDsKKysg ICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0 cnljYXRjaCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIGNsaWVu dF9yZXF1aXJlX3Jvb3QkICgpOworKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwor KyAgICAgICAgICB9LAorKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOwor KyAgICByZXR1cm4gdGhyb3ckOworKyAgfQorKworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRuZXdfY2xpZW50X2Nvbm5lY3Rpb24gKAorKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uICoqcmV0dXJuJCkgbm9leGNlcHQK KysgIHsKKysgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5l Y3Rpb24+ICgqbmV3X2NsaWVudF9jb25uZWN0aW9uJCkgKCkKKysgICAgICAgID0gOjpycG1vc3Ry ZWVjeHg6Om5ld19jbGllbnRfY29ubmVjdGlvbjsKKysgICAgOjpydXN0OjpyZXByOjpQdHJMZW4g dGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCisrICAgICAgICBbJl0K KysgICAgICAgICAgeworKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6 Q2xpZW50Q29ubmVjdGlvbiAqKG5ld19jbGllbnRfY29ubmVjdGlvbiQgKCkucmVsZWFzZSAoKSk7 CisrICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisrICAg ICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7 CisrICB9CisrCisrICA6OnJwbW9zdHJlZWN4eDo6R0RCdXNDb25uZWN0aW9uIGNvbnN0ICoKKysg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDbGllbnRDb25uZWN0aW9uJGdldF9jb25uZWN0 aW9uICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbiAmc2VsZikgbm9l eGNlcHQKKysgIHsKKysgICAgOjpycG1vc3RyZWVjeHg6OkdEQnVzQ29ubmVjdGlvbiBjb25zdCAm KDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOjoqZ2V0X2Nvbm5lY3Rpb24kKSAoKQor KyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb246OmdldF9jb25uZWN0 aW9uOworKyAgICByZXR1cm4gJihzZWxmLipnZXRfY29ubmVjdGlvbiQpICgpOworKyAgfQorKwor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRD bGllbnRDb25uZWN0aW9uJHRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jlc3Nfc3luYyAoCisrICAg ICAgOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24gY29uc3QgJnNlbGYsIDo6cnVzdDo6 U3RyIGFkZHJlc3MpIG5vZXhjZXB0CisrICB7CisrICAgIHZvaWQgKDo6cnBtb3N0cmVlY3h4OjpD bGllbnRDb25uZWN0aW9uOjoqdHJhbnNhY3Rpb25fY29ubmVjdF9wcm9ncmVzc19zeW5jJCkgKDo6 cnVzdDo6U3RyKSBjb25zdAorKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5l Y3Rpb246OnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jlc3Nfc3luYzsKKysgICAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCisr ICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIChzZWxmLip0cmFuc2FjdGlv bl9jb25uZWN0X3Byb2dyZXNzX3N5bmMkKSAoYWRkcmVzcyk7CisrICAgICAgICAgICAgdGhyb3ck LnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisrICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6 RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7CisrICB9CisrCisrICA6OnN0ZDo6 aW50MzJfdAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJQTURpZmYkbl9yZW1vdmVk ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNlcHQKKysgIHsKKysg ICAgOjpzdGQ6OmludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqbl9yZW1vdmVkJCkg KCkgY29uc3QKKysgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpuX3JlbW92ZWQ7 CisrICAgIHJldHVybiAoc2VsZi4qbl9yZW1vdmVkJCkgKCk7CisrICB9CisrCisrICA6OnN0ZDo6 aW50MzJfdAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJQTURpZmYkbl9hZGRlZCAo OjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0CisrICB7CisrICAg IDo6c3RkOjppbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6Km5fYWRkZWQkKSAoKSBj b25zdAorKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6Om5fYWRkZWQ7CisrICAg IHJldHVybiAoc2VsZi4qbl9hZGRlZCQpICgpOworKyAgfQorKworKyAgOjpzdGQ6OmludDMyX3QK KysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJG5fbW9kaWZpZWQgKDo6cnBt b3N0cmVlY3h4OjpSUE1EaWZmIGNvbnN0ICZzZWxmKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnN0 ZDo6aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OipuX21vZGlmaWVkJCkgKCkgY29u c3QKKysgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpuX21vZGlmaWVkOworKyAg ICByZXR1cm4gKHNlbGYuKm5fbW9kaWZpZWQkKSAoKTsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtZGJfZGlmZiAoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OnN0cmluZyBjb25zdCAmc3JjLCA6OnN0ZDo6 c3RyaW5nIGNvbnN0ICZkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJvb2wgYWxsb3dfbm9lbnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlJQTURpZmYgKipyZXR1cm4kKSBub2V4Y2VwdAor KyAgeworKyAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKCpy cG1kYl9kaWZmJCkgKAorKyAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3Qg JiwgOjpzdGQ6OnN0cmluZyBjb25zdCAmLCA6OnN0ZDo6c3RyaW5nIGNvbnN0ICYsIGJvb2wpCisr ICAgICAgICA9IDo6cnBtb3N0cmVlY3h4OjpycG1kYl9kaWZmOworKyAgICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiB0aHJvdyQ7CisrICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKKysgICAg ICAgIFsmXQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgbmV3IChyZXR1cm4kKTo6cnBtb3N0 cmVlY3h4OjpSUE1EaWZmICooCisrICAgICAgICAgICAgICAgIHJwbWRiX2RpZmYkIChyZXBvLCBz cmMsIGRlc3QsIGFsbG93X25vZW50KS5yZWxlYXNlICgpKTsKKysgICAgICAgICAgICB0aHJvdyQu cHRyID0gbnVsbHB0cjsKKysgICAgICAgICAgfSwKKysgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpG YWlsICh0aHJvdyQpKTsKKysgICAgcmV0dXJuIHRocm93JDsKKysgIH0KKysKKysgIHZvaWQKKysg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJHByaW50ICg6OnJwbW9zdHJlZWN4 eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNlcHQKKysgIHsKKysgICAgdm9pZCAoOjpycG1v c3RyZWVjeHg6OlJQTURpZmY6OipwcmludCQpICgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpS UE1EaWZmOjpwcmludDsKKysgICAgKHNlbGYuKnByaW50JCkgKCk7CisrICB9CisrCisrICB2b2lk CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJpbnRfdHJlZXBrZ19kaWZmX2Zyb21f c3lzcm9vdF9wYXRoICgKKysgICAgICA6OnJ1c3Q6OlN0ciBzeXNyb290X3BhdGgsIDo6cnBtb3N0 cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQgZm9ybWF0LAorKyAgICAgIDo6c3RkOjp1 aW50MzJfdCBtYXhfa2V5X2xlbiwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAqY2FuY2Vs bGFibGUpIG5vZXhjZXB0CisrICB7CisrICAgIHZvaWQgKCpwcmludF90cmVlcGtnX2RpZmZfZnJv bV9zeXNyb290X3BhdGgkKSAoOjpydXN0OjpTdHIsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbU9zdHJlZURpZmZQ cmludEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnN0ZDo6dWludDMyX3QsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgKikK KysgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jv b3RfcGF0aDsKKysgICAgcHJpbnRfdHJlZXBrZ19kaWZmX2Zyb21fc3lzcm9vdF9wYXRoJCAoc3lz cm9vdF9wYXRoLCBmb3JtYXQsIG1heF9rZXlfbGVuLCBjYW5jZWxsYWJsZSk7CisrICB9CisrCisr ICA6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3MgKgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHByb2dyZXNzX2JlZ2luX3Rhc2sgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQKKysgIHsK KysgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAoKnByb2dy ZXNzX2JlZ2luX3Rhc2skKSAoOjpydXN0OjpTdHIpCisrICAgICAgICA9IDo6cnBtb3N0cmVlY3h4 Ojpwcm9ncmVzc19iZWdpbl90YXNrOworKyAgICByZXR1cm4gcHJvZ3Jlc3NfYmVnaW5fdGFzayQg KG1zZykucmVsZWFzZSAoKTsKKysgIH0KKysKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRQcm9ncmVzcyRlbmQgKDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcyAmc2VsZiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3Ry IG1zZykgbm9leGNlcHQKKysgIHsKKysgICAgdm9pZCAoOjpycG1vc3RyZWVjeHg6OlByb2dyZXNz OjoqZW5kJCkgKDo6cnVzdDo6U3RyKSA9ICY6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M6OmVuZDsK KysgICAgKHNlbGYuKmVuZCQpIChtc2cpOworKyAgfQorKworKyAgdm9pZAorKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JG91dHB1dF9tZXNzYWdlICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhj ZXB0CisrICB7CisrICAgIHZvaWQgKCpvdXRwdXRfbWVzc2FnZSQpICg6OnJ1c3Q6OlN0cikgPSA6 OnJwbW9zdHJlZWN4eDo6b3V0cHV0X21lc3NhZ2U7CisrICAgIG91dHB1dF9tZXNzYWdlJCAobXNn KTsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkbmV2cmFfdG9fY2FjaGVfYnJhbmNoICg6OnN0ZDo6c3RyaW5nIGNvbnN0ICZu ZXZyYSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnJ1c3Q6 OlN0cmluZyAoKm5ldnJhX3RvX2NhY2hlX2JyYW5jaCQpICg6OnN0ZDo6c3RyaW5nIGNvbnN0ICYp CisrICAgICAgICA9IDo6cnBtb3N0cmVlY3h4OjpuZXZyYV90b19jYWNoZV9icmFuY2g7CisrICAg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5 Y2F0Y2ggKAorKyAgICAgICAgWyZdCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBuZXcgKHJl dHVybiQpOjpydXN0OjpTdHJpbmcgKG5ldnJhX3RvX2NhY2hlX2JyYW5jaCQgKG5ldnJhKSk7Cisr ICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisrICAgICAg ICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7Cisr ICB9CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGdldF9yZXBvZGF0YV9jaGtzdW1fcmVwciAoOjpkbmZjeHg6OkZGSURuZlBhY2thZ2Ug JnBrZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnJ1 c3Q6OlN0cmluZyAoKmdldF9yZXBvZGF0YV9jaGtzdW1fcmVwciQpICg6OmRuZmN4eDo6RkZJRG5m UGFja2FnZSAmKQorKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6Z2V0X3JlcG9kYXRhX2Noa3N1 bV9yZXByOworKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CisrICAgIDo6cnVzdDo6 YmVoYXZpb3I6OnRyeWNhdGNoICgKKysgICAgICAgIFsmXQorKyAgICAgICAgICB7CisrICAgICAg ICAgICAgbmV3IChyZXR1cm4kKTo6cnVzdDo6U3RyaW5nIChnZXRfcmVwb2RhdGFfY2hrc3VtX3Jl cHIkIChwa2cpKTsKKysgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKysgICAgICAg ICAgfSwKKysgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKKysgICAgcmV0 dXJuIHRocm93JDsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtdHNfZm9yX2NvbW1pdCAoOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmV2LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1UcyAqKnJldHVybiQp IG5vZXhjZXB0CisrICB7CisrICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpS cG1Ucz4gKCpycG10c19mb3JfY29tbWl0JCkgKAorKyAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVJlcG8gY29uc3QgJiwgOjpydXN0OjpTdHIpCisrICAgICAgICA9IDo6cnBtb3N0cmVlY3h4 OjpycG10c19mb3JfY29tbWl0OworKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Cisr ICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKKysgICAgICAgIFsmXQorKyAgICAgICAg ICB7CisrICAgICAgICAgICAgbmV3IChyZXR1cm4kKTo6cnBtb3N0cmVlY3h4OjpScG1UcyAqKHJw bXRzX2Zvcl9jb21taXQkIChyZXBvLCByZXYpLnJlbGVhc2UgKCkpOworKyAgICAgICAgICAgIHRo cm93JC5wdHIgPSBudWxscHRyOworKyAgICAgICAgICB9LAorKyAgICAgICAgOjpydXN0OjpkZXRh aWw6OkZhaWwgKHRocm93JCkpOworKyAgICByZXR1cm4gdGhyb3ckOworKyAgfQorKworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1kYl9w YWNrYWdlX25hbWVfbGlzdCAoCisrICAgICAgOjpzdGQ6OmludDMyX3QgZGZkLCA6OnJ1c3Q6OlN0 cmluZyBjb25zdCAqcGF0aCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBu b2V4Y2VwdAorKyAgeworKyAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKCpycG1kYl9w YWNrYWdlX25hbWVfbGlzdCQpICg6OnN0ZDo6aW50MzJfdCwgOjpydXN0OjpTdHJpbmcpCisrICAg ICAgICA9IDo6cnBtb3N0cmVlY3h4OjpycG1kYl9wYWNrYWdlX25hbWVfbGlzdDsKKysgICAgOjpy dXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRj aCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIG5ldyAocmV0dXJu JCk6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKAorKyAgICAgICAgICAgICAgICBycG1kYl9w YWNrYWdlX25hbWVfbGlzdCQgKGRmZCwgOjpydXN0OjpTdHJpbmcgKDo6cnVzdDo6dW5zYWZlX2Jp dGNvcHksICpwYXRoKSkpOworKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOworKyAg ICAgICAgICB9LAorKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOworKyAg ICByZXR1cm4gdGhyb3ckOworKyAgfQorKworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1UcyRwYWNrYWdlX21ldGEgKDo6cnBtb3N0cmVl Y3h4OjpScG1UcyBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIG5hbWUsIDo6cnVzdDo6U3RyIGFyY2gsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6UGFja2FnZU1ldGEgKipyZXR1cm4kKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnN0 ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICg6OnJwbW9zdHJlZWN4 eDo6UnBtVHM6OipwYWNrYWdlX21ldGEkKSAoCisrICAgICAgICA6OnJ1c3Q6OlN0ciwgOjpydXN0 OjpTdHIpIGNvbnN0CisrICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UnBtVHM6OnBhY2thZ2Vf bWV0YTsKKysgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJl aGF2aW9yOjp0cnljYXRjaCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAg ICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgKigKKysgICAgICAg ICAgICAgICAgKHNlbGYuKnBhY2thZ2VfbWV0YSQpIChuYW1lLCBhcmNoKS5yZWxlYXNlICgpKTsK KysgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKysgICAgICAgICAgfSwKKysgICAg ICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKKysgICAgcmV0dXJuIHRocm93JDsK KysgIH0KKysKKysgIDo6c3RkOjp1aW50NjRfdAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFBhY2thZ2VNZXRhJHNpemUgKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAm c2VsZikgbm9leGNlcHQKKysgIHsKKysgICAgOjpzdGQ6OnVpbnQ2NF90ICg6OnJwbW9zdHJlZWN4 eDo6UGFja2FnZU1ldGE6OipzaXplJCkgKCkgY29uc3QKKysgICAgICAgID0gJjo6cnBtb3N0cmVl Y3h4OjpQYWNrYWdlTWV0YTo6c2l6ZTsKKysgICAgcmV0dXJuIChzZWxmLipzaXplJCkgKCk7Cisr ICB9CisrCisrICA6OnN0ZDo6dWludDY0X3QKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRQYWNrYWdlTWV0YSRidWlsZHRpbWUgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YSBjb25zdCAmc2VsZikgbm9leGNlcHQKKysgIHsKKysgICAgOjpzdGQ6OnVpbnQ2NF90ICg6 OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OipidWlsZHRpbWUkKSAoKSBjb25zdAorKyAgICAg ICAgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjpidWlsZHRpbWU7CisrICAgIHJldHVy biAoc2VsZi4qYnVpbGR0aW1lJCkgKCk7CisrICB9CisrCisrICB2b2lkCisrICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEkY2hhbmdlbG9ncyAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWlu dDY0X3Q+ICpyZXR1cm4kKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6 dWludDY0X3Q+ICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OipjaGFuZ2Vsb2dzJCkgKCkg Y29uc3QKKysgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6Y2hhbmdlbG9n czsKKysgICAgbmV3IChyZXR1cm4kKTo6cnVzdDo6VmVjPDo6c3RkOjp1aW50NjRfdD4gKChzZWxm LipjaGFuZ2Vsb2dzJCkgKCkpOworKyAgfQorKworKyAgdm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHNyY19wa2cgKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YSBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciAqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysgICAg OjpydXN0OjpTdHIgKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6KnNyY19wa2ckKSAoKSBj b25zdAorKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjpzcmNfcGtnOwor KyAgICBuZXcgKHJldHVybiQpOjpydXN0OjpTdHIgKChzZWxmLipzcmNfcGtnJCkgKCkpOworKyAg fQorKworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRQYWNrYWdlTWV0YSRwcm92aWRlZF9wYXRocyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6 OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJl dHVybiQpIG5vZXhjZXB0CisrICB7CisrICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAo OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqcHJvdmlkZWRfcGF0aHMkKSAoKSBjb25zdAor KyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjpwcm92aWRlZF9wYXRoczsK KysgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9y Ojp0cnljYXRjaCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIG5l dyAocmV0dXJuJCk6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKChzZWxmLipwcm92aWRlZF9w YXRocyQpICgpKTsKKysgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKysgICAgICAg ICAgfSwKKysgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKKysgICAgcmV0 dXJuIHRocm93JDsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFja2FnZV92YXJpYW50X2xpc3RfZm9yX2NvbW1pdCAoCisr ICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3Ry IHJldiwKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxs YWJsZSwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsK KysgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICooKnBhY2thZ2VfdmFyaWFudF9saXN0X2Zv cl9jb21taXQkKSAoCisrICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm LCA6OnJ1c3Q6OlN0ciwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmKQorKyAg ICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6cGFja2FnZV92YXJpYW50X2xpc3RfZm9yX2NvbW1pdDsK KysgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9y Ojp0cnljYXRjaCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIG5l dyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKigKKysgICAgICAgICAgICAgICAg cGFja2FnZV92YXJpYW50X2xpc3RfZm9yX2NvbW1pdCQgKHJlcG8sIHJldiwgY2FuY2VsbGFibGUp KTsKKysgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKysgICAgICAgICAgfSwKKysg ICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKKysgICAgcmV0dXJuIHRocm93 JDsKKysgIH0KKyB9IC8vIGV4dGVybiAiQyIKKyAKKy1ib29sIGlzX2JhcmVfc3BsaXRfeGF0dHJz KCkgeworK2Jvb2wKKytpc19iYXJlX3NwbGl0X3hhdHRycyAoKQorK3sKKyAgIDo6cnVzdDo6TWF5 YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19iYXJlX3NwbGl0X3hhdHRycygmcmV0dXJu JC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1v dmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfYmFyZV9zcGxpdF94YXR0cnMgKCZyZXR1cm4kLnZh bHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBpc19odHRwX2FyZyg6OnJ1 c3Q6OlN0ciBhcmcpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkaXNfaHR0cF9hcmcoYXJnKTsKKytib29sCisraXNfaHR0cF9hcmcgKDo6cnVzdDo6U3Ry IGFyZykgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGlzX2h0dHBfYXJnIChhcmcpOworIH0KKyAKKy1ib29sIGlzX29zdHJlZV9jb250YWluZXIoKSB7 CisrYm9vbAorK2lzX29zdHJlZV9jb250YWluZXIgKCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5p bml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfb3N0cmVlX2NvbnRhaW5lcigmcmV0dXJuJC52YWx1 ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0 dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkaXNfb3N0cmVlX2NvbnRhaW5lciAoJnJldHVybiQudmFsdWUpOwor KyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6U3lzdGVtSG9zdFR5 cGUgZ2V0X3N5c3RlbV9ob3N0X3R5cGUoKSB7CisrOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RU eXBlCisrZ2V0X3N5c3RlbV9ob3N0X3R5cGUgKCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZT4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfc3lzdGVt X2hvc3RfdHlwZSgmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X3N5c3RlbV9ob3N0 X3R5cGUgKCZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysg ICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9p ZCByZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUoOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBl IHQpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRyZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUodCk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9Cisrdm9pZAorK3JlcXVpcmVfc3lzdGVtX2hvc3RfdHlwZSAoOjpycG1vc3RyZWVj eHg6OlN5c3RlbUhvc3RUeXBlIHQpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJlcXVpcmVfc3lzdGVtX2hvc3RfdHlwZSAo dCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistYm9vbCBp c19ycG1fYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19ycG1fYXJnKGFyZyk7CisrYm9vbAorK2lzX3JwbV9hcmcg KDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGlzX3JwbV9hcmcgKGFyZyk7CisgfQorIAorLXZvaWQgY2xpZW50X3N0YXJ0 X2RhZW1vbigpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfc3RhcnRfZGFlbW9uKCk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9Cisrdm9pZAorK2NsaWVudF9zdGFydF9kYWVtb24gKCkKKyt7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50 X3N0YXJ0X2RhZW1vbiAoKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQor IH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4gY2xpZW50X2hhbmRsZV9mZF9hcmd1 bWVudCg6OnJ1c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsIGJvb2wgaXNfcmVwbGFjZSkg eworKzo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PgorK2NsaWVudF9oYW5kbGVfZmRfYXJndW1l bnQgKDo6cnVzdDo6U3RyIGFyZywgOjpydXN0OjpTdHIgYXJjaCwgYm9vbCBpc19yZXBsYWNlKQor K3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+PiBy ZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNsaWVudF9oYW5kbGVfZmRfYXJndW1lbnQoYXJnLCBhcmNoLCBpc19yZXBs YWNlLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1 cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50X2hhbmRsZV9mZF9hcmd1 bWVudCAoCisrICAgICAgYXJnLCBhcmNoLCBpc19yZXBsYWNlLCAmcmV0dXJuJC52YWx1ZSk7Cisr ICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIGNsaWVudF9yZW5kZXJf ZG93bmxvYWRfcHJvZ3Jlc3MoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZwcm9ncmVz cykgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrY2xpZW50X3JlbmRlcl9kb3dubG9hZF9w cm9ncmVzcyAoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZwcm9ncmVzcykgbm9leGNl cHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwor LSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9yZW5kZXJfZG93bmxvYWRfcHJv Z3Jlc3MocHJvZ3Jlc3MsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfcmVu ZGVyX2Rvd25sb2FkX3Byb2dyZXNzIChwcm9ncmVzcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0 dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBydW5uaW5nX2lu X2NvbnRhaW5lcigpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkcnVubmluZ19pbl9jb250YWluZXIoKTsKKytib29sCisrcnVubmluZ19pbl9jb250YWlu ZXIgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHJ1bm5pbmdfaW5fY29udGFpbmVyICgpOworIH0KKyAKKy1ib29sIGNvbmZpcm0oKSB7CisrYm9v bAorK2NvbmZpcm0gKCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7 CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkY29uZmlybSgmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9 CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybSAoJnJl dHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICBy ZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy12b2lkIGNvbmZpcm1f b3JfYWJvcnQoKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybV9vcl9hYm9ydCgpOworLSAgaWYgKGVycm9yJC5wdHIp IHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OworLSAgfQorK3ZvaWQKKytjb25maXJtX29yX2Fib3J0ICgpCisreworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm1fb3Jf YWJvcnQgKCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCist OjpzdGQ6OnNpemVfdCBCdWJibGV3cmFwOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7CistICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3Ikc2l6 ZW9mKCk7CisrOjpzdGQ6OnNpemVfdAorK0J1YmJsZXdyYXA6OmxheW91dDo6c2l6ZSAoKSBub2V4 Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3Jh cCRvcGVyYXRvciRzaXplb2YgKCk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgQnViYmxld3JhcDo6 bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkQnViYmxld3JhcCRvcGVyYXRvciRhbGlnbm9mKCk7CisrOjpzdGQ6OnNpemVfdAor K0J1YmJsZXdyYXA6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3IkYWxpZ25vZiAoKTsK KyB9CisgCistdm9pZCBidWJibGV3cmFwX3NlbGZ0ZXN0KCkgeworLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfc2Vs ZnRlc3QoKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrYnViYmxld3JhcF9z ZWxmdGVzdCAoKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX3NlbGZ0ZXN0ICgpOworKyAgaWYgKGVycm9y JC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6cnVzdDo6VmVjPDo6c3RkOjp1aW50 OF90PiBidWJibGV3cmFwX3J1bl9zeW5jKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncywgYm9vbCBjYXB0dXJlX3N0ZG91dCwg OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpIHsKKys6OnJ1 c3Q6OlZlYzw6OnN0ZDo6dWludDhfdD4KKytidWJibGV3cmFwX3J1bl9zeW5jICg6OnN0ZDo6aW50 MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3Ms CisrICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYXB0dXJlX3N0ZG91dCwgOjpycG1vc3RyZWVj eHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpCisreworICAgOjpydXN0OjpNYXli ZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDhfdD4+IHJldHVybiQ7CistICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxl d3JhcF9ydW5fc3luYyhyb290ZnNfZGZkLCBhcmdzLCBjYXB0dXJlX3N0ZG91dCwgbXV0YWJpbGl0 eSwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfcnVuX3N5bmMgKAor KyAgICAgIHJvb3Rmc19kZmQsIGFyZ3MsIGNhcHR1cmVfc3Rkb3V0LCBtdXRhYmlsaXR5LCAmcmV0 dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiBidWJibGV3cmFwX25ldyg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZmQpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4KKyti dWJibGV3cmFwX25ldyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkKQorK3sKKyAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+PiByZXR1 cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3KHJvb3Rmc19mZCwgJnJldHVybiQudmFsdWUpOworLSAg aWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9uZXcgKHJvb3Rmc19mZCwgJnJldHVybiQudmFs dWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcD4gYnViYmxld3JhcF9uZXdfd2l0aF9tdXRhYmlsaXR5KDo6c3RkOjpp bnQzMl90IHJvb3Rmc19mZCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11 dGFiaWxpdHkpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4KKyti dWJibGV3cmFwX25ld193aXRoX211dGFiaWxpdHkgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19mZCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3 cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+PiByZXR1cm4kOworLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJs ZXdyYXBfbmV3X3dpdGhfbXV0YWJpbGl0eShyb290ZnNfZmQsIG11dGFiaWxpdHksICZyZXR1cm4k LnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX25ld193aXRoX211dGFiaWxpdHkgKAor KyAgICAgIHJvb3Rmc19mZCwgbXV0YWJpbGl0eSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVy cm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy06OnN0ZDo6aW50MzJfdCBCdWJibGV3cmFwOjpnZXRfcm9vdGZz X2ZkKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRCdWJibGV3cmFwJGdldF9yb290ZnNfZmQoKnRoaXMpOworKzo6c3RkOjppbnQzMl90Cisr QnViYmxld3JhcDo6Z2V0X3Jvb3Rmc19mZCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRnZXRfcm9vdGZzX2ZkICgq dGhpcyk7CisgfQorIAorLXZvaWQgQnViYmxld3JhcDo6YXBwZW5kX2J3cmFwX2FyZyg6OnJ1c3Q6 OlN0ciBhcmcpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJi bGV3cmFwJGFwcGVuZF9id3JhcF9hcmcoKnRoaXMsIGFyZyk7Cisrdm9pZAorK0J1YmJsZXdyYXA6 OmFwcGVuZF9id3JhcF9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQKKyt7CisrICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfYndyYXBfYXJnICgqdGhp cywgYXJnKTsKKyB9CisgCistdm9pZCBCdWJibGV3cmFwOjphcHBlbmRfY2hpbGRfYXJnKDo6cnVz dDo6U3RyIGFyZykgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1 YmJsZXdyYXAkYXBwZW5kX2NoaWxkX2FyZygqdGhpcywgYXJnKTsKKyt2b2lkCisrQnViYmxld3Jh cDo6YXBwZW5kX2NoaWxkX2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdAorK3sKKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGFwcGVuZF9jaGlsZF9hcmcgKCp0 aGlzLCBhcmcpOworIH0KKyAKKy12b2lkIEJ1YmJsZXdyYXA6OnNldGVudig6OnJ1c3Q6OlN0ciBr LCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkQnViYmxld3JhcCRzZXRlbnYoKnRoaXMsIGssIHYpOworK3ZvaWQKKytCdWJibGV3cmFwOjpz ZXRlbnYgKDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6U3RyIHYpIG5vZXhjZXB0CisreworKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0ZW52ICgqdGhpcywgaywgdik7 CisgfQorIAorLXZvaWQgQnViYmxld3JhcDo6dGFrZV9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2Vf ZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9mZCgqdGhpcywgc291cmNlX2ZkLCB0YXJn ZXRfZmQpOworK3ZvaWQKKytCdWJibGV3cmFwOjp0YWtlX2ZkICg6OnN0ZDo6aW50MzJfdCBzb3Vy Y2VfZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNlcHQKKyt7CisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX2ZkICgqdGhpcywgc291cmNlX2Zk LCB0YXJnZXRfZmQpOworIH0KKyAKKy12b2lkIEJ1YmJsZXdyYXA6OnNldF9pbmhlcml0X3N0ZGlu KCkgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAk c2V0X2luaGVyaXRfc3RkaW4oKnRoaXMpOworK3ZvaWQKKytCdWJibGV3cmFwOjpzZXRfaW5oZXJp dF9zdGRpbiAoKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRC dWJibGV3cmFwJHNldF9pbmhlcml0X3N0ZGluICgqdGhpcyk7CisgfQorIAorLXZvaWQgQnViYmxl d3JhcDo6dGFrZV9zdGRpbl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0IHsK Ky0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3RkaW5fZmQo KnRoaXMsIHNvdXJjZV9mZCk7Cisrdm9pZAorK0J1YmJsZXdyYXA6OnRha2Vfc3RkaW5fZmQgKDo6 c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGluX2ZkICgqdGhpcywgc291cmNlX2ZkKTsK KyB9CisgCistdm9pZCBCdWJibGV3cmFwOjp0YWtlX3N0ZG91dF9mZCg6OnN0ZDo6aW50MzJfdCBz b3VyY2VfZmQpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJi bGV3cmFwJHRha2Vfc3Rkb3V0X2ZkKCp0aGlzLCBzb3VyY2VfZmQpOworK3ZvaWQKKytCdWJibGV3 cmFwOjp0YWtlX3N0ZG91dF9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdAor K3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0 X2ZkICgqdGhpcywgc291cmNlX2ZkKTsKKyB9CisgCistdm9pZCBCdWJibGV3cmFwOjp0YWtlX3N0 ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3RkZXJyX2ZkKCp0aGlzLCBzb3Vy Y2VfZmQpOworK3ZvaWQKKytCdWJibGV3cmFwOjp0YWtlX3N0ZGVycl9mZCAoOjpzdGQ6OmludDMy X3Qgc291cmNlX2ZkKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRCdWJibGV3cmFwJHRha2Vfc3RkZXJyX2ZkICgqdGhpcywgc291cmNlX2ZkKTsKKyB9CisgCist dm9pZCBCdWJibGV3cmFwOjp0YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkKDo6c3RkOjppbnQzMl90 IHNvdXJjZV9mZCkgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1 YmJsZXdyYXAkdGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCgqdGhpcywgc291cmNlX2ZkKTsKKyt2 b2lkCisrQnViYmxld3JhcDo6dGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCAoOjpzdGQ6OmludDMy X3Qgc291cmNlX2ZkKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQgKCp0aGlzLCBzb3VyY2VfZmQp OworIH0KKyAKKy12b2lkIEJ1YmJsZXdyYXA6OmJpbmRfcmVhZCg6OnJ1c3Q6OlN0ciBzcmMsIDo6 cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRCdWJibGV3cmFwJGJpbmRfcmVhZCgqdGhpcywgc3JjLCBkZXN0KTsKKyt2b2lkCisrQnViYmxl d3JhcDo6YmluZF9yZWFkICg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhj ZXB0CisreworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkYmluZF9y ZWFkICgqdGhpcywgc3JjLCBkZXN0KTsKKyB9CisgCistdm9pZCBCdWJibGV3cmFwOjpiaW5kX3Jl YWR3cml0ZSg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0IHsKKy0g IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZHdyaXRlKCp0 aGlzLCBzcmMsIGRlc3QpOworK3ZvaWQKKytCdWJibGV3cmFwOjpiaW5kX3JlYWR3cml0ZSAoOjpy dXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZHdyaXRlICgqdGhpcywgc3Jj LCBkZXN0KTsKKyB9CisgCistdm9pZCBCdWJibGV3cmFwOjpzZXR1cF9jb21wYXRfdmFyKCkgewor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEJ1YmJsZXdyYXAkc2V0dXBfY29tcGF0X3ZhcigqdGhpcyk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9Cisrdm9pZAorK0J1YmJsZXdyYXA6OnNldHVwX2NvbXBhdF92YXIgKCkKKyt7Cisr ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkQnViYmxld3JhcCRzZXR1cF9jb21wYXRfdmFyICgqdGhpcyk7CisrICBpZiAoZXJyb3IkLnB0 cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBCdWJibGV3cmFwOjpydW4oOjpycG1v c3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIHsKKy0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3 cmFwJHJ1bigqdGhpcywgY2FuY2VsbGFibGUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQor K3ZvaWQKKytCdWJibGV3cmFwOjpydW4gKDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29u c3QgJmNhbmNlbGxhYmxlKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHJ1biAoKnRoaXMsIGNhbmNlbGxh YmxlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJw bW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eV9mb3JfdW5pZmllZF9j b3JlKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JG11dGFiaWxpdHlfZm9yX3VuaWZpZWRfY29yZSh1bmlmaWVkX2NvcmUp OworKzo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eQorK211dGFiaWxpdHlfZm9y X3VuaWZpZWRfY29yZSAoYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0CisreworKyAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtdXRhYmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUg KHVuaWZpZWRfY29yZSk7CisgfQorIAorLXZvaWQgdXNyb3ZlcmxheV9lbnRyeXBvaW50KDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykgeworLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHVzcm92ZXJsYXlfZW50 cnlwb2ludChhcmdzKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrdXNyb3Zl cmxheV9lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3Mp CisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHVzcm92ZXJsYXlfZW50cnlwb2ludCAoYXJncyk7CisrICBpZiAoZXJyb3IkLnB0 cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBhcHBseWxpdmVfZW50cnlwb2ludCg6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpIHsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVf ZW50cnlwb2ludChhcmdzKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrYXBw bHlsaXZlX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJn cykKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkYXBwbHlsaXZlX2VudHJ5cG9pbnQgKGFyZ3MpOworKyAgaWYgKGVycm9yJC5w dHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgYXBwbHlsaXZlX2ZpbmlzaCg6OnJw bW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkgeworLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFwcGx5bGl2 ZV9maW5pc2goc3lzcm9vdCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2Fw cGx5bGl2ZV9maW5pc2ggKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNy b290KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZmluaXNoIChzeXNyb290KTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIGNvbXBvc2V1dGlsX2xlZ2FjeV9w cmVwX2Rldl9hbmRfcnVuKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpIHsKKy0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3Nl dXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5kX3J1bihyb290ZnNfZGZkKTsKKy0gIGlmIChlcnJvciQu cHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKKy0gIH0KKyt2b2lkCisrY29tcG9zZXV0aWxfbGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4g KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZXV0aWxf bGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4gKHJvb3Rmc19kZmQpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgcHJpbnRfb3N0cmVlX3R4bl9zdGF0cyg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwb1RyYW5zYWN0aW9uU3RhdHMgJnN0YXRzKSBub2V4Y2Vw dCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJpbnRfb3N0cmVlX3R4bl9zdGF0 cyhzdGF0cyk7Cisrdm9pZAorK3ByaW50X29zdHJlZV90eG5fc3RhdHMgKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvVHJhbnNhY3Rpb25TdGF0cyAmc3RhdHMpIG5vZXhjZXB0CisreworKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X29zdHJlZV90eG5fc3RhdHMgKHN0YXRzKTsK KyB9CisgCistdm9pZCB3cml0ZV9jb21taXRfaWQoOjpydXN0OjpTdHIgdGFyZ2V0X3BhdGgsIDo6 cnVzdDo6U3RyIHJldmlzaW9uKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkd3JpdGVfY29tbWl0X2lkKHRhcmdldF9wYXRoLCBy ZXZpc2lvbik7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3dyaXRlX2NvbW1p dF9pZCAoOjpydXN0OjpTdHIgdGFyZ2V0X3BhdGgsIDo6cnVzdDo6U3RyIHJldmlzaW9uKQorK3sK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCR3cml0ZV9jb21taXRfaWQgKHRhcmdldF9wYXRoLCByZXZpc2lvbik7CisrICBpZiAoZXJy b3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBjbGl3cmFwX3dyaXRlX3dy YXBwZXJzKDo6c3RkOjppbnQzMl90IHJvb3RmcykgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfd3JhcHBl cnMocm9vdGZzKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrY2xpd3JhcF93 cml0ZV93cmFwcGVycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKQorK3sKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGl3cmFwX3dy aXRlX3dyYXBwZXJzIChyb290ZnMpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAg ICB9CisgfQorIAorLXZvaWQgY2xpd3JhcF93cml0ZV9zb21lX3dyYXBwZXJzKDo6c3RkOjppbnQz Ml90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSB7Cist ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY2xpd3JhcF93cml0ZV9zb21lX3dyYXBwZXJzKHJvb3RmcywgYXJncyk7CistICBpZiAoZXJy b3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7CistICB9Cisrdm9pZAorK2NsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVycyAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFy Z3MpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF93cml0ZV9zb21lX3dyYXBwZXJzIChyb290ZnMs IGFyZ3MpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6 cnVzdDo6U3RyaW5nIGNsaXdyYXBfZGVzdGRpcigpIG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmlu ZworK2NsaXdyYXBfZGVzdGRpciAoKSBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY2xpd3JhcF9kZXN0ZGlyKCZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKKy19CistCistdm9pZCBjb250YWluZXJfZW5jYXBzdWxhdGUoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9w PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQoOjpzdGQ6Om1vdmUoYXJncykpOwor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNvbnRhaW5lcl9lbmNhcHN1bGF0ZSgmYXJncyQudmFsdWUpOworLSAgaWYgKGVycm9yJC5w dHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOworLSAgfQorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfZGVzdGRp ciAoJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKKyt9CisrCisrdm9pZAorK2NvbnRhaW5lcl9lbmNhcHN1bGF0ZSAoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGFyZ3MpCisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250 YWluZXJfZW5jYXBzdWxhdGUgKCZhcmdzJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBkZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQo OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlE cm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQoOjpzdGQ6Om1vdmUoYXJncykp OworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGRlcGxveV9mcm9tX3NlbGZfZW50cnlwb2ludCgmYXJncyQudmFsdWUpOworLSAgaWYg KGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytkZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQg KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKQorK3sKKysgIDo6cnVzdDo6TWFudWFs bHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQgKDo6c3RkOjptb3ZlIChh cmdzKSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQgKCZhcmdzJC52 YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistYm9v bCBQcnVuZWRDb250YWluZXJJbmZvOjpvcGVyYXRvcj09KFBydW5lZENvbnRhaW5lckluZm8gY29u c3QgJnJocykgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRQcnVuZWRDb250YWluZXJJbmZvJG9wZXJhdG9yJGVxKCp0aGlzLCByaHMpOworK2Jv b2wKKytQcnVuZWRDb250YWluZXJJbmZvOjpvcGVyYXRvcj09IChQcnVuZWRDb250YWluZXJJbmZv IGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRQcnVuZWRDb250YWluZXJJbmZvJG9wZXJhdG9yJGVxICgqdGhpcywgcmhz KTsKKyB9CisgCistYm9vbCBQcnVuZWRDb250YWluZXJJbmZvOjpvcGVyYXRvciE9KFBydW5lZENv bnRhaW5lckluZm8gY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytQcnVuZWRD b250YWluZXJJbmZvOjpvcGVyYXRvciE9IChQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICZyaHMp IGNvbnN0IG5vZXhjZXB0CisreworICAgcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsKKyB9CisgCist OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+IHB1bGxfY29u dGFpbmVyKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJl ZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVm LCA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4KKytwdWxsX2NvbnRhaW5lciAoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVl Y3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnJ1c3Q6OlN0ciBpbWdyZWYs CisrICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGRpZ2VzdF9vdmVycmlkZSkKKyt7CisgICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJ bWFnZVN0YXRlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdWxsX2NvbnRhaW5lcihyZXBvLCBjYW5jZWxsYWJs ZSwgaW1ncmVmLCBkaWdlc3Rfb3ZlcnJpZGUsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRwdWxsX2NvbnRhaW5lciAoCisrICAgICAgcmVwbywgY2FuY2VsbGFibGUsIGltZ3JlZiwgZGln ZXN0X292ZXJyaWRlLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAg eworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQor IAorLTo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvIGNvbnRhaW5lcl9wcnVuZSg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkgeworKzo6cnBtb3N0 cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvCisrY29udGFpbmVyX3BydW5lICg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJl VW5pbml0PDo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvPiByZXR1cm4kOworLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbnRhaW5lcl9wcnVuZShzeXNyb290LCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3Ik LnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRjb250YWluZXJfcHJ1bmUgKHN5c3Jvb3QsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlm IChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChy ZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRh aW5lckltYWdlU3RhdGU+IHF1ZXJ5X2NvbnRhaW5lcl9pbWFnZV9jb21taXQoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGMpIHsKKys6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4KKytxdWVyeV9jb250YWluZXJf aW1hZ2VfY29tbWl0ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpy dXN0OjpTdHIgYykKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRxdWVyeV9jb250 YWluZXJfaW1hZ2VfY29tbWl0KHJlcG8sIGMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHF1ZXJ5X2NvbnRhaW5lcl9pbWFnZV9jb21taXQgKHJlcG8sIGMsICZyZXR1cm4k LnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJu IDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBwdXJnZV9yZWZzcGVj KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZz cGVjKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkcHVyZ2VfcmVmc3BlYyhyZXBvLCByZWZzcGVjKTsKKy0gIGlmIChlcnJvciQu cHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKKy0gIH0KKyt2b2lkCisrcHVyZ2VfcmVmc3BlYyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJlZnNwZWMpCisreworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHB1cmdlX3Jl ZnNwZWMgKHJlcG8sIHJlZnNwZWMpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAg ICB9CisgfQorIAorLWJvb2wgY2hlY2tfY29udGFpbmVyX3VwZGF0ZSg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25z dCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZikgeworK2Jvb2wKKytjaGVja19jb250 YWluZXJfdXBkYXRlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKKysg ICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0 ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8Ym9vbD4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19jb250YWluZXJfdXBkYXRlKHJlcG8sIGNh bmNlbGxhYmxlLCBpbWdyZWYsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7 CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK Ky0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19j b250YWluZXJfdXBkYXRlICgKKysgICAgICByZXBvLCBjYW5jZWxsYWJsZSwgaW1ncmVmLCAmcmV0 dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6c3RkOjpzaXplX3Qg VGVtcEV0Y0d1YXJkOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCRvcGVyYXRvciRzaXplb2YoKTsKKys6 OnN0ZDo6c2l6ZV90CisrVGVtcEV0Y0d1YXJkOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKKyt7 CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCRvcGVy YXRvciRzaXplb2YgKCk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgVGVtcEV0Y0d1YXJkOjpsYXlv dXQ6OmFsaWduKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3IkYWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QKKytU ZW1wRXRjR3VhcmQ6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCRvcGVyYXRvciRhbGlnbm9mICgp OworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IEZpbGVzeXN0ZW1TY3JpcHRQcmVwOjpsYXlvdXQ6OnNp emUoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZp bGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJHNpemVvZigpOworKzo6c3RkOjpzaXplX3QKKytG aWxlc3lzdGVtU2NyaXB0UHJlcDo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRvcGVy YXRvciRzaXplb2YgKCk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgRmlsZXN5c3RlbVNjcmlwdFBy ZXA6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJGFsaWdub2YoKTsKKys6 OnN0ZDo6c2l6ZV90CisrRmlsZXN5c3RlbVNjcmlwdFByZXA6OmxheW91dDo6YWxpZ24gKCkgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0 ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+IHByZXBhcmVfdGVtcGV0Y19ndWFyZCg6OnN0ZDo6 aW50MzJfdCByb290ZnMpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1 YXJkPgorK3ByZXBhcmVfdGVtcGV0Y19ndWFyZCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKQorK3sK KyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBF dGNHdWFyZD4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV90ZW1wZXRjX2d1YXJkKHJvb3RmcywgJnJl dHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisr ICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV90ZW1wZXRjX2d1YXJk IChyb290ZnMsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7Cisr ICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsK KysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCist dm9pZCBUZW1wRXRjR3VhcmQ6OnVuZG8oKSBjb25zdCB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVGVtcEV0Y0d1YXJkJHVuZG8o KnRoaXMpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytUZW1wRXRjR3VhcmQ6 OnVuZG8gKCkgY29uc3QKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVGVtcEV0Y0d1YXJkJHVuZG8gKCp0aGlzKTsKKysgIGlm IChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+IHByZXBhcmVfZmlsZXN5c3RlbV9zY3Jp cHRfcHJlcCg6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+CisrcHJlcGFyZV9maWxlc3lzdGVtX3NjcmlwdF9w cmVwICg6OnN0ZDo6aW50MzJfdCByb290ZnMpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+PiByZXR1cm4k OworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHByZXBhcmVfZmlsZXN5c3RlbV9zY3JpcHRfcHJlcChyb290ZnMsICZyZXR1cm4kLnZh bHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfZmlsZXN5c3RlbV9zY3JpcHRfcHJl cCAocm9vdGZzLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgewor KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAor LXZvaWQgRmlsZXN5c3RlbVNjcmlwdFByZXA6OnVuZG8oKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNjcmlw dFByZXAkdW5kbygqdGhpcyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK0Zp bGVzeXN0ZW1TY3JpcHRQcmVwOjp1bmRvICgpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVw JHVuZG8gKCp0aGlzKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0K KyAKKy12b2lkIHJ1bl9kZXBtb2QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpydXN0OjpT dHIga3ZlciwgYm9vbCB1bmlmaWVkX2NvcmUpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5fZGVwbW9kKHJvb3Rmc19kZmQs IGt2ZXIsIHVuaWZpZWRfY29yZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAor K3J1bl9kZXBtb2QgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6U3RyIGt2ZXIs IGJvb2wgdW5pZmllZF9jb3JlKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAor KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9kZXBtb2QgKHJvb3Rmc19k ZmQsIGt2ZXIsIHVuaWZpZWRfY29yZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKyB9CisgCistdm9pZCBydW5fc3lzdXNlcnMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCwgYm9vbCBmb3JjZSkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9zeXN1c2Vycyhyb290ZnNfZGZkLCBmb3JjZSk7Cist ICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3J1bl9zeXN1c2VycyAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBmb3JjZSkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVuX3N5c3VzZXJzIChyb290 ZnNfZGZkLCBmb3JjZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9 CisgCistdm9pZCBsb2dfdHJlZWZpbGUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0 Zikgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvZ190cmVlZmls ZSh0Zik7Cisrdm9pZAorK2xvZ190cmVlZmlsZSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZ0Zikgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9n X3RyZWVmaWxlICh0Zik7CisgfQorIAorLWJvb2wgaXNfY29udGFpbmVyX2ltYWdlX3JlZmVyZW5j ZSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGlzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2UocmVmc3BlYyk7Cisr Ym9vbAorK2lzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMp IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19j b250YWluZXJfaW1hZ2VfcmVmZXJlbmNlIChyZWZzcGVjKTsKKyB9CisgCistYm9vbCBpc19jb250 YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2Vw dCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2NvbnRhaW5lcl9p bWFnZV9kaWdlc3RfcmVmZXJlbmNlKHJlZnNwZWMpOworK2Jvb2wKKytpc19jb250YWluZXJfaW1h Z2VfZGlnZXN0X3JlZmVyZW5jZSAoOjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQKKyt7Cisr ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2NvbnRhaW5lcl9pbWFnZV9k aWdlc3RfcmVmZXJlbmNlIChyZWZzcGVjKTsKKyB9CisgCistOjpycG1vc3RyZWVjeHg6OlJlZnNw ZWNUeXBlIHJlZnNwZWNfY2xhc3NpZnkoOjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQgewor LSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZWZzcGVjX2NsYXNzaWZ5KHJl ZnNwZWMpOworKzo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZQorK3JlZnNwZWNfY2xhc3NpZnkg KDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRyZWZzcGVjX2NsYXNzaWZ5IChyZWZzcGVjKTsKKyB9CisgCistdm9p ZCB2ZXJpZnlfa2VybmVsX2htYWMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBt b2RkaXIpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCR2ZXJpZnlfa2VybmVsX2htYWMocm9vdGZzLCBtb2RkaXIpOworLSAgaWYg KGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKyt2ZXJpZnlfa2VybmVsX2htYWMgKDo6c3RkOjpp bnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgbW9kZGlyKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2ZXJpZnlfa2VybmVs X2htYWMgKHJvb3RmcywgbW9kZGlyKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysg ICAgfQorIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gc3RhZ2VfY29udGFpbmVy X3JwbXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHJwbXMpIHsKKy0gIDo6cnVzdDo6TWFu dWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcnBtcyQoOjpzdGQ6Om1vdmUo cnBtcykpOworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK3N0YWdlX2NvbnRhaW5lcl9y cG1zICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcnBtcykKKyt7CisrICA6OnJ1c3Q6Ok1h bnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJwbXMkICg6OnN0ZDo6bW92 ZSAocnBtcykpOworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVyX3JwbXMoJnJwbXMkLnZhbHVlLCAm cmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQK KysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzdGFnZV9jb250YWluZXJfcnBt cyAoJnJwbXMkLnZhbHVlLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Cisg fQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBzdGFnZV9jb250YWluZXJfcnBtX3Jh d19mZHMoOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGZkcykgeworLSAgOjpydXN0OjpNYW51 YWxseURyb3A8OjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+PiBmZHMkKDo6c3RkOjptb3ZlKGZk cykpOworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK3N0YWdlX2NvbnRhaW5lcl9ycG1f cmF3X2ZkcyAoOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGZkcykKKyt7CisrICA6OnJ1c3Q6 Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4+IGZkcyQgKDo6c3RkOjpt b3ZlIChmZHMpKTsKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1fcmF3X2ZkcygmZmRzJC52 YWx1ZSwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFp bmVyX3JwbV9yYXdfZmRzICgmZmRzJC52YWx1ZSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVy cm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy1ib29sIGNvbW1pdF9oYXNfbWF0Y2hpbmdfc2Vwb2xpY3koOjpy cG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZjb21taXQsIDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVTZVBvbGljeSBjb25zdCAmcG9saWN5KSB7CisrYm9vbAorK2NvbW1pdF9oYXNfbWF0Y2hpbmdf c2Vwb2xpY3kgKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBj b25zdCAmcG9saWN5KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsK Ky0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjb21taXRfaGFzX21hdGNoaW5nX3NlcG9saWN5KGNvbW1pdCwgcG9saWN5LCAmcmV0dXJu JC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1v dmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAg ICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21taXRfaGFzX21hdGNoaW5nX3NlcG9s aWN5IChjb21taXQsIHBvbGljeSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OworIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKmdldF9oZWFkZXJfdmFyaWFudCg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgY2FjaGVi cmFuY2gpIHsKKys6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKgorK2dldF9oZWFkZXJfdmFyaWFu dCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGNh Y2hlYnJhbmNoKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OkdW YXJpYW50ICo+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2hlYWRlcl92YXJpYW50KHJlcG8sIGNhY2hlYnJh bmNoLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1 cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CistfQorLQorLXZvaWQgY29tcG9zZV9idWls ZF9jaHVua2VkX29jaV9lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdz KSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+ IGFyZ3MkKDo6c3RkOjptb3ZlKGFyZ3MpKTsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX2J1aWxkX2NodW5rZWRfb2Np X2VudHJ5cG9pbnQoJmFyZ3MkLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGdldF9oZWFkZXJfdmFyaWFudCAocmVwbywgY2FjaGVicmFuY2gsICZyZXR1cm4k LnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJu IDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyt9CisrCisrdm9pZAorK2NvbXBvc2VfYnVp bGRfY2h1bmtlZF9vY2lfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFy Z3MpCisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfYnVp bGRfY2h1bmtlZF9vY2lfZW50cnlwb2ludCAoJmFyZ3MkLnZhbHVlKTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIGNvbXBvc2VfaW1hZ2UoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQoOjpzdGQ6Om1vdmUoYXJncykpOworLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbXBvc2VfaW1hZ2UoJmFyZ3MkLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0K Kyt2b2lkCisrY29tcG9zZV9pbWFnZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3Mp CisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX2ltYWdlICgmYXJncyQu dmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZv aWQgY29tcG9zZV9yb290ZnNfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g YXJncykgeworLSAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+PiBhcmdzJCg6OnN0ZDo6bW92ZShhcmdzKSk7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9yb290ZnNfZW50cnlw b2ludCgmYXJncyQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytj b21wb3NlX3Jvb3Rmc19lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJn cykKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4+IGFyZ3MkICg6OnN0ZDo6bW92ZSAoYXJncykpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9yb290 ZnNfZW50cnlwb2ludCAoJmFyZ3MkLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7 CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKKysgICAgfQorIH0KKyAKKy12b2lkIGNvbmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFyZ2V0 KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZidWlsZF9yZXBvLCA6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmdGFyZ2V0X3JlcG8pIHsKKy0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25maWd1cmVfYnVp bGRfcmVwb19mcm9tX3RhcmdldChidWlsZF9yZXBvLCB0YXJnZXRfcmVwbyk7CistICBpZiAoZXJy b3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7CistICB9Cisrdm9pZAorK2NvbmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFyZ2V0 ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmYnVpbGRfcmVwbywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnRhcmdldF9yZXBvKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAg ICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpZ3VyZV9idWlsZF9yZXBvX2Zy b21fdGFyZ2V0IChidWlsZF9yZXBvLCB0YXJnZXRfcmVwbyk7CisrICBpZiAoZXJyb3IkLnB0cikK KysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBjb21wb3NlX3ByZXBhcmVfcm9vdGZzKDo6 c3RkOjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50MzJfdCBkZXN0X3Jvb3Rmc19k ZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUpIHsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3By ZXBhcmVfcm9vdGZzKHNyY19yb290ZnNfZGZkLCBkZXN0X3Jvb3Rmc19kZmQsIHRyZWVmaWxlKTsK Ky0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrY29tcG9zZV9wcmVwYXJlX3Jvb3Rm cyAoOjpzdGQ6OmludDMyX3Qgc3JjX3Jvb3Rmc19kZmQsIDo6c3RkOjppbnQzMl90IGRlc3Rfcm9v dGZzX2RmZCwKKysgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnRyZWVmaWxlKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3ByZXBhcmVfcm9vdGZzICgKKysgICAgICBz cmNfcm9vdGZzX2RmZCwgZGVzdF9yb290ZnNfZGZkLCB0cmVlZmlsZSk7CisrICBpZiAoZXJyb3Ik LnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBjb21wb3NlcG9zdF9uc3N3aXRj aF9hbHRmaWxlcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSB7CistICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZXBvc3Rf bnNzd2l0Y2hfYWx0ZmlsZXMocm9vdGZzX2RmZCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9 Cisrdm9pZAorK2NvbXBvc2Vwb3N0X25zc3dpdGNoX2FsdGZpbGVzICg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZGZkKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vwb3N0X25zc3dpdGNoX2FsdGZpbGVz IChyb290ZnNfZGZkKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0K KyAKKy12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3MoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgbmV4dF92ZXJz aW9uLCBib29sIHVuaWZpZWRfY29yZSkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3Mocm9vdGZz X2RmZCwgdHJlZWZpbGUsIG5leHRfdmVyc2lvbiwgdW5pZmllZF9jb3JlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrY29tcG9zZV9wb3N0cHJvY2VzcyAoOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwKKysgICAg ICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBuZXh0X3ZlcnNpb24sIGJvb2wgdW5pZmllZF9j b3JlKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzICgKKysgICAgICByb290ZnNfZGZkLCB0 cmVlZmlsZSwgbmV4dF92ZXJzaW9uLCB1bmlmaWVkX2NvcmUpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgY29tcG9zZV9wb3N0cHJvY2Vzc19maW5h bF9wcmUoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZ0cmVlZmlsZSkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWxfcHJlKHJv b3Rmc19kZmQsIHRyZWVmaWxlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisr Y29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQs IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpCisreworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUgKHJvb3Rmc19kZmQsIHRyZWVmaWxlKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIGNvbXBv c2VfcG9zdHByb2Nlc3NfZmluYWwoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkgeworLSAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nl c3NfZmluYWwocm9vdGZzX2RmZCwgdHJlZWZpbGUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorK3ZvaWQKKytjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsICg6OnN0ZDo6aW50MzJfdCByb290 ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKQorK3sKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwgKHJvb3Rmc19kZmQsIHRyZWVmaWxl KTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIGNv bnZlcnRfdmFyX3RvX3RtcGZpbGVzX2QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1v c3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIHsKKy0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb252ZXJ0 X3Zhcl90b190bXBmaWxlc19kKHJvb3Rmc19kZmQsIGNhbmNlbGxhYmxlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrY29udmVydF92YXJfdG9fdG1wZmlsZXNfZCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSkKKyt7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb252ZXJ0X3Zhcl90b190bXBmaWxlc19kIChyb290ZnNfZGZkLCBjYW5jZWxsYWJsZSk7Cisr ICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCByb290ZnNf cHJlcGFyZV9saW5rcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLCBib29sIHNraXBfdXNybG9jYWwpIHsKKy0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyb290 ZnNfcHJlcGFyZV9saW5rcyhyb290ZnNfZGZkLCB0cmVlZmlsZSwgc2tpcF91c3Jsb2NhbCk7Cist ICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3Jvb3Rmc19wcmVwYXJlX2xpbmtzICg6 OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnRyZWVmaWxlLAorKyAgICAgICAgICAgICAgICAgICAgICBib29sIHNraXBfdXNybG9jYWwpCisr eworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcm9vdGZzX3ByZXBhcmVfbGlua3MgKHJvb3Rmc19kZmQsIHRyZWVmaWxl LCBza2lwX3VzcmxvY2FsKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQor IH0KKyAKKy12b2lkIHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyg6OnN0ZDo6aW50 MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJs ZSkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyhyb290ZnNfZGZkLCBj YW5jZWxsYWJsZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3dvcmthcm91 bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgJmNhbmNlbGxhYmxlKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAor KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHdvcmthcm91bmRfc2VsaW51eF9j cm9zc19sYWJlbGluZyAocm9vdGZzX2RmZCwgY2FuY2VsbGFibGUpOworKyAgaWYgKGVycm9yJC5w dHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgcG9zdHByb2Nlc3NfY2xlYW51cF9y cG1kYig6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcG9zdHByb2Nlc3NfY2xlYW51 cF9ycG1kYihyb290ZnNfZGZkKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisr cG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYiAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkKKyt7 CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkcG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYiAocm9vdGZzX2RmZCk7CisrICBpZiAoZXJy b3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCByZXdyaXRlX3JwbWRiX2Zv cl90YXJnZXQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBub3JtYWxpemUpIHsKKy0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRyZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQocm9vdGZzX2RmZCwgbm9ybWFsaXplKTsKKy0gIGlm IChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrcmV3cml0ZV9ycG1kYl9mb3JfdGFyZ2V0ICg6 OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCBib29sIG5vcm1hbGl6ZSkKKyt7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRyZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQgKHJvb3Rmc19kZmQsIG5vcm1hbGl6ZSk7CisrICBp ZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistOjpzdGQ6OnVpbnQ2NF90 IGRpcmVjdG9yeV9zaXplKDo6c3RkOjppbnQzMl90IGRmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5j ZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIHsKKys6OnN0ZDo6dWludDY0X3QKKytkaXJlY3Rv cnlfc2l6ZSAoOjpzdGQ6OmludDMyX3QgZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxl IGNvbnN0ICZjYW5jZWxsYWJsZSkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6c3RkOjp1 aW50NjRfdD4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJlY3Rvcnlfc2l6ZShkZmQsIGNhbmNlbGxhYmxlLCAm cmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQK KysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJlY3Rvcnlfc2l6ZSAoZGZk LCBjYW5jZWxsYWJsZSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAg IHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0K KyAKKy06OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqZGVwbG95bWVudF9mb3JfaWQo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxv eV9pZCkgeworKzo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICoKKytkZXBsb3ltZW50 X2Zvcl9pZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6 U3RyIGRlcGxveV9pZCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVEZXBsb3ltZW50ICo+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9mb3JfaWQoc3lz cm9vdCwgZGVwbG95X2lkLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgewor LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Cist ICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRk ZXBsb3ltZW50X2Zvcl9pZCAoc3lzcm9vdCwgZGVwbG95X2lkLCAmcmV0dXJuJC52YWx1ZSk7Cisr ICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIGRlcGxveW1lbnRfY2hl Y2tzdW1fZm9yX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1 c3Q6OlN0ciBkZXBsb3lfaWQpIHsKKys6OnJ1c3Q6OlN0cmluZworK2RlcGxveW1lbnRfY2hlY2tz dW1fZm9yX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0 OjpTdHIgZGVwbG95X2lkKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJp bmc+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9jaGVja3N1bV9mb3JfaWQoc3lzcm9vdCwgZGVw bG95X2lkLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50 X2NoZWNrc3VtX2Zvcl9pZCAoc3lzcm9vdCwgZGVwbG95X2lkLCAmcmV0dXJuJC52YWx1ZSk7Cisr ICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3lt ZW50ICpkZXBsb3ltZW50X2dldF9iYXNlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZz eXNyb290LCA6OnJ1c3Q6OlN0ciBvcHRfZGVwbG95X2lkLCA6OnJ1c3Q6OlN0ciBvcHRfb3NfbmFt ZSkgeworKzo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICoKKytkZXBsb3ltZW50X2dl dF9iYXNlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpT dHIgb3B0X2RlcGxveV9pZCwKKysgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBvcHRf b3NfbmFtZSkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVEZXBsb3ltZW50ICo+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9nZXRfYmFzZShzeXNyb290 LCBvcHRfZGVwbG95X2lkLCBvcHRfb3NfbmFtZSwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVy cm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv cihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGRlcGxveW1lbnRfZ2V0X2Jhc2UgKAorKyAgICAgIHN5c3Jvb3QsIG9wdF9kZXBsb3lfaWQs IG9wdF9vc19uYW1lLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAg eworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQor IAorLWJvb2wgZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlmZig6OnJwbW9zdHJlZWN4eDo6R1Zh cmlhbnREaWN0IGNvbnN0ICZkaWN0LCA6OnJwbW9zdHJlZWN4eDo6RXhwb3J0ZWRNYW5pZmVzdERp ZmYgY29uc3QgJmRpZmYpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlmZihkaWN0LCBkaWZmKTsKKytib29s CisrZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlmZiAoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50 RGljdCBjb25zdCAmZGljdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6RXhwb3J0ZWRNYW5pZmVzdERpZmYgY29uc3QgJmRpZmYpIG5vZXhjZXB0Cisrewor KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2FkZF9tYW5p ZmVzdF9kaWZmIChkaWN0LCBkaWZmKTsKKyB9CisgCistdm9pZCBkYWVtb25fc2FuaXR5Y2hlY2tf ZW52aXJvbm1lbnQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qp IHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRkYWVtb25fc2FuaXR5Y2hlY2tfZW52aXJvbm1lbnQoc3lzcm9vdCk7CistICBpZiAo ZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2RhZW1vbl9zYW5pdHljaGVja19lbnZpcm9ubWVu dCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpCisreworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25tZW50IChzeXNyb290KTsKKysgIGlm IChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBk ZXBsb3ltZW50X2dlbmVyYXRlX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNv bnN0ICZkZXBsb3ltZW50KSBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytkZXBsb3ltZW50 X2dlbmVyYXRlX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVw bG95bWVudCkgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3Ry aW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRf Z2VuZXJhdGVfaWQoZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOworLX0KKy0KKy12b2lkIGRlcGxveW1lbnRfcG9wdWxhdGVf dmFyaWFudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnBtb3N0 cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X3BvcHVs YXRlX3ZhcmlhbnQoc3lzcm9vdCwgZGVwbG95bWVudCwgZGljdCk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9nZW5l cmF0ZV9pZCAoZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKKyt9CisrCisrdm9pZAorK2RlcGxveW1lbnRfcG9wdWxhdGVf dmFyaWFudCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95 bWVudCBjb25zdCAmZGVwbG95bWVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpCisreworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk ZGVwbG95bWVudF9wb3B1bGF0ZV92YXJpYW50IChzeXNyb290LCBkZXBsb3ltZW50LCBkaWN0KTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIGdlbmVy YXRlX2Jhc2VsYXllcl9yZWZzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZz eXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3Ry ZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIHsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9i YXNlbGF5ZXJfcmVmcyhzeXNyb290LCByZXBvLCBjYW5jZWxsYWJsZSk7CistICBpZiAoZXJyb3Ik LnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7CistICB9Cisrdm9pZAorK2dlbmVyYXRlX2Jhc2VsYXllcl9yZWZzICg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAg ICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNl bGxhYmxlKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdlbmVyYXRlX2Jhc2VsYXllcl9yZWZzIChzeXNyb290 LCByZXBvLCBjYW5jZWxsYWJsZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAg IH0KKyB9CisgCistdm9pZCB2YXJpYW50X2FkZF9yZW1vdGVfc3RhdHVzKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjLCA6OnJ1c3Q6OlN0 ciBiYXNlX2NoZWNrc3VtLCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0 KSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyhyZXBvLCByZWZzcGVjLCBiYXNlX2No ZWNrc3VtLCBkaWN0KTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrdmFyaWFu dF9hZGRfcmVtb3RlX3N0YXR1cyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJl cG8sIDo6cnVzdDo6U3RyIHJlZnNwZWMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy dXN0OjpTdHIgYmFzZV9jaGVja3N1bSwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25z dCAmZGljdCkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2YXJpYW50X2FkZF9yZW1vdGVfc3RhdHVzIChyZXBv LCByZWZzcGVjLCBiYXNlX2NoZWNrc3VtLCBkaWN0KTsKKysgIGlmIChlcnJvciQucHRyKQorKyAg ICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRN ZXRhIGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQoOjpycG1vc3RyZWVjeHg6Ok9z dHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFu dCBjb25zdCAmY29tbWl0KSB7CisrOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0 YQorK2RlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQgKDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0KQor K3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXll cmVkTWV0YT4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0 KGRlcGxveW1lbnQsIGNvbW1pdCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIp IHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxv eW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQgKAorKyAgICAgIGRlcGxveW1lbnQsIGNvbW1p dCwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9 CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJwbW9z dHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhIGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfbG9h ZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpIHsKKys6OnJwbW9zdHJlZWN4eDo6 RGVwbG95bWVudExheWVyZWRNZXRhCisrZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2FkICg6OnJw bW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3lt ZW50KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OkRlcGxveW1l bnRMYXllcmVkTWV0YT4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2xvYWQo cmVwbywgZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsK Ky0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwor LSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk ZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2FkIChyZXBvLCBkZXBsb3ltZW50LCAmcmV0dXJuJC52 YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnBtb3N0cmVlY3h4OjpPdmVy cmlkZVJlcGxhY2VtZW50U291cmNlIHBhcnNlX292ZXJyaWRlX3NvdXJjZSg6OnJ1c3Q6OlN0ciBz b3VyY2UpIHsKKys6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZQorK3Bh cnNlX292ZXJyaWRlX3NvdXJjZSAoOjpydXN0OjpTdHIgc291cmNlKQorK3sKKyAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2U+IHJl dHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkcGFyc2Vfb3ZlcnJpZGVfc291cmNlKHNvdXJjZSwgJnJldHVybiQudmFsdWUp OworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVy biQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2Vfb3ZlcnJpZGVfc291cmNlIChzb3VyY2UsICZy ZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpycG1vc3RyZWVj eHg6OlBhcnNlZFJldmlzaW9uIHBhcnNlX3JldmlzaW9uKDo6cnVzdDo6U3RyIHNvdXJjZSkgewor Kzo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbgorK3BhcnNlX3JldmlzaW9uICg6OnJ1c3Q6 OlN0ciBzb3VyY2UpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6 UGFyc2VkUmV2aXNpb24+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2VfcmV2aXNpb24oc291cmNlLCAmcmV0 dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6 Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2VfcmV2aXNpb24gKHNvdXJjZSwgJnJldHVy biQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBn ZW5lcmF0ZV9vYmplY3RfcGF0aCg6OnJ1c3Q6OlN0ciBiYXNlLCA6OnJ1c3Q6OlN0ciBuZXh0X3Nl Z21lbnQpIHsKKys6OnJ1c3Q6OlN0cmluZworK2dlbmVyYXRlX29iamVjdF9wYXRoICg6OnJ1c3Q6 OlN0ciBiYXNlLCA6OnJ1c3Q6OlN0ciBuZXh0X3NlZ21lbnQpCisreworICAgOjpydXN0OjpNYXli ZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9vYmplY3RfcGF0 aChiYXNlLCBuZXh0X3NlZ21lbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRy KSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3Ik KTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGdlbmVyYXRlX29iamVjdF9wYXRoIChiYXNlLCBuZXh0X3NlZ21lbnQsICZyZXR1cm4kLnZh bHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBmYWlscG9pbnQoOjpydXN0 OjpTdHIgcCkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGZhaWxwb2ludChwKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0K Kyt2b2lkCisrZmFpbHBvaW50ICg6OnJ1c3Q6OlN0ciBwKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRmYWlscG9pbnQgKHAp OworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6c3RkOjpz aXplX3QgUnBtSW1wb3J0ZXJGbGFnczo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgeworLSAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJG9wZXJhdG9y JHNpemVvZigpOworKzo6c3RkOjpzaXplX3QKKytScG1JbXBvcnRlckZsYWdzOjpsYXlvdXQ6OnNp emUgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3Ikc2l6ZW9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6 ZV90IFJwbUltcG9ydGVyRmxhZ3M6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3Ik YWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QKKytScG1JbXBvcnRlckZsYWdzOjpsYXlvdXQ6OmFs aWduICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRScG1JbXBvcnRlckZsYWdzJG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAorLTo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPiBycG1faW1wb3J0ZXJfZmxhZ3Nf bmV3X2VtcHR5KCkgbm9leGNlcHQgeworLSAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpScG1JbXBvcnRlckZsYWdzPjo6ZnJvbV9yYXcocnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkoKSk7CisrOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+CisrcnBtX2ltcG9ydGVyX2ZsYWdzX25ld19lbXB0 eSAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXJGbGFncz46OmZyb21fcmF3ICgKKysgICAgICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkcnBtX2ltcG9ydGVyX2ZsYWdzX25ld19lbXB0eSAoKSk7CisgfQorIAorLWJvb2wg UnBtSW1wb3J0ZXJGbGFnczo6aXNfaW1hX2VuYWJsZWQoKSBjb25zdCBub2V4Y2VwdCB7CistICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3MkaXNfaW1h X2VuYWJsZWQoKnRoaXMpOworK2Jvb2wKKytScG1JbXBvcnRlckZsYWdzOjppc19pbWFfZW5hYmxl ZCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRpc19pbWFfZW5hYmxlZCAoKnRoaXMpOworIH0KKyAKKy06 OnN0ZDo6c2l6ZV90IFJwbUltcG9ydGVyOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7CistICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJHNp emVvZigpOworKzo6c3RkOjpzaXplX3QKKytScG1JbXBvcnRlcjo6bGF5b3V0OjpzaXplICgpIG5v ZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBv cnRlciRvcGVyYXRvciRzaXplb2YgKCk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgUnBtSW1wb3J0 ZXI6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJGFsaWdub2YoKTsKKys6OnN0ZDo6c2l6 ZV90CisrUnBtSW1wb3J0ZXI6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKKyt7CisrICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJGFsaWdu b2YgKCk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj4g cnBtX2ltcG9ydGVyX25ldyg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSwgOjpydXN0OjpTdHIgb3N0cmVl X2JyYW5jaCwgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgY29uc3QgJmZsYWdzKSB7 CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPgorK3JwbV9pbXBvcnRl cl9uZXcgKDo6cnVzdDo6U3RyIHBrZ19uYW1lLCA6OnJ1c3Q6OlN0ciBvc3RyZWVfYnJhbmNoLAor KyAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0 ICZmbGFncykKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlcj4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtX2ltcG9ydGVyX25ldyhwa2df bmFtZSwgb3N0cmVlX2JyYW5jaCwgZmxhZ3MsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRycG1faW1wb3J0ZXJfbmV3ICgKKysgICAgICBwa2dfbmFtZSwgb3N0cmVlX2JyYW5jaCwgZmxh Z3MsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAg fQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0 OjpTdHJpbmcgUnBtSW1wb3J0ZXI6OmhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUoOjpydXN0OjpT dHIgcGF0aCkgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrUnBtSW1wb3J0ZXI6OmhhbmRs ZV90cmFuc2xhdGVfcGF0aG5hbWUgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0CisreworICAg OjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRoYW5kbGVfdHJhbnNsYXRlX3BhdGhuYW1l KCp0aGlzLCBwYXRoLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0 dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIk aGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSAoKnRoaXMsIHBhdGgsICZyZXR1cm4kLnZhbHVlKTsK KysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6 U3RyaW5nIFJwbUltcG9ydGVyOjpvc3RyZWVfYnJhbmNoKCkgY29uc3Qgbm9leGNlcHQgeworKzo6 cnVzdDo6U3RyaW5nCisrUnBtSW1wb3J0ZXI6Om9zdHJlZV9icmFuY2ggKCkgY29uc3Qgbm9leGNl cHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwor LSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9zdHJlZV9icmFuY2go KnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZh bHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvc3RyZWVf YnJhbmNoICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChy ZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcgUnBtSW1wb3J0ZXI6OnBrZ19u YW1lKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrUnBtSW1wb3J0ZXI6OnBr Z19uYW1lICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1 c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1J bXBvcnRlciRwa2dfbmFtZSgqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyJHBrZ19uYW1lICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBScG1JbXBvcnRlcjo6ZG9j X2ZpbGVzX2FyZV9maWx0ZXJlZCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCgq dGhpcyk7CisrYm9vbAorK1JwbUltcG9ydGVyOjpkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkICgpIGNv bnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRS cG1JbXBvcnRlciRkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkICgqdGhpcyk7CisgfQorIAorLXZvaWQg UnBtSW1wb3J0ZXI6OmRvY19maWxlc19pbnNlcnQoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQg eworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19p bnNlcnQoKnRoaXMsIHBhdGgpOworK3ZvaWQKKytScG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2luc2Vy dCAoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2luc2VydCAoKnRoaXMsIHBhdGgpOworIH0K KyAKKy1ib29sIFJwbUltcG9ydGVyOjpkb2NfZmlsZXNfY29udGFpbnMoOjpydXN0OjpTdHIgcGF0 aCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRScG1JbXBvcnRlciRkb2NfZmlsZXNfY29udGFpbnMoKnRoaXMsIHBhdGgpOworK2Jvb2wKKytS cG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2NvbnRhaW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBu b2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXIkZG9jX2ZpbGVzX2NvbnRhaW5zICgqdGhpcywgcGF0aCk7CisgfQorIAorLXZvaWQgUnBt SW1wb3J0ZXI6OnJwbWZpX292ZXJyaWRlc19pbnNlcnQoOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6 OnVpbnQ2NF90IGluZGV4KSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2luc2VydCgqdGhpcywgcGF0aCwgaW5kZXgp OworK3ZvaWQKKytScG1JbXBvcnRlcjo6cnBtZmlfb3ZlcnJpZGVzX2luc2VydCAoOjpydXN0OjpT dHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90IGluZGV4KSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNfaW5zZXJ0ICgq dGhpcywgcGF0aCwgaW5kZXgpOworIH0KKyAKKy1ib29sIFJwbUltcG9ydGVyOjpycG1maV9vdmVy cmlkZXNfY29udGFpbnMoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlk ZXNfY29udGFpbnMoKnRoaXMsIHBhdGgpOworK2Jvb2wKKytScG1JbXBvcnRlcjo6cnBtZmlfb3Zl cnJpZGVzX2NvbnRhaW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdAorK3sKKysg IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3Zl cnJpZGVzX2NvbnRhaW5zICgqdGhpcywgcGF0aCk7CisgfQorIAorLTo6c3RkOjp1aW50NjRfdCBS cG1JbXBvcnRlcjo6cnBtZmlfb3ZlcnJpZGVzX2dldCg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBu b2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9y dGVyJHJwbWZpX292ZXJyaWRlc19nZXQoKnRoaXMsIHBhdGgpOworKzo6c3RkOjp1aW50NjRfdAor K1JwbUltcG9ydGVyOjpycG1maV9vdmVycmlkZXNfZ2V0ICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25z dCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBt SW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2dldCAoKnRoaXMsIHBhdGgpOworIH0KKyAKKy1ib29s IFJwbUltcG9ydGVyOjppc19pbWFfZW5hYmxlZCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaXNfaW1hX2VuYWJsZWQo KnRoaXMpOworK2Jvb2wKKytScG1JbXBvcnRlcjo6aXNfaW1hX2VuYWJsZWQgKCkgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9y dGVyJGlzX2ltYV9lbmFibGVkICgqdGhpcyk7CisgfQorIAorLXZvaWQgUnBtSW1wb3J0ZXI6OnR3 ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyg6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZm aWxlX2luZm8pIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRScG1JbXBvcnRlciR0d2Vha19pbXBvcnRlZF9maWxlX2luZm8oKnRoaXMsIGZpbGVfaW5mbyk7 Cisrdm9pZAorK1JwbUltcG9ydGVyOjp0d2Vha19pbXBvcnRlZF9maWxlX2luZm8gKDo6cnBtb3N0 cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Qgbm9leGNlcHQKKyt7Cisr ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkdHdlYWtfaW1wb3J0ZWRf ZmlsZV9pbmZvICgqdGhpcywgZmlsZV9pbmZvKTsKKyB9CisgCistYm9vbCBScG1JbXBvcnRlcjo6 aXNfZmlsZV9maWx0ZXJlZCg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJ bmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0IHsKKytib29sCisrUnBtSW1wb3J0ZXI6OmlzX2Zp bGVfZmlsdGVyZWQgKDo6cnVzdDo6U3RyIHBhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8g Y29uc3QgJmZpbGVfaW5mbykgY29uc3QKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+ IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaXNfZmlsZV9maWx0ZXJlZCgqdGhpcywgcGF0aCwg ZmlsZV9pbmZvLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CistfQorLQorLXZvaWQgUnBtSW1w b3J0ZXI6OnRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwg OjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1 c2VybmFtZSwgOjpydXN0OjpTdHIgZ3JvdXBuYW1lKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkdHJhbnNs YXRlX3RvX3RtcGZpbGVzX2VudHJ5KCp0aGlzLCBhYnNfcGF0aCwgZmlsZV9pbmZvLCB1c2VybmFt ZSwgZ3JvdXBuYW1lKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ciRpc19maWxlX2ZpbHRlcmVkICgKKysgICAgICAqdGhpcywgcGF0aCwgZmlsZV9pbmZvLCAmcmV0 dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisrfQorKworK3ZvaWQKKytScG1JbXBv cnRlcjo6dHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5ICg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4 eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3Vw bmFtZSkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciR0cmFuc2xhdGVfdG9fdG1wZmlsZXNf ZW50cnkgKAorKyAgICAgICAgICAqdGhpcywgYWJzX3BhdGgsIGZpbGVfaW5mbywgdXNlcm5hbWUs IGdyb3VwbmFtZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9Cisg CistYm9vbCBScG1JbXBvcnRlcjo6aGFzX3RtcGZpbGVzX2VudHJpZXMoKSBjb25zdCBub2V4Y2Vw dCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGhh c190bXBmaWxlc19lbnRyaWVzKCp0aGlzKTsKKytib29sCisrUnBtSW1wb3J0ZXI6Omhhc190bXBm aWxlc19lbnRyaWVzICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRoYXNfdG1wZmlsZXNfZW50cmllcyAoKnRoaXMp OworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBScG1JbXBvcnRlcjo6c2VyaWFsaXplX3RtcGZpbGVz X2NvbnRlbnQoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytScG1JbXBvcnRl cjo6c2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHNlcmlhbGl6ZV90bXBmaWxlc19jb250ZW50 KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkc2VyaWFs aXplX3RtcGZpbGVzX2NvbnRlbnQgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4g OjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyB0bXBm aWxlc190cmFuc2xhdGUoOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmls ZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3Ry IGdyb3VwbmFtZSkgeworKzo6cnVzdDo6U3RyaW5nCisrdG1wZmlsZXNfdHJhbnNsYXRlICg6OnJ1 c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9p bmZvLAorKyAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6 U3RyIGdyb3VwbmFtZSkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5n PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHRtcGZpbGVzX3RyYW5zbGF0ZShhYnNfcGF0aCwgZmlsZV9pbmZvLCB1 c2VybmFtZSwgZ3JvdXBuYW1lLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG1wZmls ZXNfdHJhbnNsYXRlICgKKysgICAgICBhYnNfcGF0aCwgZmlsZV9pbmZvLCB1c2VybmFtZSwgZ3Jv dXBuYW1lLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZv aWQgYXBwZW5kX2RyYWN1dF9yYW5kb21fY3Bpbyg6OnN0ZDo6aW50MzJfdCBmZCkgeworLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFw cGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8oZmQpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQor K3ZvaWQKKythcHBlbmRfZHJhY3V0X3JhbmRvbV9jcGlvICg6OnN0ZDo6aW50MzJfdCBmZCkKKyt7 CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkYXBwZW5kX2RyYWN1dF9yYW5kb21fY3BpbyAoZmQpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6c3RkOjppbnQzMl90IGluaXRyYW1mc19vdmVy bGF5X2dlbmVyYXRlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZXMsIDo6 cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlKSB7CisrOjpzdGQ6OmludDMy X3QKKytpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGNvbnN0ICZmaWxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpCisreworICAgOjpydXN0OjpNYXliZVVu aW5pdDw6OnN0ZDo6aW50MzJfdD4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpbml0cmFtZnNfb3ZlcmxheV9nZW5l cmF0ZShmaWxlcywgY2FuY2VsbGFibGUsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQu cHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGluaXRyYW1mc19vdmVybGF5X2dlbmVyYXRlIChmaWxlcywgY2FuY2VsbGFibGUsICZy ZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBqb3VybmFs X3ByaW50X3N0YWdpbmdfZmFpbHVyZSgpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSgpOworK3ZvaWQKKytqb3Vy bmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSAoKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSAoKTsKKyB9Cisg Cistdm9pZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2soOjpydXN0OjpTdHIgbXNnKSBub2V4 Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19i ZWdpbl90YXNrKG1zZyk7Cisrdm9pZAorK2NvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fdGFzayAoOjpy dXN0OjpTdHIgbXNnKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2sgKG1zZyk7CisgfQorIAorLXZvaWQgY29uc29s ZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1zKDo6cnVzdDo6U3RyIG1zZywgOjpzdGQ6OnVpbnQ2NF90 IG4pIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3By b2dyZXNzX2JlZ2luX25faXRlbXMobXNnLCBuKTsKKyt2b2lkCisrY29uc29sZV9wcm9ncmVzc19i ZWdpbl9uX2l0ZW1zICg6OnJ1c3Q6OlN0ciBtc2csIDo6c3RkOjp1aW50NjRfdCBuKSBub2V4Y2Vw dAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2Jl Z2luX25faXRlbXMgKG1zZywgbik7CisgfQorIAorLXZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdp bl9wZXJjZW50KDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fcGVyY2VudChtc2cpOworK3ZvaWQK Kytjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNl cHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19i ZWdpbl9wZXJjZW50IChtc2cpOworIH0KKyAKKy12b2lkIGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X21l c3NhZ2UoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19zZXRfbWVzc2FnZShtc2cpOworK3ZvaWQKKytjb25z b2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0Cisrewor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X21lc3Nh Z2UgKG1zZyk7CisgfQorIAorLXZvaWQgY29uc29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2Uo OjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29uc29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2UobXNnKTsKKyt2b2lkCisrY29uc29s ZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2UgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQKKyt7 CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19zZXRfc3Vi X21lc3NhZ2UgKG1zZyk7CisgfQorIAorLXZvaWQgY29uc29sZV9wcm9ncmVzc191cGRhdGUoOjpz dGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb25zb2xlX3Byb2dyZXNzX3VwZGF0ZShuKTsKKyt2b2lkCisrY29uc29sZV9wcm9ncmVzc191 cGRhdGUgKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3VwZGF0ZSAobik7CisgfQorIAorLXZvaWQg Y29uc29sZV9wcm9ncmVzc19lbmQoOjpydXN0OjpTdHIgc3VmZml4KSBub2V4Y2VwdCB7CistICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19lbmQoc3VmZml4KTsK Kyt2b2lkCisrY29uc29sZV9wcm9ncmVzc19lbmQgKDo6cnVzdDo6U3RyIHN1ZmZpeCkgbm9leGNl cHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19l bmQgKHN1ZmZpeCk7CisgfQorIAorLWJvb2wgSGlzdG9yeUVudHJ5OjpvcGVyYXRvcj09KEhpc3Rv cnlFbnRyeSBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRlcSgqdGhpcywgcmhzKTsK Kytib29sCisrSGlzdG9yeUVudHJ5OjpvcGVyYXRvcj09IChIaXN0b3J5RW50cnkgY29uc3QgJnJo cykgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRlcSAoKnRoaXMsIHJocyk7CisgfQorIAorLWJvb2wg SGlzdG9yeUVudHJ5OjpvcGVyYXRvciE9KEhpc3RvcnlFbnRyeSBjb25zdCAmcmhzKSBjb25zdCBu b2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlF bnRyeSRvcGVyYXRvciRuZSgqdGhpcywgcmhzKTsKKytib29sCisrSGlzdG9yeUVudHJ5OjpvcGVy YXRvciE9IChIaXN0b3J5RW50cnkgY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQKKyt7CisrICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRu ZSAoKnRoaXMsIHJocyk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgSGlzdG9yeUN0eDo6bGF5b3V0 OjpzaXplKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJHNpemVvZigpOworKzo6c3RkOjpzaXplX3QKKytIaXN0b3J5 Q3R4OjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkb3BlcmF0b3Ikc2l6ZW9mICgpOworIH0KKyAKKy06 OnN0ZDo6c2l6ZV90IEhpc3RvcnlDdHg6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkb3BlcmF0b3IkYWxp Z25vZigpOworKzo6c3RkOjpzaXplX3QKKytIaXN0b3J5Q3R4OjpsYXlvdXQ6OmFsaWduICgpIG5v ZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5 Q3R4JG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpIaXN0b3J5Q3R4PiBoaXN0b3J5X2N0eF9uZXcoKSB7CisrOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6Okhpc3RvcnlDdHg+CisraGlzdG9yeV9jdHhfbmV3ICgpCisreworICAgOjpydXN0 OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4+IHJl dHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkaGlzdG9yeV9jdHhfbmV3KCZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRoaXN0b3J5X2N0eF9uZXcgKCZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQor KyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK KyB9CisgCistOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSBIaXN0b3J5Q3R4OjpuZXh0X2Vu dHJ5KCkgeworKzo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkKKytIaXN0b3J5Q3R4OjpuZXh0 X2VudHJ5ICgpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6SGlz dG9yeUVudHJ5PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkbmV4dF9lbnRyeSgqdGhpcywgJnJl dHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisr ICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9yeUN0eCRuZXh0X2VudHJ5 ICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwor KyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy12 b2lkIGhpc3RvcnlfcHJ1bmUoKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGlzdG9yeV9wcnVuZSgpOworLSAgaWYgKGVycm9y JC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOworLSAgfQorK3ZvaWQKKytoaXN0b3J5X3BydW5lICgpCisreworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhpc3Rvcnlf cHJ1bmUgKCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCist OjpzdGQ6OnNpemVfdCBUb2tpb0hhbmRsZTo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgeworLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRvcGVyYXRvciRz aXplb2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrVG9raW9IYW5kbGU6OmxheW91dDo6c2l6ZSAoKSBu b2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9I YW5kbGUkb3BlcmF0b3Ikc2l6ZW9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFRva2lvSGFu ZGxlOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRvcGVyYXRvciRhbGlnbm9mKCk7CisrOjpzdGQ6OnNp emVfdAorK1Rva2lvSGFuZGxlOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0CisreworKyAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRvcGVyYXRvciRhbGln bm9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFRva2lvRW50ZXJHdWFyZDo6bGF5b3V0Ojpz aXplKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU b2tpb0VudGVyR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mKCk7CisrOjpzdGQ6OnNpemVfdAorK1Rva2lv RW50ZXJHdWFyZDo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mICgp OworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFRva2lvRW50ZXJHdWFyZDo6bGF5b3V0OjphbGlnbigp IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9F bnRlckd1YXJkJG9wZXJhdG9yJGFsaWdub2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrVG9raW9FbnRl ckd1YXJkOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQkb3BlcmF0b3IkYWxpZ25vZiAoKTsK KyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPiB0b2tpb19o YW5kbGVfZ2V0KCkgbm9leGNlcHQgeworLSAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUb2tpb0hhbmRsZT46OmZyb21fcmF3KHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0 b2tpb19oYW5kbGVfZ2V0KCkpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hh bmRsZT4KKyt0b2tpb19oYW5kbGVfZ2V0ICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIDo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmZyb21fcmF3ICgKKysgICAgICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG9raW9faGFuZGxlX2dldCAoKSk7CisgfQorIAor LTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+IFRva2lvSGFuZGxl OjplbnRlcigpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6ZnJvbV9yYXcocnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRva2lvSGFuZGxlJGVudGVyKCp0aGlzKSk7CisrOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlRva2lvRW50ZXJHdWFyZD4KKytUb2tpb0hhbmRsZTo6ZW50ZXIgKCkgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50 ZXJHdWFyZD46OmZyb21fcmF3ICgKKysgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VG9raW9IYW5kbGUkZW50ZXIgKCp0aGlzKSk7CisgfQorIAorLWJvb2wgc2NyaXB0X2lzX2lnbm9y ZWQoOjpydXN0OjpTdHIgcGtnLCA6OnJ1c3Q6OlN0ciBzY3JpcHQsIGJvb2wgdXNlX2tlcm5lbF9p bnN0YWxsKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHNjcmlwdF9pc19pZ25vcmVkKHBrZywgc2NyaXB0LCB1c2Vfa2VybmVsX2luc3RhbGwpOworK2Jv b2wKKytzY3JpcHRfaXNfaWdub3JlZCAoOjpydXN0OjpTdHIgcGtnLCA6OnJ1c3Q6OlN0ciBzY3Jp cHQsIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2NyaXB0X2lzX2lnbm9yZWQgKHBrZywgc2NyaXB0LCB1 c2Vfa2VybmVsX2luc3RhbGwpOworIH0KKyAKKy12b2lkIHRlc3R1dGlsc19lbnRyeXBvaW50KDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmd2KSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJv cDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3YkKDo6c3RkOjptb3ZlKGFyZ3YpKTsK Ky0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCR0ZXN0dXRpbHNfZW50cnlwb2ludCgmYXJndiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5w dHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOworLSAgfQorK3ZvaWQKKyt0ZXN0dXRpbHNfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGFyZ3YpCisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+PiBhcmd2JCAoOjpzdGQ6Om1vdmUgKGFyZ3YpKTsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0ZXN0 dXRpbHNfZW50cnlwb2ludCAoJmFyZ3YkLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAg ICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBtYXliZV9zaGVsbF9xdW90ZSg6 OnJ1c3Q6OlN0ciBpbnB1dCkgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrbWF5YmVfc2hl bGxfcXVvdGUgKDo6cnVzdDo6U3RyIGlucHV0KSBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5 YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkbWF5YmVfc2hlbGxfcXVvdGUoaW5wdXQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJl dHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRtYXliZV9zaGVsbF9xdW90ZSAoaW5wdXQsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgUmVmc3BlYzo6 b3BlcmF0b3I9PShSZWZzcGVjIGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVmc3BlYyRvcGVyYXRvciRlcSgqdGhpcywg cmhzKTsKKytib29sCisrUmVmc3BlYzo6b3BlcmF0b3I9PSAoUmVmc3BlYyBjb25zdCAmcmhzKSBj b25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UmVmc3BlYyRvcGVyYXRvciRlcSAoKnRoaXMsIHJocyk7CisgfQorIAorLWJvb2wgUmVmc3BlYzo6 b3BlcmF0b3IhPShSZWZzcGVjIGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisr UmVmc3BlYzo6b3BlcmF0b3IhPSAoUmVmc3BlYyBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdAor K3sKKyAgIHJldHVybiAhKCp0aGlzID09IHJocyk7CisgfQorIAorLWJvb2wgT3ZlcnJpZGVSZXBs YWNlbWVudDo6b3BlcmF0b3I9PShPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICZyaHMpIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkT3ZlcnJp ZGVSZXBsYWNlbWVudCRvcGVyYXRvciRlcSgqdGhpcywgcmhzKTsKKytib29sCisrT3ZlcnJpZGVS ZXBsYWNlbWVudDo6b3BlcmF0b3I9PSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmcmhzKSBj b25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk T3ZlcnJpZGVSZXBsYWNlbWVudCRvcGVyYXRvciRlcSAoKnRoaXMsIHJocyk7CisgfQorIAorLWJv b2wgT3ZlcnJpZGVSZXBsYWNlbWVudDo6b3BlcmF0b3IhPShPdmVycmlkZVJlcGxhY2VtZW50IGNv bnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrT3ZlcnJpZGVSZXBsYWNlbWVudDo6 b3BlcmF0b3IhPSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2Vw dAorK3sKKyAgIHJldHVybiAhKCp0aGlzID09IHJocyk7CisgfQorIAorLTo6c3RkOjpzaXplX3Qg VHJlZWZpbGU6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0b3Ikc2l6ZW9mKCk7CisrOjpzdGQ6OnNp emVfdAorK1RyZWVmaWxlOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJHNpemVvZiAoKTsK KyB9CisgCistOjpzdGQ6OnNpemVfdCBUcmVlZmlsZTo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0 IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0 b3IkYWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QKKytUcmVlZmlsZTo6bGF5b3V0OjphbGlnbiAo KSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkb3BlcmF0b3IkYWxpZ25vZiAoKTsKKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXcoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVz dDo6U3RyIGJhc2VhcmNoKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl PgorK3RyZWVmaWxlX25ldyAoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2Vh cmNoKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXcoZmlsZW5hbWUsIGJhc2Vh cmNoLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1 cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXcg KGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxl X25ld19lbXB0eSgpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+Cisr dHJlZWZpbGVfbmV3X2VtcHR5ICgpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25l d19lbXB0eSgmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2VtcHR5 ICgmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0K KysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2Zyb21fc3RyaW5nKDo6 cnVzdDo6U3RyIGJ1ZiwgYm9vbCBjbGllbnQpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGU+CisrdHJlZWZpbGVfbmV3X2Zyb21fc3RyaW5nICg6OnJ1c3Q6OlN0ciBidWYs IGJvb2wgY2xpZW50KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZnJvbV9z dHJpbmcoYnVmLCBjbGllbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7 CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK Ky0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHRyZWVmaWxlX25ld19mcm9tX3N0cmluZyAoYnVmLCBjbGllbnQsICZyZXR1cm4kLnZhbHVlKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfY29tcG9zZSg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpy dXN0OjpTdHIgYmFzZWFyY2gpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGU+CisrdHJlZWZpbGVfbmV3X2NvbXBvc2UgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6 OlN0ciBiYXNlYXJjaCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NvbXBv c2UoZmlsZW5hbWUsIGJhc2VhcmNoLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCR0cmVlZmlsZV9uZXdfY29tcG9zZSAoZmlsZW5hbWUsIGJhc2VhcmNoLCAmcmV0dXJuJC52 YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NsaWVudCg6OnJ1c3Q6OlN0ciBmaWxlbmFt ZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGU+CisrdHJlZWZpbGVfbmV3X2NsaWVudCAoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6 cnVzdDo6U3RyIGJhc2VhcmNoKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdf Y2xpZW50KGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9y JC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudCAoZmlsZW5hbWUsIGJhc2VhcmNoLCAmcmV0dXJu JC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVy biA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0Yyg6OnJ1c3Q6 OlN0ciBiYXNlYXJjaCkgeworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4K Kyt0cmVlZmlsZV9uZXdfY2xpZW50X2Zyb21fZXRjICg6OnJ1c3Q6OlN0ciBiYXNlYXJjaCkKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0YyhiYXNlYXJj aCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2Ns aWVudF9mcm9tX2V0YyAoYmFzZWFyY2gsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZh bHVlKTsKKyB9CisgCistOjpzdGQ6OnVpbnQzMl90IHRyZWVmaWxlX2RlbGV0ZV9jbGllbnRfZXRj KCkgeworKzo6c3RkOjp1aW50MzJfdAorK3RyZWVmaWxlX2RlbGV0ZV9jbGllbnRfZXRjICgpCisr eworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6dWludDMyX3Q+IHJldHVybiQ7CistICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk dHJlZWZpbGVfZGVsZXRlX2NsaWVudF9ldGMoJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9y JC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkdHJlZWZpbGVfZGVsZXRlX2NsaWVudF9ldGMgKCZyZXR1cm4kLnZhbHVlKTsKKysg IGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3Zl IChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHIgVHJlZWZpbGU6OmdldF93b3Jr ZGlyKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OlN0 cj46Om5ld191bmNoZWNrZWQocnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF93b3JrZGlyKCp0aGlzKSk7CisrOjpydXN0OjpTdHIKKytUcmVlZmlsZTo6Z2V0X3dvcmtkaXIg KCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gOjpydXN0OjppbXBsPDo6cnVzdDo6U3Ry Pjo6bmV3X3VuY2hlY2tlZCAoCisrICAgICAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF93b3JrZGlyICgqdGhpcykpOworIH0KKyAKKy06OnN0ZDo6aW50MzJfdCBUcmVl ZmlsZTo6Z2V0X3Bhc3N3ZF9mZCgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Bhc3N3ZF9mZCgqdGhpcyk7CisrOjpzdGQ6Omlu dDMyX3QKKytUcmVlZmlsZTo6Z2V0X3Bhc3N3ZF9mZCAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Bhc3N3ZF9mZCAoKnRo aXMpOworIH0KKyAKKy06OnN0ZDo6aW50MzJfdCBUcmVlZmlsZTo6Z2V0X2dyb3VwX2ZkKCkgbm9l eGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRn ZXRfZ3JvdXBfZmQoKnRoaXMpOworKzo6c3RkOjppbnQzMl90CisrVHJlZWZpbGU6OmdldF9ncm91 cF9mZCAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2dyb3VwX2ZkICgqdGhpcyk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5n IFRyZWVmaWxlOjpnZXRfanNvbl9zdHJpbmcoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpT dHJpbmcKKytUcmVlZmlsZTo6Z2V0X2pzb25fc3RyaW5nICgpIGNvbnN0IG5vZXhjZXB0Cisrewor ICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfanNvbl9zdHJpbmcoKnRoaXMsICZy ZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfanNvbl9zdHJpbmcgKCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFs dWUpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9v c3RyZWVfbGF5ZXJzKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPgorK1RyZWVmaWxlOjpnZXRfb3N0cmVlX2xheWVycyAoKSBjb25zdCBub2V4Y2VwdAorK3sK KyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1 cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVf bGF5ZXJzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0 dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X29zdHJlZV9sYXllcnMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gVHJlZWZpbGU6OmdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJzKCkgY29uc3Qgbm9leGNlcHQg eworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRfb3N0cmVlX292 ZXJyaWRlX2xheWVycyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJzKCp0aGlz LCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9vdmVy cmlkZV9sYXllcnMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g VHJlZWZpbGU6OmdldF9hbGxfb3N0cmVlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X2FsbF9vc3RyZWVfbGF5ZXJz ICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2FsbF9vc3RyZWVfbGF5ZXJzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7 CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2FsbF9vc3RyZWVfbGF5ZXJzICgqdGhpcywgJnJl dHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9 CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfcmVwb3MoKSBj b25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+CisrVHJlZWZpbGU6 OmdldF9yZXBvcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvcygqdGhpcywgJnJldHVybiQudmFsdWUpOwor LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvcyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsK KysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNl cHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRfcGFja2Fn ZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXMoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJl dHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Cisr ICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0 cmluZyBUcmVlZmlsZTo6cmVxdWlyZV9hdXRvbWF0aWNfdmVyc2lvbl9wcmVmaXgoKSBjb25zdCB7 CisrOjpydXN0OjpTdHJpbmcKKytUcmVlZmlsZTo6cmVxdWlyZV9hdXRvbWF0aWNfdmVyc2lvbl9w cmVmaXggKCkgY29uc3QKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5n PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4 KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRy ZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9uX3ByZWZpeCAoKnRoaXMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysg ICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9v bCBUcmVlZmlsZTo6YWRkX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNr YWdlcywgYm9vbCBhbGxvd19leGlzdGluZykgeworLSAgOjpydXN0OjpNYW51YWxseURyb3A8Ojpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQoOjpzdGQ6Om1vdmUocGFja2FnZXMp KTsKKytib29sCisrVHJlZWZpbGU6OmFkZF9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKQorK3sKKysgIDo6cnVzdDo6TWFu dWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkICg6OnN0ZDo6 bW92ZSAocGFja2FnZXMpKTsKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsK Ky0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXMoKnRoaXMsICZwYWNrYWdlcyQudmFsdWUsIGFsbG93 X2V4aXN0aW5nLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3Bh Y2thZ2VzICgKKysgICAgICAqdGhpcywgJnBhY2thZ2VzJC52YWx1ZSwgYWxsb3dfZXhpc3Rpbmcs ICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQor KyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBUcmVl ZmlsZTo6aGFzX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFja2FnZXMoKnRoaXMpOworK2Jvb2wK KytUcmVlZmlsZTo6aGFzX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFja2FnZXMgKCp0aGlz KTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfbG9j YWxfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+CisrVHJlZWZpbGU6OmdldF9sb2NhbF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAorK3sK KyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1 cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NhbF9w YWNrYWdlcygqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJl dHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9sb2NhbF9wYWNrYWdlcyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0 ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmFkZF9sb2Nh bF9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxs b3dfZXhpc3RpbmcpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7CisrYm9vbAorK1Ry ZWVmaWxlOjphZGRfbG9jYWxfcGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBw YWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZykKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJv cDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCAoOjpzdGQ6Om1vdmUgKHBh Y2thZ2VzKSk7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkYWRkX2xvY2FsX3BhY2thZ2VzKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19l eGlzdGluZywgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAg cmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9sb2Nh bF9wYWNrYWdlcyAoCisrICAgICAgKnRoaXMsICZwYWNrYWdlcyQudmFsdWUsIGFsbG93X2V4aXN0 aW5nLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAg IH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9w YWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4K KytUcmVlZmlsZTo6Z2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoKSBjb25zdCBub2V4 Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICgqdGhp cywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6YWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdl cyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3Rp bmcpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n Pj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7CisrYm9vbAorK1RyZWVmaWxlOjph ZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gcGFja2FnZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgYWxsb3dfZXhpc3RpbmcpCisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQgKDo6c3RkOjptb3ZlIChwYWNrYWdlcykp OworICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFk ZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoKnRoaXMsICZwYWNrYWdlcyQudmFsdWUsIGFs bG93X2V4aXN0aW5nLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9 CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRhZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICgKKysgICAgICAgICAgKnRoaXMs ICZwYWNrYWdlcyQudmFsdWUsIGFsbG93X2V4aXN0aW5nLCAmcmV0dXJuJC52YWx1ZSk7CisrICBp ZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAo cmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlcyg6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfbm9lbnQpIHsK Ky0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFj a2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7CisrYm9vbAorK1RyZWVmaWxlOjpyZW1vdmVf cGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxv d19ub2VudCkKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4+IHBhY2thZ2VzJCAoOjpzdGQ6Om1vdmUgKHBhY2thZ2VzKSk7CisgICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2Vz KCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19ub2VudCwgJnJldHVybiQudmFsdWUpOwor LSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlcyAoCisrICAgICAgKnRoaXMsICZw YWNrYWdlcyQudmFsdWUsIGFsbG93X25vZW50LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJy b3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJl cGxhY2VtZW50PiBUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25z dCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFj ZW1lbnQ+CisrVHJlZWZpbGU6OmdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICgpIGNvbnN0 IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKnRo aXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVl KTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNf b3ZlcnJpZGVfcmVwbGFjZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0 ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6Omhhc19wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVw bGFjZSgqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVw bGFjZSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCp0aGlzKTsK KyB9CisgCistYm9vbCBUcmVlZmlsZTo6YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoOjpy cG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgcmVwbGFjZW1lbnQpIG5vZXhjZXB0IHsK Ky0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50PiByZXBsYWNlbWVudCQoOjpzdGQ6Om1vdmUocmVwbGFjZW1lbnQpKTsKKy0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRl X3JlcGxhY2UoKnRoaXMsICZyZXBsYWNlbWVudCQudmFsdWUpOworK2Jvb2wKKytUcmVlZmlsZTo6 YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJl cGxhY2VtZW50IHJlcGxhY2VtZW50KSBub2V4Y2VwdAorK3sKKysgIDo6cnVzdDo6TWFudWFsbHlE cm9wPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiByZXBsYWNlbWVudCQgKAor KyAgICAgIDo6c3RkOjptb3ZlIChyZXBsYWNlbWVudCkpOworKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAo KnRoaXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVwbGFjZW1lbnQkLnZhbHVlKTsKKyB9Cisg CistYm9vbCBUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZSg6OnJ1c3Q6 OlN0ciBwYWNrYWdlKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UoKnRoaXMsIHBh Y2thZ2UpOworK2Jvb2wKKytUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFj ZSAoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxh Y2UgKCp0aGlzLCBwYWNrYWdlKTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IFRyZWVmaWxlOjpnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCgpIGNvbnN0IG5v ZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X3Bh Y2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsK Ky0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3Zl cnJpZGVfcmVwbGFjZV9sb2NhbCgqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworLX0KKy0KKy12b2lkIFRyZWVmaWxlOjphZGRfcGFj a2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g cGFja2FnZXMpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7CistICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoKnRoaXMsICZwYWNrYWdlcyQudmFs dWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgqdGhp cywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKKyt9CisrCisrdm9pZAorK1RyZWVmaWxlOjphZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFj ZV9sb2NhbCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzKQorK3sKKysgIDo6 cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMk ICg6OnN0ZDo6bW92ZSAocGFja2FnZXMpKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgqdGhpcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnBhY2thZ2VzJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKyB9CisgCistYm9vbCBUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVw bGFjZV9sb2NhbCg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRl X3JlcGxhY2VfbG9jYWwoKnRoaXMsIHBhY2thZ2UpOworK2Jvb2wKKytUcmVlZmlsZTo6cmVtb3Zl X3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKCp0aGlzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKCkgY29uc3Qg bm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRf cGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0 OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRl X3JlbW92ZSgqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJl dHVybiQudmFsdWUpOworLX0KKy0KKy12b2lkIFRyZWVmaWxlOjphZGRfcGFja2FnZXNfb3ZlcnJp ZGVfcmVtb3ZlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcykgeworLSAgOjpy dXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQo OjpzdGQ6Om1vdmUocGFja2FnZXMpKTsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJp ZGVfcmVtb3ZlKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7 CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK Ky0gIH0KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2Fn ZXNfb3ZlcnJpZGVfcmVtb3ZlICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyt9CisrCisrdm9pZAorK1RyZWVmaWxlOjphZGRf cGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFj a2FnZXMpCisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+PiBwYWNrYWdlcyQgKDo6c3RkOjptb3ZlIChwYWNrYWdlcykpOworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoKnRoaXMsICZwYWNrYWdlcyQu dmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLWJv b2wgVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSg6OnJ1c3Q6OlN0ciBw YWNrYWdlKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSgqdGhpcywgcGFja2FnZSk7 CisrYm9vbAorK1RyZWVmaWxlOjpyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUgKDo6cnVz dDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUgKCp0aGlz LCBwYWNrYWdlKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6aGFzX3BhY2thZ2VzX292ZXJyaWRl X3JlbW92ZV9uYW1lKDo6cnVzdDo6U3RyIG5hbWUpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJy aWRlX3JlbW92ZV9uYW1lKCp0aGlzLCBuYW1lKTsKKytib29sCisrVHJlZWZpbGU6Omhhc19wYWNr YWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSAoOjpydXN0OjpTdHIgbmFtZSkgY29uc3Qgbm9leGNl cHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhh c19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSAoKnRoaXMsIG5hbWUpOworIH0KKyAKKy1i b29sIFRyZWVmaWxlOjpyZW1vdmVfYWxsX292ZXJyaWRlcygpIG5vZXhjZXB0IHsKKy0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX2FsbF9vdmVycmlk ZXMoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6cmVtb3ZlX2FsbF9vdmVycmlkZXMgKCkgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JHJlbW92ZV9hbGxfb3ZlcnJpZGVzICgqdGhpcyk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OnJl bW92ZV9hbGxfcGFja2FnZXMoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfcGFja2FnZXMoKnRoaXMpOworK2Jvb2wK KytUcmVlZmlsZTo6cmVtb3ZlX2FsbF9wYWNrYWdlcyAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX2FsbF9wYWNrYWdl cyAoKnRoaXMpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6 OmdldF9leGNsdWRlX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRfZXhjbHVkZV9wYWNrYWdlcyAoKSBjb25zdCBu b2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9leGNsdWRlX3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2V4Y2x1ZGVfcGFja2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7 CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6 OlN0cmluZyBUcmVlZmlsZTo6Z2V0X3BsYXRmb3JtX21vZHVsZSgpIGNvbnN0IG5vZXhjZXB0IHsK Kys6OnJ1c3Q6OlN0cmluZworK1RyZWVmaWxlOjpnZXRfcGxhdGZvcm1fbW9kdWxlICgpIGNvbnN0 IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0 dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGxhdGZv cm1fbW9kdWxlKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X3BsYXRmb3JtX21vZHVsZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2luc3RhbGxfbGFuZ3MoKSBjb25zdCBub2V4Y2VwdCB7Cisr OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+CisrVHJlZWZpbGU6OmdldF9pbnN0YWxsX2xhbmdz ICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2luc3RhbGxfbGFuZ3MoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5zdGFsbF9sYW5ncyAoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6 cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpmb3JtYXRfaW5zdGFsbF9sYW5nc19tYWNybygpIGNvbnN0 IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK1RyZWVmaWxlOjpmb3JtYXRfaW5zdGFsbF9s YW5nc19tYWNybyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8oKnRoaXMsICZyZXR1cm4kLnZhbHVl KTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRmb3JtYXRfaW5zdGFsbF9sYW5nc19tYWNybyAoKnRo aXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2xv Y2tmaWxlX3JlcG9zKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPgorK1RyZWVmaWxlOjpnZXRfbG9ja2ZpbGVfcmVwb3MgKCkgY29uc3Qgbm9leGNlcHQKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0 dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9ja2Zp bGVfcmVwb3MoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRn ZXRfbG9ja2ZpbGVfcmVwb3MgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0ciBUcmVlZmlsZTo6 Z2V0X3JlZigpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpTdHI+OjpuZXdfdW5jaGVja2VkKHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfcmVmKCp0aGlzKSk7CisrOjpydXN0OjpTdHIKKytUcmVlZmlsZTo6Z2V0X3JlZiAoKSBj b25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiA6OnJ1c3Q6OmltcGw8OjpydXN0OjpTdHI+Ojpu ZXdfdW5jaGVja2VkICgKKysgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3JlZiAoKnRoaXMpKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6Z2V0X2NsaXdyYXAo KSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9jbGl3cmFwKCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6OmdldF9jbGl3 cmFwICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xpd3JhcCAoKnRoaXMpOworIH0KKyAKKy06OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9jbGl3cmFwX2JpbmFyaWVzKCkgY29uc3Qg bm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRf Y2xpd3JhcF9iaW5hcmllcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3cmFwX2JpbmFyaWVzKCp0aGlzLCAm cmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Cisr ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NsaXdyYXBfYmluYXJp ZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy12b2lkIFRyZWVmaWxlOjpzZXRfY2xpd3JhcChib29sIGVuYWJs ZWQpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRz ZXRfY2xpd3JhcCgqdGhpcywgZW5hYmxlZCk7Cisrdm9pZAorK1RyZWVmaWxlOjpzZXRfY2xpd3Jh cCAoYm9vbCBlbmFibGVkKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRzZXRfY2xpd3JhcCAoKnRoaXMsIGVuYWJsZWQpOworIH0KKyAKKy06OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9jb250YWluZXJfY21kKCkgY29u c3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpn ZXRfY29udGFpbmVyX2NtZCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXJfY21kKCp0aGlzLCAmcmV0 dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NvbnRhaW5lcl9jbWQgKCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFs dWUpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMoKSBj b25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9yZWFkb25seV9leGVjdXRhYmxlcygqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxl OjpnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWFkb25seV9leGVj dXRhYmxlcyAoKnRoaXMpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpnZXRfZG9jdW1lbnRhdGlv bigpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2RvY3VtZW50YXRpb24oKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6 Z2V0X2RvY3VtZW50YXRpb24gKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9kb2N1bWVudGF0aW9uICgqdGhpcyk7 CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmdldF9yZWNvbW1lbmRzKCkgY29uc3Qgbm9leGNlcHQg eworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVj b21tZW5kcygqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpnZXRfcmVjb21tZW5kcyAoKSBjb25z dCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X3JlY29tbWVuZHMgKCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6Z2V0 X3NlbGludXgoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zZWxpbnV4KCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6 OmdldF9zZWxpbnV4ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51eCAoKnRoaXMpOworIH0KKyAKKy1i b29sIFRyZWVmaWxlOjpnZXRfc3lzdXNlcnNfaXNfZm9yY2VkKCkgY29uc3Qgbm9leGNlcHQgewor LSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc3lzdXNl cnNfaXNfZm9yY2VkKCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6OmdldF9zeXN1c2Vyc19pc19m b3JjZWQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zeXN1c2Vyc19pc19mb3JjZWQgKCp0aGlzKTsKKyB9Cisg CistOjpzdGQ6OnVpbnQzMl90IFRyZWVmaWxlOjpnZXRfc2VsaW51eF9sYWJlbF92ZXJzaW9uKCkg Y29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfc2VsaW51eF9sYWJlbF92ZXJzaW9uKCp0aGlzKTsKKys6OnN0ZDo6dWludDMy X3QKKytUcmVlZmlsZTo6Z2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbiAoKSBjb25zdCBub2V4Y2Vw dAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X3NlbGludXhfbGFiZWxfdmVyc2lvbiAoKnRoaXMpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBU cmVlZmlsZTo6Z2V0X2dwZ19rZXkoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcK KytUcmVlZmlsZTo6Z2V0X2dwZ19rZXkgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ncGdfa2V5KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7 CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dwZ19rZXkgKCp0aGlzLCAmcmV0dXJuJC52YWx1 ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1 c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCgpIGNvbnN0 IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK1RyZWVmaWxlOjpnZXRfYXV0b21hdGljX3Zl cnNpb25fc3VmZml4ICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5p dDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfYXV0b21hdGljX3ZlcnNpb25fc3VmZml4KCp0aGlzLCAmcmV0dXJuJC52 YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZp eCAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmdldF9jb250YWluZXIoKSBjb25zdCBu b2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9jb250YWluZXIoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6Z2V0X2NvbnRhaW5lciAo KSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2NvbnRhaW5lciAoKnRoaXMpOworIH0KKyAKKy1ib29sIFRyZWVmaWxl OjpnZXRfbWFjaGluZWlkX2NvbXBhdCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X21hY2hpbmVpZF9jb21wYXQoKnRo aXMpOworK2Jvb2wKKytUcmVlZmlsZTo6Z2V0X21hY2hpbmVpZF9jb21wYXQgKCkgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9tYWNoaW5laWRfY29tcGF0ICgqdGhpcyk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2V0Y19ncm91cF9tZW1iZXJzKCkgY29uc3Qgbm9leGNl cHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRfZXRjX2dy b3VwX21lbWJlcnMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXRjX2dyb3VwX21lbWJlcnMoKnRoaXMsICZyZXR1 cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXRjX2dyb3VwX21lbWJlcnMg KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1 bGVzKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzKCp0aGlzKTsKKytib29s CisrVHJlZWZpbGU6OmdldF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMgKCkgY29uc3Qgbm9leGNl cHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMgKCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVlZmls ZTo6dXNlX2tlcm5lbF9pbnN0YWxsKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR1c2Vfa2VybmVsX2luc3RhbGwoKnRoaXMp OworK2Jvb2wKKytUcmVlZmlsZTo6dXNlX2tlcm5lbF9pbnN0YWxsICgpIGNvbnN0IG5vZXhjZXB0 CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR1c2Vf a2VybmVsX2luc3RhbGwgKCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6Z2V0X2ltYSgp IGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X2ltYSgqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpnZXRfaW1hICgpIGNv bnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfaW1hICgqdGhpcyk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxl OjpnZXRfcmVsZWFzZXZlcigpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK1Ry ZWVmaWxlOjpnZXRfcmVsZWFzZXZlciAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlbGVhc2V2ZXIoKnRoaXMsICZyZXR1cm4kLnZhbHVl KTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVsZWFzZXZlciAoKnRoaXMsICZyZXR1cm4k LnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAor LTo6cnBtb3N0cmVlY3h4OjpSZXBvTWV0YWRhdGFUYXJnZXQgVHJlZWZpbGU6OmdldF9yZXBvX21l dGFkYXRhX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0KCp0aGlzKTsK Kys6OnJwbW9zdHJlZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0CisrVHJlZWZpbGU6OmdldF9yZXBv X21ldGFkYXRhX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0ICgq dGhpcyk7CisgfQorIAorLTo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQg VHJlZWZpbGU6OmdldF9hZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0 IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Fk dmlzb3JpZXNfbWV0YWRhdGFfdGFyZ2V0KCp0aGlzKTsKKys6OnJwbW9zdHJlZWN4eDo6QWR2aXNv cmllc01ldGFkYXRhVGFyZ2V0CisrVHJlZWZpbGU6OmdldF9hZHZpc29yaWVzX21ldGFkYXRhX3Rh cmdldCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Fkdmlzb3JpZXNfbWV0YWRhdGFfdGFyZ2V0ICgqdGhpcyk7 CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OnJwbWRiX2JhY2tlbmRfaXNfdGFyZ2V0KCkgY29uc3Qg bm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRycG1kYl9iYWNrZW5kX2lzX3RhcmdldCgqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpycG1k Yl9iYWNrZW5kX2lzX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcnBtZGJfYmFja2VuZF9pc190YXJnZXQg KCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6c2hvdWxkX25vcm1hbGl6ZV9ycG1kYigp IGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkc2hvdWxkX25vcm1hbGl6ZV9ycG1kYigqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxl OjpzaG91bGRfbm9ybWFsaXplX3JwbWRiICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzaG91bGRfbm9ybWFsaXplX3Jw bWRiICgqdGhpcyk7CisgfQorIAorLTo6cnBtb3N0cmVlY3h4OjpPcHRVc3JMb2NhbCBUcmVlZmls ZTo6Z2V0X29wdF91c3Jsb2NhbCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29wdF91c3Jsb2NhbCgqdGhpcyk7Cisr OjpycG1vc3RyZWVjeHg6Ok9wdFVzckxvY2FsCisrVHJlZWZpbGU6OmdldF9vcHRfdXNybG9jYWwg KCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9vcHRfdXNybG9jYWwgKCp0aGlzKTsKKyB9CisgCistOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4KDo6cnVz dDo6U3RyIHBhY2thZ2UpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4KKytUcmVlZmlsZTo6Z2V0X2ZpbGVzX3JlbW92ZV9yZWdleCAoOjpydXN0OjpTdHIgcGFj a2FnZSkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4KCp0aGlzLCBwYWNrYWdlLCAmcmV0 dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2ZpbGVzX3JlbW92ZV9yZWdl eCAoKnRoaXMsIHBhY2thZ2UsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRf Y2hlY2tzdW0oOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIGNvbnN0IHsK Kys6OnJ1c3Q6OlN0cmluZworK1RyZWVmaWxlOjpnZXRfY2hlY2tzdW0gKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NoZWNrc3VtKCp0 aGlzLCByZXBvLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfY2hlY2tzdW0gKCp0aGlzLCByZXBvLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJy b3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRfb3N0cmVlX3Jl ZigpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK1RyZWVmaWxlOjpnZXRfb3N0 cmVlX3JlZiAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpy dXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X29zdHJlZV9yZWYoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6 OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfb3N0cmVlX3JlZiAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U2xpY2U8 OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0PiBUcmVlZmlsZTo6Z2V0X3JlcG9fcGFj a2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gOjpydXN0OjppbXBsPDo6cnVzdDo6 U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0Pj46OnNsaWNlKHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb19wYWNrYWdlcygqdGhpcykpOwor Kzo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0PgorK1RyZWVm aWxlOjpnZXRfcmVwb19wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpTbGljZTw6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29u c3Q+Pjo6c2xpY2UgKAorKyAgICAgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfcmVwb19wYWNrYWdlcyAoKnRoaXMpKTsKKyB9CisgCistdm9pZCBUcmVlZmlsZTo6Y2xl YXJfcmVwb19wYWNrYWdlcygpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRjbGVhcl9yZXBvX3BhY2thZ2VzKCp0aGlzKTsKKyt2b2lkCisrVHJlZWZp bGU6OmNsZWFyX3JlcG9fcGFja2FnZXMgKCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkY2xlYXJfcmVwb19wYWNrYWdlcyAoKnRoaXMpOworIH0K KyAKKy12b2lkIFRyZWVmaWxlOjpwcmV0dHlwcmludF9qc29uX3N0ZG91dCgpIGNvbnN0IG5vZXhj ZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmV0dHlwcmlu dF9qc29uX3N0ZG91dCgqdGhpcyk7Cisrdm9pZAorK1RyZWVmaWxlOjpwcmV0dHlwcmludF9qc29u X3N0ZG91dCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRwcmV0dHlwcmludF9qc29uX3N0ZG91dCAoKnRoaXMpOworIH0KKyAKKy12 b2lkIFRyZWVmaWxlOjpwcmludF9kZXByZWNhdGlvbl93YXJuaW5ncygpIGNvbnN0IG5vZXhjZXB0 IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9kZXByZWNh dGlvbl93YXJuaW5ncygqdGhpcyk7Cisrdm9pZAorK1RyZWVmaWxlOjpwcmludF9kZXByZWNhdGlv bl93YXJuaW5ncyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRwcmludF9kZXByZWNhdGlvbl93YXJuaW5ncyAoKnRoaXMpOworIH0K KyAKKy12b2lkIFRyZWVmaWxlOjpwcmludF9leHBlcmltZW50YWxfbm90aWNlcygpIGNvbnN0IG5v ZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9l eHBlcmltZW50YWxfbm90aWNlcygqdGhpcyk7Cisrdm9pZAorK1RyZWVmaWxlOjpwcmludF9leHBl cmltZW50YWxfbm90aWNlcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9leHBlcmltZW50YWxfbm90aWNlcyAoKnRoaXMp OworIH0KKyAKKy12b2lkIFRyZWVmaWxlOjpzYW5pdHljaGVja19leHRlcm5hbHMoKSBjb25zdCB7 CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkc2FuaXR5Y2hlY2tfZXh0ZXJuYWxzKCp0aGlzKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrVHJlZWZpbGU6OnNhbml0eWNoZWNrX2V4dGVybmFscyAo KSBjb25zdAorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzYW5pdHljaGVja19leHRlcm5hbHMgKCp0aGlzKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gVHJlZWZpbGU6OmltcG9ydGVyX2Zs YWdzKDo6cnVzdDo6U3RyIHBrZ19uYW1lKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+Ojpmcm9tX3JhdyhycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW1wb3J0ZXJfZmxhZ3MoKnRoaXMsIHBr Z19uYW1lKSk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+ CisrVHJlZWZpbGU6OmltcG9ydGVyX2ZsYWdzICg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSkgY29uc3Qg bm9leGNlcHQKKyt7CisrICByZXR1cm4gOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUlt cG9ydGVyRmxhZ3M+Ojpmcm9tX3JhdyAoCisrICAgICAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGltcG9ydGVyX2ZsYWdzICgqdGhpcywgcGtnX25hbWUpKTsKKyB9CisgCist OjpydXN0OjpTdHJpbmcgVHJlZWZpbGU6OndyaXRlX3JlcG92YXJzKDo6c3RkOjppbnQzMl90IHdv cmtkaXJfZGZkX3JhdykgY29uc3QgeworKzo6cnVzdDo6U3RyaW5nCisrVHJlZWZpbGU6OndyaXRl X3JlcG92YXJzICg6OnN0ZDo6aW50MzJfdCB3b3JrZGlyX2RmZF9yYXcpIGNvbnN0CisreworICAg OjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSR3cml0ZV9yZXBvdmFycygqdGhpcywgd29ya2Rpcl9kZmRfcmF3LCAmcmV0dXJuJC52YWx1ZSk7 CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkd3JpdGVfcmVwb3ZhcnMgKAorKyAgICAgICp0aGlzLCB3 b3JrZGlyX2RmZF9yYXcsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAg ICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9 CisgCistdm9pZCBUcmVlZmlsZTo6c2V0X3JlbGVhc2V2ZXIoOjpydXN0OjpTdHIgcmVsZWFzZXZl cikgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHNldF9yZWxlYXNldmVyKCp0aGlzLCByZWxlYXNldmVyKTsKKy0g IGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrVHJlZWZpbGU6OnNldF9yZWxlYXNldmVy ICg6OnJ1c3Q6OlN0ciByZWxlYXNldmVyKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9y ZWxlYXNldmVyICgqdGhpcywgcmVsZWFzZXZlcik7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAg eworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7CisrICAgIH0KKyB9CisgCistdm9pZCBUcmVlZmlsZTo6c2V0X3JlY29tbWVuZHMoYm9vbCB2 YWwpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfcmVjb21tZW5kcygqdGhpcywgdmFsKTsKKy0gIGlmIChl cnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrVHJlZWZpbGU6OnNldF9yZWNvbW1lbmRzIChib29s IHZhbCkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X3JlY29tbWVuZHMgKCp0aGlzLCB2YWwpOworKyAg aWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgVHJlZWZpbGU6 OmVuYWJsZV9yZXBvKDo6cnVzdDo6U3RyIHJlcG8pIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRlbmFibGVfcmVw bygqdGhpcywgcmVwbyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK1RyZWVm aWxlOjplbmFibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVwbykKKyt7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZW5h YmxlX3JlcG8gKCp0aGlzLCByZXBvKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysg ICAgfQorIH0KKyAKKy12b2lkIFRyZWVmaWxlOjpkaXNhYmxlX3JlcG8oOjpydXN0OjpTdHIgcmVw bykgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGRpc2FibGVfcmVwbygqdGhpcywgcmVwbyk7CistICBpZiAoZXJy b3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7CistICB9Cisrdm9pZAorK1RyZWVmaWxlOjpkaXNhYmxlX3JlcG8gKDo6cnVzdDo6 U3RyIHJlcG8pCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGRpc2FibGVfcmVwbyAoKnRoaXMsIHJlcG8pOwor KyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgVHJlZWZp bGU6OnZhbGlkYXRlX2Zvcl9jb250YWluZXIoKSBjb25zdCB7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdmFsaWRh dGVfZm9yX2NvbnRhaW5lcigqdGhpcyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9p ZAorK1RyZWVmaWxlOjp2YWxpZGF0ZV9mb3JfY29udGFpbmVyICgpIGNvbnN0CisreworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJHZhbGlkYXRlX2Zvcl9jb250YWluZXIgKCp0aGlzKTsKKysgIGlmIChlcnJvciQucHRy KQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6UmVmc3BlYyBUcmVl ZmlsZTo6Z2V0X2Jhc2VfcmVmc3BlYygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJwbW9zdHJlZWN4 eDo6UmVmc3BlYworK1RyZWVmaWxlOjpnZXRfYmFzZV9yZWZzcGVjICgpIGNvbnN0IG5vZXhjZXB0 CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6UmVmc3BlYz4gcmV0 dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYmFzZV9y ZWZzcGVjKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0 dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X2Jhc2VfcmVmc3BlYyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgVHJlZWZpbGU6OnJlYmFzZSg6OnJ1 c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsIDo6cnVz dDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24pIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZWJhc2UoKnRoaXMsIG5ld19yZWZzcGVjLCBj dXN0b21fb3JpZ2luX3VybCwgY3VzdG9tX29yaWdpbl9kZXNjcmlwdGlvbik7Cisrdm9pZAorK1Ry ZWVmaWxlOjpyZWJhc2UgKDo6cnVzdDo6U3RyIG5ld19yZWZzcGVjLCA6OnJ1c3Q6OlN0ciBjdXN0 b21fb3JpZ2luX3VybCwKKysgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBjdXN0b21fb3Jp Z2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRyZWJhc2UgKCp0aGlzLCBuZXdfcmVmc3BlYywgY3VzdG9tX29yaWdpbl91 cmwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0 b21fb3JpZ2luX2Rlc2NyaXB0aW9uKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcgVHJlZWZpbGU6 OmdldF9vcmlnaW5fY3VzdG9tX3VybCgpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmlu ZworK1RyZWVmaWxlOjpnZXRfb3JpZ2luX2N1c3RvbV91cmwgKCkgY29uc3Qgbm9leGNlcHQKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcmlnaW5fY3VzdG9tX3VybCgq dGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcmlnaW5f Y3VzdG9tX3VybCAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRf b3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlvbigpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0 cmluZworK1RyZWVmaWxlOjpnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlvbiAoKSBjb25zdCBu b2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVy biQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29yaWdpbl9j dXN0b21fZGVzY3JpcHRpb24oKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0 ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlvbiAoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6 cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRfb3ZlcnJpZGVfY29tbWl0KCkgY29uc3Qgbm9leGNl cHQgeworKzo6cnVzdDo6U3RyaW5nCisrVHJlZWZpbGU6OmdldF9vdmVycmlkZV9jb21taXQgKCkg Y29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5n PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9v dmVycmlkZV9jb21taXQoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6 bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfb3ZlcnJpZGVfY29tbWl0ICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0 dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBUcmVlZmlsZTo6 c2V0X292ZXJyaWRlX2NvbW1pdCg6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQgeworLSAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9vdmVycmlkZV9jb21taXQo KnRoaXMsIGNoZWNrc3VtKTsKKyt2b2lkCisrVHJlZWZpbGU6OnNldF9vdmVycmlkZV9jb21taXQg KDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfb3ZlcnJpZGVfY29tbWl0ICgqdGhpcywgY2hlY2tzdW0p OworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9pbml0 cmFtZnNfZXRjX2ZpbGVzKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRfaW5pdHJhbWZzX2V0Y19maWxlcyAoKSBjb25zdCBub2V4 Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9pbml0cmFtZnNfZXRjX2ZpbGVzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1 ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy1ib29s IFRyZWVmaWxlOjpoYXNfaW5pdHJhbWZzX2V0Y19maWxlcygpIGNvbnN0IG5vZXhjZXB0IHsKKy0g IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX2luaXRyYW1m c19ldGNfZmlsZXMoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6aGFzX2luaXRyYW1mc19ldGNf ZmlsZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGhhc19pbml0cmFtZnNfZXRjX2ZpbGVzICgqdGhpcyk7CisgfQor IAorLWJvb2wgVHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2soOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJv cDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGZpbGVzJCg6OnN0ZDo6bW92ZShmaWxlcykp OworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0cmFt ZnNfZXRjX2ZpbGVzX3RyYWNrKCp0aGlzLCAmZmlsZXMkLnZhbHVlKTsKKytib29sCisrVHJlZWZp bGU6OmluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2sgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBmaWxlcykgbm9leGNlcHQKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4+IGZpbGVzJCAoOjpzdGQ6Om1vdmUgKGZpbGVzKSk7CisrICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmls ZXNfdHJhY2sgKCp0aGlzLCAmZmlsZXMkLnZhbHVlKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6 aW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBm aWxlcykgbm9leGNlcHQgeworLSAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+PiBmaWxlcyQoOjpzdGQ6Om1vdmUoZmlsZXMpKTsKKy0gIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRy YWNrKCp0aGlzLCAmZmlsZXMkLnZhbHVlKTsKKytib29sCisrVHJlZWZpbGU6OmluaXRyYW1mc19l dGNfZmlsZXNfdW50cmFjayAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4 Y2VwdAorK3sKKysgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPj4gZmlsZXMkICg6OnN0ZDo6bW92ZSAoZmlsZXMpKTsKKysgIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrICgq dGhpcywgJmZpbGVzJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmluaXRyYW1mc19l dGNfZmlsZXNfdW50cmFja19hbGwoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwo KnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6aW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrX2Fs bCAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrX2FsbCAoKnRoaXMpOworIH0KKyAK Ky1ib29sIFRyZWVmaWxlOjpnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUoKSBjb25zdCBub2V4Y2Vw dCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9p bml0cmFtZnNfcmVnZW5lcmF0ZSgqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpnZXRfaW5pdHJh bWZzX3JlZ2VuZXJhdGUgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSAoKnRo aXMpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9p bml0cmFtZnNfYXJncygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4KKytUcmVlZmlsZTo6Z2V0X2luaXRyYW1mc19hcmdzICgpIGNvbnN0IG5vZXhjZXB0Cisr eworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJl dHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRy YW1mc19hcmdzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X2luaXRyYW1mc19hcmdzICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBUcmVlZmlsZTo6c2V0X2lu aXRyYW1mc19yZWdlbmVyYXRlKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGFyZ3MpIG5vZXhjZXB0IHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gYXJncyQoOjpzdGQ6Om1vdmUoYXJncykpOworLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSgqdGhp cywgZW5hYmxlZCwgJmFyZ3MkLnZhbHVlKTsKKyt2b2lkCisrVHJlZWZpbGU6OnNldF9pbml0cmFt ZnNfcmVnZW5lcmF0ZSAoYm9vbCBlbmFibGVkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g YXJncykgbm9leGNlcHQKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkICg6OnN0ZDo6bW92ZSAoYXJncykpOworKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSAoKnRo aXMsIGVuYWJsZWQsICZhcmdzJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFRyZWVm aWxlOjpnZXRfdW5jb25maWd1cmVkX3N0YXRlKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6 U3RyaW5nCisrVHJlZWZpbGU6OmdldF91bmNvbmZpZ3VyZWRfc3RhdGUgKCkgY29uc3Qgbm9leGNl cHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwor LSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF91bmNvbmZpZ3VyZWRf c3RhdGUoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1 cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf dW5jb25maWd1cmVkX3N0YXRlICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6bWF5X3Jl cXVpcmVfbG9jYWxfYXNzZW1ibHkoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG1heV9yZXF1aXJlX2xvY2FsX2Fzc2VtYmx5 KCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6Om1heV9yZXF1aXJlX2xvY2FsX2Fzc2VtYmx5ICgp IGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSAoKnRoaXMpOworIH0KKyAKKy1i b29sIFRyZWVmaWxlOjpoYXNfYW55X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfYW55X3BhY2thZ2Vz KCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6Omhhc19hbnlfcGFja2FnZXMgKCkgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGhhc19hbnlfcGFja2FnZXMgKCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6bWVyZ2Vf dHJlZWZpbGUoOjpydXN0OjpTdHIgdHJlZWZpbGUpIHsKKytib29sCisrVHJlZWZpbGU6Om1lcmdl X3RyZWVmaWxlICg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5p bml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkbWVyZ2VfdHJlZWZpbGUoKnRoaXMsIHRy ZWVmaWxlLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRt ZXJnZV90cmVlZmlsZSAoKnRoaXMsIHRyZWVmaWxlLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmdldF9ub19pbml0cmFtZnMoKSBj b25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9ub19pbml0cmFtZnMoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6Z2V0X25v X2luaXRyYW1mcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X25vX2luaXRyYW1mcyAoKnRoaXMpOworIH0KKyAK Ky06OnN0ZDo6c2l6ZV90IFJlcG9QYWNrYWdlOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7Cist ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJG9wZXJhdG9y JHNpemVvZigpOworKzo6c3RkOjpzaXplX3QKKytSZXBvUGFja2FnZTo6bGF5b3V0OjpzaXplICgp IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBv UGFja2FnZSRvcGVyYXRvciRzaXplb2YgKCk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgUmVwb1Bh Y2thZ2U6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJG9wZXJhdG9yJGFsaWdub2YoKTsKKys6OnN0ZDo6 c2l6ZV90CisrUmVwb1BhY2thZ2U6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKKyt7CisrICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJG9wZXJhdG9yJGFs aWdub2YgKCk7CisgfQorIAorLTo6cnVzdDo6U3RyIFJlcG9QYWNrYWdlOjpnZXRfcmVwbygpIGNv bnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiA6OnJ1c3Q6OmltcGw8OjpydXN0OjpTdHI+OjpuZXdf dW5jaGVja2VkKHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRnZXRfcmVw bygqdGhpcykpOworKzo6cnVzdDo6U3RyCisrUmVwb1BhY2thZ2U6OmdldF9yZXBvICgpIGNvbnN0 IG5vZXhjZXB0CisreworKyAgcmV0dXJuIDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OlN0cj46Om5ld191 bmNoZWNrZWQgKAorKyAgICAgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2Fn ZSRnZXRfcmVwbyAoKnRoaXMpKTsKKyt9CisrCisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ CisrUmVwb1BhY2thZ2U6OmdldF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJGdldF9wYWNrYWdlcyAo KnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52 YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBSZXBvUGFja2FnZTo6 Z2V0X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgeworKy8vIFJldHVybiB0aGUgbGlzdCBvZiBy ZXBvIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgdG8gc2VhcmNoCisrLy8gKGUuZy4gWyIvZXRj L3l1bS5yZXBvcy5kIiwgIi91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIl0pLgorKzo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPgorK2dldF9yZXBvc19kaXJzICgpIG5vZXhjZXB0CisreworICAgOjpy dXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Cist ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2UkZ2V0X3BhY2thZ2VzKCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X3JlcG9zX2RpcnMgKCZyZXR1 cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQor IAorLTo6cnVzdDo6U3RyaW5nIHZhcnN1YnN0aXR1dGUoOjpydXN0OjpTdHIgcywgOjpydXN0OjpW ZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZ2YXJzKSB7CisrOjpydXN0 OjpTdHJpbmcKKyt2YXJzdWJzdGl0dXRlICg6OnJ1c3Q6OlN0ciBzLCA6OnJ1c3Q6OlZlYzw6OnJw bW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJnZhcnMpCisreworICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2YXJzdWJzdGl0dXRlKHMs IHZhcnMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJl dHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR2YXJzdWJzdGl0dXRlIChzLCB2 YXJzLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAg IH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZmVhdHVyZXMoKSBub2V4Y2VwdCB7CisrOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+CisrZ2V0X2ZlYXR1cmVzICgpIG5vZXhjZXB0CisreworICAg OjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7 CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2ZlYXR1cmVzKCZyZXR1cm4kLnZh bHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfZmVhdHVyZXMgKCZyZXR1cm4kLnZhbHVlKTsKKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5n IGdldF9ycG1fYmFzZWFyY2goKSBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytnZXRfcnBt X2Jhc2VhcmNoICgpIG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6 OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcnBt X2Jhc2VhcmNoKCZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcnBtX2Jhc2VhcmNo ICgmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OworIH0KKyAKKy06OnN0ZDo6aW50MzJfdCBzZWFsZWRfbWVtZmQoOjpydXN0OjpTdHIgZGVzY3Jp cHRpb24sIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNvbnRlbnQpIHsKKys6 OnN0ZDo6aW50MzJfdAorK3NlYWxlZF9tZW1mZCAoOjpydXN0OjpTdHIgZGVzY3JpcHRpb24sIDo6 cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNvbnRlbnQpCisreworICAgOjpydXN0 OjpNYXliZVVuaW5pdDw6OnN0ZDo6aW50MzJfdD4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzZWFsZWRfbWVtZmQo ZGVzY3JpcHRpb24sIGNvbnRlbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRy KSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3Ik KTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHNlYWxlZF9tZW1mZCAoZGVzY3JpcHRpb24sIGNvbnRlbnQsICZyZXR1cm4kLnZhbHVlKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBydW5uaW5nX2luX3N5c3RlbWQoKSBu b2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bm5pbmdf aW5fc3lzdGVtZCgpOworK2Jvb2wKKytydW5uaW5nX2luX3N5c3RlbWQgKCkgbm9leGNlcHQKKyt7 CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bm5pbmdfaW5fc3lzdGVt ZCAoKTsKKyB9CisgCistOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICpjYWxjdWxhdGVfYWR2aXNv cmllc19kaWZmKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6 OlN0ciBjaGVja3N1bV9mcm9tLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV90bykgeworKzo6cnBtb3N0 cmVlY3h4OjpHVmFyaWFudCAqCisrY2FsY3VsYXRlX2Fkdmlzb3JpZXNfZGlmZiAoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGNoZWNrc3VtX2Zyb20s CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY2hlY2tzdW1fdG8pCisr eworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKj4gcmV0 dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjYWxjdWxhdGVfYWR2aXNvcmllc19kaWZmKHJlcG8sIGNoZWNrc3VtX2Zyb20s IGNoZWNrc3VtX3RvLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9 CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FsY3VsYXRlX2Fk dmlzb3JpZXNfZGlmZiAoCisrICAgICAgcmVwbywgY2hlY2tzdW1fZnJvbSwgY2hlY2tzdW1fdG8s ICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQor KyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpT dHJpbmcgdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJlZSg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2Vw dCB7CisrOjpydXN0OjpTdHJpbmcKKyt0cmFuc2xhdGVfcGF0aF9mb3Jfb3N0cmVlICg6OnJ1c3Q6 OlN0ciBwYXRoKSBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpT dHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJhbnNsYXRl X3BhdGhfZm9yX29zdHJlZShwYXRoLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6 Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJh bnNsYXRlX3BhdGhfZm9yX29zdHJlZSAocGF0aCwgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJu IDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpycG1vc3RyZWVjeHg6Okxp dmVBcHBseVN0YXRlIGdldF9saXZlX2FwcGx5X3N0YXRlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVT eXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBj b25zdCAmZGVwbG95bWVudCkgeworKzo6cnBtb3N0cmVlY3h4OjpMaXZlQXBwbHlTdGF0ZQorK2dl dF9saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAm c3lzcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURl cGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGU+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2xpdmVfYXBw bHlfc3RhdGUoc3lzcm9vdCwgZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVy cm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv cihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkZ2V0X2xpdmVfYXBwbHlfc3RhdGUgKHN5c3Jvb3QsIGRlcGxveW1lbnQsICZy ZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBoYXNfbGl2 ZV9hcHBseV9zdGF0ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9v dCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpIHsK Kytib29sCisraGFzX2xpdmVfYXBwbHlfc3RhdGUgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNy b290IGNvbnN0ICZzeXNyb290LAorKyAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCkKKyt7CisgICA6OnJ1c3Q6Ok1h eWJlVW5pbml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGFzX2xpdmVfYXBwbHlfc3RhdGUoc3lzcm9v dCwgZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGFz X2xpdmVfYXBwbHlfc3RhdGUgKHN5c3Jvb3QsIGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBhcHBseWxpdmVfc3luY19yZWYoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIHsKKy0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxp dmVfc3luY19yZWYoc3lzcm9vdCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAor K2FwcGx5bGl2ZV9zeW5jX3JlZiAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3Qg JnN5c3Jvb3QpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGFwcGx5bGl2ZV9zeW5jX3JlZiAoc3lzcm9vdCk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCB0cmFuc2FjdGlvbl9h cHBseV9saXZlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6 OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJnRhcmdldCkgeworLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5zYWN0aW9u X2FwcGx5X2xpdmUoc3lzcm9vdCwgdGFyZ2V0KTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0K Kyt2b2lkCisrdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZ0YXJnZXQpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJhbnNhY3Rp b25fYXBwbHlfbGl2ZSAoc3lzcm9vdCwgdGFyZ2V0KTsKKysgIGlmIChlcnJvciQucHRyKQorKyAg ICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIG5vcm1hbGl6ZV9ldGNfc2hhZG93KDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRub3JtYWxpemVfZXRjX3NoYWRvdyhyb290ZnNfZGZk KTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrbm9ybWFsaXplX2V0Y19zaGFk b3cgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG5vcm1hbGl6ZV9ldGNfc2hh ZG93IChyb290ZnNfZGZkKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQor IH0KKyAKKy1ib29sIHByZXBhcmVfcnBtX2xheWVyaW5nKDo6c3RkOjppbnQzMl90IHJvb3Rmcywg OjpzdGQ6OmludDMyX3QgbWVyZ2VfcGFzc3dkX2RpcikgeworK2Jvb2wKKytwcmVwYXJlX3JwbV9s YXllcmluZyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnN0ZDo6aW50MzJfdCBtZXJnZV9wYXNz d2RfZGlyKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKKy0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRw cmVwYXJlX3JwbV9sYXllcmluZyhyb290ZnMsIG1lcmdlX3Bhc3N3ZF9kaXIsICZyZXR1cm4kLnZh bHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfcnBtX2xheWVyaW5nIChyb290ZnMs IG1lcmdlX3Bhc3N3ZF9kaXIsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQor KyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK KyB9CisgCistdm9pZCBjb21wbGV0ZV9ycG1fbGF5ZXJpbmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29tcGxldGVfcnBtX2xheWVyaW5nKHJvb3Rmcyk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9Cisrdm9pZAorK2NvbXBsZXRlX3JwbV9sYXllcmluZyAoOjpzdGQ6OmludDMyX3Qg cm9vdGZzKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb21wbGV0ZV9ycG1fbGF5ZXJpbmcgKHJvb3Rmcyk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBkZWR1cGxpY2F0ZV90 bXBmaWxlc19lbnRyaWVzKDo6c3RkOjppbnQzMl90IHJvb3RmcykgeworLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlZHVwbGljYXRl X3RtcGZpbGVzX2VudHJpZXMocm9vdGZzKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2 b2lkCisrZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRyaWVzIChyb290ZnMpOworKyAgaWYg KGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgcGFzc3dkX2NsZWFu dXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NsZWFudXAocm9vdGZzKTsK Ky0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrcGFzc3dkX2NsZWFudXAgKDo6c3Rk OjppbnQzMl90IHJvb3RmcykKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NsZWFudXAgKHJvb3Rmcyk7CisrICBp ZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBtaWdyYXRlX2dy b3VwX2V4Y2VwdF9yb290KDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGNvbnN0ICZwcmVzZXJ2ZWRfZ3JvdXBzKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWlncmF0ZV9ncm91cF9l eGNlcHRfcm9vdChyb290ZnMsIHByZXNlcnZlZF9ncm91cHMpOworLSAgaWYgKGVycm9yJC5wdHIp IHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OworLSAgfQorK3ZvaWQKKyttaWdyYXRlX2dyb3VwX2V4Y2VwdF9yb290ICg6OnN0ZDo6aW50MzJf dCByb290ZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGNvbnN0ICZwcmVzZXJ2ZWRfZ3JvdXBzKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1pZ3Jh dGVfZ3JvdXBfZXhjZXB0X3Jvb3QgKHJvb3RmcywgcHJlc2VydmVkX2dyb3Vwcyk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBtaWdyYXRlX3Bhc3N3 ZF9leGNlcHRfcm9vdCg6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKKy0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtaWdyYXRlX3Bhc3N3 ZF9leGNlcHRfcm9vdChyb290ZnMpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQK KyttaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKQorK3sK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRtaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdCAocm9vdGZzKTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIHBhc3N3ZF9jb21wb3NlX3ByZXAo OjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxl KSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcChyb290ZnMsIHRyZWVmaWxlKTsKKy0gIGlmIChl cnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrcGFzc3dkX2NvbXBvc2VfcHJlcCAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKQorK3sKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRwYXNzd2RfY29tcG9zZV9wcmVwIChyb290ZnMsIHRyZWVmaWxlKTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIHBhc3N3ZF9jb21wb3NlX3ByZXBf cmVwbyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJl ZWZpbGUsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0 ciBwcmV2aW91c19jaGVja3N1bSwgYm9vbCB1bmlmaWVkX2NvcmUpIHsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RfY29t cG9zZV9wcmVwX3JlcG8ocm9vdGZzLCB0cmVlZmlsZSwgcmVwbywgcHJldmlvdXNfY2hlY2tzdW0s IHVuaWZpZWRfY29yZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3Bhc3N3 ZF9jb21wb3NlX3ByZXBfcmVwbyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnRyZWVmaWxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHByZXZpb3VzX2No ZWNrc3VtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmaWVkX2NvcmUpCisr eworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHBhc3N3ZF9jb21wb3NlX3ByZXBfcmVwbyAoCisrICAgICAgcm9vdGZzLCB0cmVlZmls ZSwgcmVwbywgcHJldmlvdXNfY2hlY2tzdW0sIHVuaWZpZWRfY29yZSk7CisrICBpZiAoZXJyb3Ik LnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistYm9vbCBkaXJfY29udGFpbnNfdWlkKDo6 c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQpIHsKKytib29sCisrZGlyX2Nv bnRhaW5zX3VpZCAoOjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCkKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyX2NvbnRhaW5z X3VpZChkaXJmZCwgaWQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7Cist ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0g IH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRp cl9jb250YWluc191aWQgKGRpcmZkLCBpZCwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9y JC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOworIH0KKyAKKy1ib29sIGRpcl9jb250YWluc19naWQoOjpzdGQ6OmludDMyX3QgZGly ZmQsIDo6c3RkOjp1aW50MzJfdCBpZCkgeworK2Jvb2wKKytkaXJfY29udGFpbnNfZ2lkICg6OnN0 ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKQorK3sKKyAgIDo6cnVzdDo6TWF5 YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJfY29udGFpbnNfZ2lkKGRpcmZkLCBpZCwg JnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworLX0KKy0KKy12b2lkIGNoZWNrX3Bhc3N3ZF9ncm91 cF9lbnRyaWVzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZmZmlfcmVwbywgOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmls ZSwgOjpydXN0OjpTdHIgcHJldmlvdXNfcmV2KSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2hlY2tfcGFzc3dkX2dyb3VwX2Vu dHJpZXMoZmZpX3JlcG8sIHJvb3Rmc19kZmQsIHRyZWVmaWxlLCBwcmV2aW91c19yZXYpOworLSAg aWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOworLSAgfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisr ICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyX2NvbnRhaW5zX2dpZCAoZGly ZmQsIGlkLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisrfQorKworK3Zv aWQKKytjaGVja19wYXNzd2RfZ3JvdXBfZW50cmllcyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJl cG8gY29uc3QgJmZmaV9yZXBvLCA6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLCA6 OnJ1c3Q6OlN0ciBwcmV2aW91c19yZXYpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRy aWVzICgKKysgICAgICBmZmlfcmVwbywgcm9vdGZzX2RmZCwgdHJlZWZpbGUsIHByZXZpb3VzX3Jl dik7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiBwYXNzd2RkYl9vcGVuKDo6c3RkOjppbnQz Ml90IHJvb3RmcykgeworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj4KKytw YXNzd2RkYl9vcGVuICg6OnN0ZDo6aW50MzJfdCByb290ZnMpCisreworICAgOjpydXN0OjpNYXli ZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+PiByZXR1cm4kOwor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHBhc3N3ZGRiX29wZW4ocm9vdGZzLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3Ik LnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cGFzc3dkZGJfb3BlbiAocm9vdGZzLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0 cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgUGFzc3dkREI6OmxheW91dDo6c2l6ZSgpIG5vZXhj ZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkREIkb3Bl cmF0b3Ikc2l6ZW9mKCk7CisrOjpzdGQ6OnNpemVfdAorK1Bhc3N3ZERCOjpsYXlvdXQ6OnNpemUg KCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBh c3N3ZERCJG9wZXJhdG9yJHNpemVvZiAoKTsKKyB9CisgCistOjpzdGQ6OnNpemVfdCBQYXNzd2RE Qjo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUGFzc3dkREIkb3BlcmF0b3IkYWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QK KytQYXNzd2REQjo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkREIkb3BlcmF0b3IkYWxpZ25vZiAoKTsKKyB9 CisgCistOjpydXN0OjpTdHJpbmcgUGFzc3dkREI6Omxvb2t1cF91c2VyKDo6c3RkOjp1aW50MzJf dCB1aWQpIGNvbnN0IHsKKys6OnJ1c3Q6OlN0cmluZworK1Bhc3N3ZERCOjpsb29rdXBfdXNlciAo OjpzdGQ6OnVpbnQzMl90IHVpZCkgY29uc3QKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6 cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF91c2VyKCp0aGlzLCB1 aWQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVy biA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJGxvb2t1 cF91c2VyICgqdGhpcywgdWlkLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikK KysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7 CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFBhc3N3ZERCOjpsb29rdXBfZ3JvdXAoOjpzdGQ6OnVp bnQzMl90IGdpZCkgY29uc3QgeworKzo6cnVzdDo6U3RyaW5nCisrUGFzc3dkREI6Omxvb2t1cF9n cm91cCAoOjpzdGQ6OnVpbnQzMl90IGdpZCkgY29uc3QKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJGxvb2t1cF9ncm91cCgq dGhpcywgZ2lkLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RE QiRsb29rdXBfZ3JvdXAgKCp0aGlzLCBnaWQsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJv ciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4k LnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJp ZXM+IG5ld19wYXNzd2RfZW50cmllcygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmZyb21fcmF3KHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRuZXdfcGFzc3dkX2VudHJpZXMoKSk7CisrOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+CisrbmV3X3Bhc3N3ZF9lbnRyaWVzICgpIG5vZXhjZXB0 CisreworKyAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVz Pjo6ZnJvbV9yYXcgKAorKyAgICAgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRuZXdfcGFz c3dkX2VudHJpZXMgKCkpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFBhc3N3ZEVudHJpZXM6Omxh eW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRzaXplb2YoKTsKKys6OnN0ZDo6c2l6ZV90Cisr UGFzc3dkRW50cmllczo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJG9wZXJhdG9yJHNpemVvZiAo KTsKKyB9CisgCistOjpzdGQ6OnNpemVfdCBQYXNzd2RFbnRyaWVzOjpsYXlvdXQ6OmFsaWduKCkg bm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RF bnRyaWVzJG9wZXJhdG9yJGFsaWdub2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrUGFzc3dkRW50cmll czo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRhbGlnbm9mICgpOworIH0KKyAK Ky12b2lkIFBhc3N3ZEVudHJpZXM6OmFkZF9ncm91cF9jb250ZW50KDo6c3RkOjppbnQzMl90IHJv b3RmcywgOjpydXN0OjpTdHIgcGF0aCkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX2dyb3VwX2Nv bnRlbnQoKnRoaXMsIHJvb3RmcywgcGF0aCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisr dm9pZAorK1Bhc3N3ZEVudHJpZXM6OmFkZF9ncm91cF9jb250ZW50ICg6OnN0ZDo6aW50MzJfdCBy b290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRh ZGRfZ3JvdXBfY29udGVudCAoKnRoaXMsIHJvb3RmcywgcGF0aCk7CisrICBpZiAoZXJyb3IkLnB0 cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBQYXNzd2RFbnRyaWVzOjphZGRfcGFz c3dkX2NvbnRlbnQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKSB7Cist ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUGFzc3dkRW50cmllcyRhZGRfcGFzc3dkX2NvbnRlbnQoKnRoaXMsIHJvb3RmcywgcGF0aCk7 CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK1Bhc3N3ZEVudHJpZXM6OmFkZF9w YXNzd2RfY29udGVudCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKQor K3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX3Bhc3N3ZF9jb250ZW50ICgqdGhpcywg cm9vdGZzLCBwYXRoKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0K KyAKKy1ib29sIFBhc3N3ZEVudHJpZXM6OmNvbnRhaW5zX2dyb3VwKDo6cnVzdDo6U3RyIHVzZXIp IGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UGFzc3dkRW50cmllcyRjb250YWluc19ncm91cCgqdGhpcywgdXNlcik7CisrYm9vbAorK1Bhc3N3 ZEVudHJpZXM6OmNvbnRhaW5zX2dyb3VwICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2Vw dAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmll cyRjb250YWluc19ncm91cCAoKnRoaXMsIHVzZXIpOworIH0KKyAKKy1ib29sIFBhc3N3ZEVudHJp ZXM6OmNvbnRhaW5zX3VzZXIoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGNvbnRhaW5z X3VzZXIoKnRoaXMsIHVzZXIpOworK2Jvb2wKKytQYXNzd2RFbnRyaWVzOjpjb250YWluc191c2Vy ICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRjb250YWluc191c2VyICgqdGhpcywg dXNlcik7CisgfQorIAorLTo6c3RkOjp1aW50MzJfdCBQYXNzd2RFbnRyaWVzOjpsb29rdXBfdXNl cl9pZCg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCB7CisrOjpzdGQ6OnVpbnQzMl90CisrUGFzc3dk RW50cmllczo6bG9va3VwX3VzZXJfaWQgKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0CisreworICAg OjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6dWludDMyX3Q+IHJldHVybiQ7CistICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dk RW50cmllcyRsb29rdXBfdXNlcl9pZCgqdGhpcywgdXNlciwgJnJldHVybiQudmFsdWUpOworLSAg aWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRsb29rdXBfdXNlcl9pZCAoKnRoaXMsIHVz ZXIsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAg fQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpzdGQ6 OnVpbnQzMl90IFBhc3N3ZEVudHJpZXM6Omxvb2t1cF9ncm91cF9pZCg6OnJ1c3Q6OlN0ciBncm91 cCkgY29uc3QgeworKzo6c3RkOjp1aW50MzJfdAorK1Bhc3N3ZEVudHJpZXM6Omxvb2t1cF9ncm91 cF9pZCAoOjpydXN0OjpTdHIgZ3JvdXApIGNvbnN0CisreworICAgOjpydXN0OjpNYXliZVVuaW5p dDw6OnN0ZDo6dWludDMyX3Q+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRsb29rdXBfZ3Jv dXBfaWQoKnRoaXMsIGdyb3VwLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRQYXNzd2RFbnRyaWVzJGxvb2t1cF9ncm91cF9pZCAoKnRoaXMsIGdyb3VwLCAmcmV0dXJuJC52 YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgRXh0ZW5z aW9uczo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJHNpemVvZigpOworKzo6c3RkOjpzaXpl X3QKKytFeHRlbnNpb25zOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkb3BlcmF0b3Ikc2l6ZW9mICgp OworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IEV4dGVuc2lvbnM6OmxheW91dDo6YWxpZ24oKSBub2V4 Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMk b3BlcmF0b3IkYWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QKKytFeHRlbnNpb25zOjpsYXlvdXQ6 OmFsaWduICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAorLTo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiBleHRlbnNpb25zX2xvYWQoOjpydXN0OjpTdHIg cGF0aCwgOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpT dHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OkV4dGVuc2lvbnM+CisrZXh0ZW5zaW9uc19sb2FkICg6OnJ1c3Q6OlN0ciBwYXRoLCA6 OnJ1c3Q6OlN0ciBiYXNlYXJjaCwKKysgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzKQorK3sKKyAgIDo6cnVz dDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+PiBy ZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGV4dGVuc2lvbnNfbG9hZChwYXRoLCBiYXNlYXJjaCwgYmFzZV9wa2dzLCAm cmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQK KysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRleHRlbnNpb25zX2xvYWQgKHBh dGgsIGJhc2VhcmNoLCBiYXNlX3BrZ3MsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZh bHVlKTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IEV4dGVuc2lvbnM6Omdl dF9yZXBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4K KytFeHRlbnNpb25zOjpnZXRfcmVwb3MgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9yZXBvcygqdGhpcywgJnJl dHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2V0X3JlcG9zICgqdGhpcywg JnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK KyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IEV4dGVuc2lvbnM6OmdldF9vc19l eHRlbnNpb25fcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+CisrRXh0ZW5zaW9uczo6Z2V0X29zX2V4dGVuc2lvbl9wYWNrYWdlcyAoKSBjb25z dCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVu c2lvbnMkZ2V0X29zX2V4dGVuc2lvbl9wYWNrYWdlcygqdGhpcywgJnJldHVybiQudmFsdWUpOwor LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2V0X29zX2V4dGVuc2lvbl9wYWNrYWdlcyAoKnRoaXMs ICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7 CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBFeHRlbnNpb25zOjpnZXRfZGV2 ZWxvcG1lbnRfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+CisrRXh0ZW5zaW9uczo6Z2V0X2RldmVsb3BtZW50X3BhY2thZ2VzICgpIGNvbnN0 IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5z aW9ucyRnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9kZXZlbG9wbWVudF9wYWNrYWdlcyAoKnRoaXMsICZy ZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Cisg fQorIAorLWJvb2wgRXh0ZW5zaW9uczo6c3RhdGVfY2hlY2tzdW1fY2hhbmdlZCg6OnJ1c3Q6OlN0 ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0IHsKKytib29sCisrRXh0ZW5z aW9uczo6c3RhdGVfY2hlY2tzdW1fY2hhbmdlZCAoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6 OlN0ciBvdXRwdXRfZGlyKSBjb25zdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4g cmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHN0YXRlX2NoZWNrc3VtX2NoYW5nZWQoKnRoaXMsIGNo a3N1bSwgb3V0cHV0X2RpciwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsK Ky0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwor LSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lv bnMkc3RhdGVfY2hlY2tzdW1fY2hhbmdlZCAoCisrICAgICAgKnRoaXMsIGNoa3N1bSwgb3V0cHV0 X2RpciwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAg ICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy12b2lk IEV4dGVuc2lvbnM6OnVwZGF0ZV9zdGF0ZV9jaGVja3N1bSg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6 cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0IHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHVwZGF0ZV9zdGF0 ZV9jaGVja3N1bSgqdGhpcywgY2hrc3VtLCBvdXRwdXRfZGlyKTsKKy0gIGlmIChlcnJvciQucHRy KSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3Ik KTsKKy0gIH0KKyt2b2lkCisrRXh0ZW5zaW9uczo6dXBkYXRlX3N0YXRlX2NoZWNrc3VtICg6OnJ1 c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0CisreworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkRXh0ZW5zaW9ucyR1cGRhdGVfc3RhdGVfY2hlY2tzdW0gKCp0aGlzLCBjaGtzdW0sIG91 dHB1dF9kaXIpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAor LXZvaWQgRXh0ZW5zaW9uczo6c2VyaWFsaXplX3RvX2Rpcig6OnJ1c3Q6OlN0ciBvdXRwdXRfZGly KSBjb25zdCB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzZXJpYWxpemVfdG9fZGlyKCp0aGlzLCBvdXRwdXRf ZGlyKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrRXh0ZW5zaW9uczo6c2Vy aWFsaXplX3RvX2RpciAoOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3QKKyt7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRFeHRlbnNpb25zJHNlcmlhbGl6ZV90b19kaXIgKCp0aGlzLCBvdXRwdXRfZGlyKTsKKysg IGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IEV4dGVuc2lvbnM6OmdlbmVyYXRlX3RyZWVmaWxlKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBjb25zdCB7CisrOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgorK0V4dGVuc2lvbnM6OmdlbmVyYXRlX3RyZWVmaWxl ICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYykgY29uc3QKKyt7CisgICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJl dHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZW5lcmF0ZV90cmVlZmlsZSgqdGhpcywgc3JjLCAmcmV0 dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6 Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysg ICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdlbmVyYXRlX3Ry ZWVmaWxlICgqdGhpcywgc3JjLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikK KysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7 CisgfQorIAorLTo6c3RkOjpzaXplX3QgTG9ja2ZpbGVDb25maWc6OmxheW91dDo6c2l6ZSgpIG5v ZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVD b25maWckb3BlcmF0b3Ikc2l6ZW9mKCk7CisrOjpzdGQ6OnNpemVfdAorK0xvY2tmaWxlQ29uZmln OjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJHNpemVvZiAoKTsKKyB9CisgCist OjpzdGQ6OnNpemVfdCBMb2NrZmlsZUNvbmZpZzo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsK Ky0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckb3Bl cmF0b3IkYWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QKKytMb2NrZmlsZUNvbmZpZzo6bGF5b3V0 OjphbGlnbiAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkTG9ja2ZpbGVDb25maWckb3BlcmF0b3IkYWxpZ25vZiAoKTsKKyB9CisgCistOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPiBsb2NrZmlsZV9yZWFkKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZW5hbWVzKSB7CisrOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPgorK2xvY2tmaWxlX3JlYWQgKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZW5hbWVzKQorK3sKKyAgIDo6cnVzdDo6TWF5 YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPj4gcmV0 dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRsb2NrZmlsZV9yZWFkKGZpbGVuYW1lcywgJnJldHVybiQudmFsdWUpOworLSAg aWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworLX0KKy0KKy12b2lkIGxvY2tmaWxlX3dyaXRlKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6 OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNrYWdlcywgOjpycG1vc3RyZWVjeHg6 OkN4eEdPYmplY3RBcnJheSAmcnBtbWRfcmVwb3MpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2NrZmlsZV93cml0ZShmaWxl bmFtZSwgcGFja2FnZXMsIHJwbW1kX3JlcG9zKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0K KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGxvY2tmaWxlX3JlYWQgKGZpbGVuYW1lcywgJnJldHVybiQudmFsdWUpOwor KyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOworK30KKysKKyt2b2lkCisrbG9ja2ZpbGVfd3JpdGUgKDo6cnVz dDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNrYWdl cywKKysgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcnBt bWRfcmVwb3MpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2ZpbGVfd3JpdGUgKGZpbGVuYW1lLCBwYWNr YWdlcywgcnBtbWRfcmVwb3MpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9 CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiBMb2Nr ZmlsZUNvbmZpZzo6Z2V0X2xvY2tlZF9wYWNrYWdlcygpIGNvbnN0IHsKKys6OnJ1c3Q6OlZlYzw6 OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4KKytMb2NrZmlsZUNvbmZpZzo6Z2V0X2xvY2tl ZF9wYWNrYWdlcyAoKSBjb25zdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpW ZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+PiByZXR1cm4kOworLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxl Q29uZmlnJGdldF9sb2NrZWRfcGFja2FnZXMoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlm IChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVl KTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJGdldF9sb2NrZWRfcGFja2FnZXMgKCp0aGlz LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0K KysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gb3JpZ2luX3RvX3RyZWVmaWxlKDo6cnBtb3N0 cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGU+Cisrb3JpZ2luX3RvX3RyZWVmaWxlICg6OnJwbW9zdHJlZWN4eDo6R0tleUZp bGUgY29uc3QgJmtmKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvcmlnaW5fdG9fdHJlZWZpbGUo a2YsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVy biA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvcmlnaW5fdG9fdHJlZWZpbGUgKGtm LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0K KysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnBtb3N0 cmVlY3h4OjpHS2V5RmlsZSAqdHJlZWZpbGVfdG9fb3JpZ2luKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmdGYpIHsKKys6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgKgorK3RyZWVmaWxl X3RvX29yaWdpbiAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0ZikKKyt7CisgICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSAqPiByZXR1cm4kOwor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHRyZWVmaWxlX3RvX29yaWdpbih0ZiwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9y JC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHRyZWVmaWxlX3RvX29yaWdpbiAodGYsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZh bHVlKTsKKyB9CisgCistdm9pZCBvcmlnaW5fdmFsaWRhdGVfcm91bmR0cmlwKDo6cnBtb3N0cmVl Y3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRvcmlnaW5fdmFsaWRhdGVfcm91bmR0cmlwKGtmKTsKKyt2b2lkCisrb3JpZ2lu X3ZhbGlkYXRlX3JvdW5kdHJpcCAoOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZikg bm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3ZhbGlk YXRlX3JvdW5kdHJpcCAoa2YpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBjYWNoZV9icmFuY2hf dG9fbmV2cmEoOjpydXN0OjpTdHIgbmV2cmEpIG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZwor K2NhY2hlX2JyYW5jaF90b19uZXZyYSAoOjpydXN0OjpTdHIgbmV2cmEpIG5vZXhjZXB0Cisrewor ICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWNoZV9icmFuY2hfdG9fbmV2cmEobmV2cmEsICZyZXR1 cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWNoZV9icmFuY2hfdG9fbmV2cmEgKG5ldnJhLCAm cmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwor IH0KKyB9IC8vIG5hbWVzcGFjZSBycG1vc3RyZWVjeHgKKyAKKy1leHRlcm4gIkMiIHsKKy06OnJw bW9zdHJlZWN4eDo6QnViYmxld3JhcCAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJs ZXdyYXAkYWxsb2MoKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRCdWJibGV3cmFwJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgKikgbm9leGNl cHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRkcm9wKDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiAqcHRyKSBub2V4Y2VwdDsKKy0K Ky06OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZSAqY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkYWxsb2MoKSBub2V4Y2VwdDsKKy12b2lkIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlJGRlYWxsb2MoOjpy cG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKikgbm9leGNlcHQ7Cistdm9pZCBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRkcm9wKDo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiAqcHRyKSBub2V4Y2VwdDsK Ky0KKy06OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICpjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkVGVtcEV0Y0d1YXJkJGFsbG9jKCkgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlRlbXBF dGNHdWFyZCAqKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRU ZW1wRXRjR3VhcmQkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJk PiAqcHRyKSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFBy ZXAgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRhbGxv YygpIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0 ZW1TY3JpcHRQcmVwJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVw ICopIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0 ZW1TY3JpcHRQcmVwJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1T Y3JpcHRQcmVwPiAqcHRyKSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXJGbGFncyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MkYWxs b2MoKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBv cnRlckZsYWdzJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKikgbm9l eGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFn cyRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPiAqcHRy KSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgKmN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRhbGxvYygpIG5vZXhjZXB0OworLXZvaWQgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyJGRlYWxsb2MoOjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyICopIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFJwbUltcG9ydGVyJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUlt cG9ydGVyPiAqcHRyKSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAq Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgkYWxsb2MoKSBub2V4Y2VwdDsK Ky12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGRlYWxsb2MoOjpy cG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKikgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpIaXN0b3J5Q3R4PiAqcHRyKSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJlZWN4eDo6VG9raW9I YW5kbGUgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZSRhbGxvYygpIG5v ZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRl YWxsb2MoOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICopIG5vZXhjZXB0OworLXZvaWQgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRyb3AoOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPiAqcHRyKSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJl ZWN4eDo6VG9raW9FbnRlckd1YXJkICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9F bnRlckd1YXJkJGFsbG9jKCkgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkVG9raW9FbnRlckd1YXJkJGRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJH dWFyZCAqKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tp b0VudGVyR3VhcmQkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1 YXJkPiAqcHRyKSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgKmN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRhbGxvYygpIG5vZXhjZXB0OworLXZvaWQg Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGRlYWxsb2MoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlICopIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFRyZWVmaWxlJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAq cHRyKSBub2V4Y2VwdDsKKy0KKy12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JE92ZXJyaWRlUmVwbGFjZW1lbnQkbmV3KDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVy cmlkZVJlcGxhY2VtZW50PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkZHJvcCg6OnJ1c3Q6OlZl Yzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gKnB0cikgbm9leGNlcHQ7Cist OjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJl cGxhY2VtZW50JGxlbig6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNl bWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGNhcGFjaXR5KDo6cnVzdDo6 VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBjb25zdCAqcHRyKSBub2V4 Y2VwdDsKKy06OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAqY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRkYXRhKDo6cnVz dDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBjb25zdCAqcHRyKSBu b2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRl UmVwbGFjZW1lbnQkcmVzZXJ2ZV90b3RhbCg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3Zl cnJpZGVSZXBsYWNlbWVudD4gKnB0ciwgOjpzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsK Ky12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1l bnQkc2V0X2xlbig6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVu dD4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCR0cnVuY2F0ZSg6OnJ1c3Q6 OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gKnB0ciwgOjpzdGQ6OnNp emVfdCBsZW4pIG5vZXhjZXB0OworLQorLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkU3RyaW5nTWFwcGluZyRuZXcoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmlu Z01hcHBpbmc+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRydXN0X3Zl YyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRkcm9wKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVl Y3h4OjpTdHJpbmdNYXBwaW5nPiAqcHRyKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbGVuKDo6cnVzdDo6VmVj PDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKKy06 OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBp bmckY2FwYWNpdHkoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNv bnN0ICpwdHIpIG5vZXhjZXB0OworLTo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nIGNvbnN0 ICpjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGRhdGEoOjpy dXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICpwdHIpIG5vZXhj ZXB0OworLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGlu ZyRyZXNlcnZlX3RvdGFsKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5n PiAqcHRyLCA6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdl MSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRzZXRfbGVuKDo6cnVzdDo6VmVj PDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikg bm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdN YXBwaW5nJHRydW5jYXRlKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5n PiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6 OlBhc3N3ZERCICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkYWxsb2MoKSBu b2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2REQiRkZWFs bG9jKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQiAqKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2REQiRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpQYXNzd2REQj4gKnB0cikgbm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6OlBhc3N3 ZEVudHJpZXMgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGFsbG9j KCkgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50 cmllcyRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICopIG5vZXhjZXB0Owor LXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMkZHJvcCg6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz4gKnB0cikgbm9leGNlcHQ7Cist CistOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRFeHRlbnNpb25zJGFsbG9jKCkgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkRXh0ZW5zaW9ucyRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICop IG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMk ZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4gKnB0cikgbm9leGNl cHQ7CistCistOjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnICpjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckYWxsb2MoKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRkZWFsbG9jKDo6cnBtb3N0cmVl Y3h4OjpMb2NrZmlsZUNvbmZpZyAqKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpMb2NrZmlsZUNvbmZpZz4gKnB0cikgbm9leGNlcHQ7CistCistdm9pZCBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJG5ldyg6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7Cistdm9pZCBjeHhi cmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGRyb3AoOjpydXN0OjpW ZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIpIG5vZXhjZXB0OworLTo6c3Rk OjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRs ZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIp IG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVj eHgkTG9ja2VkUGFja2FnZSRjYXBhY2l0eSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9j a2VkUGFja2FnZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7CistOjpycG1vc3RyZWVjeHg6OkxvY2tl ZFBhY2thZ2UgY29uc3QgKmN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBh Y2thZ2UkZGF0YSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gY29u c3QgKnB0cikgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4 eCRMb2NrZWRQYWNrYWdlJHJlc2VydmVfdG90YWwoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7Cist dm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHNldF9s ZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3Rk OjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0 cmVlY3h4JExvY2tlZFBhY2thZ2UkdHJ1bmNhdGUoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKy0KKy1z dGF0aWNfYXNzZXJ0KDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4 dGVudDw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46OnR5cGU+Ojp2YWx1ZSwgImRl ZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uYCBpcyByZXF1aXJl ZCIpOworLXN0YXRpY19hc3NlcnQoc2l6ZW9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpDbGllbnRDb25uZWN0aW9uPikgPT0gc2l6ZW9mKHZvaWQgKiksICIiKTsKKy1zdGF0aWNf YXNzZXJ0KGFsaWdub2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENv bm5lY3Rpb24+KSA9PSBhbGlnbm9mKHZvaWQgKiksICIiKTsKKy12b2lkIGN4eGJyaWRnZTEkdW5p cXVlX3B0ciRycG1vc3RyZWVjeHgkQ2xpZW50Q29ubmVjdGlvbiRudWxsKDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAqcHRyKSBub2V4Y2VwdCB7Cist ICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbj4oKTsKKy19Cistdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4 JENsaWVudENvbm5lY3Rpb24kcmF3KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpD bGllbnRDb25uZWN0aW9uPiAqcHRyLCA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 Q2xpZW50Q29ubmVjdGlvbj46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdCB7CistICA6Om5ldyAocHRy KSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4ocmF3 KTsKKy19CistOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rp b24+OjplbGVtZW50X3R5cGUgY29uc3QgKmN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVj eHgkQ2xpZW50Q29ubmVjdGlvbiRnZXQoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OkNsaWVudENvbm5lY3Rpb24+IGNvbnN0ICZwdHIpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBwdHIu Z2V0KCk7CistfQorLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25u ZWN0aW9uPjo6cG9pbnRlciBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVu dENvbm5lY3Rpb24kcmVsZWFzZSg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xp ZW50Q29ubmVjdGlvbj4gJnB0cikgbm9leGNlcHQgeworLSAgcmV0dXJuIHB0ci5yZWxlYXNlKCk7 CistfQorLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGllbnRDb25u ZWN0aW9uJGRyb3AoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5l Y3Rpb24+ICpwdHIpIG5vZXhjZXB0IHsKKy0gIDo6cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRl dGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojp2YWx1 ZT57fShwdHIpOworLX0KKy0KKy1zdGF0aWNfYXNzZXJ0KDo6cnVzdDo6ZGV0YWlsOjppc19jb21w bGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46OnR5cGU+ Ojp2YWx1ZSwgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmYCBpcyByZXF1 aXJlZCIpOworLXN0YXRpY19hc3NlcnQoc2l6ZW9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpSUE1EaWZmPikgPT0gc2l6ZW9mKHZvaWQgKiksICIiKTsKKy1zdGF0aWNfYXNzZXJ0 KGFsaWdub2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+KSA9PSBh bGlnbm9mKHZvaWQgKiksICIiKTsKKy12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3Ry ZWVjeHgkUlBNRGlmZiRudWxsKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1E aWZmPiAqcHRyKSBub2V4Y2VwdCB7CistICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4oKTsKKy19Cistdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9w dHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkcmF3KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpSUE1EaWZmPiAqcHRyLCA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBN RGlmZj46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdCB7CistICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4ocmF3KTsKKy19CistOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+OjplbGVtZW50X3R5cGUgY29uc3QgKmN4eGJy aWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRnZXQoOjpzdGQ6OnVuaXF1ZV9w dHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+IGNvbnN0ICZwdHIpIG5vZXhjZXB0IHsKKy0gIHJl dHVybiBwdHIuZ2V0KCk7CistfQorLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpS UE1EaWZmPjo6cG9pbnRlciBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURp ZmYkcmVsZWFzZSg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gJnB0 cikgbm9leGNlcHQgeworLSAgcmV0dXJuIHB0ci5yZWxlYXNlKCk7CistfQorLXZvaWQgY3h4YnJp ZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1EaWZmJGRyb3AoOjpzdGQ6OnVuaXF1ZV9w dHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICpwdHIpIG5vZXhjZXB0IHsKKy0gIDo6cnVzdDo6 ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlJQ TURpZmY+Ojp2YWx1ZT57fShwdHIpOworLX0KKy0KKy1zdGF0aWNfYXNzZXJ0KDo6cnVzdDo6ZGV0 YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6UHJv Z3Jlc3M+Ojp0eXBlPjo6dmFsdWUsICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6UHJv Z3Jlc3NgIGlzIHJlcXVpcmVkIik7Cistc3RhdGljX2Fzc2VydChzaXplb2YoOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPikgPT0gc2l6ZW9mKHZvaWQgKiksICIiKTsK Ky1zdGF0aWNfYXNzZXJ0KGFsaWdub2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlByb2dyZXNzPikgPT0gYWxpZ25vZih2b2lkICopLCAiIik7Cistdm9pZCBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJG51bGwoOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyKSBub2V4Y2VwdCB7CistICA6Om5ldyAocHRyKSA6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+KCk7CistfQorLXZvaWQg Y3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRyYXcoOjpzdGQ6OnVu aXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyLCA6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQgeworLSAg OjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPihy YXcpOworLX0KKy06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojpl bGVtZW50X3R5cGUgY29uc3QgKmN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUHJv Z3Jlc3MkZ2V0KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gY29u c3QgJnB0cikgbm9leGNlcHQgeworLSAgcmV0dXJuIHB0ci5nZXQoKTsKKy19CistOjpzdGQ6OnVu aXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6cG9pbnRlciBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJHJlbGVhc2UoOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAmcHRyKSBub2V4Y2VwdCB7CistICByZXR1cm4gcHRy LnJlbGVhc2UoKTsKKy19Cistdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4 JFByb2dyZXNzJGRyb3AoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNz PiAqcHRyKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6 OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz46OnZhbHVlPnt9KHB0cik7Cist fQorLQorLXN0YXRpY19hc3NlcnQoOjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6c3RkOjpy ZW1vdmVfZXh0ZW50PDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OnR5cGU+Ojp2YWx1ZSwgImRlZmlu aXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpScG1Uc2AgaXMgcmVxdWlyZWQiKTsKKy1zdGF0aWNf YXNzZXJ0KHNpemVvZig6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+KSA9 PSBzaXplb2Yodm9pZCAqKSwgIiIpOworLXN0YXRpY19hc3NlcnQoYWxpZ25vZig6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+KSA9PSBhbGlnbm9mKHZvaWQgKiksICIiKTsK Ky12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkbnVsbCg6OnN0 ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICpwdHIpIG5vZXhjZXB0IHsKKy0g IDo6bmV3IChwdHIpIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4oKTsK Ky19Cistdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJHJhdyg6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICpwdHIsIDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdCB7Cist ICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+KHJh dyk7CistfQorLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OmVsZW1l bnRfdHlwZSBjb25zdCAqY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRScG1UcyRn ZXQoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiBjb25zdCAmcHRyKSBu b2V4Y2VwdCB7CistICByZXR1cm4gcHRyLmdldCgpOworLX0KKy06OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojpwb2ludGVyIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1v c3RyZWVjeHgkUnBtVHMkcmVsZWFzZSg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UnBtVHM+ICZwdHIpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBwdHIucmVsZWFzZSgpOworLX0KKy12 b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkZHJvcCg6OnN0ZDo6 dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICpwdHIpIG5vZXhjZXB0IHsKKy0gIDo6 cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVj eHg6OlJwbVRzPjo6dmFsdWU+e30ocHRyKTsKKy19CistCistc3RhdGljX2Fzc2VydCg6OnJ1c3Q6 OmRldGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6 OlBhY2thZ2VNZXRhPjo6dHlwZT46OnZhbHVlLCAiZGVmaW5pdGlvbiBvZiBgOjpycG1vc3RyZWVj eHg6OlBhY2thZ2VNZXRhYCBpcyByZXF1aXJlZCIpOworLXN0YXRpY19hc3NlcnQoc2l6ZW9mKDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4pID09IHNpemVvZih2 b2lkICopLCAiIik7Cistc3RhdGljX2Fzc2VydChhbGlnbm9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4pID09IGFsaWdub2Yodm9pZCAqKSwgIiIpOworLXZv aWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRudWxsKDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKnB0cikgbm9leGNl cHQgeworLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBh Y2thZ2VNZXRhPigpOworLX0KKy12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVj eHgkUGFja2FnZU1ldGEkcmF3KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNr YWdlTWV0YT4gKnB0ciwgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VN ZXRhPjo6cG9pbnRlciByYXcpIG5vZXhjZXB0IHsKKy0gIDo6bmV3IChwdHIpIDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4ocmF3KTsKKy19CistOjpzdGQ6OnVu aXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6ZWxlbWVudF90eXBlIGNvbnN0 ICpjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRhJGdldCg6OnN0 ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+IGNvbnN0ICZwdHIpIG5v ZXhjZXB0IHsKKy0gIHJldHVybiBwdHIuZ2V0KCk7CistfQorLTo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnBvaW50ZXIgY3h4YnJpZGdlMSR1bmlxdWVfcHRy JHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRyZWxlYXNlKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gJnB0cikgbm9leGNlcHQgeworLSAgcmV0dXJuIHB0ci5y ZWxlYXNlKCk7CistfQorLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQ YWNrYWdlTWV0YSRkcm9wKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YT4gKnB0cikgbm9leGNlcHQgeworLSAgOjpydXN0OjpkZWxldGVyX2lmPDo6cnVzdDo6ZGV0 YWlsOjppc19jb21wbGV0ZTw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+Ojp2YWx1ZT57fShw dHIpOworLX0KKytleHRlcm4gIkMiCisreworKyAgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAg KmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGFsbG9jICgpIG5vZXhjZXB0 OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRkZWFsbG9j ICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAqKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAkZHJvcCAoCisrICAgICAgOjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+ICpwdHIpIG5vZXhjZXB0OworKworKyAgOjpy cG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKgorKyAgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkYWxsb2MgKCkgbm9leGNlcHQ7CisrICB2b2lk IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlJGRlYWxsb2Mg KAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICopIG5vZXhjZXB0 OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0 ZSRkcm9wICgKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1h Z2VTdGF0ZT4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1 YXJkICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGFsbG9jICgpIG5v ZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJk JGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQgKikgbm9leGNlcHQ7CisrICB2 b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQkZHJvcCAoCisrICAg ICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD4gKnB0cikgbm9leGNl cHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgKgorKyAgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGFsbG9jICgpIG5v ZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNj cmlwdFByZXAkZGVhbGxvYyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3Jp cHRQcmVwICopIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk RmlsZXN5c3RlbVNjcmlwdFByZXAkZHJvcCAoCisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIDo6cnBt b3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk UnBtSW1wb3J0ZXJGbGFncyRhbGxvYyAoKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MkZGVhbGxvYyAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRyb3AgKAorKyAgICAgIDo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPiAqcHRyKSBub2V4Y2VwdDsK KysKKysgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAqY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFJwbUltcG9ydGVyJGFsbG9jICgpIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OlJw bUltcG9ydGVyICopIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkUnBtSW1wb3J0ZXIkZHJvcCAoCisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlJwbUltcG9ydGVyPiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIDo6cnBtb3N0cmVlY3h4OjpIaXN0 b3J5Q3R4ICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRhbGxvYyAoKSBu b2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgk ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKikgbm9leGNlcHQ7CisrICB2b2lk IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGRyb3AgKAorKyAgICAgIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4PiAqcHRyKSBub2V4Y2VwdDsKKysK KysgIDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZSAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFRva2lvSGFuZGxlJGFsbG9jICgpIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OlRva2lv SGFuZGxlICopIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk VG9raW9IYW5kbGUkZHJvcCAoCisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRv a2lvSGFuZGxlPiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIDo6cnBtb3N0cmVlY3h4OjpUb2tpb0Vu dGVyR3VhcmQgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQkYWxs b2MgKCkgbm9leGNlcHQ7CisrICB2b2lkCisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk VG9raW9FbnRlckd1YXJkJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQg Kikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0Vu dGVyR3VhcmQkZHJvcCAoCisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lv RW50ZXJHdWFyZD4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRhbGxvYyAoKSBub2V4Y2Vw dDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGRlYWxsb2Mg KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAqKSBub2V4Y2VwdDsKKysgIHZvaWQKKysgIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkcm9wICg6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGU+ICpwdHIpIG5vZXhjZXB0OworKworKyAgdm9pZCBjeHhicmlkZ2Ux JHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JG5ldyAoCisrICAgICAg OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+IGNvbnN0ICpw dHIpIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRP dmVycmlkZVJlcGxhY2VtZW50JGRyb3AgKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVl Y3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAqcHRyKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXpl X3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRs ZW4gKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRjYXBhY2l0eSAoCisrICAg ICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+IGNvbnN0 ICpwdHIpIG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQg Y29uc3QgKgorKyAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBs YWNlbWVudCRkYXRhICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJp ZGVSZXBsYWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkcmVzZXJ2ZV90b3RhbCAo CisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ ICpwdHIsIDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkc2V0X2xlbiAoCisr ICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpw dHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRydXN0 X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCR0cnVuY2F0ZSAoCisrICAgICAg OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIsIDo6 c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKysKKysgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3Zl YyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRuZXcgKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6 cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKKysgIHZv aWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRkcm9wICgK KysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0cikg bm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVl Y3h4JFN0cmluZ01hcHBpbmckbGVuICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90 IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckY2FwYWNpdHkg KAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25z dCAqcHRyKSBub2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nIGNvbnN0 ICpjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGRhdGEgKAor KyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAq cHRyKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgk U3RyaW5nTWFwcGluZyRyZXNlcnZlX3RvdGFsICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4 Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFw cGluZyRzZXRfbGVuICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5n TWFwcGluZz4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OworKyAgdm9pZCBjeHhi cmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHRydW5jYXRlICgKKysg ICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpz dGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OworKworKyAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERC ICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkYWxsb2MgKCkgbm9leGNlcHQ7 CisrICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2REQiRkZWFsbG9jICg6 OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKikgbm9leGNlcHQ7CisrICB2b2lkCisrICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZHJvcCAoOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZERCPiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2RFbnRyaWVzICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRh bGxvYyAoKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBh c3N3ZEVudHJpZXMkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKikgbm9l eGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVz JGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVz PiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICpjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRhbGxvYyAoKSBub2V4Y2VwdDsKKysg IHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkZGVhbGxvYyAoOjpy cG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgKikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIDo6cnBtb3N0 cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExvY2tm aWxlQ29uZmlnJGFsbG9jICgpIG5vZXhjZXB0OworKyAgdm9pZAorKyAgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpMb2Nr ZmlsZUNvbmZpZyAqKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JExvY2tmaWxlQ29uZmlnJGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpMb2NrZmlsZUNvbmZpZz4gKnB0cikgbm9leGNlcHQ7CisrCisrICB2b2lkIGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkbmV3ICgKKysgICAgICA6OnJ1 c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gY29uc3QgKnB0cikgbm9leGNl cHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2th Z2UkZHJvcCAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2th Z2U+ICpwdHIpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGxlbiAoCisrICAgICAgOjpydXN0OjpWZWM8Ojpy cG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OworKyAgOjpz dGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdl JGNhcGFjaXR5ICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFj a2FnZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFj a2FnZSBjb25zdCAqY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2Fn ZSRkYXRhICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2Fn ZT4gY29uc3QgKnB0cikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkcmVzZXJ2ZV90b3RhbCAoCisrICAgICAgOjpydXN0OjpW ZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3QgbmV3 X2NhcCkgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JExvY2tlZFBhY2thZ2Ukc2V0X2xlbiAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVj eHg6OkxvY2tlZFBhY2thZ2U+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKysg IHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSR0cnVu Y2F0ZSAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKysKKysgIHN0YXRpY19hc3NlcnQg KDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTwKKysgICAgICAgICAgICAgICAgICAgICA6OnN0 ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46OnR5cGU+ Ojp2YWx1ZSwKKysgICAgICAgICAgICAgICAgICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4 eDo6Q2xpZW50Q29ubmVjdGlvbmAgaXMgcmVxdWlyZWQiKTsKKysgIHN0YXRpY19hc3NlcnQgKHNp emVvZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ KSA9PSBzaXplb2YgKHZvaWQgKiksCisrICAgICAgICAgICAgICAgICAiIik7CisrICBzdGF0aWNf YXNzZXJ0IChhbGlnbm9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50 Q29ubmVjdGlvbj4pID09IGFsaWdub2YgKHZvaWQgKiksCisrICAgICAgICAgICAgICAgICAiIik7 CisrICB2b2lkCisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVudENv bm5lY3Rpb24kbnVsbCAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OkNsaWVudENvbm5lY3Rpb24+ICpwdHIpIG5vZXhjZXB0CisrICB7CisrICAgIDo6bmV3IChwdHIp OjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICgpOwor KyAgfQorKyAgdm9pZAorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGll bnRDb25uZWN0aW9uJHJhdyAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OkNsaWVudENvbm5lY3Rpb24+ICpwdHIsCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQKKysg IHsKKysgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xp ZW50Q29ubmVjdGlvbj4gKHJhdyk7CisrICB9CisrICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9z dHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46OmVsZW1lbnRfdHlwZSBjb25zdCAqCisrICBjeHhi cmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24kZ2V0ICgKKysg ICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4g Y29uc3QgJnB0cikgbm9leGNlcHQKKysgIHsKKysgICAgcmV0dXJuIHB0ci5nZXQgKCk7CisrICB9 CisrICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46 OnBvaW50ZXIKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkQ2xpZW50Q29u bmVjdGlvbiRyZWxlYXNlICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6Q2xpZW50Q29ubmVjdGlvbj4gJnB0cikgbm9leGNlcHQKKysgIHsKKysgICAgcmV0dXJuIHB0 ci5yZWxlYXNlICgpOworKyAgfQorKyAgdm9pZAorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJw bW9zdHJlZWN4eCRDbGllbnRDb25uZWN0aW9uJGRyb3AgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAqcHRyKSBub2V4Y2VwdAorKyAg eworKyAgICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6 cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPjo6dmFsdWU+e30ocHRyKTsKKysgIH0KKysK KysgIHN0YXRpY19hc3NlcnQgKAorKyAgICAgIDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6 OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46OnR5cGU+Ojp2YWx1 ZSwKKysgICAgICAiZGVmaW5pdGlvbiBvZiBgOjpycG1vc3RyZWVjeHg6OlJQTURpZmZgIGlzIHJl cXVpcmVkIik7CisrICBzdGF0aWNfYXNzZXJ0IChzaXplb2YgKDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpSUE1EaWZmPikgPT0gc2l6ZW9mICh2b2lkICopLCAiIik7CisrICBzdGF0 aWNfYXNzZXJ0IChhbGlnbm9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBN RGlmZj4pID09IGFsaWdub2YgKHZvaWQgKiksICIiKTsKKysgIHZvaWQKKysgIGN4eGJyaWRnZTEk dW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRudWxsICgKKysgICAgICA6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKnB0cikgbm9leGNlcHQKKysgIHsKKysg ICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4g KCk7CisrICB9CisrICB2b2lkCisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4 JFJQTURpZmYkcmF3ICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UlBNRGlmZj4gKnB0ciwKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UlBNRGlmZj46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdAorKyAgeworKyAgICA6Om5ldyAocHRyKTo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiAocmF3KTsKKysgIH0KKysg IDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6ZWxlbWVudF90eXBl IGNvbnN0ICoKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRn ZXQgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiBj b25zdCAmcHRyKSBub2V4Y2VwdAorKyAgeworKyAgICByZXR1cm4gcHRyLmdldCAoKTsKKysgIH0K KysgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6cG9pbnRlcgor KyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1EaWZmJHJlbGVhc2UgKAor KyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiAmcHRyKSBu b2V4Y2VwdAorKyAgeworKyAgICByZXR1cm4gcHRyLnJlbGVhc2UgKCk7CisrICB9CisrICB2b2lk CisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkZHJvcCAoCisr ICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICpwdHIpIG5v ZXhjZXB0CisrICB7CisrICAgIDo6cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNf Y29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+Ojp2YWx1ZT57fShwdHIpOworKyAgfQor KworKyAgc3RhdGljX2Fzc2VydCAoCisrICAgICAgOjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRl PDo6c3RkOjpyZW1vdmVfZXh0ZW50PDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz46OnR5cGU+Ojp2 YWx1ZSwKKysgICAgICAiZGVmaW5pdGlvbiBvZiBgOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzYCBp cyByZXF1aXJlZCIpOworKyAgc3RhdGljX2Fzc2VydCAoc2l6ZW9mICg6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+KSA9PSBzaXplb2YgKHZvaWQgKiksICIiKTsKKysg IHN0YXRpY19hc3NlcnQgKGFsaWdub2YgKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzcz4pID09IGFsaWdub2YgKHZvaWQgKiksICIiKTsKKysgIHZvaWQKKysgIGN4eGJy aWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUHJvZ3Jlc3MkbnVsbCAoCisrICAgICAgOjpz dGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyKSBub2V4Y2VwdAor KyAgeworKyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQ cm9ncmVzcz4gKCk7CisrICB9CisrICB2b2lkCisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBt b3N0cmVlY3h4JFByb2dyZXNzJHJhdyAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyLAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpQcm9ncmVzcz46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdAorKyAgeworKyAgICA6 Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKHJh dyk7CisrICB9CisrICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+ OjplbGVtZW50X3R5cGUgY29uc3QgKgorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJl ZWN4eCRQcm9ncmVzcyRnZXQgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpQcm9ncmVzcz4gY29uc3QgJnB0cikgbm9leGNlcHQKKysgIHsKKysgICAgcmV0dXJuIHB0 ci5nZXQgKCk7CisrICB9CisrICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJv Z3Jlc3M+Ojpwb2ludGVyCisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBy b2dyZXNzJHJlbGVhc2UgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzcz4gJnB0cikgbm9leGNlcHQKKysgIHsKKysgICAgcmV0dXJuIHB0ci5yZWxlYXNl ICgpOworKyAgfQorKyAgdm9pZAorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4 eCRQcm9ncmVzcyRkcm9wICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6UHJvZ3Jlc3M+ICpwdHIpIG5vZXhjZXB0CisrICB7CisrICAgIDo6cnVzdDo6ZGVsZXRlcl9p Zjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6 dmFsdWU+e30ocHRyKTsKKysgIH0KKysKKysgIHN0YXRpY19hc3NlcnQgKAorKyAgICAgIDo6cnVz dDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4 eDo6UnBtVHM+Ojp0eXBlPjo6dmFsdWUsCisrICAgICAgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0 cmVlY3h4OjpScG1Uc2AgaXMgcmVxdWlyZWQiKTsKKysgIHN0YXRpY19hc3NlcnQgKHNpemVvZiAo OjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPikgPT0gc2l6ZW9mICh2b2lk ICopLCAiIik7CisrICBzdGF0aWNfYXNzZXJ0IChhbGlnbm9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UnBtVHM+KSA9PSBhbGlnbm9mICh2b2lkICopLCAiIik7CisrICB2b2lk CisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJG51bGwgKAorKyAg ICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gKnB0cikgbm9leGNl cHQKKysgIHsKKysgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6UnBtVHM+ICgpOworKyAgfQorKyAgdm9pZAorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJw bW9zdHJlZWN4eCRScG1UcyRyYXcgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpScG1Ucz4gKnB0ciwKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJl ZWN4eDo6UnBtVHM+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQKKysgIHsKKysgICAgOjpuZXcgKHB0 cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+IChyYXcpOworKyAgfQor KyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPjo6ZWxlbWVudF90eXBl IGNvbnN0ICoKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkZ2V0 ICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+IGNvbnN0 ICZwdHIpIG5vZXhjZXB0CisrICB7CisrICAgIHJldHVybiBwdHIuZ2V0ICgpOworKyAgfQorKyAg OjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPjo6cG9pbnRlcgorKyAgY3h4 YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRScG1UcyRyZWxlYXNlICgKKysgICAgICA6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICZwdHIpIG5vZXhjZXB0Cisr ICB7CisrICAgIHJldHVybiBwdHIucmVsZWFzZSAoKTsKKysgIH0KKysgIHZvaWQKKysgIGN4eGJy aWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkZHJvcCAoCisrICAgICAgOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAqcHRyKSBub2V4Y2VwdAorKyAgewor KyAgICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBt b3N0cmVlY3h4OjpScG1Ucz46OnZhbHVlPnt9KHB0cik7CisrICB9CisrCisrICBzdGF0aWNfYXNz ZXJ0ICgKKysgICAgICA6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9l eHRlbnQ8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6dHlwZT46OnZhbHVlLAorKyAgICAg ICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGFgIGlzIHJlcXVpcmVk Iik7CisrICBzdGF0aWNfYXNzZXJ0IChzaXplb2YgKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpQYWNrYWdlTWV0YT4pID09IHNpemVvZiAodm9pZCAqKSwgIiIpOworKyAgc3RhdGlj X2Fzc2VydCAoYWxpZ25vZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2th Z2VNZXRhPikgPT0gYWxpZ25vZiAodm9pZCAqKSwgIiIpOworKyAgdm9pZAorKyAgY3h4YnJpZGdl MSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRudWxsICgKKysgICAgICA6OnN0 ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICpwdHIpIG5vZXhjZXB0 CisrICB7CisrICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlBhY2thZ2VNZXRhPiAoKTsKKysgIH0KKysgIHZvaWQKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0 ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkcmF3ICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICpwdHIsCisrICAgICAgOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6cG9pbnRlciByYXcpIG5vZXhjZXB0 CisrICB7CisrICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlBhY2thZ2VNZXRhPiAocmF3KTsKKysgIH0KKysgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpQYWNrYWdlTWV0YT46OmVsZW1lbnRfdHlwZSBjb25zdCAqCisrICBjeHhicmlkZ2Ux JHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRhJGdldCAoCisrICAgICAgOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiBjb25zdCAmcHRyKSBub2V4 Y2VwdAorKyAgeworKyAgICByZXR1cm4gcHRyLmdldCAoKTsKKysgIH0KKysgIDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnBvaW50ZXIKKysgIGN4eGJyaWRn ZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkcmVsZWFzZSAoCisrICAgICAg OjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAmcHRyKSBub2V4 Y2VwdAorKyAgeworKyAgICByZXR1cm4gcHRyLnJlbGVhc2UgKCk7CisrICB9CisrICB2b2lkCisr ICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRhJGRyb3AgKAor KyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKnB0 cikgbm9leGNlcHQKKysgIHsKKysgICAgOjpydXN0OjpkZWxldGVyX2lmPDo6cnVzdDo6ZGV0YWls Ojppc19jb21wbGV0ZTw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+Ojp2YWx1ZT57fShwdHIp OworKyAgfQorIH0gLy8gZXh0ZXJuICJDIgorIAorLW5hbWVzcGFjZSBydXN0IHsKKy1pbmxpbmUg bmFtZXNwYWNlIGN4eGJyaWRnZTEgeworK25hbWVzcGFjZSBydXN0CisreworK2lubGluZSBuYW1l c3BhY2UgY3h4YnJpZGdlMQorK3sKKyB0ZW1wbGF0ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpCdWJi bGV3cmFwICpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+OjphbGxvY2F0aW9uOjphbGxv YygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnVi Ymxld3JhcCRhbGxvYygpOworKzo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICoKKytCb3g8Ojpy cG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAor K3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRhbGxv YyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxl d3JhcD46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgKnB0 cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAk ZGVhbGxvYyhwdHIpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+Ojph bGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAqcHRyKSBub2V4 Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGRlYWxs b2MgKHB0cik7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXA+Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JEJ1YmJsZXdyYXAkZHJvcCh0aGlzKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwPjo6ZHJvcCAoKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRCdWJibGV3cmFwJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBt b3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRh aW5lckltYWdlU3RhdGU+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVy biBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRhbGxvYygp OworKzo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICoKKytCb3g8OjpycG1vc3Ry ZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2Vw dAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1h Z2VTdGF0ZSRhbGxvYyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJl ZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3Ry ZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkZGVhbGxvYyhwdHIpOworK3Zv aWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+OjphbGxvY2F0aW9u OjpkZWFsbG9jICgKKysgICAgOjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKnB0 cikgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVy SW1hZ2VTdGF0ZSRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6 cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPjo6ZHJvcCgpIG5vZXhjZXB0IHsKKy0g IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlJGRyb3AodGhp cyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT46OmRy b3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFp bmVySW1hZ2VTdGF0ZSRkcm9wICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJl ZWN4eDo6VGVtcEV0Y0d1YXJkICpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD46OmFs bG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQkYWxsb2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6VGVtcEV0 Y0d1YXJkICoKKytCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD46OmFsbG9jYXRpb246 OmFsbG9jICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRUZW1wRXRjR3VhcmQkYWxsb2MgKCk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8 OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1v c3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqcHRyKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94PDo6 cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9z dHJlZWN4eDo6VGVtcEV0Y0d1YXJkICpwdHIpIG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0 ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+Ojpkcm9wKCkgbm9l eGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRkcm9w KHRoaXMpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD46OmRyb3Ag KCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1 YXJkJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpGaWxl c3lzdGVtU2NyaXB0UHJlcCAqQm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJl cD46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRhbGxvYygpOworKzo6cnBtb3N0 cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAqCisrQm94PDo6cnBtb3N0cmVlY3h4OjpGaWxl c3lzdGVtU2NyaXB0UHJlcD46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0CisreworKyAg cmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRh bGxvYyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6Rmls ZXN5c3RlbVNjcmlwdFByZXA+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpG aWxlc3lzdGVtU2NyaXB0UHJlcCAqcHRyKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkZGVhbGxvYyhwdHIpOworK3ZvaWQKKytC b3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPjo6YWxsb2NhdGlvbjo6ZGVh bGxvYyAoCisrICAgIDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAqcHRyKSBu b2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2Ny aXB0UHJlcCRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBt b3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD46OmRyb3AoKSBub2V4Y2VwdCB7CistICBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkZHJvcCh0aGlz KTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD46OmRy b3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5 c3RlbVNjcmlwdFByZXAkZHJvcCAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+CistOjpycG1vc3Ry ZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJG bGFncz46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGFsbG9jKCk7CisrOjpycG1vc3Ry ZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKgorK0JveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXJGbGFncz46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGFsbG9jICgpOworIH0K KyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdz Pjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyAq cHRyKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0 ZXJGbGFncyRkZWFsbG9jKHB0cik7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1w b3J0ZXJGbGFncz46OmFsbG9jYXRpb246OmRlYWxsb2MgKAorKyAgICA6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXJGbGFncyAqcHRyKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRlYWxsb2MgKHB0cik7CisgfQorIHRlbXBsYXRl IDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+Ojpkcm9wKCkg bm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxh Z3MkZHJvcCh0aGlzKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZs YWdzPjo6ZHJvcCAoKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRScG1JbXBvcnRlckZsYWdzJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBt b3N0cmVlY3h4OjpScG1JbXBvcnRlciAqQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj46 OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRhbGxvYygpOworKzo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlciAqCisrQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj46OmFsbG9jYXRpb246 OmFsbG9jICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRScG1JbXBvcnRlciRhbGxvYyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6 OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlciAqcHRyKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkZGVhbGxvYyhwdHIpOworK3ZvaWQKKytCb3g8OjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyICpwdHIpIG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JFJwbUltcG9ydGVyJGRlYWxsb2MgKHB0cik7CisgfQorIHRlbXBsYXRlIDw+Cist dm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPjo6ZHJvcCgpIG5vZXhjZXB0IHsK Ky0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRkcm9wKHRoaXMpOwor K3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPjo6ZHJvcCAoKSBub2V4Y2Vw dAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRkcm9wICh0 aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAqQm94 PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4Pjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2Vw dCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgkYWxs b2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAqCisrQm94PDo6cnBtb3N0cmVlY3h4 OjpIaXN0b3J5Q3R4Pjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQKKyt7CisrICByZXR1 cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgkYWxsb2MgKCk7CisgfQor IHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHg+OjphbGxv Y2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICpwdHIpIG5vZXhjZXB0 IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGRlYWxsb2MocHRy KTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4Pjo6YWxsb2NhdGlvbjo6 ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKnB0cikgbm9leGNlcHQKKyt7Cisr ICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkZWFsbG9jIChwdHIpOwor IH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4Pjo6 ZHJvcCgpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5 Q3R4JGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD46 OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlz dG9yeUN0eCRkcm9wICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJlZWN4eDo6 VG9raW9IYW5kbGUgKkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+OjphbGxvY2F0aW9u OjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkVG9raW9IYW5kbGUkYWxsb2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKgor K0JveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBu b2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9I YW5kbGUkYWxsb2MgKCk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVj eHg6OlRva2lvSGFuZGxlPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6VG9r aW9IYW5kbGUgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JFRva2lvSGFuZGxlJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpU b2tpb0hhbmRsZT46OmFsbG9jYXRpb246OmRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hh bmRsZSAqcHRyKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRU b2tpb0hhbmRsZSRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6 cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmRyb3AoKSBub2V4Y2VwdCB7CistICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkZHJvcCh0aGlzKTsKKyt2b2lkCisrQm94 PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkZHJvcCAodGhpcyk7CisgfQor IHRlbXBsYXRlIDw+CistOjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZCAqQm94PDo6cnBt b3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0 IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJk JGFsbG9jKCk7CisrOjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZCAqCisrQm94PDo6cnBt b3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2Vw dAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1 YXJkJGFsbG9jICgpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4 OjpUb2tpb0VudGVyR3VhcmQ+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpU b2tpb0VudGVyR3VhcmQgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRkZWFsbG9jKHB0cik7Cisrdm9pZAorK0JveDw6OnJwbW9z dHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoCisrICAgIDo6 cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKnB0cikgbm9leGNlcHQKKyt7CisrICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGRlYWxsb2MgKHB0cik7Cisg fQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFy ZD46OmRyb3AoKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9r aW9FbnRlckd1YXJkJGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6VG9r aW9FbnRlckd1YXJkPjo6ZHJvcCAoKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQkZHJvcCAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+ CistOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl Pjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGFsbG9jKCk7CisrOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICoKKytCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPjo6YWxsb2NhdGlvbjo6YWxsb2Mg KCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRy ZWVmaWxlJGFsbG9jICgpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICpwdHIpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVl ZmlsZSRkZWFsbG9jKHB0cik7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgKnB0cikgbm9l eGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkZGVhbGxv YyAocHRyKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGU+Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JFRyZWVmaWxlJGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGU+Ojpkcm9wICgpIG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JFRyZWVmaWxlJGRyb3AgKHRoaXMpOworIH0KKy10ZW1wbGF0ZSA8PgorLVZlYzw6OnJwbW9zdHJl ZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OlZlYygpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkbmV3KHRoaXMpOwor K3RlbXBsYXRlIDw+IFZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OlZl YyAoKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92 ZXJyaWRlUmVwbGFjZW1lbnQkbmV3ICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIFZl Yzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OmRyb3AoKSBub2V4Y2VwdCB7 CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBs YWNlbWVudCRkcm9wKHRoaXMpOworK3ZvaWQKKytWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRl UmVwbGFjZW1lbnQ+Ojpkcm9wICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkZHJvcCAodGhpcyk7Cisg fQorIHRlbXBsYXRlIDw+CistOjpzdGQ6OnNpemVfdCBWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJy aWRlUmVwbGFjZW1lbnQ+OjpzaXplKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkbGVuKHRoaXMp OworKzo6c3RkOjpzaXplX3QKKytWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1l bnQ+OjpzaXplICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkbGVuICh0aGlzKTsKKyB9Cisg dGVtcGxhdGUgPD4KKy06OnN0ZDo6c2l6ZV90IFZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVS ZXBsYWNlbWVudD46OmNhcGFjaXR5KCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkY2FwYWNpdHko dGhpcyk7CisrOjpzdGQ6OnNpemVfdAorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudD46OmNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkY2FwYWNpdHkg KHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxh Y2VtZW50IGNvbnN0ICpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+Ojpk YXRhKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkZGF0YSh0aGlzKTsKKys6OnJwbW9zdHJlZWN4 eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAqCisrVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVy cmlkZVJlcGxhY2VtZW50Pjo6ZGF0YSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBj eHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGRhdGEg KHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVy cmlkZVJlcGxhY2VtZW50Pjo6cmVzZXJ2ZV90b3RhbCg6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5v ZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVy cmlkZVJlcGxhY2VtZW50JHJlc2VydmVfdG90YWwodGhpcywgbmV3X2NhcCk7Cisrdm9pZAorK1Zl Yzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OnJlc2VydmVfdG90YWwgKDo6 c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRyZXNlcnZlX3RvdGFsICh0 aGlzLCBuZXdfY2FwKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIFZlYzw6OnJwbW9zdHJlZWN4 eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OnNldF9sZW4oOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhj ZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlk ZVJlcGxhY2VtZW50JHNldF9sZW4odGhpcywgbGVuKTsKKyt2b2lkCisrVmVjPDo6cnBtb3N0cmVl Y3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6c2V0X2xlbiAoOjpzdGQ6OnNpemVfdCBsZW4pIG5v ZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92 ZXJyaWRlUmVwbGFjZW1lbnQkc2V0X2xlbiAodGhpcywgbGVuKTsKKyB9CisgdGVtcGxhdGUgPD4K Ky12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OnRydW5jYXRl KDo6c3RkOjpzaXplX3QgbGVuKSB7CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCR0cnVuY2F0ZSh0aGlzLCBsZW4pOworK3ZvaWQK KytWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+Ojp0cnVuY2F0ZSAoOjpz dGQ6OnNpemVfdCBsZW4pCisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0 cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1bmNhdGUgKHRoaXMsIGxlbik7CisgfQorLXRl bXBsYXRlIDw+CistVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6VmVjKCkgbm9l eGNlcHQgeworLSAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGlu ZyRuZXcodGhpcyk7CisrdGVtcGxhdGUgPD4gVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBw aW5nPjo6VmVjICgpIG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkU3RyaW5nTWFwcGluZyRuZXcgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQg VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6ZHJvcCgpIG5vZXhjZXB0IHsKKy0g IHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGRy b3AodGhpcyk7Cisrdm9pZAorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OmRy b3AgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkU3RyaW5nTWFwcGluZyRkcm9wICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnN0 ZDo6c2l6ZV90IFZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OnNpemUoKSBjb25z dCBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgk U3RyaW5nTWFwcGluZyRsZW4odGhpcyk7CisrOjpzdGQ6OnNpemVfdAorK1ZlYzw6OnJwbW9zdHJl ZWN4eDo6U3RyaW5nTWFwcGluZz46OnNpemUgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1 cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRsZW4gKHRo aXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6c3RkOjpzaXplX3QgVmVjPDo6cnBtb3N0cmVlY3h4 OjpTdHJpbmdNYXBwaW5nPjo6Y2FwYWNpdHkoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4g Y3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRjYXBhY2l0eSh0 aGlzKTsKKys6OnN0ZDo6c2l6ZV90CisrVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5n Pjo6Y2FwYWNpdHkgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRjYXBhY2l0eSAodGhpcyk7CisgfQor IHRlbXBsYXRlIDw+CistOjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmcgY29uc3QgKlZlYzw6 OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OmRhdGEoKSBjb25zdCBub2V4Y2VwdCB7Cist ICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRk YXRhKHRoaXMpOworKzo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nIGNvbnN0ICoKKytWZWM8 OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpkYXRhICgpIGNvbnN0IG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBp bmckZGF0YSAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBWZWM8OjpycG1vc3RyZWVj eHg6OlN0cmluZ01hcHBpbmc+OjpyZXNlcnZlX3RvdGFsKDo6c3RkOjpzaXplX3QgbmV3X2NhcCkg bm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmckcmVzZXJ2ZV90b3RhbCh0aGlzLCBuZXdfY2FwKTsKKyt2b2lkCisrVmVjPDo6 cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6cmVzZXJ2ZV90b3RhbCAoOjpzdGQ6OnNpemVf dCBuZXdfY2FwKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJw bW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHJlc2VydmVfdG90YWwgKHRoaXMsIG5ld19jYXApOwor IH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5n Pjo6c2V0X2xlbig6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckc2V0X2xlbih0aGlzLCBs ZW4pOworK3ZvaWQKKytWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpzZXRfbGVu ICg6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRzZXRfbGVuICh0aGlzLCBsZW4pOwor IH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5n Pjo6dHJ1bmNhdGUoOjpzdGQ6OnNpemVfdCBsZW4pIHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHRydW5jYXRlKHRoaXMsIGxlbik7Cisr dm9pZAorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OnRydW5jYXRlICg6OnN0 ZDo6c2l6ZV90IGxlbikKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkU3RyaW5nTWFwcGluZyR0cnVuY2F0ZSAodGhpcywgbGVuKTsKKyB9CisgdGVtcGxhdGUg PD4KKy06OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dk REI+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkYWxsb2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6UGFz c3dkREIgKgorK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+OjphbGxvY2F0aW9uOjphbGxv YyAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk UGFzc3dkREIkYWxsb2MgKCk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZERCPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6UGFz c3dkREIgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBh c3N3ZERCJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RE Qj46OmFsbG9jYXRpb246OmRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQiAqcHRyKSBu b2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2REQiRkZWFs bG9jIChwdHIpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2REQj46OmRyb3AoKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkUGFzc3dkREIkZHJvcCh0aGlzKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpQYXNz d2REQj46OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkUGFzc3dkREIkZHJvcCAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+CistOjpycG1vc3RyZWVj eHg6OlBhc3N3ZEVudHJpZXMgKkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmFs bG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGFsbG9jKCk7CisrOjpycG1vc3RyZWVjeHg6OlBhc3N3 ZEVudHJpZXMgKgorK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmFsbG9jYXRp b246OmFsbG9jICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRQYXNzd2RFbnRyaWVzJGFsbG9jICgpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQg Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6 OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAqcHRyKSBub2V4Y2VwdCB7CistICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRkZWFsbG9jKHB0cik7Cisrdm9pZAor K0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmFsbG9jYXRpb246OmRlYWxsb2Mg KAorKyAgICA6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAqcHRyKSBub2V4Y2VwdAorK3sK KysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGRlYWxsb2MgKHB0 cik7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVu dHJpZXM+Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JFBhc3N3ZEVudHJpZXMkZHJvcCh0aGlzKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2RFbnRyaWVzPjo6ZHJvcCAoKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8Pgor LTo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICpCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lv bnM+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRhbGxvYygpOworKzo6cnBtb3N0cmVlY3h4OjpF eHRlbnNpb25zICoKKytCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+OjphbGxvY2F0aW9u OjphbGxvYyAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkRXh0ZW5zaW9ucyRhbGxvYyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6 OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3Ry ZWVjeHg6OkV4dGVuc2lvbnMgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JEV4dGVuc2lvbnMkZGVhbGxvYyhwdHIpOworK3ZvaWQKKytCb3g8OjpycG1vc3Ry ZWVjeHg6OkV4dGVuc2lvbnM+OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6 RXh0ZW5zaW9ucyAqcHRyKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRFeHRlbnNpb25zJGRlYWxsb2MgKHB0cik7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBC b3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkZHJvcCh0aGlzKTsKKyt2b2lkCisr Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPjo6ZHJvcCAoKSBub2V4Y2VwdAorK3sKKysg IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRyb3AgKHRoaXMpOworIH0K KyB0ZW1wbGF0ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqQm94PDo6cnBt b3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQg eworLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRh bGxvYygpOworKzo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqCisrQm94PDo6cnBtb3N0 cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRh bGxvYyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6TG9j a2ZpbGVDb25maWc+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpMb2NrZmls ZUNvbmZpZyAqcHRyKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk TG9ja2ZpbGVDb25maWckZGVhbGxvYyhwdHIpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6 OkxvY2tmaWxlQ29uZmlnPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoCisrICAgIDo6cnBtb3N0cmVl Y3h4OjpMb2NrZmlsZUNvbmZpZyAqcHRyKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0 ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz46OmRyb3AoKSBu b2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWck ZHJvcCh0aGlzKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz46 OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9j a2ZpbGVDb25maWckZHJvcCAodGhpcyk7CisgfQorLXRlbXBsYXRlIDw+CistVmVjPDo6cnBtb3N0 cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6VmVjKCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRuZXcodGhpcyk7CisrdGVtcGxhdGUg PD4gVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6VmVjICgpIG5vZXhjZXB0Cisr eworKyAgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRuZXcg KHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2Nr ZWRQYWNrYWdlPjo6ZHJvcCgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGRyb3AodGhpcyk7Cisrdm9pZAorK1ZlYzw6 OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBy ZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRkcm9w ICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnN0ZDo6c2l6ZV90IFZlYzw6OnJwbW9zdHJl ZWN4eDo6TG9ja2VkUGFja2FnZT46OnNpemUoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4g Y3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRsZW4odGhpcyk7 CisrOjpzdGQ6OnNpemVfdAorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnNp emUgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRy cG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRsZW4gKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8Pgor LTo6c3RkOjpzaXplX3QgVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6Y2FwYWNp dHkoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkTG9ja2VkUGFja2FnZSRjYXBhY2l0eSh0aGlzKTsKKys6OnN0ZDo6c2l6ZV90Cisr VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6Y2FwYWNpdHkgKCkgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9j a2VkUGFja2FnZSRjYXBhY2l0eSAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+CistOjpycG1vc3Ry ZWVjeHg6OkxvY2tlZFBhY2thZ2UgY29uc3QgKlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFj a2FnZT46OmRhdGEoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0 X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRkYXRhKHRoaXMpOworKzo6cnBtb3N0cmVl Y3h4OjpMb2NrZWRQYWNrYWdlIGNvbnN0ICoKKytWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBh Y2thZ2U+OjpkYXRhICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkZGF0YSAodGhpcyk7CisgfQorIHRl bXBsYXRlIDw+Cistdm9pZCBWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+OjpyZXNl cnZlX3RvdGFsKDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkcmVzZXJ2ZV90b3Rh bCh0aGlzLCBuZXdfY2FwKTsKKyt2b2lkCisrVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNr YWdlPjo6cmVzZXJ2ZV90b3RhbCAoOjpzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdAorK3sK KysgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdl JHJlc2VydmVfdG90YWwgKHRoaXMsIG5ld19jYXApOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQg VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6c2V0X2xlbig6OnN0ZDo6c2l6ZV90 IGxlbikgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVl Y3h4JExvY2tlZFBhY2thZ2Ukc2V0X2xlbih0aGlzLCBsZW4pOworK3ZvaWQKKytWZWM8OjpycG1v c3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+OjpzZXRfbGVuICg6OnN0ZDo6c2l6ZV90IGxlbikgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9j a2VkUGFja2FnZSRzZXRfbGVuICh0aGlzLCBsZW4pOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQg VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6dHJ1bmNhdGUoOjpzdGQ6OnNpemVf dCBsZW4pIHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2Nr ZWRQYWNrYWdlJHRydW5jYXRlKHRoaXMsIGxlbik7Cisrdm9pZAorK1ZlYzw6OnJwbW9zdHJlZWN4 eDo6TG9ja2VkUGFja2FnZT46OnRydW5jYXRlICg6OnN0ZDo6c2l6ZV90IGxlbikKKyt7CisrICBy ZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSR0cnVu Y2F0ZSAodGhpcywgbGVuKTsKKyB9CisgfSAvLyBuYW1lc3BhY2UgY3h4YnJpZGdlMQorIH0gLy8g bmFtZXNwYWNlIHJ1c3QKK2RpZmYgLS1naXQgYS9ycG1vc3RyZWUtY3h4cnMuaCBiL3JwbW9zdHJl ZS1jeHhycy5oCitpbmRleCA5YWQxYzcyZWVhLi4xYzcwZmZkOTM1IDEwMDY0NAorLS0tIGEvcnBt b3N0cmVlLWN4eHJzLmgKKysrKyBiL3JwbW9zdHJlZS1jeHhycy5oCitAQCAtMSwxNiArMSwxNSBA QAorICNwcmFnbWEgb25jZQorLSNpbmNsdWRlICJzcmMvbGlicHJpdi9ycG1vc3RyZWUtY3h4cnMt cHJlbHVkZS5oIgorKyNpbmNsdWRlICJycG1vc3RyZWUtY2xpZW50bGliLmgiCisgI2luY2x1ZGUg InJwbW9zdHJlZS1jb250YWluZXIuaHBwIgorICNpbmNsdWRlICJycG1vc3RyZWUtY3h4cnN1dGls LmhwcCIKKy0jaW5jbHVkZSAicnBtb3N0cmVlLXV0aWwuaCIKKy0jaW5jbHVkZSAicnBtb3N0cmVl bWFpbi5oIgorLSNpbmNsdWRlICJycG1vc3RyZWUtY2xpZW50bGliLmgiCisgI2luY2x1ZGUgInJw bW9zdHJlZS1kaWZmLmhwcCIKKyAjaW5jbHVkZSAicnBtb3N0cmVlLWxpYmJ1aWx0aW4uaCIKKy0j aW5jbHVkZSAicnBtb3N0cmVlLXV0aWwuaCIKKyAjaW5jbHVkZSAicnBtb3N0cmVlLW91dHB1dC5o IgorLSNpbmNsdWRlICJycG1vc3RyZWUtcnBtLXV0aWwuaCIKKyAjaW5jbHVkZSAicnBtb3N0cmVl LXBhY2thZ2UtdmFyaWFudHMuaCIKKysjaW5jbHVkZSAicnBtb3N0cmVlLXJwbS11dGlsLmgiCisr I2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCisrI2luY2x1ZGUgInJwbW9zdHJlZW1haW4uaCIK KysjaW5jbHVkZSAic3JjL2xpYnByaXYvcnBtb3N0cmVlLWN4eHJzLXByZWx1ZGUuaCIKKyAjaW5j bHVkZSA8YWxnb3JpdGhtPgorICNpbmNsdWRlIDxhcnJheT4KKyAjaW5jbHVkZSA8Y2Fzc2VydD4K K0BAIC0zNiw5NCArMzUsOTggQEAKKyAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi LVdkb2xsYXItaW4taWRlbnRpZmllci1leHRlbnNpb24iCisgI2VuZGlmIC8vIF9fY2xhbmdfXwor IAorLW5hbWVzcGFjZSBydXN0IHsKKy1pbmxpbmUgbmFtZXNwYWNlIGN4eGJyaWRnZTEgeworK25h bWVzcGFjZSBydXN0CisreworK2lubGluZSBuYW1lc3BhY2UgY3h4YnJpZGdlMQorK3sKKyAvLyAj aW5jbHVkZSAicnVzdC9jeHguaCIKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfUEFOSUMKKyAjZGVm aW5lIENYWEJSSURHRTFfUEFOSUMKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgRXhjZXB0aW9uPgorLXZv aWQgcGFuaWMgW1tub3JldHVybl1dIChjb25zdCBjaGFyICptc2cpOworK3RlbXBsYXRlIDx0eXBl bmFtZSBFeGNlcHRpb24+IHZvaWQgcGFuaWMgW1tub3JldHVybl1dIChjb25zdCBjaGFyICptc2cp OworICNlbmRpZiAvLyBDWFhCUklER0UxX1BBTklDCisgCisgc3RydWN0IHVuc2FmZV9iaXRjb3B5 X3Q7CisgCistbmFtZXNwYWNlIHsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jbGFzcyBpbXBs OworK25hbWVzcGFjZQorK3sKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgaW1wbDsKKyB9 IC8vIG5hbWVzcGFjZQorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLTo6c3RkOjpzaXplX3Qg c2l6ZV9vZigpOworLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLTo6c3RkOjpzaXplX3QgYWxpZ25f b2YoKTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD46OnN0ZDo6c2l6ZV90IHNpemVfb2YgKCk7Cisr dGVtcGxhdGUgPHR5cGVuYW1lIFQ+OjpzdGQ6OnNpemVfdCBhbGlnbl9vZiAoKTsKKyAKKyAjaWZu ZGVmIENYWEJSSURHRTFfUlVTVF9TVFJJTkcKKyAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9TVFJJ TkcKKy1jbGFzcyBTdHJpbmcgZmluYWwgeworK2NsYXNzIFN0cmluZyBmaW5hbAorK3sKKyBwdWJs aWM6CistICBTdHJpbmcoKSBub2V4Y2VwdDsKKy0gIFN0cmluZyhjb25zdCBTdHJpbmcgJikgbm9l eGNlcHQ7CistICBTdHJpbmcoU3RyaW5nICYmKSBub2V4Y2VwdDsKKy0gIH5TdHJpbmcoKSBub2V4 Y2VwdDsKKy0KKy0gIFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyAmKTsKKy0gIFN0cmluZyhjb25z dCBjaGFyICopOworLSAgU3RyaW5nKGNvbnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpOworLSAgU3Ry aW5nKGNvbnN0IGNoYXIxNl90ICopOworLSAgU3RyaW5nKGNvbnN0IGNoYXIxNl90ICosIHN0ZDo6 c2l6ZV90KTsKKysgIFN0cmluZyAoKSBub2V4Y2VwdDsKKysgIFN0cmluZyAoY29uc3QgU3RyaW5n ICYpIG5vZXhjZXB0OworKyAgU3RyaW5nIChTdHJpbmcgJiYpIG5vZXhjZXB0OworKyAgflN0cmlu ZyAoKSBub2V4Y2VwdDsKKysKKysgIFN0cmluZyAoY29uc3Qgc3RkOjpzdHJpbmcgJik7CisrICBT dHJpbmcgKGNvbnN0IGNoYXIgKik7CisrICBTdHJpbmcgKGNvbnN0IGNoYXIgKiwgc3RkOjpzaXpl X3QpOworKyAgU3RyaW5nIChjb25zdCBjaGFyMTZfdCAqKTsKKysgIFN0cmluZyAoY29uc3QgY2hh cjE2X3QgKiwgc3RkOjpzaXplX3QpOworICNpZmRlZiBfX2NwcF9jaGFyOF90CistICBTdHJpbmco Y29uc3QgY2hhcjhfdCAqcyk7CistICBTdHJpbmcoY29uc3QgY2hhcjhfdCAqcywgc3RkOjpzaXpl X3QgbGVuKTsKKysgIFN0cmluZyAoY29uc3QgY2hhcjhfdCAqcyk7CisrICBTdHJpbmcgKGNvbnN0 IGNoYXI4X3QgKnMsIHN0ZDo6c2l6ZV90IGxlbik7CisgI2VuZGlmCisgCistICBzdGF0aWMgU3Ry aW5nIGxvc3N5KGNvbnN0IHN0ZDo6c3RyaW5nICYpIG5vZXhjZXB0OworLSAgc3RhdGljIFN0cmlu ZyBsb3NzeShjb25zdCBjaGFyICopIG5vZXhjZXB0OworLSAgc3RhdGljIFN0cmluZyBsb3NzeShj b25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKy0gIHN0YXRpYyBTdHJpbmcgbG9z c3koY29uc3QgY2hhcjE2X3QgKikgbm9leGNlcHQ7CistICBzdGF0aWMgU3RyaW5nIGxvc3N5KGNv bnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKysgIHN0YXRpYyBTdHJpbmcg bG9zc3kgKGNvbnN0IHN0ZDo6c3RyaW5nICYpIG5vZXhjZXB0OworKyAgc3RhdGljIFN0cmluZyBs b3NzeSAoY29uc3QgY2hhciAqKSBub2V4Y2VwdDsKKysgIHN0YXRpYyBTdHJpbmcgbG9zc3kgKGNv bnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OworKyAgc3RhdGljIFN0cmluZyBsb3Nz eSAoY29uc3QgY2hhcjE2X3QgKikgbm9leGNlcHQ7CisrICBzdGF0aWMgU3RyaW5nIGxvc3N5IChj b25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CisgCistICBTdHJpbmcgJm9w ZXJhdG9yPShjb25zdCBTdHJpbmcgJikgJiBub2V4Y2VwdDsKKy0gIFN0cmluZyAmb3BlcmF0b3I9 KFN0cmluZyAmJikgJiBub2V4Y2VwdDsKKysgIFN0cmluZyAmb3BlcmF0b3I9IChjb25zdCBTdHJp bmcgJikgJiBub2V4Y2VwdDsKKysgIFN0cmluZyAmb3BlcmF0b3I9IChTdHJpbmcgJiYpICYgbm9l eGNlcHQ7CisgCistICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0OworKyAg ZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcgKCkgY29uc3Q7CisgCistICBjb25zdCBjaGFy ICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7CistICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3Qgbm9l eGNlcHQ7CistICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wg ZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0IGNoYXIgKmRhdGEgKCkgY29uc3Qgbm9l eGNlcHQ7CisrICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OworKyAgc3RkOjpz aXplX3QgbGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBlbXB0eSAoKSBjb25zdCBu b2V4Y2VwdDsKKyAKKy0gIGNvbnN0IGNoYXIgKmNfc3RyKCkgbm9leGNlcHQ7CisrICBjb25zdCBj aGFyICpjX3N0ciAoKSBub2V4Y2VwdDsKKyAKKy0gIHN0ZDo6c2l6ZV90IGNhcGFjaXR5KCkgY29u c3Qgbm9leGNlcHQ7CistICB2b2lkIHJlc2VydmUoc2l6ZV90IG5ld19jYXApIG5vZXhjZXB0Owor KyAgc3RkOjpzaXplX3QgY2FwYWNpdHkgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHJlc2Vy dmUgKHNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKKyAKKyAgIHVzaW5nIGl0ZXJhdG9yID0gY2hh ciAqOworLSAgaXRlcmF0b3IgYmVnaW4oKSBub2V4Y2VwdDsKKy0gIGl0ZXJhdG9yIGVuZCgpIG5v ZXhjZXB0OworKyAgaXRlcmF0b3IgYmVnaW4gKCkgbm9leGNlcHQ7CisrICBpdGVyYXRvciBlbmQg KCkgbm9leGNlcHQ7CisgCisgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IGNvbnN0IGNoYXIgKjsK Ky0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9pdGVy YXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNiZWdpbigpIGNv bnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0Owor KyAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVy YXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBjYmVnaW4gKCkg Y29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBjZW5kICgpIGNvbnN0IG5vZXhjZXB0 OworIAorLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsK Ky0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7CistICBi b29sIG9wZXJhdG9yPChjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9w ZXJhdG9yPD0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRv cj4oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcj49KGNv bnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qg U3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBTdHJp bmcgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPCAoY29uc3QgU3RyaW5nICYp IGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcjw9IChjb25zdCBTdHJpbmcgJikgY29u c3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPiAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5v ZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj49IChjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNl cHQ7CisgCistICB2b2lkIHN3YXAoU3RyaW5nICYpIG5vZXhjZXB0OworKyAgdm9pZCBzd2FwIChT dHJpbmcgJikgbm9leGNlcHQ7CisgCistICBTdHJpbmcodW5zYWZlX2JpdGNvcHlfdCwgY29uc3Qg U3RyaW5nICYpIG5vZXhjZXB0OworKyAgU3RyaW5nICh1bnNhZmVfYml0Y29weV90LCBjb25zdCBT dHJpbmcgJikgbm9leGNlcHQ7CisgCisgcHJpdmF0ZToKKyAgIHN0cnVjdCBsb3NzeV90OworLSAg U3RyaW5nKGxvc3N5X3QsIGNvbnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OworLSAg U3RyaW5nKGxvc3N5X3QsIGNvbnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsK Ky0gIGZyaWVuZCB2b2lkIHN3YXAoU3RyaW5nICZsaHMsIFN0cmluZyAmcmhzKSBub2V4Y2VwdCB7 IGxocy5zd2FwKHJocyk7IH0KKysgIFN0cmluZyAobG9zc3lfdCwgY29uc3QgY2hhciAqLCBzdGQ6 OnNpemVfdCkgbm9leGNlcHQ7CisrICBTdHJpbmcgKGxvc3N5X3QsIGNvbnN0IGNoYXIxNl90ICos IHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKysgIGZyaWVuZCB2b2lkCisrICBzd2FwIChTdHJpbmcg JmxocywgU3RyaW5nICZyaHMpIG5vZXhjZXB0CisrICB7CisrICAgIGxocy5zd2FwIChyaHMpOwor KyAgfQorIAorICAgc3RkOjphcnJheTxzdGQ6OnVpbnRwdHJfdCwgMz4gcmVwcjsKKyB9OworQEAg LTEzMSw0OCArMTM0LDQ5IEBAIGNsYXNzIFN0cmluZyBmaW5hbCB7CisgCisgI2lmbmRlZiBDWFhC UklER0UxX1JVU1RfU1RSCisgI2RlZmluZSBDWFhCUklER0UxX1JVU1RfU1RSCistY2xhc3MgU3Ry IGZpbmFsIHsKKytjbGFzcyBTdHIgZmluYWwKKyt7CisgcHVibGljOgorLSAgU3RyKCkgbm9leGNl cHQ7CistICBTdHIoY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0OworLSAgU3RyKGNvbnN0IHN0ZDo6 c3RyaW5nICYpOworLSAgU3RyKGNvbnN0IGNoYXIgKik7CistICBTdHIoY29uc3QgY2hhciAqLCBz dGQ6OnNpemVfdCk7CisrICBTdHIgKCkgbm9leGNlcHQ7CisrICBTdHIgKGNvbnN0IFN0cmluZyAm KSBub2V4Y2VwdDsKKysgIFN0ciAoY29uc3Qgc3RkOjpzdHJpbmcgJik7CisrICBTdHIgKGNvbnN0 IGNoYXIgKik7CisrICBTdHIgKGNvbnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpOworIAorLSAgU3Ry ICZvcGVyYXRvcj0oY29uc3QgU3RyICYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworKyAgU3RyICZv cGVyYXRvcj0gKGNvbnN0IFN0ciAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAKKy0gIGV4cGxp Y2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3Q7CisrICBleHBsaWNpdCBvcGVyYXRvciBz dGQ6OnN0cmluZyAoKSBjb25zdDsKKyAjaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTAorLSAgZXhw bGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmdfdmlldygpIGNvbnN0OworKyAgZXhwbGljaXQgb3Bl cmF0b3Igc3RkOjpzdHJpbmdfdmlldyAoKSBjb25zdDsKKyAjZW5kaWYKKyAKKy0gIGNvbnN0IGNo YXIgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIHN0ZDo6c2l6ZV90IGxlbmd0aCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9v bCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3QgY2hhciAqZGF0YSAoKSBjb25zdCBu b2V4Y2VwdDsKKysgIHN0ZDo6c2l6ZV90IHNpemUgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBzdGQ6 OnNpemVfdCBsZW5ndGggKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGVtcHR5ICgpIGNvbnN0 IG5vZXhjZXB0OworIAorLSAgU3RyKGNvbnN0IFN0ciAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Cist ICB+U3RyKCkgbm9leGNlcHQgPSBkZWZhdWx0OworKyAgU3RyIChjb25zdCBTdHIgJikgbm9leGNl cHQgPSBkZWZhdWx0OworKyAgflN0ciAoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgCisgICB1c2lu ZyBpdGVyYXRvciA9IGNvbnN0IGNoYXIgKjsKKyAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gY29u c3QgY2hhciAqOworLSAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKKy0g IGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3Ig Y2JlZ2luKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9pdGVyYXRvciBjZW5kKCkgY29uc3Qg bm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJhdG9y IGNiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJhdG9yIGNlbmQgKCkgY29u c3Qgbm9leGNlcHQ7CisgCistICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyICYpIGNvbnN0IG5v ZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsK Ky0gIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wg b3BlcmF0b3I8PShjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9y Pihjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yPj0oY29uc3Qg U3RyICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBTdHIgJikg Y29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IFN0ciAmKSBjb25zdCBu b2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7 CisrICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJv b2wgb3BlcmF0b3I+IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJh dG9yPj0gKGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIHZvaWQgc3dhcChTdHIg Jikgbm9leGNlcHQ7CisrICB2b2lkIHN3YXAgKFN0ciAmKSBub2V4Y2VwdDsKKyAKKyBwcml2YXRl OgorICAgY2xhc3MgdW5pbml0OworLSAgU3RyKHVuaW5pdCkgbm9leGNlcHQ7CisrICBTdHIgKHVu aW5pdCkgbm9leGNlcHQ7CisgICBmcmllbmQgaW1wbDxTdHI+OworIAorICAgc3RkOjphcnJheTxz dGQ6OnVpbnRwdHJfdCwgMj4gcmVwcjsKK0BAIC0xODEsNzIgKzE4NSw3MiBAQCBjbGFzcyBTdHIg ZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX1NMSUNFCisgI2RlZmluZSBDWFhC UklER0UxX1JVU1RfU0xJQ0UKKy1uYW1lc3BhY2UgZGV0YWlsIHsKKy10ZW1wbGF0ZSA8Ym9vbD4K Ky1zdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lmIHt9OworLQorLXRlbXBsYXRlIDw+Cistc3RydWN0 IGNvcHlfYXNzaWduYWJsZV9pZjxmYWxzZT4geworLSAgY29weV9hc3NpZ25hYmxlX2lmKCkgbm9l eGNlcHQgPSBkZWZhdWx0OworLSAgY29weV9hc3NpZ25hYmxlX2lmKGNvbnN0IGNvcHlfYXNzaWdu YWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CistICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9w ZXJhdG9yPShjb25zdCBjb3B5X2Fzc2lnbmFibGVfaWYgJikgJiBub2V4Y2VwdCA9IGRlbGV0ZTsK Ky0gIGNvcHlfYXNzaWduYWJsZV9pZiAmb3BlcmF0b3I9KGNvcHlfYXNzaWduYWJsZV9pZiAmJikg JiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrbmFtZXNwYWNlIGRldGFpbAorK3sKKyt0ZW1wbGF0ZSA8 Ym9vbD4gc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZgorK3sKKyt9OworKworK3RlbXBsYXRlIDw+ IHN0cnVjdCBjb3B5X2Fzc2lnbmFibGVfaWY8ZmFsc2U+CisreworKyAgY29weV9hc3NpZ25hYmxl X2lmICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIGNvcHlfYXNzaWduYWJsZV9pZiAoY29uc3Qg Y29weV9hc3NpZ25hYmxlX2lmICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIGNvcHlfYXNzaWdu YWJsZV9pZiAmb3BlcmF0b3I9IChjb25zdCBjb3B5X2Fzc2lnbmFibGVfaWYgJikgJiBub2V4Y2Vw dCA9IGRlbGV0ZTsKKysgIGNvcHlfYXNzaWduYWJsZV9pZiAmb3BlcmF0b3I9IChjb3B5X2Fzc2ln bmFibGVfaWYgJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworIH07CisgfSAvLyBuYW1lc3BhY2Ug ZGV0YWlsCisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgU2xpY2UgZmluYWwKKy0g ICAgOiBwcml2YXRlIGRldGFpbDo6Y29weV9hc3NpZ25hYmxlX2lmPHN0ZDo6aXNfY29uc3Q8VD46 OnZhbHVlPiB7CisrY2xhc3MgU2xpY2UgZmluYWwgOiBwcml2YXRlIGRldGFpbDo6Y29weV9hc3Np Z25hYmxlX2lmPHN0ZDo6aXNfY29uc3Q8VD46OnZhbHVlPgorK3sKKyBwdWJsaWM6CisgICB1c2lu ZyB2YWx1ZV90eXBlID0gVDsKKyAKKy0gIFNsaWNlKCkgbm9leGNlcHQ7CistICBTbGljZShUICos IHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2VwdDsKKysgIFNsaWNlICgpIG5vZXhjZXB0OworKyAg U2xpY2UgKFQgKiwgc3RkOjpzaXplX3QgY291bnQpIG5vZXhjZXB0OworIAorLSAgdGVtcGxhdGUg PHR5cGVuYW1lIEM+CistICBleHBsaWNpdCBTbGljZShDICZjKSA6IFNsaWNlKGMuZGF0YSgpLCBj LnNpemUoKSkge30KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBDPiBleHBsaWNpdCBTbGljZSAoQyAm YykgOiBTbGljZSAoYy5kYXRhICgpLCBjLnNpemUgKCkpIHt9CisgCistICBTbGljZSAmb3BlcmF0 b3I9KGNvbnN0IFNsaWNlPFQ+ICYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworLSAgU2xpY2UgJm9w ZXJhdG9yPShTbGljZTxUPiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBTbGljZSAmb3Bl cmF0b3I9IChjb25zdCBTbGljZTxUPiAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFNsaWNl ICZvcGVyYXRvcj0gKFNsaWNlPFQ+ICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAKKy0gIFQg KmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCBub2V4 Y2VwdDsKKy0gIHN0ZDo6c2l6ZV90IGxlbmd0aCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBl bXB0eSgpIGNvbnN0IG5vZXhjZXB0OworKyAgVCAqZGF0YSAoKSBjb25zdCBub2V4Y2VwdDsKKysg IHN0ZDo6c2l6ZV90IHNpemUgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBzdGQ6OnNpemVfdCBsZW5n dGggKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0Owor IAorLSAgVCAmb3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdDsKKy0gIFQg JmF0KHN0ZDo6c2l6ZV90IG4pIGNvbnN0OworLSAgVCAmZnJvbnQoKSBjb25zdCBub2V4Y2VwdDsK Ky0gIFQgJmJhY2soKSBjb25zdCBub2V4Y2VwdDsKKysgIFQgJm9wZXJhdG9yW10gKHN0ZDo6c2l6 ZV90IG4pIGNvbnN0IG5vZXhjZXB0OworKyAgVCAmYXQgKHN0ZDo6c2l6ZV90IG4pIGNvbnN0Owor KyAgVCAmZnJvbnQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBUICZiYWNrICgpIGNvbnN0IG5vZXhj ZXB0OworIAorLSAgU2xpY2UoY29uc3QgU2xpY2U8VD4gJikgbm9leGNlcHQgPSBkZWZhdWx0Owor LSAgflNsaWNlKCkgbm9leGNlcHQgPSBkZWZhdWx0OworKyAgU2xpY2UgKGNvbnN0IFNsaWNlPFQ+ ICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIH5TbGljZSAoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7 CisgCisgICBjbGFzcyBpdGVyYXRvcjsKKy0gIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgbm9leGNl cHQ7CistICBpdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIGJlZ2lu ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgaXRlcmF0b3IgZW5kICgpIGNvbnN0IG5vZXhjZXB0Owor IAorLSAgdm9pZCBzd2FwKFNsaWNlICYpIG5vZXhjZXB0OworKyAgdm9pZCBzd2FwIChTbGljZSAm KSBub2V4Y2VwdDsKKyAKKyBwcml2YXRlOgorICAgY2xhc3MgdW5pbml0OworLSAgU2xpY2UodW5p bml0KSBub2V4Y2VwdDsKKysgIFNsaWNlICh1bmluaXQpIG5vZXhjZXB0OworICAgZnJpZW5kIGlt cGw8U2xpY2U+OworLSAgZnJpZW5kIHZvaWQgc2xpY2VJbml0KHZvaWQgKiwgY29uc3Qgdm9pZCAq LCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CistICBmcmllbmQgdm9pZCAqc2xpY2VQdHIoY29uc3Qg dm9pZCAqKSBub2V4Y2VwdDsKKy0gIGZyaWVuZCBzdGQ6OnNpemVfdCBzbGljZUxlbihjb25zdCB2 b2lkICopIG5vZXhjZXB0OworKyAgZnJpZW5kIHZvaWQgc2xpY2VJbml0ICh2b2lkICosIGNvbnN0 IHZvaWQgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OworKyAgZnJpZW5kIHZvaWQgKnNsaWNlUHRy IChjb25zdCB2b2lkICopIG5vZXhjZXB0OworKyAgZnJpZW5kIHN0ZDo6c2l6ZV90IHNsaWNlTGVu IChjb25zdCB2b2lkICopIG5vZXhjZXB0OworIAorICAgc3RkOjphcnJheTxzdGQ6OnVpbnRwdHJf dCwgMj4gcmVwcjsKKyB9OworIAorICNpZmRlZiBfX2NwcF9kZWR1Y3Rpb25fZ3VpZGVzCisgdGVt cGxhdGUgPHR5cGVuYW1lIEM+CistZXhwbGljaXQgU2xpY2UoQyAmYykKKy0gICAgLT4gU2xpY2U8 c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUoKnN0ZDo6ZGVjbHZhbDxDPigpLmRhdGEo KSk+PjsKKytleHBsaWNpdCBTbGljZSAoQyAmYykgLT4gU2xpY2U8c3RkOjpyZW1vdmVfcmVmZXJl bmNlX3Q8ZGVjbHR5cGUgKCpzdGQ6OmRlY2x2YWw8Qz4gKCkuZGF0YSAoKSk+PjsKKyAjZW5kaWYg Ly8gX19jcHBfZGVkdWN0aW9uX2d1aWRlcworIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNs YXNzIFNsaWNlPFQ+OjppdGVyYXRvciBmaW5hbCB7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs YXNzIFNsaWNlPFQ+OjppdGVyYXRvciBmaW5hbAorK3sKKyBwdWJsaWM6CisgI2lmIF9fY3BsdXNw bHVzID49IDIwMjAwMkwKKyAgIHVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpjb250aWd1 b3VzX2l0ZXJhdG9yX3RhZzsKK0BAIC0yNTgsMzAgKzI2MiwzMiBAQCBjbGFzcyBTbGljZTxUPjo6 aXRlcmF0b3IgZmluYWwgeworICAgdXNpbmcgcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWRkX3Bv aW50ZXI8VD46OnR5cGU7CisgICB1c2luZyByZWZlcmVuY2UgPSB0eXBlbmFtZSBzdGQ6OmFkZF9s dmFsdWVfcmVmZXJlbmNlPFQ+Ojp0eXBlOworIAorLSAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv bnN0IG5vZXhjZXB0OworKyAgcmVmZXJlbmNlIG9wZXJhdG9yKiAoKSBjb25zdCBub2V4Y2VwdDsK KyAgIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0OworLSAgcmVmZXJlbmNlIG9w ZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKKy0KKy0gIGl0ZXJhdG9y ICZvcGVyYXRvcisrKCkgbm9leGNlcHQ7CistICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkgbm9l eGNlcHQ7CistICBpdGVyYXRvciAmb3BlcmF0b3ItLSgpIG5vZXhjZXB0OworLSAgaXRlcmF0b3Ig b3BlcmF0b3ItLShpbnQpIG5vZXhjZXB0OworLQorLSAgaXRlcmF0b3IgJm9wZXJhdG9yKz0oZGlm ZmVyZW5jZV90eXBlKSBub2V4Y2VwdDsKKy0gIGl0ZXJhdG9yICZvcGVyYXRvci09KGRpZmZlcmVu Y2VfdHlwZSkgbm9leGNlcHQ7CistICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBl KSBjb25zdCBub2V4Y2VwdDsKKy0gIGZyaWVuZCBpbmxpbmUgaXRlcmF0b3Igb3BlcmF0b3IrKGRp ZmZlcmVuY2VfdHlwZSBsaHMsIGl0ZXJhdG9yIHJocykgbm9leGNlcHQgeworKyAgcmVmZXJlbmNl IG9wZXJhdG9yW10gKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7CisrCisrICBpdGVy YXRvciAmb3BlcmF0b3IrKyAoKSBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIG9wZXJhdG9yKysgKGlu dCkgbm9leGNlcHQ7CisrICBpdGVyYXRvciAmb3BlcmF0b3ItLSAoKSBub2V4Y2VwdDsKKysgIGl0 ZXJhdG9yIG9wZXJhdG9yLS0gKGludCkgbm9leGNlcHQ7CisrCisrICBpdGVyYXRvciAmb3BlcmF0 b3IrPSAoZGlmZmVyZW5jZV90eXBlKSBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yICZvcGVyYXRvci09 IChkaWZmZXJlbmNlX3R5cGUpIG5vZXhjZXB0OworKyAgaXRlcmF0b3Igb3BlcmF0b3IrIChkaWZm ZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OworKyAgZnJpZW5kIGlubGluZSBpdGVyYXRvcgor KyAgb3BlcmF0b3IrIChkaWZmZXJlbmNlX3R5cGUgbGhzLCBpdGVyYXRvciByaHMpIG5vZXhjZXB0 CisrICB7CisgICAgIHJldHVybiByaHMgKyBsaHM7CisgICB9CistICBpdGVyYXRvciBvcGVyYXRv ci0oZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKKy0gIGRpZmZlcmVuY2VfdHlwZSBv cGVyYXRvci0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CisrICBpdGVyYXRvciBv cGVyYXRvci0gKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7CisrICBkaWZmZXJlbmNl X3R5cGUgb3BlcmF0b3ItIChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0g IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJv b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wg b3BlcmF0b3I8KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVy YXRvcjw9KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRv cj4oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yPj0o Y29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKGNv bnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChjb25z dCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBp dGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I8PSAoY29uc3QgaXRl cmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPiAoY29uc3QgaXRlcmF0 b3IgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPj0gKGNvbnN0IGl0ZXJhdG9y ICYpIGNvbnN0IG5vZXhjZXB0OworIAorIHByaXZhdGU6CisgICBmcmllbmQgY2xhc3MgU2xpY2U7 CitAQCAtMjkwLDY4MyArMjk2LDgxMCBAQCBjbGFzcyBTbGljZTxUPjo6aXRlcmF0b3IgZmluYWwg eworIH07CisgCisgI2lmIF9fY3BsdXNwbHVzID49IDIwMjAwMkwKKy1zdGF0aWNfYXNzZXJ0KHN0 ZDo6cmFuZ2VzOjpjb250aWd1b3VzX3JhbmdlPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+Pik7 Cistc3RhdGljX2Fzc2VydChzdGQ6OmNvbnRpZ3VvdXNfaXRlcmF0b3I8cnVzdDo6U2xpY2U8Y29u c3QgdWludDhfdD46Oml0ZXJhdG9yPik7Cisrc3RhdGljX2Fzc2VydCAoc3RkOjpyYW5nZXM6OmNv bnRpZ3VvdXNfcmFuZ2U8cnVzdDo6U2xpY2U8Y29uc3QgdWludDhfdD4+KTsKKytzdGF0aWNfYXNz ZXJ0IChzdGQ6OmNvbnRpZ3VvdXNfaXRlcmF0b3I8cnVzdDo6U2xpY2U8Y29uc3QgdWludDhfdD46 Oml0ZXJhdG9yPik7CisgI2VuZGlmCisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistU2xpY2U8 VD46OlNsaWNlKCkgbm9leGNlcHQgeworLSAgc2xpY2VJbml0KHRoaXMsIHJlaW50ZXJwcmV0X2Nh c3Q8dm9pZCAqPihhbGlnbl9vZjxUPigpKSwgMCk7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFNs aWNlPFQ+OjpTbGljZSAoKSBub2V4Y2VwdAorK3sKKysgIHNsaWNlSW5pdCAodGhpcywgcmVpbnRl cnByZXRfY2FzdDx2b2lkICo+IChhbGlnbl9vZjxUPiAoKSksIDApOworIH0KKyAKKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KKy1TbGljZTxUPjo6U2xpY2UoVCAqcywgc3RkOjpzaXplX3QgY291bnQp IG5vZXhjZXB0IHsKKy0gIGFzc2VydChzICE9IG51bGxwdHIgfHwgY291bnQgPT0gMCk7CistICBz bGljZUluaXQodGhpcywKKy0gICAgICAgICAgICBzID09IG51bGxwdHIgJiYgY291bnQgPT0gMAor LSAgICAgICAgICAgICAgICA/IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPihhbGlnbl9vZjxUPigp KQorLSAgICAgICAgICAgICAgICA6IGNvbnN0X2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29u c3Q8VD46OnR5cGUgKj4ocyksCistICAgICAgICAgICAgY291bnQpOworK3RlbXBsYXRlIDx0eXBl bmFtZSBUPiBTbGljZTxUPjo6U2xpY2UgKFQgKnMsIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2Vw dAorK3sKKysgIGFzc2VydCAocyAhPSBudWxscHRyIHx8IGNvdW50ID09IDApOworKyAgc2xpY2VJ bml0ICh0aGlzLAorKyAgICAgICAgICAgICBzID09IG51bGxwdHIgJiYgY291bnQgPT0gMCA/IHJl aW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPiAoYWxpZ25fb2Y8VD4gKCkpCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92 ZV9jb25zdDxUPjo6dHlwZSAqPiAocyksCisrICAgICAgICAgICAgIGNvdW50KTsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAqU2xpY2U8VD46OmRhdGEoKSBjb25zdCBub2V4Y2Vw dCB7CistICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+KHNsaWNlUHRyKHRoaXMpKTsKKytU ICoKKytTbGljZTxUPjo6ZGF0YSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiByZWlu dGVycHJldF9jYXN0PFQgKj4gKHNsaWNlUHRyICh0aGlzKSk7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLXN0ZDo6c2l6ZV90IFNsaWNlPFQ+OjpzaXplKCkgY29uc3Qgbm9leGNlcHQg eworLSAgcmV0dXJuIHNsaWNlTGVuKHRoaXMpOworK3N0ZDo6c2l6ZV90CisrU2xpY2U8VD46OnNp emUgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gc2xpY2VMZW4gKHRoaXMpOworIH0K KyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1zdGQ6OnNpemVfdCBTbGljZTxUPjo6bGVuZ3Ro KCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHRoaXMtPnNpemUoKTsKKytzdGQ6OnNpemVf dAorK1NsaWNlPFQ+OjpsZW5ndGggKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gdGhp cy0+c2l6ZSAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistYm9vbCBTbGljZTxU Pjo6ZW1wdHkoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7 CisrYm9vbAorK1NsaWNlPFQ+OjplbXB0eSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVy biB0aGlzLT5zaXplICgpID09IDA7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQg JlNsaWNlPFQ+OjpvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0IHsKKy0g IGFzc2VydChuIDwgdGhpcy0+c2l6ZSgpKTsKKy0gIGF1dG8gcHRyID0gc3RhdGljX2Nhc3Q8Y2hh ciAqPihzbGljZVB0cih0aGlzKSkgKyBzaXplX29mPFQ+KCkgKiBuOworLSAgcmV0dXJuICpyZWlu dGVycHJldF9jYXN0PFQgKj4ocHRyKTsKKytUICYKKytTbGljZTxUPjo6b3BlcmF0b3JbXSAoc3Rk OjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQKKyt7CisrICBhc3NlcnQgKG4gPCB0aGlzLT5zaXpl ICgpKTsKKysgIGF1dG8gcHRyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAoc2xpY2VQdHIgKHRoaXMp KSArIHNpemVfb2Y8VD4gKCkgKiBuOworKyAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQgKj4g KHB0cik7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgJlNsaWNlPFQ+OjphdChz dGQ6OnNpemVfdCBuKSBjb25zdCB7CistICBpZiAobiA+PSB0aGlzLT5zaXplKCkpIHsKKy0gICAg cGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJydXN0OjpTbGljZSBpbmRleCBvdXQgb2YgcmFuZ2Ui KTsKKy0gIH0KKytUICYKKytTbGljZTxUPjo6YXQgKHN0ZDo6c2l6ZV90IG4pIGNvbnN0Cisrewor KyAgaWYgKG4gPj0gdGhpcy0+c2l6ZSAoKSkKKysgICAgeworKyAgICAgIHBhbmljPHN0ZDo6b3V0 X29mX3JhbmdlPiAoInJ1c3Q6OlNsaWNlIGluZGV4IG91dCBvZiByYW5nZSIpOworKyAgICB9Cisg ICByZXR1cm4gKCp0aGlzKVtuXTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAm U2xpY2U8VD46OmZyb250KCkgY29uc3Qgbm9leGNlcHQgeworLSAgYXNzZXJ0KCF0aGlzLT5lbXB0 eSgpKTsKKytUICYKKytTbGljZTxUPjo6ZnJvbnQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBh c3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7CisgICByZXR1cm4gKCp0aGlzKVswXTsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmU2xpY2U8VD46OmJhY2soKSBjb25zdCBub2V4Y2Vw dCB7CistICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOworLSAgcmV0dXJuICgqdGhpcylbdGhpcy0+ c2l6ZSgpIC0gMV07CisrVCAmCisrU2xpY2U8VD46OmJhY2sgKCkgY29uc3Qgbm9leGNlcHQKKyt7 CisrICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7CisrICByZXR1cm4gKCp0aGlzKVt0aGlzLT5z aXplICgpIC0gMV07CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIHR5cGVuYW1lIFNs aWNlPFQ+OjppdGVyYXRvcjo6cmVmZXJlbmNlCistU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRv ciooKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gKnN0YXRpY19jYXN0PFQgKj4odGhpcy0+ cG9zKTsKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKiAoKSBjb25zdCBub2V4Y2VwdAor K3sKKysgIHJldHVybiAqc3RhdGljX2Nhc3Q8VCAqPiAodGhpcy0+cG9zKTsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CisgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpwb2ludGVy CistU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHN0YXRpY19jYXN0PFQgKj4odGhpcy0+cG9zKTsKKytTbGljZTxUPjo6aXRlcmF0b3I6 Om9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBzdGF0aWNfY2FzdDxU ICo+ICh0aGlzLT5wb3MpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFt ZSBTbGljZTxUPjo6aXRlcmF0b3I6OnJlZmVyZW5jZSBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yW10oCistICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBl IG4pIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGF1dG8gcHRyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0 aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKKy0gIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz dDxUICo+KHB0cik7CisrdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpyZWZlcmVuY2UKKytT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yW10gKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRv cjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXV0byBwdHIgPSBz dGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKKysgIHJl dHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+IChwdHIpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3IrKygpIG5vZXhjZXB0IHsKKy0gIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNo YXIgKj4odGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZTsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRl cmF0b3IgJgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrKyAoKSBub2V4Y2VwdAorK3sK KysgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgKyB0aGlzLT5z dHJpZGU7CisgICByZXR1cm4gKnRoaXM7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor LXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9y KysoaW50KSBub2V4Y2VwdCB7CistICBhdXRvIHJldCA9IGl0ZXJhdG9yKCp0aGlzKTsKKy0gIHRo aXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZTsK Kyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yKysgKGludCkgbm9leGNlcHQKKyt7CisrICBhdXRvIHJldCA9IGl0ZXJhdG9yICgqdGhpcyk7 CisrICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhpcy0+ c3RyaWRlOworICAgcmV0dXJuIHJldDsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cist dHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9y LS0oKSBub2V4Y2VwdCB7CistICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMt PnBvcykgLSB0aGlzLT5zdHJpZGU7CisrdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICYKKytT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLS0gKCkgbm9leGNlcHQKKyt7CisrICB0aGlzLT5w b3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlOworICAg cmV0dXJuICp0aGlzOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBT bGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0tKGludCkgbm9l eGNlcHQgeworLSAgYXV0byByZXQgPSBpdGVyYXRvcigqdGhpcyk7CistICB0aGlzLT5wb3MgPSBz dGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGU7CisrdHlwZW5hbWUg U2xpY2U8VD46Oml0ZXJhdG9yCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0tIChpbnQp IG5vZXhjZXB0CisreworKyAgYXV0byByZXQgPSBpdGVyYXRvciAoKnRoaXMpOworKyAgdGhpcy0+ cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZTsKKyAg IHJldHVybiByZXQ7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFNs aWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcis9KAorLSAgICB0 eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBub2V4Y2VwdCB7 CistICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0aGlzLT5z dHJpZGUgKiBuOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmCisrU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcis9ICh0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVu Y2VfdHlwZSBuKSBub2V4Y2VwdAorK3sKKysgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIg Kj4gKHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOworICAgcmV0dXJuICp0aGlzOworIH0K KyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3Ig JlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItPSgKKy0gICAgdHlwZW5hbWUgU2xpY2U8VD46 Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNlcHQgeworLSAgdGhpcy0+cG9zID0g c3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlICogbjsKKyt0eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3It PSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNl cHQKKyt7CisrICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpIC0g dGhpcy0+c3RyaWRlICogbjsKKyAgIHJldHVybiAqdGhpczsKKyB9CisgCisgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3IrKAorLSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVu Y2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdCB7CistICBhdXRvIHJldCA9IGl0ZXJhdG9yKCp0aGlz KTsKKy0gIHJldC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0aGlzLT5z dHJpZGUgKiBuOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcgorK1NsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3IrICh0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2Vf dHlwZSBuKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlz KTsKKysgIHJldC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhpcy0+ c3RyaWRlICogbjsKKyAgIHJldHVybiByZXQ7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgorLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yLSgKKy0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUg bikgY29uc3Qgbm9leGNlcHQgeworLSAgYXV0byByZXQgPSBpdGVyYXRvcigqdGhpcyk7CistICBy ZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlICog bjsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yLSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikg Y29uc3Qgbm9leGNlcHQKKyt7CisrICBhdXRvIHJldCA9IGl0ZXJhdG9yICgqdGhpcyk7CisrICBy ZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZSAq IG47CisgICByZXR1cm4gcmV0OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyB0eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZQorLVNsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3ItKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewor LSAgYXV0byBkaWZmID0gc3RkOjpkaXN0YW5jZShzdGF0aWNfY2FzdDxjaGFyICo+KG90aGVyLnBv cyksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNoYXIgKj4odGhp cy0+cG9zKSk7CistICByZXR1cm4gZGlmZiAvIHN0YXRpY19jYXN0PHR5cGVuYW1lIFNsaWNlPFQ+ OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlPigKKy0gICAgICAgICAgICAgICAgICAgIHRoaXMt PnN0cmlkZSk7CisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0gKGNvbnN0IGl0ZXJhdG9y ICZvdGhlcikgY29uc3Qgbm9leGNlcHQKKyt7CisrICBhdXRvIGRpZmYgPSBzdGQ6OmRpc3RhbmNl IChzdGF0aWNfY2FzdDxjaGFyICo+IChvdGhlci5wb3MpLCBzdGF0aWNfY2FzdDxjaGFyICo+ICh0 aGlzLT5wb3MpKTsKKysgIHJldHVybiBkaWZmIC8gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGU+ICh0aGlzLT5zdHJpZGUpOworIH0KKyAKKyB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I9 PShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrU2xpY2U8 VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj09IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5v ZXhjZXB0CisreworICAgcmV0dXJuIHRoaXMtPnBvcyA9PSBvdGhlci5wb3M7CisgfQorIAorIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvciE9 KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxU Pjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9l eGNlcHQKKyt7CisgICByZXR1cm4gdGhpcy0+cG9zICE9IG90aGVyLnBvczsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPChj b25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvcjwgKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNl cHQKKyt7CisgICByZXR1cm4gdGhpcy0+cG9zIDwgb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KKy1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I8PShjb25z dCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcjw9IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0 CisreworICAgcmV0dXJuIHRoaXMtPnBvcyA8PSBvdGhlci5wb3M7CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj4oY29uc3Qg aXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3I+IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Cisr eworICAgcmV0dXJuIHRoaXMtPnBvcyA+IG90aGVyLnBvczsKKyB9CisgCisgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CistYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPj0oY29uc3QgaXRl cmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3I+PSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAorK3sK KyAgIHJldHVybiB0aGlzLT5wb3MgPj0gb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46OmJlZ2luKCkg Y29uc3Qgbm9leGNlcHQgeworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcgorK1NsaWNlPFQ+ OjpiZWdpbiAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIGl0ZXJhdG9yIGl0OworLSAgaXQucG9z ID0gc2xpY2VQdHIodGhpcyk7CistICBpdC5zdHJpZGUgPSBzaXplX29mPFQ+KCk7CisrICBpdC5w b3MgPSBzbGljZVB0ciAodGhpcyk7CisrICBpdC5zdHJpZGUgPSBzaXplX29mPFQ+ICgpOworICAg cmV0dXJuIGl0OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBTbGlj ZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46OmVuZCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGl0ZXJh dG9yIGl0ID0gdGhpcy0+YmVnaW4oKTsKKy0gIGl0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4o aXQucG9zKSArIGl0LnN0cmlkZSAqIHRoaXMtPnNpemUoKTsKKyt0eXBlbmFtZSBTbGljZTxUPjo6 aXRlcmF0b3IKKytTbGljZTxUPjo6ZW5kICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgaXRlcmF0 b3IgaXQgPSB0aGlzLT5iZWdpbiAoKTsKKysgIGl0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4g KGl0LnBvcykgKyBpdC5zdHJpZGUgKiB0aGlzLT5zaXplICgpOworICAgcmV0dXJuIGl0OworIH0K KyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy12b2lkIFNsaWNlPFQ+Ojpzd2FwKFNsaWNlICZy aHMpIG5vZXhjZXB0IHsKKy0gIHN0ZDo6c3dhcCgqdGhpcywgcmhzKTsKKyt2b2lkCisrU2xpY2U8 VD46OnN3YXAgKFNsaWNlICZyaHMpIG5vZXhjZXB0CisreworKyAgc3RkOjpzd2FwICgqdGhpcywg cmhzKTsKKyB9CisgI2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9TTElDRQorIAorICNpZm5kZWYg Q1hYQlJJREdFMV9SVVNUX0JPWAorICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX0JPWAorLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIEJveCBmaW5hbCB7CisrdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IGNsYXNzIEJveCBmaW5hbAorK3sKKyBwdWJsaWM6CisgICB1c2luZyBlbGVtZW50X3R5cGUg PSBUOworLSAgdXNpbmcgY29uc3RfcG9pbnRlciA9CistICAgICAgdHlwZW5hbWUgc3RkOjphZGRf cG9pbnRlcjx0eXBlbmFtZSBzdGQ6OmFkZF9jb25zdDxUPjo6dHlwZT46OnR5cGU7CisrICB1c2lu ZyBjb25zdF9wb2ludGVyID0gdHlwZW5hbWUgc3RkOjphZGRfcG9pbnRlcjx0eXBlbmFtZSBzdGQ6 OmFkZF9jb25zdDxUPjo6dHlwZT46OnR5cGU7CisgICB1c2luZyBwb2ludGVyID0gdHlwZW5hbWUg c3RkOjphZGRfcG9pbnRlcjxUPjo6dHlwZTsKKyAKKy0gIEJveCgpID0gZGVsZXRlOworLSAgQm94 KEJveCAmJikgbm9leGNlcHQ7CistICB+Qm94KCkgbm9leGNlcHQ7CisrICBCb3ggKCkgPSBkZWxl dGU7CisrICBCb3ggKEJveCAmJikgbm9leGNlcHQ7CisrICB+Qm94ICgpIG5vZXhjZXB0OworIAor LSAgZXhwbGljaXQgQm94KGNvbnN0IFQgJik7CistICBleHBsaWNpdCBCb3goVCAmJik7CisrICBl eHBsaWNpdCBCb3ggKGNvbnN0IFQgJik7CisrICBleHBsaWNpdCBCb3ggKFQgJiYpOworIAorLSAg Qm94ICZvcGVyYXRvcj0oQm94ICYmKSAmIG5vZXhjZXB0OworKyAgQm94ICZvcGVyYXRvcj0gKEJv eCAmJikgJiBub2V4Y2VwdDsKKyAKKyAgIGNvbnN0IFQgKm9wZXJhdG9yLT4oKSBjb25zdCBub2V4 Y2VwdDsKKy0gIGNvbnN0IFQgJm9wZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3Qg VCAmb3BlcmF0b3IqICgpIGNvbnN0IG5vZXhjZXB0OworICAgVCAqb3BlcmF0b3ItPigpIG5vZXhj ZXB0OworLSAgVCAmb3BlcmF0b3IqKCkgbm9leGNlcHQ7CisrICBUICZvcGVyYXRvciogKCkgbm9l eGNlcHQ7CisgCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gRmllbGRzPgorLSAgc3RhdGljIEJv eCBpbl9wbGFjZShGaWVsZHMgJiYuLi4pOworKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxk cz4gc3RhdGljIEJveCBpbl9wbGFjZSAoRmllbGRzICYmLi4uKTsKKyAKKy0gIHZvaWQgc3dhcChC b3ggJikgbm9leGNlcHQ7CisrICB2b2lkIHN3YXAgKEJveCAmKSBub2V4Y2VwdDsKKyAKKy0gIHN0 YXRpYyBCb3ggZnJvbV9yYXcoVCAqKSBub2V4Y2VwdDsKKysgIHN0YXRpYyBCb3ggZnJvbV9yYXcg KFQgKikgbm9leGNlcHQ7CisgCistICBUICppbnRvX3JhdygpIG5vZXhjZXB0OworKyAgVCAqaW50 b19yYXcgKCkgbm9leGNlcHQ7CisgCisgICAvKiBEZXByZWNhdGVkICovIHVzaW5nIHZhbHVlX3R5 cGUgPSBlbGVtZW50X3R5cGU7CisgCisgcHJpdmF0ZToKKyAgIGNsYXNzIHVuaW5pdDsKKyAgIGNs YXNzIGFsbG9jYXRpb247CistICBCb3godW5pbml0KSBub2V4Y2VwdDsKKy0gIHZvaWQgZHJvcCgp IG5vZXhjZXB0OworKyAgQm94ICh1bmluaXQpIG5vZXhjZXB0OworKyAgdm9pZCBkcm9wICgpIG5v ZXhjZXB0OworIAorLSAgZnJpZW5kIHZvaWQgc3dhcChCb3ggJmxocywgQm94ICZyaHMpIG5vZXhj ZXB0IHsgbGhzLnN3YXAocmhzKTsgfQorKyAgZnJpZW5kIHZvaWQKKysgIHN3YXAgKEJveCAmbGhz LCBCb3ggJnJocykgbm9leGNlcHQKKysgIHsKKysgICAgbGhzLnN3YXAgKHJocyk7CisrICB9Cisg CisgICBUICpwdHI7CisgfTsKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jbGFzcyBCb3g8 VD46OnVuaW5pdCB7fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgQm94PFQ+Ojp1bmlu aXQKKyt7CisrfTsKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jbGFzcyBCb3g8VD46OmFs bG9jYXRpb24geworLSAgc3RhdGljIFQgKmFsbG9jKCkgbm9leGNlcHQ7CistICBzdGF0aWMgdm9p ZCBkZWFsbG9jKFQgKikgbm9leGNlcHQ7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEJv eDxUPjo6YWxsb2NhdGlvbgorK3sKKysgIHN0YXRpYyBUICphbGxvYyAoKSBub2V4Y2VwdDsKKysg IHN0YXRpYyB2b2lkIGRlYWxsb2MgKFQgKikgbm9leGNlcHQ7CisgCisgcHVibGljOgorLSAgYWxs b2NhdGlvbigpIG5vZXhjZXB0IDogcHRyKGFsbG9jKCkpIHt9CistICB+YWxsb2NhdGlvbigpIG5v ZXhjZXB0IHsKKy0gICAgaWYgKHRoaXMtPnB0cikgeworLSAgICAgIGRlYWxsb2ModGhpcy0+cHRy KTsKKy0gICAgfQorKyAgYWxsb2NhdGlvbiAoKSBub2V4Y2VwdCA6IHB0ciAoYWxsb2MgKCkpIHt9 CisrICB+YWxsb2NhdGlvbiAoKSBub2V4Y2VwdAorKyAgeworKyAgICBpZiAodGhpcy0+cHRyKQor KyAgICAgIHsKKysgICAgICAgIGRlYWxsb2MgKHRoaXMtPnB0cik7CisrICAgICAgfQorICAgfQor ICAgVCAqcHRyOworIH07CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+OjpCb3go Qm94ICYmb3RoZXIpIG5vZXhjZXB0IDogcHRyKG90aGVyLnB0cikgeworLSAgb3RoZXIucHRyID0g bnVsbHB0cjsKKy19CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEJveDxUPjo6Qm94IChCb3ggJiZv dGhlcikgbm9leGNlcHQgOiBwdHIgKG90aGVyLnB0cikgeyBvdGhlci5wdHIgPSBudWxscHRyOyB9 CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+OjpCb3goY29uc3QgVCAmdmFsKSB7 CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEJveDxUPjo6Qm94IChjb25zdCBUICZ2YWwpCisrewor ICAgYWxsb2NhdGlvbiBhbGxvYzsKKy0gIDo6bmV3IChhbGxvYy5wdHIpIFQodmFsKTsKKysgIDo6 bmV3IChhbGxvYy5wdHIpIFQgKHZhbCk7CisgICB0aGlzLT5wdHIgPSBhbGxvYy5wdHI7CisgICBh bGxvYy5wdHIgPSBudWxscHRyOworIH0KKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1Cb3g8 VD46OkJveChUICYmdmFsKSB7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEJveDxUPjo6Qm94IChU ICYmdmFsKQorK3sKKyAgIGFsbG9jYXRpb24gYWxsb2M7CistICA6Om5ldyAoYWxsb2MucHRyKSBU KHN0ZDo6bW92ZSh2YWwpKTsKKysgIDo6bmV3IChhbGxvYy5wdHIpIFQgKHN0ZDo6bW92ZSAodmFs KSk7CisgICB0aGlzLT5wdHIgPSBhbGxvYy5wdHI7CisgICBhbGxvYy5wdHIgPSBudWxscHRyOwor IH0KKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1Cb3g8VD46On5Cb3goKSBub2V4Y2VwdCB7 CistICBpZiAodGhpcy0+cHRyKSB7CistICAgIHRoaXMtPmRyb3AoKTsKKy0gIH0KKyt0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4gQm94PFQ+Ojp+Qm94ICgpIG5vZXhjZXB0CisreworKyAgaWYgKHRoaXMt PnB0cikKKysgICAgeworKyAgICAgIHRoaXMtPmRyb3AgKCk7CisrICAgIH0KKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+ICZCb3g8VD46Om9wZXJhdG9yPShCb3ggJiZvdGhl cikgJiBub2V4Y2VwdCB7CistICBpZiAodGhpcy0+cHRyKSB7CistICAgIHRoaXMtPmRyb3AoKTsK Ky0gIH0KKytCb3g8VD4gJgorK0JveDxUPjo6b3BlcmF0b3I9IChCb3ggJiZvdGhlcikgJiBub2V4 Y2VwdAorK3sKKysgIGlmICh0aGlzLT5wdHIpCisrICAgIHsKKysgICAgICB0aGlzLT5kcm9wICgp OworKyAgICB9CisgICB0aGlzLT5wdHIgPSBvdGhlci5wdHI7CisgICBvdGhlci5wdHIgPSBudWxs cHRyOworICAgcmV0dXJuICp0aGlzOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1j b25zdCBUICpCb3g8VD46Om9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdCB7CisrY29uc3QgVCAq CisrQm94PFQ+OjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICByZXR1cm4gdGhp cy0+cHRyOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jb25zdCBUICZCb3g8VD46 Om9wZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0IHsKKytjb25zdCBUICYKKytCb3g8VD46Om9wZXJh dG9yKiAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIHJldHVybiAqdGhpcy0+cHRyOworIH0KKyAK KyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICpCb3g8VD46Om9wZXJhdG9yLT4oKSBub2V4Y2Vw dCB7CisrVCAqCisrQm94PFQ+OjpvcGVyYXRvci0+KCkgbm9leGNlcHQKKyt7CisgICByZXR1cm4g dGhpcy0+cHRyOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZCb3g8VD46Om9w ZXJhdG9yKigpIG5vZXhjZXB0IHsKKytUICYKKytCb3g8VD46Om9wZXJhdG9yKiAoKSBub2V4Y2Vw dAorK3sKKyAgIHJldHVybiAqdGhpcy0+cHRyOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKyB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gRmllbGRzPgorLUJveDxUPiBCb3g8VD46OmluX3Bs YWNlKEZpZWxkcyAmJi4uLmZpZWxkcykgeworK0JveDxUPgorK0JveDxUPjo6aW5fcGxhY2UgKEZp ZWxkcyAmJi4uLmZpZWxkcykKKyt7CisgICBhbGxvY2F0aW9uIGFsbG9jOworICAgYXV0byBwdHIg PSBhbGxvYy5wdHI7CistICA6Om5ldyAocHRyKSBUe3N0ZDo6Zm9yd2FyZDxGaWVsZHM+KGZpZWxk cykuLi59OworKyAgOjpuZXcgKHB0cikgVHsgc3RkOjpmb3J3YXJkPEZpZWxkcz4gKGZpZWxkcyku Li4gfTsKKyAgIGFsbG9jLnB0ciA9IG51bGxwdHI7CistICByZXR1cm4gZnJvbV9yYXcocHRyKTsK KysgIHJldHVybiBmcm9tX3JhdyAocHRyKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Cistdm9pZCBCb3g8VD46OnN3YXAoQm94ICZyaHMpIG5vZXhjZXB0IHsKKyt2b2lkCisrQm94PFQ+ Ojpzd2FwIChCb3ggJnJocykgbm9leGNlcHQKKyt7CisgICB1c2luZyBzdGQ6OnN3YXA7CistICBz d2FwKHRoaXMtPnB0ciwgcmhzLnB0cik7CisrICBzd2FwICh0aGlzLT5wdHIsIHJocy5wdHIpOwor IH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1Cb3g8VD4gQm94PFQ+Ojpmcm9tX3JhdyhU ICpyYXcpIG5vZXhjZXB0IHsKKytCb3g8VD4KKytCb3g8VD46OmZyb21fcmF3IChUICpyYXcpIG5v ZXhjZXB0CisreworICAgQm94IGJveCA9IHVuaW5pdHt9OworICAgYm94LnB0ciA9IHJhdzsKKyAg IHJldHVybiBib3g7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgKkJveDxUPjo6 aW50b19yYXcoKSBub2V4Y2VwdCB7CisrVCAqCisrQm94PFQ+OjppbnRvX3JhdyAoKSBub2V4Y2Vw dAorK3sKKyAgIFQgKnJhdyA9IHRoaXMtPnB0cjsKKyAgIHRoaXMtPnB0ciA9IG51bGxwdHI7Cisg ICByZXR1cm4gcmF3OworIH0KKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1Cb3g8VD46OkJv eCh1bmluaXQpIG5vZXhjZXB0IHt9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEJveDxUPjo6Qm94 ICh1bmluaXQpIG5vZXhjZXB0IHt9CisgI2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9CT1gKKyAK KyAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9CSVRDT1BZX1QKKyAjZGVmaW5lIENYWEJSSURHRTFf UlVTVF9CSVRDT1BZX1QKKy1zdHJ1Y3QgdW5zYWZlX2JpdGNvcHlfdCBmaW5hbCB7CistICBleHBs aWNpdCB1bnNhZmVfYml0Y29weV90KCkgPSBkZWZhdWx0OworK3N0cnVjdCB1bnNhZmVfYml0Y29w eV90IGZpbmFsCisreworKyAgZXhwbGljaXQgdW5zYWZlX2JpdGNvcHlfdCAoKSA9IGRlZmF1bHQ7 CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX0JJVENPUFlfVAorIAorICNpZm5kZWYg Q1hYQlJJREdFMV9SVVNUX1ZFQworICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1ZFQworLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIFZlYyBmaW5hbCB7CisrdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IGNsYXNzIFZlYyBmaW5hbAorK3sKKyBwdWJsaWM6CisgICB1c2luZyB2YWx1ZV90eXBlID0g VDsKKyAKKy0gIFZlYygpIG5vZXhjZXB0OworLSAgVmVjKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxU Pik7CistICBWZWMoY29uc3QgVmVjICYpOworLSAgVmVjKFZlYyAmJikgbm9leGNlcHQ7CistICB+ VmVjKCkgbm9leGNlcHQ7CistCistICBWZWMgJm9wZXJhdG9yPShWZWMgJiYpICYgbm9leGNlcHQ7 CistICBWZWMgJm9wZXJhdG9yPShjb25zdCBWZWMgJikgJjsKKy0KKy0gIHN0ZDo6c2l6ZV90IHNp emUoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKKy0g IGNvbnN0IFQgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKKy0gIFQgKmRhdGEoKSBub2V4Y2VwdDsK Ky0gIHN0ZDo6c2l6ZV90IGNhcGFjaXR5KCkgY29uc3Qgbm9leGNlcHQ7CistCistICBjb25zdCBU ICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3QgVCAm YXQoc3RkOjpzaXplX3QgbikgY29uc3Q7CistICBjb25zdCBUICZmcm9udCgpIGNvbnN0IG5vZXhj ZXB0OworLSAgY29uc3QgVCAmYmFjaygpIGNvbnN0IG5vZXhjZXB0OworLQorLSAgVCAmb3BlcmF0 b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdDsKKy0gIFQgJmF0KHN0ZDo6c2l6ZV90IG4pOwor LSAgVCAmZnJvbnQoKSBub2V4Y2VwdDsKKy0gIFQgJmJhY2soKSBub2V4Y2VwdDsKKy0KKy0gIHZv aWQgcmVzZXJ2ZShzdGQ6OnNpemVfdCBuZXdfY2FwKTsKKy0gIHZvaWQgcHVzaF9iYWNrKGNvbnN0 IFQgJnZhbHVlKTsKKy0gIHZvaWQgcHVzaF9iYWNrKFQgJiZ2YWx1ZSk7CistICB0ZW1wbGF0ZSA8 dHlwZW5hbWUuLi4gQXJncz4KKy0gIHZvaWQgZW1wbGFjZV9iYWNrKEFyZ3MgJiYuLi5hcmdzKTsK Ky0gIHZvaWQgdHJ1bmNhdGUoc3RkOjpzaXplX3QgbGVuKTsKKy0gIHZvaWQgY2xlYXIoKTsKKysg IFZlYyAoKSBub2V4Y2VwdDsKKysgIFZlYyAoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+KTsKKysg IFZlYyAoY29uc3QgVmVjICYpOworKyAgVmVjIChWZWMgJiYpIG5vZXhjZXB0OworKyAgflZlYyAo KSBub2V4Y2VwdDsKKysKKysgIFZlYyAmb3BlcmF0b3I9IChWZWMgJiYpICYgbm9leGNlcHQ7Cisr ICBWZWMgJm9wZXJhdG9yPSAoY29uc3QgVmVjICYpICY7CisrCisrICBzdGQ6OnNpemVfdCBzaXpl ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBlbXB0eSAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGNvbnN0IFQgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBUICpkYXRhICgpIG5vZXhjZXB0 OworKyAgc3RkOjpzaXplX3QgY2FwYWNpdHkgKCkgY29uc3Qgbm9leGNlcHQ7CisrCisrICBjb25z dCBUICZvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0 IFQgJmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdDsKKysgIGNvbnN0IFQgJmZyb250ICgpIGNvbnN0 IG5vZXhjZXB0OworKyAgY29uc3QgVCAmYmFjayAoKSBjb25zdCBub2V4Y2VwdDsKKysKKysgIFQg Jm9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0OworKyAgVCAmYXQgKHN0ZDo6c2l6 ZV90IG4pOworKyAgVCAmZnJvbnQgKCkgbm9leGNlcHQ7CisrICBUICZiYWNrICgpIG5vZXhjZXB0 OworKworKyAgdm9pZCByZXNlcnZlIChzdGQ6OnNpemVfdCBuZXdfY2FwKTsKKysgIHZvaWQgcHVz aF9iYWNrIChjb25zdCBUICZ2YWx1ZSk7CisrICB2b2lkIHB1c2hfYmFjayAoVCAmJnZhbHVlKTsK KysgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPiB2b2lkIGVtcGxhY2VfYmFjayAoQXJncyAm Ji4uLmFyZ3MpOworKyAgdm9pZCB0cnVuY2F0ZSAoc3RkOjpzaXplX3QgbGVuKTsKKysgIHZvaWQg Y2xlYXIgKCk7CisgCisgICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjsKKy0gIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7CistICBpdGVyYXRvciBlbmQoKSBu b2V4Y2VwdDsKKysgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhjZXB0OworKyAgaXRlcmF0b3IgZW5k ICgpIG5vZXhjZXB0OworIAorICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSB0eXBlbmFtZSBTbGlj ZTxjb25zdCBUPjo6aXRlcmF0b3I7CistICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5v ZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25z dF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNl bmQoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29u c3RfaXRlcmF0b3IgY2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3Ig Y2VuZCAoKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIHZvaWQgc3dhcChWZWMgJikgbm9leGNlcHQ7 CisrICB2b2lkIHN3YXAgKFZlYyAmKSBub2V4Y2VwdDsKKyAKKy0gIFZlYyh1bnNhZmVfYml0Y29w eV90LCBjb25zdCBWZWMgJikgbm9leGNlcHQ7CisrICBWZWMgKHVuc2FmZV9iaXRjb3B5X3QsIGNv bnN0IFZlYyAmKSBub2V4Y2VwdDsKKyAKKyBwcml2YXRlOgorLSAgdm9pZCByZXNlcnZlX3RvdGFs KHN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OworLSAgdm9pZCBzZXRfbGVuKHN0ZDo6c2l6 ZV90IGxlbikgbm9leGNlcHQ7CistICB2b2lkIGRyb3AoKSBub2V4Y2VwdDsKKy0KKy0gIGZyaWVu ZCB2b2lkIHN3YXAoVmVjICZsaHMsIFZlYyAmcmhzKSBub2V4Y2VwdCB7IGxocy5zd2FwKHJocyk7 IH0KKysgIHZvaWQgcmVzZXJ2ZV90b3RhbCAoc3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7 CisrICB2b2lkIHNldF9sZW4gKHN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7CisrICB2b2lkIGRy b3AgKCkgbm9leGNlcHQ7CisrCisrICBmcmllbmQgdm9pZAorKyAgc3dhcCAoVmVjICZsaHMsIFZl YyAmcmhzKSBub2V4Y2VwdAorKyAgeworKyAgICBsaHMuc3dhcCAocmhzKTsKKysgIH0KKyAKKyAg IHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+IHJlcHI7CisgfTsKKyAKKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1WZWM8VD46OlZlYyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdCkg OiBWZWN7fSB7CistICB0aGlzLT5yZXNlcnZlX3RvdGFsKGluaXQuc2l6ZSgpKTsKKy0gIHN0ZDo6 bW92ZShpbml0LmJlZ2luKCksIGluaXQuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcigqdGhpcykp OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAoc3RkOjppbml0aWFsaXplcl9s aXN0PFQ+IGluaXQpIDogVmVje30KKyt7CisrICB0aGlzLT5yZXNlcnZlX3RvdGFsIChpbml0LnNp emUgKCkpOworKyAgc3RkOjptb3ZlIChpbml0LmJlZ2luICgpLCBpbml0LmVuZCAoKSwgc3RkOjpi YWNrX2luc2VydGVyICgqdGhpcykpOworIH0KKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1W ZWM8VD46OlZlYyhjb25zdCBWZWMgJm90aGVyKSA6IFZlYygpIHsKKy0gIHRoaXMtPnJlc2VydmVf dG90YWwob3RoZXIuc2l6ZSgpKTsKKy0gIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5l bmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKCp0aGlzKSk7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IFZlYzxUPjo6VmVjIChjb25zdCBWZWMgJm90aGVyKSA6IFZlYyAoKQorK3sKKysgIHRoaXMtPnJl c2VydmVfdG90YWwgKG90aGVyLnNpemUgKCkpOworKyAgc3RkOjpjb3B5IChvdGhlci5iZWdpbiAo KSwgb3RoZXIuZW5kICgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIgKCp0aGlzKSk7CisgfQorIAorLXRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLVZlYzxUPjo6VmVjKFZlYyAmJm90aGVyKSBub2V4Y2VwdCA6 IHJlcHIob3RoZXIucmVwcikgeworLSAgbmV3ICgmb3RoZXIpIFZlYygpOworK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAoVmVjICYmb3RoZXIpIG5vZXhjZXB0IDogcmVwciAob3Ro ZXIucmVwcikKKyt7CisrICBuZXcgKCZvdGhlcikgVmVjICgpOworIH0KKyAKKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1WZWM8VD46On5WZWMoKSBub2V4Y2VwdCB7CistICB0aGlzLT5kcm9wKCk7 CistfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46On5WZWMgKCkgbm9leGNlcHQgeyB0 aGlzLT5kcm9wICgpOyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVmVjPFQ+ICZWZWM8 VD46Om9wZXJhdG9yPShWZWMgJiZvdGhlcikgJiBub2V4Y2VwdCB7CistICB0aGlzLT5kcm9wKCk7 CisrVmVjPFQ+ICYKKytWZWM8VD46Om9wZXJhdG9yPSAoVmVjICYmb3RoZXIpICYgbm9leGNlcHQK Kyt7CisrICB0aGlzLT5kcm9wICgpOworICAgdGhpcy0+cmVwciA9IG90aGVyLnJlcHI7CistICBu ZXcgKCZvdGhlcikgVmVjKCk7CisrICBuZXcgKCZvdGhlcikgVmVjICgpOworICAgcmV0dXJuICp0 aGlzOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1WZWM8VD4gJlZlYzxUPjo6b3Bl cmF0b3I9KGNvbnN0IFZlYyAmb3RoZXIpICYgeworLSAgaWYgKHRoaXMgIT0gJm90aGVyKSB7Cist ICAgIHRoaXMtPmRyb3AoKTsKKy0gICAgbmV3ICh0aGlzKSBWZWMob3RoZXIpOworLSAgfQorK1Zl YzxUPiAmCisrVmVjPFQ+OjpvcGVyYXRvcj0gKGNvbnN0IFZlYyAmb3RoZXIpICYKKyt7CisrICBp ZiAodGhpcyAhPSAmb3RoZXIpCisrICAgIHsKKysgICAgICB0aGlzLT5kcm9wICgpOworKyAgICAg IG5ldyAodGhpcykgVmVjIChvdGhlcik7CisrICAgIH0KKyAgIHJldHVybiAqdGhpczsKKyB9Cisg CisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistYm9vbCBWZWM8VD46OmVtcHR5KCkgY29uc3Qgbm9l eGNlcHQgeworLSAgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOworK2Jvb2wKKytWZWM8VD46OmVt cHR5ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPnNpemUgKCkgPT0gMDsK KyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAqVmVjPFQ+OjpkYXRhKCkgbm9leGNl cHQgeworLSAgcmV0dXJuIGNvbnN0X2Nhc3Q8VCAqPihjb25zdF9jYXN0PGNvbnN0IFZlYzxUPiAq Pih0aGlzKS0+ZGF0YSgpKTsKKytUICoKKytWZWM8VD46OmRhdGEgKCkgbm9leGNlcHQKKyt7Cisr ICByZXR1cm4gY29uc3RfY2FzdDxUICo+IChjb25zdF9jYXN0PGNvbnN0IFZlYzxUPiAqPiAodGhp cyktPmRhdGEgKCkpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jb25zdCBUICZW ZWM8VD46Om9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQgeworLSAgYXNz ZXJ0KG4gPCB0aGlzLT5zaXplKCkpOworLSAgYXV0byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxj b25zdCBjaGFyICo+KHRoaXMtPmRhdGEoKSk7CistICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8 Y29uc3QgVCAqPihkYXRhICsgbiAqIHNpemVfb2Y8VD4oKSk7CisrY29uc3QgVCAmCisrVmVjPFQ+ OjpvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGFzc2Vy dCAobiA8IHRoaXMtPnNpemUgKCkpOworKyAgYXV0byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxj b25zdCBjaGFyICo+ICh0aGlzLT5kYXRhICgpKTsKKysgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBUICo+IChkYXRhICsgbiAqIHNpemVfb2Y8VD4gKCkpOworIH0KKyAKKyB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KKy1jb25zdCBUICZWZWM8VD46OmF0KHN0ZDo6c2l6ZV90IG4pIGNvbnN0 IHsKKy0gIGlmIChuID49IHRoaXMtPnNpemUoKSkgeworLSAgICBwYW5pYzxzdGQ6Om91dF9vZl9y YW5nZT4oInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKy0gIH0KKytjb25zdCBUICYK KytWZWM8VD46OmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdAorK3sKKysgIGlmIChuID49IHRoaXMt PnNpemUgKCkpCisrICAgIHsKKysgICAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4gKCJydXN0 OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7CisrICAgIH0KKyAgIHJldHVybiAoKnRoaXMpW25d OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jb25zdCBUICZWZWM8VD46OmZyb250 KCkgY29uc3Qgbm9leGNlcHQgeworLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKKytjb25zdCBU ICYKKytWZWM8VD46OmZyb250ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNzZXJ0ICghdGhp cy0+ZW1wdHkgKCkpOworICAgcmV0dXJuICgqdGhpcylbMF07CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLWNvbnN0IFQgJlZlYzxUPjo6YmFjaygpIGNvbnN0IG5vZXhjZXB0IHsKKy0g IGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7CistICByZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXplKCkg LSAxXTsKKytjb25zdCBUICYKKytWZWM8VD46OmJhY2sgKCkgY29uc3Qgbm9leGNlcHQKKyt7Cisr ICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7CisrICByZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXpl ICgpIC0gMV07CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgJlZlYzxUPjo6b3Bl cmF0b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdCB7CistICBhc3NlcnQobiA8IHRoaXMtPnNp emUoKSk7CistICBhdXRvIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIgKj4odGhpcy0+ZGF0 YSgpKTsKKy0gIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+KGRhdGEgKyBuICogc2l6ZV9v ZjxUPigpKTsKKytUICYKKytWZWM8VD46Om9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIG5vZXhj ZXB0CisreworKyAgYXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAoKSk7CisrICBhdXRvIGRhdGEgPSBy ZWludGVycHJldF9jYXN0PGNoYXIgKj4gKHRoaXMtPmRhdGEgKCkpOworKyAgcmV0dXJuICpyZWlu dGVycHJldF9jYXN0PFQgKj4gKGRhdGEgKyBuICogc2l6ZV9vZjxUPiAoKSk7CisgfQorIAorIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgJlZlYzxUPjo6YXQoc3RkOjpzaXplX3QgbikgeworLSAg aWYgKG4gPj0gdGhpcy0+c2l6ZSgpKSB7CistICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPigi cnVzdDo6VmVjIGluZGV4IG91dCBvZiByYW5nZSIpOworLSAgfQorK1QgJgorK1ZlYzxUPjo6YXQg KHN0ZDo6c2l6ZV90IG4pCisreworKyAgaWYgKG4gPj0gdGhpcy0+c2l6ZSAoKSkKKysgICAgewor KyAgICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPiAoInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2Yg cmFuZ2UiKTsKKysgICAgfQorICAgcmV0dXJuICgqdGhpcylbbl07CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLVQgJlZlYzxUPjo6ZnJvbnQoKSBub2V4Y2VwdCB7CistICBhc3NlcnQo IXRoaXMtPmVtcHR5KCkpOworK1QgJgorK1ZlYzxUPjo6ZnJvbnQgKCkgbm9leGNlcHQKKyt7Cisr ICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7CisgICByZXR1cm4gKCp0aGlzKVswXTsKKyB9Cisg CisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmVmVjPFQ+OjpiYWNrKCkgbm9leGNlcHQgewor LSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKKy0gIHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUo KSAtIDFdOworK1QgJgorK1ZlYzxUPjo6YmFjayAoKSBub2V4Y2VwdAorK3sKKysgIGFzc2VydCAo IXRoaXMtPmVtcHR5ICgpKTsKKysgIHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUgKCkgLSAxXTsK KyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9pZCBWZWM8VD46OnJlc2VydmUoc3Rk OjpzaXplX3QgbmV3X2NhcCkgeworLSAgdGhpcy0+cmVzZXJ2ZV90b3RhbChuZXdfY2FwKTsKKyt2 b2lkCisrVmVjPFQ+OjpyZXNlcnZlIChzdGQ6OnNpemVfdCBuZXdfY2FwKQorK3sKKysgIHRoaXMt PnJlc2VydmVfdG90YWwgKG5ld19jYXApOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K Ky12b2lkIFZlYzxUPjo6cHVzaF9iYWNrKGNvbnN0IFQgJnZhbHVlKSB7CistICB0aGlzLT5lbXBs YWNlX2JhY2sodmFsdWUpOworK3ZvaWQKKytWZWM8VD46OnB1c2hfYmFjayAoY29uc3QgVCAmdmFs dWUpCisreworKyAgdGhpcy0+ZW1wbGFjZV9iYWNrICh2YWx1ZSk7CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLXZvaWQgVmVjPFQ+OjpwdXNoX2JhY2soVCAmJnZhbHVlKSB7CistICB0 aGlzLT5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHZhbHVlKSk7Cisrdm9pZAorK1ZlYzxUPjo6cHVz aF9iYWNrIChUICYmdmFsdWUpCisreworKyAgdGhpcy0+ZW1wbGFjZV9iYWNrIChzdGQ6Om1vdmUg KHZhbHVlKSk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIHRlbXBsYXRlIDx0eXBl bmFtZS4uLiBBcmdzPgorLXZvaWQgVmVjPFQ+OjplbXBsYWNlX2JhY2soQXJncyAmJi4uLmFyZ3Mp IHsKKy0gIGF1dG8gc2l6ZSA9IHRoaXMtPnNpemUoKTsKKy0gIHRoaXMtPnJlc2VydmVfdG90YWwo c2l6ZSArIDEpOworLSAgOjpuZXcgKHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9j YXN0PGNoYXIgKj4odGhpcy0+ZGF0YSgpKSArCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemUgKiBzaXplX29mPFQ+KCkpKQorLSAgICAgIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy Z3MpLi4uKTsKKy0gIHRoaXMtPnNldF9sZW4oc2l6ZSArIDEpOworK3ZvaWQKKytWZWM8VD46OmVt cGxhY2VfYmFjayAoQXJncyAmJi4uLmFyZ3MpCisreworKyAgYXV0byBzaXplID0gdGhpcy0+c2l6 ZSAoKTsKKysgIHRoaXMtPnJlc2VydmVfdG90YWwgKHNpemUgKyAxKTsKKysgIDo6bmV3IChyZWlu dGVycHJldF9jYXN0PFQgKj4gKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPiAodGhpcy0+ZGF0YSAo KSkgKyBzaXplICogc2l6ZV9vZjxUPiAoKSkpCisrICAgICAgVCAoc3RkOjpmb3J3YXJkPEFyZ3M+ IChhcmdzKS4uLik7CisrICB0aGlzLT5zZXRfbGVuIChzaXplICsgMSk7CisgfQorIAorIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLXZvaWQgVmVjPFQ+OjpjbGVhcigpIHsKKy0gIHRoaXMtPnRydW5j YXRlKDApOworK3ZvaWQKKytWZWM8VD46OmNsZWFyICgpCisreworKyAgdGhpcy0+dHJ1bmNhdGUg KDApOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBWZWM8VD46Oml0 ZXJhdG9yIFZlYzxUPjo6YmVnaW4oKSBub2V4Y2VwdCB7CistICByZXR1cm4gU2xpY2U8VD4odGhp cy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmJlZ2luKCk7CisrdHlwZW5hbWUgVmVjPFQ+OjppdGVy YXRvcgorK1ZlYzxUPjo6YmVnaW4gKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gU2xpY2U8VD4g KHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmJlZ2luICgpOworIH0KKyAKKyB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yIFZlYzxUPjo6ZW5kKCkg bm9leGNlcHQgeworLSAgcmV0dXJuIFNsaWNlPFQ+KHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgp KS5lbmQoKTsKKyt0eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yCisrVmVjPFQ+OjplbmQgKCkgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gU2xpY2U8VD4gKHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUg KCkpLmVuZCAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgVmVj PFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmJlZ2luKCkgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHRoaXMtPmNiZWdpbigpOworK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IK KytWZWM8VD46OmJlZ2luICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPmNi ZWdpbiAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgVmVjPFQ+ Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmVuZCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVy biB0aGlzLT5jZW5kKCk7CisrdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvcgorK1ZlYzxU Pjo6ZW5kICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPmNlbmQgKCk7Cisg fQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRl cmF0b3IgVmVjPFQ+OjpjYmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gU2xpY2U8 Y29uc3QgVD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmJlZ2luKCk7CisrdHlwZW5hbWUg VmVjPFQ+Ojpjb25zdF9pdGVyYXRvcgorK1ZlYzxUPjo6Y2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0 CisreworKyAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+ICh0aGlzLT5kYXRhICgpLCB0aGlzLT5zaXpl ICgpKS5iZWdpbiAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUg VmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmNlbmQoKSBjb25zdCBub2V4Y2VwdCB7Cist ICByZXR1cm4gU2xpY2U8Y29uc3QgVD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmVuZCgp OworK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IKKytWZWM8VD46OmNlbmQgKCkgY29u c3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gU2xpY2U8Y29uc3QgVD4gKHRoaXMtPmRhdGEgKCks IHRoaXMtPnNpemUgKCkpLmVuZCAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cist dm9pZCBWZWM8VD46OnN3YXAoVmVjICZyaHMpIG5vZXhjZXB0IHsKKyt2b2lkCisrVmVjPFQ+Ojpz d2FwIChWZWMgJnJocykgbm9leGNlcHQKKyt7CisgICB1c2luZyBzdGQ6OnN3YXA7CistICBzd2Fw KHRoaXMtPnJlcHIsIHJocy5yZXByKTsKKysgIHN3YXAgKHRoaXMtPnJlcHIsIHJocy5yZXByKTsK KyB9CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVmVjPFQ+OjpWZWModW5zYWZlX2JpdGNv cHlfdCwgY29uc3QgVmVjICZiaXRzKSBub2V4Y2VwdCA6IHJlcHIoYml0cy5yZXByKSB7fQorK3Rl bXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAodW5zYWZlX2JpdGNvcHlfdCwgY29uc3Qg VmVjICZiaXRzKSBub2V4Y2VwdCA6IHJlcHIgKGJpdHMucmVwcikge30KKyAjZW5kaWYgLy8gQ1hY QlJJREdFMV9SVVNUX1ZFQworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX09QQVFVRQorICNk ZWZpbmUgQ1hYQlJJREdFMV9SVVNUX09QQVFVRQorLWNsYXNzIE9wYXF1ZSB7CisrY2xhc3MgT3Bh cXVlCisreworIHB1YmxpYzoKKy0gIE9wYXF1ZSgpID0gZGVsZXRlOworLSAgT3BhcXVlKGNvbnN0 IE9wYXF1ZSAmKSA9IGRlbGV0ZTsKKy0gIH5PcGFxdWUoKSA9IGRlbGV0ZTsKKysgIE9wYXF1ZSAo KSA9IGRlbGV0ZTsKKysgIE9wYXF1ZSAoY29uc3QgT3BhcXVlICYpID0gZGVsZXRlOworKyAgfk9w YXF1ZSAoKSA9IGRlbGV0ZTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfT1BBUVVF CisgCisgI2lmbmRlZiBDWFhCUklER0UxX0lTX0NPTVBMRVRFCisgI2RlZmluZSBDWFhCUklER0Ux X0lTX0NPTVBMRVRFCistbmFtZXNwYWNlIGRldGFpbCB7CistbmFtZXNwYWNlIHsKKy10ZW1wbGF0 ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OnNpemVfdD4KKy1zdHJ1Y3QgaXNfY29tcGxl dGUgOiBzdGQ6OmZhbHNlX3R5cGUge307CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RydWN0 IGlzX2NvbXBsZXRlPFQsIGRlY2x0eXBlKHNpemVvZihUKSk+IDogc3RkOjp0cnVlX3R5cGUge307 CisrbmFtZXNwYWNlIGRldGFpbAorK3sKKytuYW1lc3BhY2UKKyt7CisrdGVtcGxhdGUgPHR5cGVu YW1lIFQsIHR5cGVuYW1lID0gc3RkOjpzaXplX3Q+IHN0cnVjdCBpc19jb21wbGV0ZSA6IHN0ZDo6 ZmFsc2VfdHlwZQorK3sKKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfY29t cGxldGU8VCwgZGVjbHR5cGUgKHNpemVvZiAoVCkpPiA6IHN0ZDo6dHJ1ZV90eXBlCisreworK307 CisgfSAvLyBuYW1lc3BhY2UKKyB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKyAjZW5kaWYgLy8gQ1hY QlJJREdFMV9JU19DT01QTEVURQorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9MQVlPVVQKKyAjZGVm aW5lIENYWEJSSURHRTFfTEFZT1VUCistY2xhc3MgbGF5b3V0IHsKKytjbGFzcyBsYXlvdXQKKyt7 CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIHN0ZDo6c2l6ZV90IHNpemVfb2YgKCk7 CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIHN0ZDo6c2l6ZV90IGFsaWduX29mICgp OworICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBmcmllbmQgc3RkOjpzaXplX3Qgc2l6ZV9v ZigpOworLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBmcmllbmQgc3RkOjpzaXplX3QgYWxp Z25fb2YoKTsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgc3RhdGljIHR5cGVuYW1lIHN0 ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUKKy0gIGRvX3NpemVf b2YoKSB7CistICAgIHJldHVybiBUOjpsYXlvdXQ6OnNpemUoKTsKKysgIHN0YXRpYyB0eXBlbmFt ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsIHN0ZDo6 c2l6ZV90Pjo6dHlwZQorKyAgZG9fc2l6ZV9vZiAoKQorKyAgeworKyAgICByZXR1cm4gVDo6bGF5 b3V0OjpzaXplICgpOworICAgfQorICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBzdGF0aWMg dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1 ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUK Ky0gIGRvX3NpemVfb2YoKSB7CistICAgIHJldHVybiBzaXplb2YoVCk7CisrICBzdGF0aWMgdHlw ZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwg c3RkOjpzaXplX3Q+Ojp0eXBlCisrICBkb19zaXplX29mICgpCisrICB7CisrICAgIHJldHVybiBz aXplb2YgKFQpOworICAgfQorICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBzdGF0aWMKKy0g ICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1 ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCistICAgICAgc2l6ZV9vZigpIHsKKy0gICAgcmV0dXJuIGRv X3NpemVfb2Y8VD4oKTsKKysgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6 OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCisrICBzaXplX29mICgp CisrICB7CisrICAgIHJldHVybiBkb19zaXplX29mPFQ+ICgpOworICAgfQorICAgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+CistICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19i YXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQorLSAgZG9fYWxpZ25fb2YoKSB7CistICAgIHJldHVybiBU OjpsYXlvdXQ6OmFsaWduKCk7CisrICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk Ojppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKKysgIGRv X2FsaWduX29mICgpCisrICB7CisrICAgIHJldHVybiBUOjpsYXlvdXQ6OmFsaWduICgpOworICAg fQorICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFi bGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUKKy0gIGRvX2FsaWduX29mKCkg eworLSAgICByZXR1cm4gYWxpZ25vZihUKTsKKysgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJs ZV9pZjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5 cGUKKysgIGRvX2FsaWduX29mICgpCisrICB7CisrICAgIHJldHVybiBhbGlnbm9mIChUKTsKKyAg IH0KKyAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgc3RhdGljCistICAgICAgdHlwZW5hbWUg c3RkOjplbmFibGVfaWY8ZGV0YWlsOjppc19jb21wbGV0ZTxUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90 Pjo6dHlwZQorLSAgICAgIGFsaWduX29mKCkgeworLSAgICByZXR1cm4gZG9fYWxpZ25fb2Y8VD4o KTsKKysgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRl PFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCisrICBhbGlnbl9vZiAoKQorKyAgeworKyAg ICByZXR1cm4gZG9fYWxpZ25fb2Y8VD4gKCk7CisgICB9CisgfTsKKyAKKyB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy1zdGQ6OnNpemVfdCBzaXplX29mKCkgeworLSAgcmV0dXJuIGxheW91dDo6c2l6 ZV9vZjxUPigpOworK3N0ZDo6c2l6ZV90Cisrc2l6ZV9vZiAoKQorK3sKKysgIHJldHVybiBsYXlv dXQ6OnNpemVfb2Y8VD4gKCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXN0ZDo6 c2l6ZV90IGFsaWduX29mKCkgeworLSAgcmV0dXJuIGxheW91dDo6YWxpZ25fb2Y8VD4oKTsKKytz dGQ6OnNpemVfdAorK2FsaWduX29mICgpCisreworKyAgcmV0dXJuIGxheW91dDo6YWxpZ25fb2Y8 VD4gKCk7CisgfQorICNlbmRpZiAvLyBDWFhCUklER0UxX0xBWU9VVAorIH0gLy8gbmFtZXNwYWNl IGN4eGJyaWRnZTEKK0BAIC05NzgsNTEgKzExMTEsNTMgQEAgc3RkOjpzaXplX3QgYWxpZ25fb2Yo KSB7CisgI2RlZmluZSBDWFhfREVGQVVMVF9WQUxVRSh2YWx1ZSkKKyAjZW5kaWYKKyAKKy1uYW1l c3BhY2UgcnBtb3N0cmVlY3h4IHsKKy0gIHN0cnVjdCBTdHJpbmdNYXBwaW5nOworLSAgZW51bSBj bGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90OworLSAgZW51bSBjbGFzcyBCdWJi bGV3cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90OworLSAgc3RydWN0IEJ1YmJsZXdyYXA7 CistICBzdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZTsKKy0gIHN0cnVjdCBFeHBvcnRlZE1hbmlm ZXN0RGlmZjsKKy0gIHN0cnVjdCBQcnVuZWRDb250YWluZXJJbmZvOworLSAgZW51bSBjbGFzcyBS ZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90OworLSAgc3RydWN0IFRlbXBFdGNHdWFyZDsKKy0g IHN0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcDsKKy0gIHN0cnVjdCBEZXBsb3ltZW50TGF5ZXJl ZE1ldGE7CistICBzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZTsKKy0gIGVudW0gY2xh c3MgUGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3Q7CistICBzdHJ1Y3QgUGFyc2Vk UmV2aXNpb247CistICBzdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFnczsKKy0gIHN0cnVjdCBScG1JbXBv cnRlcjsKKy0gIHN0cnVjdCBIaXN0b3J5RW50cnk7CistICBzdHJ1Y3QgSGlzdG9yeUN0eDsKKy0g IHN0cnVjdCBUb2tpb0hhbmRsZTsKKy0gIHN0cnVjdCBUb2tpb0VudGVyR3VhcmQ7CistICBlbnVt IGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90OworLSAgZW51bSBjbGFz cyBBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsKKy0gIHN0cnVjdCBS ZWZzcGVjOworLSAgZW51bSBjbGFzcyBPdmVycmlkZVJlcGxhY2VtZW50VHlwZSA6IDo6c3RkOjp1 aW50OF90OworLSAgc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnQ7CistICBlbnVtIGNsYXNzIE9w dFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3Q7CistICBzdHJ1Y3QgVHJlZWZpbGU7CistICBzdHJ1 Y3QgUmVwb1BhY2thZ2U7CistICBzdHJ1Y3QgTGl2ZUFwcGx5U3RhdGU7CistICBzdHJ1Y3QgUGFz c3dkREI7CistICBzdHJ1Y3QgUGFzc3dkRW50cmllczsKKy0gIHN0cnVjdCBFeHRlbnNpb25zOwor LSAgc3RydWN0IExvY2tlZFBhY2thZ2U7CistICBzdHJ1Y3QgTG9ja2ZpbGVDb25maWc7CistICB1 c2luZyBDeHhHT2JqZWN0QXJyYXkgPSA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5Owor LSAgdXNpbmcgQ2xpZW50Q29ubmVjdGlvbiA9IDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0 aW9uOworLSAgdXNpbmcgUlBNRGlmZiA9IDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOworLSAgdXNp bmcgUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0ID0gOjpycG1vc3RyZWVjeHg6OlJwbU9zdHJlZURp ZmZQcmludEZvcm1hdDsKKy0gIHVzaW5nIFByb2dyZXNzID0gOjpycG1vc3RyZWVjeHg6OlByb2dy ZXNzOworLSAgdXNpbmcgUnBtVHMgPSA6OnJwbW9zdHJlZWN4eDo6UnBtVHM7CistICB1c2luZyBQ YWNrYWdlTWV0YSA9IDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTsKKy19CistCistbmFtZXNw YWNlIHJwbW9zdHJlZWN4eCB7CisrbmFtZXNwYWNlIHJwbW9zdHJlZWN4eAorK3sKKytzdHJ1Y3Qg U3RyaW5nTWFwcGluZzsKKytlbnVtIGNsYXNzIFN5c3RlbUhvc3RUeXBlIDogOjpzdGQ6OnVpbnQ4 X3Q7CisrZW51bSBjbGFzcyBCdWJibGV3cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90Owor K3N0cnVjdCBCdWJibGV3cmFwOworK3N0cnVjdCBDb250YWluZXJJbWFnZVN0YXRlOworK3N0cnVj dCBFeHBvcnRlZE1hbmlmZXN0RGlmZjsKKytzdHJ1Y3QgUHJ1bmVkQ29udGFpbmVySW5mbzsKKytl bnVtIGNsYXNzIFJlZnNwZWNUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7Cisrc3RydWN0IFRlbXBFdGNH dWFyZDsKKytzdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXA7Cisrc3RydWN0IERlcGxveW1lbnRM YXllcmVkTWV0YTsKKytzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZTsKKytlbnVtIGNs YXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90OworK3N0cnVjdCBQYXJzZWRS ZXZpc2lvbjsKKytzdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFnczsKKytzdHJ1Y3QgUnBtSW1wb3J0ZXI7 Cisrc3RydWN0IEhpc3RvcnlFbnRyeTsKKytzdHJ1Y3QgSGlzdG9yeUN0eDsKKytzdHJ1Y3QgVG9r aW9IYW5kbGU7Cisrc3RydWN0IFRva2lvRW50ZXJHdWFyZDsKKytlbnVtIGNsYXNzIFJlcG9NZXRh ZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90OworK2VudW0gY2xhc3MgQWR2aXNvcmllc01ldGFk YXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7Cisrc3RydWN0IFJlZnNwZWM7CisrZW51bSBjbGFz cyBPdmVycmlkZVJlcGxhY2VtZW50VHlwZSA6IDo6c3RkOjp1aW50OF90OworK3N0cnVjdCBPdmVy cmlkZVJlcGxhY2VtZW50OworK2VudW0gY2xhc3MgT3B0VXNyTG9jYWwgOiA6OnN0ZDo6dWludDhf dDsKKytzdHJ1Y3QgVHJlZWZpbGU7Cisrc3RydWN0IFJlcG9QYWNrYWdlOworK3N0cnVjdCBMaXZl QXBwbHlTdGF0ZTsKKytzdHJ1Y3QgUGFzc3dkREI7Cisrc3RydWN0IFBhc3N3ZEVudHJpZXM7Cisr c3RydWN0IEV4dGVuc2lvbnM7Cisrc3RydWN0IExvY2tlZFBhY2thZ2U7Cisrc3RydWN0IExvY2tm aWxlQ29uZmlnOworK3VzaW5nIEN4eEdPYmplY3RBcnJheSA9IDo6cnBtb3N0cmVlY3h4OjpDeHhH T2JqZWN0QXJyYXk7CisrdXNpbmcgQ2xpZW50Q29ubmVjdGlvbiA9IDo6cnBtb3N0cmVlY3h4OjpD bGllbnRDb25uZWN0aW9uOworK3VzaW5nIFJQTURpZmYgPSA6OnJwbW9zdHJlZWN4eDo6UlBNRGlm ZjsKKyt1c2luZyBScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQgPSA6OnJwbW9zdHJlZWN4eDo6UnBt T3N0cmVlRGlmZlByaW50Rm9ybWF0OworK3VzaW5nIFByb2dyZXNzID0gOjpycG1vc3RyZWVjeHg6 OlByb2dyZXNzOworK3VzaW5nIFJwbVRzID0gOjpycG1vc3RyZWVjeHg6OlJwbVRzOworK3VzaW5n IFBhY2thZ2VNZXRhID0gOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOworK30KKysKKytuYW1l c3BhY2UgcnBtb3N0cmVlY3h4CisreworICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JFN0cmluZ01hcHBpbmcKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRTdHJpbmdNYXBwaW5nCisgLy8gQ3VycmVudGx5IGN4eC1ycyBkb2Vzbid0IHN1cHBvcnQg bWFwcGluZ3M7IGxpa2UgcHJvYmFibHkgbW9zdCBwcm9qZWN0cywKK0BAIC0xMDMwLDcgKzExNjUs OCBAQCBuYW1lc3BhY2UgcnBtb3N0cmVlY3h4IHsKKyAvLyBvdXIgZGF0YSBzaXplcyBhcmVuJ3Qg bGFyZ2UsIHdlIHNlcmlhbGl6ZSB0aGlzIGFzIGEgdmVjdG9yIG9mIHN0cmluZ3MgcGFpcnMuCisg Ly8gSW4gdGhlIGZ1dHVyZSBpdCdzIGFsc28gbGlrZWx5IHRoYXQgY3h4LXJzIHdpbGwgc3VwcG9y dCBhIEMrKyBzdHJpbmdfdmlldworIC8vIHNvIHdlIGNvdWxkIGF2b2lkIGR1cGxpY2F0aW5nIGlu IHRoYXQgZGlyZWN0aW9uLgorLXN0cnVjdCBTdHJpbmdNYXBwaW5nIGZpbmFsIHsKKytzdHJ1Y3Qg U3RyaW5nTWFwcGluZyBmaW5hbAorK3sKKyAgIDo6cnVzdDo6U3RyaW5nIGs7CisgICA6OnJ1c3Q6 OlN0cmluZyB2OworIAorQEAgLTEwNDEsNyArMTE3Nyw4IEBAIHN0cnVjdCBTdHJpbmdNYXBwaW5n IGZpbmFsIHsKKyAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkU3lzdGVtSG9z dFR5cGUKKyAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkU3lzdGVtSG9zdFR5 cGUKKyAvLyBDbGFzc2lmeSB0aGUgcnVubmluZyBzeXN0ZW0uCistZW51bSBjbGFzcyBTeXN0ZW1I b3N0VHlwZSA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNzIFN5c3RlbUhvc3RUeXBlIDog OjpzdGQ6OnVpbnQ4X3QKKyt7CisgICBPc3RyZWVDb250YWluZXIgPSAwLAorICAgT3N0cmVlSG9z dCA9IDEsCisgICBVbmtub3duID0gMiwKK0BAIC0xMDUwLDcgKzExODcsOCBAQCBlbnVtIGNsYXNz IFN5c3RlbUhvc3RUeXBlIDogOjpzdGQ6OnVpbnQ4X3QgeworIAorICNpZm5kZWYgQ1hYQlJJREdF MV9FTlVNX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwTXV0YWJpbGl0eQorICNkZWZpbmUgQ1hYQlJJ REdFMV9FTlVNX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwTXV0YWJpbGl0eQorLWVudW0gY2xhc3Mg QnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBCdWJi bGV3cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90CisreworICAgSW1tdXRhYmxlID0gMCwK KyAgIFJvRmlsZXMgPSAxLAorICAgTXV0YXRlRnJlZWx5ID0gMiwKK0BAIC0xMDU5LDQ5ICsxMTk3 LDUyIEBAIGVudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdCB7 CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkQnViYmxld3JhcAor ICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAKKy1zdHJ1 Y3QgQnViYmxld3JhcCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CistICA6OnN0ZDo6 aW50MzJfdCBnZXRfcm9vdGZzX2ZkKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIGFwcGVuZF9i d3JhcF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKy0gIHZvaWQgYXBwZW5kX2NoaWxk X2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OworLSAgdm9pZCBzZXRlbnYoOjpydXN0OjpT dHIgaywgOjpydXN0OjpTdHIgdikgbm9leGNlcHQ7CistICB2b2lkIHRha2VfZmQoOjpzdGQ6Omlu dDMyX3Qgc291cmNlX2ZkLCA6OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0OworLSAg dm9pZCBzZXRfaW5oZXJpdF9zdGRpbigpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX3N0ZGluX2Zk KDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CistICB2b2lkIHRha2Vfc3Rkb3V0 X2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CistICB2b2lkIHRha2Vfc3Rk ZXJyX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CistICB2b2lkIHRha2Vf c3Rkb3V0X2FuZF9zdGRlcnJfZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsK Ky0gIHZvaWQgYmluZF9yZWFkKDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9l eGNlcHQ7CistICB2b2lkIGJpbmRfcmVhZHdyaXRlKDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpT dHIgZGVzdCkgbm9leGNlcHQ7CistICB2b2lkIHNldHVwX2NvbXBhdF92YXIoKTsKKy0gIHZvaWQg cnVuKDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKKy0g IH5CdWJibGV3cmFwKCkgPSBkZWxldGU7Cisrc3RydWN0IEJ1YmJsZXdyYXAgZmluYWwgOiBwdWJs aWMgOjpydXN0OjpPcGFxdWUKKyt7CisrICA6OnN0ZDo6aW50MzJfdCBnZXRfcm9vdGZzX2ZkICgp IGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBhcHBlbmRfYndyYXBfYXJnICg6OnJ1c3Q6OlN0ciBh cmcpIG5vZXhjZXB0OworKyAgdm9pZCBhcHBlbmRfY2hpbGRfYXJnICg6OnJ1c3Q6OlN0ciBhcmcp IG5vZXhjZXB0OworKyAgdm9pZCBzZXRlbnYgKDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6U3RyIHYp IG5vZXhjZXB0OworKyAgdm9pZCB0YWtlX2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQsIDo6 c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNlcHQ7CisrICB2b2lkIHNldF9pbmhlcml0X3N0 ZGluICgpIG5vZXhjZXB0OworKyAgdm9pZCB0YWtlX3N0ZGluX2ZkICg6OnN0ZDo6aW50MzJfdCBz b3VyY2VfZmQpIG5vZXhjZXB0OworKyAgdm9pZCB0YWtlX3N0ZG91dF9mZCAoOjpzdGQ6OmludDMy X3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQgdGFrZV9zdGRlcnJfZmQgKDo6c3RkOjpp bnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CisrICB2b2lkIHRha2Vfc3Rkb3V0X2FuZF9zdGRl cnJfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CisrICB2b2lkIGJpbmRf cmVhZCAoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsKKysgIHZv aWQgYmluZF9yZWFkd3JpdGUgKDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9l eGNlcHQ7CisrICB2b2lkIHNldHVwX2NvbXBhdF92YXIgKCk7CisrICB2b2lkIHJ1biAoOjpycG1v c3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpOworKyAgfkJ1YmJsZXdy YXAgKCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsK Ky0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9l eGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBz dHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9l eGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAg fTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkQnViYmxl d3JhcAorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4cG9ydGVk TWFuaWZlc3REaWZmCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRXhw b3J0ZWRNYW5pZmVzdERpZmYKKy1zdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmYgZmluYWwgewor K3N0cnVjdCBFeHBvcnRlZE1hbmlmZXN0RGlmZiBmaW5hbAorK3sKKyAgIC8vIENoZWNrIGlmIHRo ZSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQKKy0gIGJvb2wgaW5pdGlhbGl6ZWQgQ1hYX0RFRkFVTFRf VkFMVUUoZmFsc2UpOworKyAgYm9vbCBpbml0aWFsaXplZCBDWFhfREVGQVVMVF9WQUxVRSAoZmFs c2UpOworICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdy YWRlCistICA6OnN0ZDo6dWludDY0X3QgdG90YWwgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6 OnN0ZDo6dWludDY0X3QgdG90YWwgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8gVGhlIHNp emUgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCist ICA6OnN0ZDo6dWludDY0X3QgdG90YWxfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6 c3RkOjp1aW50NjRfdCB0b3RhbF9zaXplIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRo ZSB0b3RhbCBudW1iZXIgb2YgcmVtb3ZlZCBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCist ICA6OnN0ZDo6dWludDY0X3Qgbl9yZW1vdmVkIENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAgOjpz dGQ6OnVpbnQ2NF90IG5fcmVtb3ZlZCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBUaGUg c2l6ZSBvZiB0b3RhbCBudW1iZXIgb2YgcmVtb3ZlZCBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdy YWRlCistICA6OnN0ZDo6dWludDY0X3QgcmVtb3ZlZF9zaXplIENYWF9ERUZBVUxUX1ZBTFVFKDAp OworKyAgOjpzdGQ6OnVpbnQ2NF90IHJlbW92ZWRfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSAoMCk7 CisgICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGFkZGVkIHBhY2thZ2VzIGluIHRoZSBuZXh0IHVw Z3JhZGUKKy0gIDo6c3RkOjp1aW50NjRfdCBuX2FkZGVkIENYWF9ERUZBVUxUX1ZBTFVFKDApOwor KyAgOjpzdGQ6OnVpbnQ2NF90IG5fYWRkZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8g VGhlIHNpemUgb2YgdG90YWwgbnVtYmVyIG9mIGFkZGVkIHBhY2thZ2VzIGluIHRoZSBuZXh0IHVw Z3JhZGUKKy0gIDo6c3RkOjp1aW50NjRfdCBhZGRlZF9zaXplIENYWF9ERUZBVUxUX1ZBTFVFKDAp OworKyAgOjpzdGQ6OnVpbnQ2NF90IGFkZGVkX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwor ICAgLy8gVGhlIHZlcnNpb24gb2YgdGhlIG5leHQgdXBncmFkZQorICAgOjpydXN0OjpTdHJpbmcg dmVyc2lvbjsKKyAKK0BAIC0xMTExLDEwICsxMjUyLDExIEBAIHN0cnVjdCBFeHBvcnRlZE1hbmlm ZXN0RGlmZiBmaW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVj eHgkQ29udGFpbmVySW1hZ2VTdGF0ZQorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUKKy0vLyBgQ29udGFpbmVySW1hZ2VTdGF0ZWAgaXMg Y3VycmVudGx5IGlkZW50aWNhbCB0byBvc3RyZWUtcnMtZXh0J3MgYExheWVyZWRJbWFnZVN0YXRl YCBzdHJ1Y3QsIGJlY2F1c2UKKy0vLyBjeHgucnMgY3VycmVudGx5IHJlcXVpcmVzIHR5cGVzIHVz ZWQgYXMgZXh0ZXJuIFJ1c3QgdHlwZXMgdG8gYmUgZGVmaW5lZCBieSB0aGUgc2FtZSBjcmF0ZQor Ky8vIGBDb250YWluZXJJbWFnZVN0YXRlYCBpcyBjdXJyZW50bHkgaWRlbnRpY2FsIHRvIG9zdHJl ZS1ycy1leHQncyBgTGF5ZXJlZEltYWdlU3RhdGVgIHN0cnVjdCwKKysvLyBiZWNhdXNlIGN4eC5y cyBjdXJyZW50bHkgcmVxdWlyZXMgdHlwZXMgdXNlZCBhcyBleHRlcm4gUnVzdCB0eXBlcyB0byBi ZSBkZWZpbmVkIGJ5IHRoZSBzYW1lIGNyYXRlCisgLy8gdGhhdCBjb250YWlucyB0aGUgYnJpZGdl IHVzaW5nIHRoZW0sIHNvIHdlIHJlZGVmaW5lIGFuIGBDb250YWluZXJJbXBvcnRgIHN0cnVjdCBo ZXJlLgorLXN0cnVjdCBDb250YWluZXJJbWFnZVN0YXRlIGZpbmFsIHsKKytzdHJ1Y3QgQ29udGFp bmVySW1hZ2VTdGF0ZSBmaW5hbAorK3sKKyAgIDo6cnVzdDo6U3RyaW5nIGJhc2VfY29tbWl0Owor ICAgOjpydXN0OjpTdHJpbmcgbWVyZ2VfY29tbWl0OworICAgOjpydXN0OjpTdHJpbmcgaW1hZ2Vf ZGlnZXN0OworQEAgLTExMjgsMTkgKzEyNzAsMjEgQEAgc3RydWN0IENvbnRhaW5lckltYWdlU3Rh dGUgZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBy dW5lZENvbnRhaW5lckluZm8KKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4 eCRQcnVuZWRDb250YWluZXJJbmZvCistc3RydWN0IFBydW5lZENvbnRhaW5lckluZm8gZmluYWwg eworLSAgOjpzdGQ6OnVpbnQzMl90IGltYWdlcyBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKy0gIDo6 c3RkOjp1aW50MzJfdCBsYXllcnMgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7Cisrc3RydWN0IFBydW5l ZENvbnRhaW5lckluZm8gZmluYWwKKyt7CisrICA6OnN0ZDo6dWludDMyX3QgaW1hZ2VzIENYWF9E RUZBVUxUX1ZBTFVFICgwKTsKKysgIDo6c3RkOjp1aW50MzJfdCBsYXllcnMgQ1hYX0RFRkFVTFRf VkFMVUUgKDApOworIAorLSAgYm9vbCBvcGVyYXRvcj09KFBydW5lZENvbnRhaW5lckluZm8gY29u c3QgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yIT0oUHJ1bmVkQ29udGFpbmVy SW5mbyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoUHJ1bmVk Q29udGFpbmVySW5mbyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3Ih PSAoUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKyAgIHVzaW5n IElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBlOworIH07CisgI2VuZGlmIC8vIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQcnVuZWRDb250YWluZXJJbmZvCisgCisgI2lmbmRl ZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlZnNwZWNUeXBlCisgI2RlZmluZSBDWFhC UklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlZnNwZWNUeXBlCistZW51bSBjbGFzcyBSZWZzcGVj VHlwZSA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNzIFJlZnNwZWNUeXBlIDogOjpzdGQ6 OnVpbnQ4X3QKKyt7CisgICBPc3RyZWUgPSAwLAorICAgQ2hlY2tzdW0gPSAxLAorICAgQ29udGFp bmVyID0gMiwKK0BAIC0xMTQ5LDQwICsxMjkzLDQ1IEBAIGVudW0gY2xhc3MgUmVmc3BlY1R5cGUg OiA6OnN0ZDo6dWludDhfdCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkVGVtcEV0Y0d1YXJkCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVj eHgkVGVtcEV0Y0d1YXJkCistc3RydWN0IFRlbXBFdGNHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1 c3Q6Ok9wYXF1ZSB7CistICB2b2lkIHVuZG8oKSBjb25zdDsKKy0gIH5UZW1wRXRjR3VhcmQoKSA9 IGRlbGV0ZTsKKytzdHJ1Y3QgVGVtcEV0Y0d1YXJkIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3Bh cXVlCisreworKyAgdm9pZCB1bmRvICgpIGNvbnN0OworKyAgflRlbXBFdGNHdWFyZCAoKSA9IGRl bGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0 IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0g ICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlv dXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysg ICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07Cisg I2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQKKyAK KyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0 UHJlcAorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1T Y3JpcHRQcmVwCistc3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQcmVwIGZpbmFsIDogcHVibGljIDo6 cnVzdDo6T3BhcXVlIHsKKy0gIHZvaWQgdW5kbygpOworLSAgfkZpbGVzeXN0ZW1TY3JpcHRQcmVw KCkgPSBkZWxldGU7Cisrc3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQcmVwIGZpbmFsIDogcHVibGlj IDo6cnVzdDo6T3BhcXVlCisreworKyAgdm9pZCB1bmRvICgpOworKyAgfkZpbGVzeXN0ZW1TY3Jp cHRQcmVwICgpID0gZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlv dXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgp IG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0Owor KyAgc3RydWN0IGxheW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgp IG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsK KyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEZp bGVzeXN0ZW1TY3JpcHRQcmVwCisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkRGVwbG95bWVudExheWVyZWRNZXRhCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkRGVwbG95bWVudExheWVyZWRNZXRhCistc3RydWN0IERlcGxveW1lbnRMYXll cmVkTWV0YSBmaW5hbCB7CistICBib29sIGlzX2xheWVyZWQgQ1hYX0RFRkFVTFRfVkFMVUUoZmFs c2UpOworK3N0cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1ldGEgZmluYWwKKyt7CisrICBib29sIGlz X2xheWVyZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKGZhbHNlKTsKKyAgIDo6cnVzdDo6U3RyaW5nIGJh c2VfY29tbWl0OworLSAgOjpzdGQ6OnVpbnQzMl90IGNsaWVudGxheWVyX3ZlcnNpb24gQ1hYX0RF RkFVTFRfVkFMVUUoMCk7CisrICA6OnN0ZDo6dWludDMyX3QgY2xpZW50bGF5ZXJfdmVyc2lvbiBD WFhfREVGQVVMVF9WQUxVRSAoMCk7CisgCisgICB1c2luZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6 OnRydWVfdHlwZTsKKyB9OworQEAgLTExOTAsNyArMTMzOSw4IEBAIHN0cnVjdCBEZXBsb3ltZW50 TGF5ZXJlZE1ldGEgZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50U291cmNlCistc3RydWN0IE92ZXJy aWRlUmVwbGFjZW1lbnRTb3VyY2UgZmluYWwgeworK3N0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50 U291cmNlIGZpbmFsCisreworICAgOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnRU eXBlIGtpbmQ7CisgICA6OnJ1c3Q6OlN0cmluZyBuYW1lOworIAorQEAgLTEyMDAsNyArMTM1MCw4 IEBAIHN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNlIGZpbmFsIHsKKyAKKyAjaWZuZGVm IENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUGFyc2VkUmV2aXNpb25LaW5kCisgI2RlZmlu ZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9uS2luZAorLWVudW0g Y2xhc3MgUGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3Mg UGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3QKKyt7CisgICBWZXJzaW9uID0gMCwK KyAgIENoZWNrc3VtID0gMSwKKyB9OworQEAgLTEyMDgsNyArMTM1OSw4IEBAIGVudW0gY2xhc3Mg UGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3QgeworIAorICNpZm5kZWYgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9uCisgI2RlZmluZSBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFyc2VkUmV2aXNpb24KKy1zdHJ1Y3QgUGFyc2VkUmV2 aXNpb24gZmluYWwgeworK3N0cnVjdCBQYXJzZWRSZXZpc2lvbiBmaW5hbAorK3sKKyAgIDo6cnBt b3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbktpbmQga2luZDsKKyAgIDo6cnVzdDo6U3RyaW5nIHZh bHVlOworIAorQEAgLTEyMTgsNDQgKzEzNzAsNTAgQEAgc3RydWN0IFBhcnNlZFJldmlzaW9uIGZp bmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBv cnRlckZsYWdzCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1w b3J0ZXJGbGFncworLXN0cnVjdCBScG1JbXBvcnRlckZsYWdzIGZpbmFsIDogcHVibGljIDo6cnVz dDo6T3BhcXVlIHsKKy0gIGJvb2wgaXNfaW1hX2VuYWJsZWQoKSBjb25zdCBub2V4Y2VwdDsKKy0g IH5ScG1JbXBvcnRlckZsYWdzKCkgPSBkZWxldGU7Cisrc3RydWN0IFJwbUltcG9ydGVyRmxhZ3Mg ZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7CisrICBib29sIGlzX2ltYV9lbmFibGVk ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgflJwbUltcG9ydGVyRmxhZ3MgKCkgPSBkZWxldGU7Cisg CisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQg eworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7 CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAv LyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncworIAorICNp Zm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyCisgI2RlZmlu ZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIKKy1zdHJ1Y3QgUnBt SW1wb3J0ZXIgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgeworLSAgOjpydXN0OjpTdHJp bmcgaGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsK Ky0gIDo6cnVzdDo6U3RyaW5nIG9zdHJlZV9icmFuY2goKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6 cnVzdDo6U3RyaW5nIHBrZ19uYW1lKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGRvY19maWxl c19hcmVfZmlsdGVyZWQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgZG9jX2ZpbGVzX2luc2Vy dCg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKy0gIGJvb2wgZG9jX2ZpbGVzX2NvbnRhaW5z KDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBycG1maV9vdmVycmlk ZXNfaW5zZXJ0KDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNl cHQ7CistICBib29sIHJwbWZpX292ZXJyaWRlc19jb250YWlucyg6OnJ1c3Q6OlN0ciBwYXRoKSBj b25zdCBub2V4Y2VwdDsKKy0gIDo6c3RkOjp1aW50NjRfdCBycG1maV9vdmVycmlkZXNfZ2V0KDo6 cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBpc19pbWFfZW5hYmxlZCgp IGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCB0d2Vha19pbXBvcnRlZF9maWxlX2luZm8oOjpycG1v c3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdCBub2V4Y2VwdDsKKy0g IGJvb2wgaXNfZmlsZV9maWx0ZXJlZCg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJwbW9zdHJlZWN4eDo6 R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0OworLSAgdm9pZCB0cmFuc2xhdGVfdG9f dG1wZmlsZXNfZW50cnkoOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmls ZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3Ry IGdyb3VwbmFtZSk7CistICBib29sIGhhc190bXBmaWxlc19lbnRyaWVzKCkgY29uc3Qgbm9leGNl cHQ7CistICA6OnJ1c3Q6OlN0cmluZyBzZXJpYWxpemVfdG1wZmlsZXNfY29udGVudCgpIGNvbnN0 IG5vZXhjZXB0OworLSAgflJwbUltcG9ydGVyKCkgPSBkZWxldGU7Cisrc3RydWN0IFJwbUltcG9y dGVyIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgOjpydXN0OjpTdHJpbmcg aGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSAoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Cisr ICA6OnJ1c3Q6OlN0cmluZyBvc3RyZWVfYnJhbmNoICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpy dXN0OjpTdHJpbmcgcGtnX25hbWUgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGRvY19maWxl c19hcmVfZmlsdGVyZWQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIGRvY19maWxlc19pbnNl cnQgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OworKyAgYm9vbCBkb2NfZmlsZXNfY29udGFp bnMgKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBycG1maV9vdmVy cmlkZXNfaW5zZXJ0ICg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnN0ZDo6dWludDY0X3QgaW5kZXgpIG5v ZXhjZXB0OworKyAgYm9vbCBycG1maV9vdmVycmlkZXNfY29udGFpbnMgKDo6cnVzdDo6U3RyIHBh dGgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpzdGQ6OnVpbnQ2NF90IHJwbWZpX292ZXJyaWRlc19n ZXQgKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBpc19pbWFfZW5h YmxlZCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgdHdlYWtfaW1wb3J0ZWRfZmlsZV9pbmZv ICg6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0IG5vZXhj ZXB0OworKyAgYm9vbCBpc19maWxlX2ZpbHRlcmVkICg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJwbW9z dHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0OworKyAgdm9pZCB0cmFu c2xhdGVfdG9fdG1wZmlsZXNfZW50cnkgKDo6cnVzdDo6U3RyIGFic19wYXRoLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29u c3QgJmZpbGVfaW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1 c3Q6OlN0ciB1c2VybmFtZSwgOjpydXN0OjpTdHIgZ3JvdXBuYW1lKTsKKysgIGJvb2wgaGFzX3Rt cGZpbGVzX2VudHJpZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBzZXJp YWxpemVfdG1wZmlsZXNfY29udGVudCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIH5ScG1JbXBvcnRl ciAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0Owor LSAgc3RydWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4 Y2VwdDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0 cnVjdCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4 Y2VwdDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9 OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBv cnRlcgorQEAgLTEyNjQsNzMgKzE0MjIsODEgQEAgc3RydWN0IFJwbUltcG9ydGVyIGZpbmFsIDog cHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRIaXN0b3J5RW50cnkKKyAvLyBBIGhpc3RvcnkgZW50cnkgaW4gdGhlIGpvdXJuYWwu IEl0IG1heSByZXByZXNlbnQgbXVsdGlwbGUgY29uc2VjdXRpdmUgYm9vdHMKKyAvLyBpbnRvIHRo ZSBzYW1lIGRlcGxveW1lbnQuIFRoaXMgc3RydWN0IGlzIGV4cG9zZWQgZGlyZWN0bHkgdmlhIEZG SSB0byBDLgorLXN0cnVjdCBIaXN0b3J5RW50cnkgZmluYWwgeworK3N0cnVjdCBIaXN0b3J5RW50 cnkgZmluYWwKKyt7CisgICAvLyBUaGUgZGVwbG95bWVudCByb290IHRpbWVzdGFtcC4KKy0gIDo6 c3RkOjp1aW50NjRfdCBkZXBsb3lfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAg OjpzdGQ6OnVpbnQ2NF90IGRlcGxveV90aW1lc3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwor ICAgLy8gVGhlIGNvbW1hbmQtbGluZSB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGVwbG95 bWVudCwgaWYgYW55LgorICAgOjpydXN0OjpTdHJpbmcgZGVwbG95X2NtZGxpbmU7CisgICAvLyBU aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHRpbWVzIHRoZSBkZXBsb3ltZW50IHdhcyBib290ZWQu CistICA6OnN0ZDo6dWludDY0X3QgYm9vdF9jb3VudCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysg IDo6c3RkOjp1aW50NjRfdCBib290X2NvdW50IENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8v IFRoZSBmaXJzdCB0aW1lIHRoZSBkZXBsb3ltZW50IHdhcyBib290ZWQgaWYgbXVsdGlwbGUgY29u c2VjdXRpdmUgdGltZXMuCistICA6OnN0ZDo6dWludDY0X3QgZmlyc3RfYm9vdF90aW1lc3RhbXAg Q1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6OnN0ZDo6dWludDY0X3QgZmlyc3RfYm9vdF90aW1l c3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8gVGhlIGxhc3QgdGltZSB0aGUgZGVw bG95bWVudCB3YXMgYm9vdGVkIGlmIG11bHRpcGxlIGNvbnNlY3V0aXZlIHRpbWVzLgorLSAgOjpz dGQ6OnVpbnQ2NF90IGxhc3RfYm9vdF90aW1lc3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7Cisr ICA6OnN0ZDo6dWludDY0X3QgbGFzdF9ib290X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9WQUxVRSAo MCk7CisgICAvLyBgdHJ1ZWAgaWYgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4KKy0gIGJvb2wg ZW9mIENYWF9ERUZBVUxUX1ZBTFVFKGZhbHNlKTsKKysgIGJvb2wgZW9mIENYWF9ERUZBVUxUX1ZB TFVFIChmYWxzZSk7CisgCistICBib29sIG9wZXJhdG9yPT0oSGlzdG9yeUVudHJ5IGNvbnN0ICYp IGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvciE9KEhpc3RvcnlFbnRyeSBjb25zdCAm KSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoSGlzdG9yeUVudHJ5IGNvbnN0 ICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChIaXN0b3J5RW50cnkgY29u c3QgJikgY29uc3Qgbm9leGNlcHQ7CisgICB1c2luZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRy dWVfdHlwZTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk SGlzdG9yeUVudHJ5CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk SGlzdG9yeUN0eAorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEhpc3Rv cnlDdHgKKy1zdHJ1Y3QgSGlzdG9yeUN0eCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7 CistICA6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5IG5leHRfZW50cnkoKTsKKy0gIH5IaXN0 b3J5Q3R4KCkgPSBkZWxldGU7Cisrc3RydWN0IEhpc3RvcnlDdHggZmluYWwgOiBwdWJsaWMgOjpy dXN0OjpPcGFxdWUKKyt7CisrICA6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5IG5leHRfZW50 cnkgKCk7CisrICB+SGlzdG9yeUN0eCAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJp ZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxp Z24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3Rk OjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxp Z24gKCkgbm9leGNlcHQ7CisgICB9OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkVG9raW9IYW5kbGUKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRUb2tpb0hhbmRsZQorLXN0cnVjdCBUb2tpb0hhbmRsZSBmaW5hbCA6IHB1YmxpYyA6 OnJ1c3Q6Ok9wYXF1ZSB7CistICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRl ckd1YXJkPiBlbnRlcigpIGNvbnN0IG5vZXhjZXB0OworLSAgflRva2lvSGFuZGxlKCkgPSBkZWxl dGU7Cisrc3RydWN0IFRva2lvSGFuZGxlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisr eworKyAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD4gZW50ZXIg KCkgY29uc3Qgbm9leGNlcHQ7CisrICB+VG9raW9IYW5kbGUgKCkgPSBkZWxldGU7CisgCisgcHJp dmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAg IHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUKKyAKKyAjaWZuZGVmIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQKKyAjZGVmaW5lIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQKKy1zdHJ1Y3QgVG9raW9F bnRlckd1YXJkIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIH5Ub2tpb0VudGVy R3VhcmQoKSA9IGRlbGV0ZTsKKytzdHJ1Y3QgVG9raW9FbnRlckd1YXJkIGZpbmFsIDogcHVibGlj IDo6cnVzdDo6T3BhcXVlCisreworKyAgflRva2lvRW50ZXJHdWFyZCAoKSA9IGRlbGV0ZTsKKyAK KyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0IGxheW91dCB7 CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0gICAgc3RhdGlj IDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlvdXQKKysgIHsK KysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysgICAgc3RhdGlj IDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07CisgI2VuZGlmIC8v IENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQKKyAKKyAjaWZu ZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUmVwb01ldGFkYXRhVGFyZ2V0CisgI2Rl ZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlcG9NZXRhZGF0YVRhcmdldAorLWVu dW0gY2xhc3MgUmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QgeworK2VudW0gY2xh c3MgUmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QKKyt7CisgICBJbmxpbmUgPSAw LAorICAgRGV0YWNoZWQgPSAxLAorICAgRGlzYWJsZWQgPSAyLAorQEAgLTEzMzksNyArMTUwNSw4 IEBAIGVudW0gY2xhc3MgUmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QgeworIAor ICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRBZHZpc29yaWVzTWV0YWRhdGFU YXJnZXQKKyAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQWR2aXNvcmllc01l dGFkYXRhVGFyZ2V0CistZW51bSBjbGFzcyBBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgOiA6OnN0 ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgOiA6OnN0 ZDo6dWludDhfdAorK3sKKyAgIElubGluZSA9IDAsCisgICBEZXRhY2hlZCA9IDEsCisgICBEaXNh YmxlZCA9IDIsCitAQCAtMTM0OCwzOSArMTUxNSw0MyBAQCBlbnVtIGNsYXNzIEFkdmlzb3JpZXNN ZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRSZWZzcGVjCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkUmVmc3BlYworLXN0cnVjdCBSZWZzcGVjIGZpbmFsIHsKKytzdHJ1Y3QgUmVm c3BlYyBmaW5hbAorK3sKKyAgIDo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZSBraW5kOworICAg OjpydXN0OjpTdHJpbmcgcmVmc3BlYzsKKyAKKy0gIGJvb2wgb3BlcmF0b3I9PShSZWZzcGVjIGNv bnN0ICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvciE9KFJlZnNwZWMgY29uc3Qg JikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKFJlZnNwZWMgY29uc3QgJikg Y29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yIT0gKFJlZnNwZWMgY29uc3QgJikgY29u c3Qgbm9leGNlcHQ7CisgICB1c2luZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsK KyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVmc3BlYwor IAorICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2Vt ZW50VHlwZQorICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJl cGxhY2VtZW50VHlwZQorLWVudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0 ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBPdmVycmlkZVJlcGxhY2VtZW50VHlwZSA6IDo6c3Rk Ojp1aW50OF90CisreworICAgUmVwbyA9IDAsCisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9F TlVNX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50VHlwZQorIAorICNpZm5kZWYgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQKKyAjZGVmaW5l IENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50Cistc3Ry dWN0IE92ZXJyaWRlUmVwbGFjZW1lbnQgZmluYWwgeworK3N0cnVjdCBPdmVycmlkZVJlcGxhY2Vt ZW50IGZpbmFsCisreworICAgOjpydXN0OjpTdHJpbmcgZnJvbTsKKyAgIDo6cnBtb3N0cmVlY3h4 OjpPdmVycmlkZVJlcGxhY2VtZW50VHlwZSBmcm9tX2tpbmQ7CisgICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gcGFja2FnZXM7CisgCistICBib29sIG9wZXJhdG9yPT0oT3ZlcnJpZGVSZXBs YWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3IhPShPdmVy cmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRv cj09IChPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9v bCBvcGVyYXRvciE9IChPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0 OworICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7CisgfTsKKyAjZW5k aWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQK KyAKKyAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3B0VXNyTG9jYWwKKyAj ZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3B0VXNyTG9jYWwKKy1lbnVtIGNs YXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3MgT3B0VXNyTG9j YWwgOiA6OnN0ZDo6dWludDhfdAorK3sKKyAgIFZhciA9IDAsCisgICBSb290ID0gMSwKKyAgIFN0 YXRlT3ZlcmxheSA9IDIsCitAQCAtMTM4OSwxMjUgKzE1NjAsMTMxIEBAIGVudW0gY2xhc3MgT3B0 VXNyTG9jYWwgOiA6OnN0ZDo6dWludDhfdCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkVHJlZWZpbGUKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRUcmVlZmlsZQorLXN0cnVjdCBUcmVlZmlsZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6 Ok9wYXF1ZSB7CistICA6OnJ1c3Q6OlN0ciBnZXRfd29ya2RpcigpIGNvbnN0IG5vZXhjZXB0Owor LSAgOjpzdGQ6OmludDMyX3QgZ2V0X3Bhc3N3ZF9mZCgpIG5vZXhjZXB0OworLSAgOjpzdGQ6Omlu dDMyX3QgZ2V0X2dyb3VwX2ZkKCkgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfanNv bl9zdHJpbmcoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfb3N0cmVlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJzKCkgY29uc3Qgbm9leGNlcHQ7 CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2FsbF9vc3RyZWVfbGF5ZXJzKCkg Y29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9z KCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3Bh Y2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyByZXF1aXJlX2F1dG9t YXRpY192ZXJzaW9uX3ByZWZpeCgpIGNvbnN0OworLSAgYm9vbCBhZGRfcGFja2FnZXMoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKKy0g IGJvb2wgaGFzX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gZ2V0X2xvY2FsX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29s IGFkZF9sb2NhbF9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMs IGJvb2wgYWxsb3dfZXhpc3RpbmcpOworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdl dF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wg YWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOworLSAgYm9vbCByZW1vdmVfcGFja2Fn ZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X25vZW50 KTsKKy0gIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBn ZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBo YXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBh ZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSg6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudCByZXBsYWNlbWVudCkgbm9leGNlcHQ7CistICBib29sIHJlbW92ZV9wYWNrYWdlX292 ZXJyaWRlX3JlcGxhY2UoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7CistICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwo KSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2Vf bG9jYWwoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzKTsKKy0gIGJvb2wgcmVt b3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBu b2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXNfb3Zl cnJpZGVfcmVtb3ZlKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIGFkZF9wYWNrYWdlc19vdmVy cmlkZV9yZW1vdmUoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzKTsKKy0gIGJv b2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVtb3ZlKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5v ZXhjZXB0OworLSAgYm9vbCBoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlX25hbWUoOjpydXN0 OjpTdHIgbmFtZSkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHJlbW92ZV9hbGxfb3ZlcnJpZGVz KCkgbm9leGNlcHQ7CistICBib29sIHJlbW92ZV9hbGxfcGFja2FnZXMoKSBub2V4Y2VwdDsKKy0g IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZXhjbHVkZV9wYWNrYWdlcygpIGNvbnN0 IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X3BsYXRmb3JtX21vZHVsZSgpIGNvbnN0 IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbnN0YWxsX2xh bmdzKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBmb3JtYXRfaW5zdGFsbF9s YW5nc19tYWNybygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGdldF9sb2NrZmlsZV9yZXBvcygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHIg Z2V0X3JlZigpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfY2xpd3JhcCgpIGNvbnN0IG5v ZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9jbGl3cmFwX2JpbmFy aWVzKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIHNldF9jbGl3cmFwKGJvb2wgZW5hYmxlZCkg bm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2NvbnRhaW5lcl9j bWQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X3JlYWRvbmx5X2V4ZWN1dGFibGVzKCkg Y29uc3Qgbm9leGNlcHQ7CistICBib29sIGdldF9kb2N1bWVudGF0aW9uKCkgY29uc3Qgbm9leGNl cHQ7CistICBib29sIGdldF9yZWNvbW1lbmRzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGdl dF9zZWxpbnV4KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGdldF9zeXN1c2Vyc19pc19mb3Jj ZWQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6c3RkOjp1aW50MzJfdCBnZXRfc2VsaW51eF9sYWJl bF92ZXJzaW9uKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfZ3BnX2tl eSgpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X2F1dG9tYXRpY192ZXJz aW9uX3N1ZmZpeCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfY29udGFpbmVyKCkgY29u c3Qgbm9leGNlcHQ7CistICBib29sIGdldF9tYWNoaW5laWRfY29tcGF0KCkgY29uc3Qgbm9leGNl cHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V0Y19ncm91cF9tZW1iZXJz KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGdldF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMo KSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsKCkgY29uc3Qgbm9l eGNlcHQ7CistICBib29sIGdldF9pbWEoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3Ry aW5nIGdldF9yZWxlYXNldmVyKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJwbW9zdHJlZWN4eDo6 UmVwb01ldGFkYXRhVGFyZ2V0IGdldF9yZXBvX21ldGFkYXRhX3RhcmdldCgpIGNvbnN0IG5vZXhj ZXB0OworLSAgOjpycG1vc3RyZWVjeHg6OkFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCBnZXRfYWR2 aXNvcmllc19tZXRhZGF0YV90YXJnZXQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgcnBtZGJf YmFja2VuZF9pc190YXJnZXQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgc2hvdWxkX25vcm1h bGl6ZV9ycG1kYigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpycG1vc3RyZWVjeHg6Ok9wdFVzckxv Y2FsIGdldF9vcHRfdXNybG9jYWwoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4KDo6cnVzdDo6U3RyIHBhY2thZ2Up IGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X2NoZWNrc3VtKDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdDsKKy0gIDo6cnVzdDo6U3RyaW5n IGdldF9vc3RyZWVfcmVmKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlNsaWNlPDo6cnBt b3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4gZ2V0X3JlcG9fcGFja2FnZXMoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIHZvaWQgY2xlYXJfcmVwb19wYWNrYWdlcygpIG5vZXhjZXB0OworLSAgdm9p ZCBwcmV0dHlwcmludF9qc29uX3N0ZG91dCgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBwcmlu dF9kZXByZWNhdGlvbl93YXJuaW5ncygpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBwcmludF9l eHBlcmltZW50YWxfbm90aWNlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBzYW5pdHljaGVj a19leHRlcm5hbHMoKSBjb25zdDsKKy0gIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlckZsYWdzPiBpbXBvcnRlcl9mbGFncyg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSkgY29uc3Qg bm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyB3cml0ZV9yZXBvdmFycyg6OnN0ZDo6aW50MzJf dCB3b3JrZGlyX2RmZF9yYXcpIGNvbnN0OworLSAgdm9pZCBzZXRfcmVsZWFzZXZlcig6OnJ1c3Q6 OlN0ciByZWxlYXNldmVyKTsKKy0gIHZvaWQgc2V0X3JlY29tbWVuZHMoYm9vbCB2YWwpOworLSAg dm9pZCBlbmFibGVfcmVwbyg6OnJ1c3Q6OlN0ciByZXBvKTsKKy0gIHZvaWQgZGlzYWJsZV9yZXBv KDo6cnVzdDo6U3RyIHJlcG8pOworLSAgdm9pZCB2YWxpZGF0ZV9mb3JfY29udGFpbmVyKCkgY29u c3Q7CistICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlYyBnZXRfYmFzZV9yZWZzcGVjKCkgY29uc3Qg bm9leGNlcHQ7CistICB2b2lkIHJlYmFzZSg6OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpydXN0 OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3Jp cHRpb24pIG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X29yaWdpbl9jdXN0b21fdXJs KCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3JpZ2luX2N1c3RvbV9k ZXNjcmlwdGlvbigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X292ZXJy aWRlX2NvbW1pdCgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBzZXRfb3ZlcnJpZGVfY29tbWl0 KDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfaW5pdHJhbWZzX2V0Y19maWxlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9v bCBoYXNfaW5pdHJhbWZzX2V0Y19maWxlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBpbml0 cmFtZnNfZXRjX2ZpbGVzX3RyYWNrKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykg bm9leGNlcHQ7CistICBib29sIGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFjayg6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0OworLSAgYm9vbCBpbml0cmFtZnNfZXRj X2ZpbGVzX3VudHJhY2tfYWxsKCkgbm9leGNlcHQ7CistICBib29sIGdldF9pbml0cmFtZnNfcmVn ZW5lcmF0ZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9pbml0cmFtZnNfYXJncygpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBzZXRfaW5pdHJh bWZzX3JlZ2VuZXJhdGUoYm9vbCBlbmFibGVkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g YXJncykgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfdW5jb25maWd1cmVkX3N0YXRl KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG1heV9yZXF1aXJlX2xvY2FsX2Fzc2VtYmx5KCkg Y29uc3Qgbm9leGNlcHQ7CistICBib29sIGhhc19hbnlfcGFja2FnZXMoKSBjb25zdCBub2V4Y2Vw dDsKKy0gIGJvb2wgbWVyZ2VfdHJlZWZpbGUoOjpydXN0OjpTdHIgdHJlZWZpbGUpOworLSAgYm9v bCBnZXRfbm9faW5pdHJhbWZzKCkgY29uc3Qgbm9leGNlcHQ7CistICB+VHJlZWZpbGUoKSA9IGRl bGV0ZTsKKytzdHJ1Y3QgVHJlZWZpbGUgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7 CisrICA6OnJ1c3Q6OlN0ciBnZXRfd29ya2RpciAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6c3Rk OjppbnQzMl90IGdldF9wYXNzd2RfZmQgKCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6aW50MzJfdCBn ZXRfZ3JvdXBfZmQgKCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfanNvbl9zdHJp bmcgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X29zdHJlZV9sYXllcnMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMgKCkgY29uc3Qgbm9leGNlcHQ7Cisr ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2FsbF9vc3RyZWVfbGF5ZXJzICgpIGNv bnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9yZXBvcyAo KSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFj a2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyByZXF1aXJlX2F1dG9t YXRpY192ZXJzaW9uX3ByZWZpeCAoKSBjb25zdDsKKysgIGJvb2wgYWRkX3BhY2thZ2VzICg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOwor KyAgYm9vbCBoYXNfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2FsX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCBhZGRfbG9jYWxfcGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNr YWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gZ2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGJvb2wgYWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKKysgIGJvb2wgcmVtb3Zl X3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxs b3dfbm9lbnQpOworKyAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFj ZW1lbnQ+IGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICgpIGNvbnN0IG5vZXhjZXB0Owor KyAgYm9vbCBoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKSBjb25zdCBub2V4Y2VwdDsK KysgIGJvb2wgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKDo6cnBtb3N0cmVlY3h4OjpP dmVycmlkZVJlcGxhY2VtZW50IHJlcGxhY2VtZW50KSBub2V4Y2VwdDsKKysgIGJvb2wgcmVtb3Zl X3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZSAoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7 CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3Jl cGxhY2VfbG9jYWwgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIGFkZF9wYWNrYWdlc19vdmVy cmlkZV9yZXBsYWNlX2xvY2FsICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMp OworKyAgYm9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlX2xvY2FsICg6OnJ1c3Q6 OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBn ZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBh ZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g cGFja2FnZXMpOworKyAgYm9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUgKDo6cnVz dDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworKyAgYm9vbCBoYXNfcGFja2FnZXNfb3ZlcnJpZGVf cmVtb3ZlX25hbWUgKDo6cnVzdDo6U3RyIG5hbWUpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBy ZW1vdmVfYWxsX292ZXJyaWRlcyAoKSBub2V4Y2VwdDsKKysgIGJvb2wgcmVtb3ZlX2FsbF9wYWNr YWdlcyAoKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZXhj bHVkZV9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIGdldF9w bGF0Zm9ybV9tb2R1bGUgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X2luc3RhbGxfbGFuZ3MgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6 OlN0cmluZyBmb3JtYXRfaW5zdGFsbF9sYW5nc19tYWNybyAoKSBjb25zdCBub2V4Y2VwdDsKKysg IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9ja2ZpbGVfcmVwb3MgKCkgY29uc3Qg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0ciBnZXRfcmVmICgpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCBnZXRfY2xpd3JhcCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBnZXRfY2xpd3JhcF9iaW5hcmllcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZv aWQgc2V0X2NsaXdyYXAgKGJvb2wgZW5hYmxlZCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X2NvbnRhaW5lcl9jbWQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBi b29sIGdldF9yZWFkb25seV9leGVjdXRhYmxlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wg Z2V0X2RvY3VtZW50YXRpb24gKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGdldF9yZWNvbW1l bmRzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBnZXRfc2VsaW51eCAoKSBjb25zdCBub2V4 Y2VwdDsKKysgIGJvb2wgZ2V0X3N5c3VzZXJzX2lzX2ZvcmNlZCAoKSBjb25zdCBub2V4Y2VwdDsK KysgIDo6c3RkOjp1aW50MzJfdCBnZXRfc2VsaW51eF9sYWJlbF92ZXJzaW9uICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2dwZ19rZXkgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfYXV0b21hdGljX3ZlcnNpb25fc3VmZml4ICgpIGNvbnN0 IG5vZXhjZXB0OworKyAgYm9vbCBnZXRfY29udGFpbmVyICgpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCBnZXRfbWFjaGluZWlkX2NvbXBhdCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZXRjX2dyb3VwX21lbWJlcnMgKCkgY29uc3Qgbm9leGNl cHQ7CisrICBib29sIGdldF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMgKCkgY29uc3Qgbm9leGNl cHQ7CisrICBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJv b2wgZ2V0X2ltYSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIGdldF9yZWxl YXNldmVyICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6OlJlcG9NZXRhZGF0 YVRhcmdldCBnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6 OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IGdldF9hZHZpc29yaWVzX21l dGFkYXRhX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgcnBtZGJfYmFja2VuZF9p c190YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIHNob3VsZF9ub3JtYWxpemVfcnBt ZGIgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4eDo6T3B0VXNyTG9jYWwgZ2V0 X29wdF91c3Jsb2NhbCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4ICg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBjb25z dCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIGdldF9jaGVja3N1bSAoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIGNvbnN0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0 X29zdHJlZV9yZWYgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlNsaWNlPDo6cnBtb3N0 cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4gZ2V0X3JlcG9fcGFja2FnZXMgKCkgY29uc3Qgbm9l eGNlcHQ7CisrICB2b2lkIGNsZWFyX3JlcG9fcGFja2FnZXMgKCkgbm9leGNlcHQ7CisrICB2b2lk IHByZXR0eXByaW50X2pzb25fc3Rkb3V0ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBwcmlu dF9kZXByZWNhdGlvbl93YXJuaW5ncyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgcHJpbnRf ZXhwZXJpbWVudGFsX25vdGljZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHNhbml0eWNo ZWNrX2V4dGVybmFscyAoKSBjb25zdDsKKysgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlckZsYWdzPgorKyAgaW1wb3J0ZXJfZmxhZ3MgKDo6cnVzdDo6U3RyIHBrZ19uYW1l KSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIHdyaXRlX3JlcG92YXJzICg6OnN0 ZDo6aW50MzJfdCB3b3JrZGlyX2RmZF9yYXcpIGNvbnN0OworKyAgdm9pZCBzZXRfcmVsZWFzZXZl ciAoOjpydXN0OjpTdHIgcmVsZWFzZXZlcik7CisrICB2b2lkIHNldF9yZWNvbW1lbmRzIChib29s IHZhbCk7CisrICB2b2lkIGVuYWJsZV9yZXBvICg6OnJ1c3Q6OlN0ciByZXBvKTsKKysgIHZvaWQg ZGlzYWJsZV9yZXBvICg6OnJ1c3Q6OlN0ciByZXBvKTsKKysgIHZvaWQgdmFsaWRhdGVfZm9yX2Nv bnRhaW5lciAoKSBjb25zdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjIGdldF9iYXNlX3Jl ZnNwZWMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHJlYmFzZSAoOjpydXN0OjpTdHIgbmV3 X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fdXJsLAorKyAgICAgICAgICAgICAg IDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24pIG5vZXhjZXB0OworKyAgOjpy dXN0OjpTdHJpbmcgZ2V0X29yaWdpbl9jdXN0b21fdXJsICgpIGNvbnN0IG5vZXhjZXB0OworKyAg OjpydXN0OjpTdHJpbmcgZ2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24gKCkgY29uc3Qgbm9l eGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3ZlcnJpZGVfY29tbWl0ICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgdm9pZCBzZXRfb3ZlcnJpZGVfY29tbWl0ICg6OnJ1c3Q6OlN0ciBjaGVja3N1 bSkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2luaXRyYW1m c19ldGNfZmlsZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGhhc19pbml0cmFtZnNfZXRj X2ZpbGVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3Ry YWNrICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0OworKyAgYm9v bCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2sgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBmaWxlcykgbm9leGNlcHQ7CisrICBib29sIGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19h bGwgKCkgbm9leGNlcHQ7CisrICBib29sIGdldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSAoKSBjb25z dCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5pdHJhbWZz X2FyZ3MgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHNldF9pbml0cmFtZnNfcmVnZW5lcmF0 ZSAoYm9vbCBlbmFibGVkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncykgbm9leGNl cHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfdW5jb25maWd1cmVkX3N0YXRlICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgYm9vbCBtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSAoKSBjb25zdCBub2V4 Y2VwdDsKKysgIGJvb2wgaGFzX2FueV9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJv b2wgbWVyZ2VfdHJlZWZpbGUgKDo6cnVzdDo6U3RyIHRyZWVmaWxlKTsKKysgIGJvb2wgZ2V0X25v X2luaXRyYW1mcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIH5UcmVlZmlsZSAoKSA9IGRlbGV0ZTsK KyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0IGxheW91 dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0gICAgc3Rh dGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlvdXQKKysg IHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysgICAgc3Rh dGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07CisgI2VuZGlm IC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUcmVlZmlsZQorIAorICNpZm5kZWYg Q1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlcG9QYWNrYWdlCisgI2RlZmluZSBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVwb1BhY2thZ2UKKy1zdHJ1Y3QgUmVwb1BhY2th Z2UgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgeworLSAgOjpydXN0OjpTdHIgZ2V0X3Jl cG8oKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRf cGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIH5SZXBvUGFja2FnZSgpID0gZGVsZXRlOwor K3N0cnVjdCBSZXBvUGFja2FnZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysg IDo6cnVzdDo6U3RyIGdldF9yZXBvICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIH5SZXBv UGFja2FnZSAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5 b3V0OworLSAgc3RydWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUo KSBub2V4Y2VwdDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsK KysgIHN0cnVjdCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAo KSBub2V4Y2VwdDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7 CisgICB9OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRS ZXBvUGFja2FnZQorQEAgLTE1MTcsNyArMTY5NCw4IEBAIHN0cnVjdCBSZXBvUGFja2FnZSBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CisgLy8gQSBjb3B5IG9mIExpdmVGc1N0YXRlIHRo YXQgaXMgYnJpZGdlZCB0byBDKys7IHRoZSBtYWluCisgLy8gY2hhbmdlIGhlcmUgaXMgd2UgY2Fu J3QgdXNlIE9wdGlvbjw+IHlldCwgc28gZW1wdHkgdmFsdWVzCisgLy8gYXJlIHJlcHJlc2VudGVk IGJ5IHRoZSBlbXB0eSBzdHJpbmcuCistc3RydWN0IExpdmVBcHBseVN0YXRlIGZpbmFsIHsKKytz dHJ1Y3QgTGl2ZUFwcGx5U3RhdGUgZmluYWwKKyt7CisgICA6OnJ1c3Q6OlN0cmluZyBpbnByb2dy ZXNzOworICAgOjpydXN0OjpTdHJpbmcgY29tbWl0OworIAorQEAgLTE1MjcsNjQgKzE3MDUsNzIg QEAgc3RydWN0IExpdmVBcHBseVN0YXRlIGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNzd2REQgorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFBhc3N3ZERCCistc3RydWN0IFBhc3N3ZERCIGZpbmFsIDogcHVibGljIDo6 cnVzdDo6T3BhcXVlIHsKKy0gIDo6cnVzdDo6U3RyaW5nIGxvb2t1cF91c2VyKDo6c3RkOjp1aW50 MzJfdCB1aWQpIGNvbnN0OworLSAgOjpydXN0OjpTdHJpbmcgbG9va3VwX2dyb3VwKDo6c3RkOjp1 aW50MzJfdCBnaWQpIGNvbnN0OworLSAgflBhc3N3ZERCKCkgPSBkZWxldGU7Cisrc3RydWN0IFBh c3N3ZERCIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgOjpydXN0OjpTdHJp bmcgbG9va3VwX3VzZXIgKDo6c3RkOjp1aW50MzJfdCB1aWQpIGNvbnN0OworKyAgOjpydXN0OjpT dHJpbmcgbG9va3VwX2dyb3VwICg6OnN0ZDo6dWludDMyX3QgZ2lkKSBjb25zdDsKKysgIH5QYXNz d2REQiAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0 OworLSAgc3RydWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBu b2V4Y2VwdDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysg IHN0cnVjdCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBu b2V4Y2VwdDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7Cisg ICB9OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNz d2REQgorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhc3N3ZEVu dHJpZXMKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNzd2RFbnRy aWVzCistc3RydWN0IFBhc3N3ZEVudHJpZXMgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUg eworLSAgdm9pZCBhZGRfZ3JvdXBfY29udGVudCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVz dDo6U3RyIHBhdGgpOworLSAgdm9pZCBhZGRfcGFzc3dkX2NvbnRlbnQoOjpzdGQ6OmludDMyX3Qg cm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKKy0gIGJvb2wgY29udGFpbnNfZ3JvdXAoOjpydXN0 OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGNvbnRhaW5zX3VzZXIoOjpydXN0 OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7CistICA6OnN0ZDo6dWludDMyX3QgbG9va3VwX3Vz ZXJfaWQoOjpydXN0OjpTdHIgdXNlcikgY29uc3Q7CistICA6OnN0ZDo6dWludDMyX3QgbG9va3Vw X2dyb3VwX2lkKDo6cnVzdDo6U3RyIGdyb3VwKSBjb25zdDsKKy0gIH5QYXNzd2RFbnRyaWVzKCkg PSBkZWxldGU7Cisrc3RydWN0IFBhc3N3ZEVudHJpZXMgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpP cGFxdWUKKyt7CisrICB2b2lkIGFkZF9ncm91cF9jb250ZW50ICg6OnN0ZDo6aW50MzJfdCByb290 ZnMsIDo6cnVzdDo6U3RyIHBhdGgpOworKyAgdm9pZCBhZGRfcGFzc3dkX2NvbnRlbnQgKDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCk7CisrICBib29sIGNvbnRhaW5zX2dy b3VwICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgY29udGFpbnNf dXNlciAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7CisrICA6OnN0ZDo6dWludDMy X3QgbG9va3VwX3VzZXJfaWQgKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0OworKyAgOjpzdGQ6OnVp bnQzMl90IGxvb2t1cF9ncm91cF9pZCAoOjpydXN0OjpTdHIgZ3JvdXApIGNvbnN0OworKyAgflBh c3N3ZEVudHJpZXMgKCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6 OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBz aXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNl cHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNp emUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhj ZXB0OworICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVj eHgkUGFzc3dkRW50cmllcworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JEV4dGVuc2lvbnMKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRF eHRlbnNpb25zCistc3RydWN0IEV4dGVuc2lvbnMgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFx dWUgeworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9yZXBvcygpIGNvbnN0IG5v ZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc19leHRlbnNpb25f cGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgc3Rh dGVfY2hlY2tzdW1fY2hhbmdlZCg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1 dF9kaXIpIGNvbnN0OworLSAgdm9pZCB1cGRhdGVfc3RhdGVfY2hlY2tzdW0oOjpydXN0OjpTdHIg Y2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKKy0gIHZvaWQgc2VyaWFsaXpl X3RvX2Rpcig6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKKy0gIDo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gZ2VuZXJhdGVfdHJlZWZpbGUoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzcmMpIGNvbnN0OworLSAgfkV4dGVuc2lvbnMoKSA9IGRlbGV0ZTsK KytzdHJ1Y3QgRXh0ZW5zaW9ucyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysg IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVwb3MgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X29zX2V4dGVuc2lvbl9wYWNrYWdl cyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRf ZGV2ZWxvcG1lbnRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIHN0YXRlX2No ZWNrc3VtX2NoYW5nZWQgKDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2Rp cikgY29uc3Q7CisrICB2b2lkIHVwZGF0ZV9zdGF0ZV9jaGVja3N1bSAoOjpydXN0OjpTdHIgY2hr c3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKKysgIHZvaWQgc2VyaWFsaXplX3Rv X2RpciAoOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7CisrICA6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGU+CisrICBnZW5lcmF0ZV90cmVlZmlsZSAoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzcmMpIGNvbnN0OworKyAgfkV4dGVuc2lvbnMgKCkgPSBkZWxl dGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBs YXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAg IHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0 CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAg IHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNl bmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucworIAorICNp Zm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UKKyAjZGVm aW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlCistc3RydWN0 IExvY2tlZFBhY2thZ2UgZmluYWwgeworK3N0cnVjdCBMb2NrZWRQYWNrYWdlIGZpbmFsCisrewor ICAgOjpydXN0OjpTdHJpbmcgbmFtZTsKKyAgIDo6cnVzdDo6U3RyaW5nIGV2cjsKKyAgIDo6cnVz dDo6U3RyaW5nIGFyY2g7CitAQCAtMTU5NiwyOTIgKzE3ODIsMzY3IEBAIHN0cnVjdCBMb2NrZWRQ YWNrYWdlIGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4 eCRMb2NrZmlsZUNvbmZpZworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JExvY2tmaWxlQ29uZmlnCistc3RydWN0IExvY2tmaWxlQ29uZmlnIGZpbmFsIDogcHVibGljIDo6 cnVzdDo6T3BhcXVlIHsKKy0gIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNr YWdlPiBnZXRfbG9ja2VkX3BhY2thZ2VzKCkgY29uc3Q7CistICB+TG9ja2ZpbGVDb25maWcoKSA9 IGRlbGV0ZTsKKytzdHJ1Y3QgTG9ja2ZpbGVDb25maWcgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpP cGFxdWUKKyt7CisrICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4g Z2V0X2xvY2tlZF9wYWNrYWdlcyAoKSBjb25zdDsKKysgIH5Mb2NrZmlsZUNvbmZpZyAoKSA9IGRl bGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0 IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0g ICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlv dXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysg ICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07Cisg I2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZwor IAorLXN0YXRpY19hc3NlcnQoOjpzdGQ6OmlzX2VudW08UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0 Pjo6dmFsdWUsICJleHBlY3RlZCBlbnVtIik7Cistc3RhdGljX2Fzc2VydChzaXplb2YoUnBtT3N0 cmVlRGlmZlByaW50Rm9ybWF0KSA9PSBzaXplb2YoOjpzdGQ6OnVpbnQ4X3QpLCAiaW5jb3JyZWN0 IHNpemUiKTsKKy1zdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PDo6c3RkOjp1aW50OF90PihScG1P c3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZPUk1BVF9TVU1NQVJZ KSA9PSAwLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Cist c3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4oUnBtT3N0cmVlRGlmZlBy aW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfRlVMTF9BTElHTkVEKSA9PSAx LCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Cistc3RhdGlj X2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4oUnBtT3N0cmVlRGlmZlByaW50Rm9y bWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfRlVMTF9NVUxUSUxJTkUpID09IDIsICJk aXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKKytzdGF0aWNfYXNz ZXJ0ICg6OnN0ZDo6aXNfZW51bTxScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ+Ojp2YWx1ZSwgImV4 cGVjdGVkIGVudW0iKTsKKytzdGF0aWNfYXNzZXJ0IChzaXplb2YgKFJwbU9zdHJlZURpZmZQcmlu dEZvcm1hdCkgPT0gc2l6ZW9mICg6OnN0ZDo6dWludDhfdCksICJpbmNvcnJlY3Qgc2l6ZSIpOwor K3N0YXRpY19hc3NlcnQgKAorKyAgICBzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4gKFJwbU9z dHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX1NVTU1BUlkp CisrICAgICAgICA9PSAwLAorKyAgICAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4 OjpicmlkZ2VdIik7Cisrc3RhdGljX2Fzc2VydCAoCisrICAgIHN0YXRpY19jYXN0PDo6c3RkOjp1 aW50OF90PiAoUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9G T1JNQVRfRlVMTF9BTElHTkVEKQorKyAgICAgICAgPT0gMSwKKysgICAgImRpc2FncmVlcyB3aXRo IHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOworK3N0YXRpY19hc3NlcnQgKHN0YXRpY19j YXN0PDo6c3RkOjp1aW50OF90PiAoCisrICAgICAgICAgICAgICAgICAgIFJwbU9zdHJlZURpZmZQ cmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfTVVMVElMSU5FKQor KyAgICAgICAgICAgICAgICAgICA9PSAyLAorKyAgICAgICAgICAgICAgICJkaXNhZ3JlZXMgd2l0 aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKKysKKytib29sIGlzX2JhcmVfc3BsaXRf eGF0dHJzICgpOworIAorLWJvb2wgaXNfYmFyZV9zcGxpdF94YXR0cnMoKTsKKytib29sIGlzX2h0 dHBfYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OworIAorLWJvb2wgaXNfaHR0cF9hcmco OjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKytib29sIGlzX29zdHJlZV9jb250YWluZXIgKCk7 CisgCistYm9vbCBpc19vc3RyZWVfY29udGFpbmVyKCk7CisrOjpycG1vc3RyZWVjeHg6OlN5c3Rl bUhvc3RUeXBlIGdldF9zeXN0ZW1faG9zdF90eXBlICgpOworIAorLTo6cnBtb3N0cmVlY3h4OjpT eXN0ZW1Ib3N0VHlwZSBnZXRfc3lzdGVtX2hvc3RfdHlwZSgpOworK3ZvaWQgcmVxdWlyZV9zeXN0 ZW1faG9zdF90eXBlICg6OnJwbW9zdHJlZWN4eDo6U3lzdGVtSG9zdFR5cGUgdCk7CisgCistdm9p ZCByZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUoOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBl IHQpOworK2Jvb2wgaXNfcnBtX2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKyAKKy1i b29sIGlzX3JwbV9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKyt2b2lkIGNsaWVudF9z dGFydF9kYWVtb24gKCk7CisgCistdm9pZCBjbGllbnRfc3RhcnRfZGFlbW9uKCk7CisrOjpydXN0 OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGNsaWVudF9oYW5kbGVfZmRfYXJndW1lbnQgKDo6cnVzdDo6 U3RyIGFyZywgOjpydXN0OjpTdHIgYXJjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19yZXBsYWNlKTsKKyAKKy06OnJ1c3Q6 OlZlYzw6OnN0ZDo6aW50MzJfdD4gY2xpZW50X2hhbmRsZV9mZF9hcmd1bWVudCg6OnJ1c3Q6OlN0 ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsIGJvb2wgaXNfcmVwbGFjZSk7CisrOjpydXN0OjpTdHJp bmcgY2xpZW50X3JlbmRlcl9kb3dubG9hZF9wcm9ncmVzcyAoOjpycG1vc3RyZWVjeHg6OkdWYXJp YW50IGNvbnN0ICZwcm9ncmVzcykgbm9leGNlcHQ7CisgCistOjpydXN0OjpTdHJpbmcgY2xpZW50 X3JlbmRlcl9kb3dubG9hZF9wcm9ncmVzcyg6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3Qg JnByb2dyZXNzKSBub2V4Y2VwdDsKKytib29sIHJ1bm5pbmdfaW5fY29udGFpbmVyICgpIG5vZXhj ZXB0OworIAorLWJvb2wgcnVubmluZ19pbl9jb250YWluZXIoKSBub2V4Y2VwdDsKKytib29sIGNv bmZpcm0gKCk7CisgCistYm9vbCBjb25maXJtKCk7Cisrdm9pZCBjb25maXJtX29yX2Fib3J0ICgp OworIAorLXZvaWQgY29uZmlybV9vcl9hYm9ydCgpOworK3ZvaWQgYnViYmxld3JhcF9zZWxmdGVz dCAoKTsKKyAKKy12b2lkIGJ1YmJsZXdyYXBfc2VsZnRlc3QoKTsKKys6OnJ1c3Q6OlZlYzw6OnN0 ZDo6dWludDhfdD4gYnViYmxld3JhcF9ydW5fc3luYyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhcHR1cmVfc3Rkb3V0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSk7CisgCistOjpydXN0OjpWZWM8 OjpzdGQ6OnVpbnQ4X3Q+IGJ1YmJsZXdyYXBfcnVuX3N5bmMoOjpzdGQ6OmludDMyX3Qgcm9vdGZz X2RmZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzLCBib29sIGNhcHR1 cmVfc3Rkb3V0LCA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0 eSk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+IGJ1YmJsZXdyYXBf bmV3ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpCdWJibGV3cmFwPiBidWJibGV3cmFwX25ldyg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZmQpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPgorK2J1YmJsZXdy YXBfbmV3X3dpdGhfbXV0YWJpbGl0eSAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRh YmlsaXR5IG11dGFiaWxpdHkpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJi bGV3cmFwPiBidWJibGV3cmFwX25ld193aXRoX211dGFiaWxpdHkoOjpzdGQ6OmludDMyX3Qgcm9v dGZzX2ZkLCA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSk7 CisrOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHlfZm9yX3Vu aWZpZWRfY29yZSAoYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVl Y3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUoYm9v bCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OworK3ZvaWQgdXNyb3ZlcmxheV9lbnRyeXBvaW50ICg6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpOworIAorLXZvaWQgdXNyb3Zl cmxheV9lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncyk7 Cisrdm9pZCBhcHBseWxpdmVfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGNvbnN0ICZhcmdzKTsKKyAKKy12b2lkIGFwcGx5bGl2ZV9lbnRyeXBvaW50KDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncyk7Cisrdm9pZCBhcHBseWxpdmVfZmluaXNoICg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCk7CisgCistdm9pZCBh cHBseWxpdmVfZmluaXNoKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNy b290KTsKKyt2b2lkIGNvbXBvc2V1dGlsX2xlZ2FjeV9wcmVwX2Rldl9hbmRfcnVuICg6OnN0ZDo6 aW50MzJfdCByb290ZnNfZGZkKTsKKyAKKy12b2lkIGNvbXBvc2V1dGlsX2xlZ2FjeV9wcmVwX2Rl dl9hbmRfcnVuKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpOworK3ZvaWQgcHJpbnRfb3N0cmVl X3R4bl9zdGF0cyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG9UcmFuc2FjdGlvblN0YXRzICZz dGF0cykgbm9leGNlcHQ7CisgCistdm9pZCBwcmludF9vc3RyZWVfdHhuX3N0YXRzKDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVSZXBvVHJhbnNhY3Rpb25TdGF0cyAmc3RhdHMpIG5vZXhjZXB0OworK3Zv aWQgd3JpdGVfY29tbWl0X2lkICg6OnJ1c3Q6OlN0ciB0YXJnZXRfcGF0aCwgOjpydXN0OjpTdHIg cmV2aXNpb24pOworIAorLXZvaWQgd3JpdGVfY29tbWl0X2lkKDo6cnVzdDo6U3RyIHRhcmdldF9w YXRoLCA6OnJ1c3Q6OlN0ciByZXZpc2lvbik7Cisrdm9pZCBjbGl3cmFwX3dyaXRlX3dyYXBwZXJz ICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworIAorLXZvaWQgY2xpd3JhcF93cml0ZV93cmFwcGVy cyg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworK3ZvaWQgY2xpd3JhcF93cml0ZV9zb21lX3dyYXBw ZXJzICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBj b25zdCAmYXJncyk7CisgCistdm9pZCBjbGl3cmFwX3dyaXRlX3NvbWVfd3JhcHBlcnMoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3Mp OworKzo6cnVzdDo6U3RyaW5nIGNsaXdyYXBfZGVzdGRpciAoKSBub2V4Y2VwdDsKKyAKKy06OnJ1 c3Q6OlN0cmluZyBjbGl3cmFwX2Rlc3RkaXIoKSBub2V4Y2VwdDsKKyt2b2lkIGNvbnRhaW5lcl9l bmNhcHN1bGF0ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpOworIAorLXZvaWQg Y29udGFpbmVyX2VuY2Fwc3VsYXRlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsK Kyt2b2lkIGRlcGxveV9mcm9tX3NlbGZfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGFyZ3MpOworIAorLXZvaWQgZGVwbG95X2Zyb21fc2VsZl9lbnRyeXBvaW50KDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4KKytwdWxsX2NvbnRhaW5lciAoOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4 OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnJ1c3Q6OlN0ciBpbWdyZWYsCisr ICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGRpZ2VzdF9vdmVycmlkZSk7CisgCistOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+IHB1bGxfY29udGFpbmVy KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6 R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmLCA6OnJ1 c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUpOworKzo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWlu ZXJJbmZvIGNvbnRhaW5lcl9wcnVuZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29u c3QgJnN5c3Jvb3QpOworIAorLTo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvIGNv bnRhaW5lcl9wcnVuZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9v dCk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+Cisr cXVlcnlfY29udGFpbmVyX2ltYWdlX2NvbW1pdCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGMpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiBxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0KDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjKTsKKyt2 b2lkIHB1cmdlX3JlZnNwZWMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBv LCA6OnJ1c3Q6OlN0ciByZWZzcGVjKTsKKyAKKy12b2lkIHB1cmdlX3JlZnNwZWMoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJlZnNwZWMpOworK2Jv b2wgY2hlY2tfY29udGFpbmVyX3VwZGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnJlcG8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6 R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmKTsKKyAK Ky1ib29sIGNoZWNrX2NvbnRhaW5lcl91cGRhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxh YmxlLCA6OnJ1c3Q6OlN0ciBpbWdyZWYpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU ZW1wRXRjR3VhcmQ+IHByZXBhcmVfdGVtcGV0Y19ndWFyZCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPiBwcmVwYXJl X3RlbXBldGNfZ3VhcmQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKKys6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+CisrcHJlcGFyZV9maWxlc3lzdGVtX3Nj cmlwdF9wcmVwICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworIAorLTo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD4gcHJlcGFyZV9maWxlc3lzdGVtX3Njcmlw dF9wcmVwKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7Cisrdm9pZCBydW5fZGVwbW9kICg6OnN0ZDo6 aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlN0ciBrdmVyLCBib29sIHVuaWZpZWRfY29yZSk7 CisgCistdm9pZCBydW5fZGVwbW9kKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6 U3RyIGt2ZXIsIGJvb2wgdW5pZmllZF9jb3JlKTsKKyt2b2lkIHJ1bl9zeXN1c2VycyAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBmb3JjZSk7CisgCistdm9pZCBydW5fc3lzdXNlcnMo OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBmb3JjZSk7Cisrdm9pZCBsb2dfdHJlZWZp bGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYpIG5vZXhjZXB0OworIAorLXZv aWQgbG9nX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYpIG5vZXhj ZXB0OworK2Jvb2wgaXNfY29udGFpbmVyX2ltYWdlX3JlZmVyZW5jZSAoOjpydXN0OjpTdHIgcmVm c3BlYykgbm9leGNlcHQ7CisgCistYm9vbCBpc19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNlKDo6 cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OworK2Jvb2wgaXNfY29udGFpbmVyX2ltYWdlX2Rp Z2VzdF9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OworIAorLWJvb2wg aXNfY29udGFpbmVyX2ltYWdlX2RpZ2VzdF9yZWZlcmVuY2UoOjpydXN0OjpTdHIgcmVmc3BlYykg bm9leGNlcHQ7CisrOjpycG1vc3RyZWVjeHg6OlJlZnNwZWNUeXBlIHJlZnNwZWNfY2xhc3NpZnkg KDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVlY3h4OjpSZWZz cGVjVHlwZSByZWZzcGVjX2NsYXNzaWZ5KDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0Owor K3ZvaWQgdmVyaWZ5X2tlcm5lbF9obWFjICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6 U3RyIG1vZGRpcik7CisgCistdm9pZCB2ZXJpZnlfa2VybmVsX2htYWMoOjpzdGQ6OmludDMyX3Qg cm9vdGZzLCA6OnJ1c3Q6OlN0ciBtb2RkaXIpOworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBzdGFnZV9jb250YWluZXJfcnBtcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHJwbXMp OworIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBzdGFnZV9jb250YWluZXJfcnBtcyg6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcnBtcyk7CisrOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IHN0YWdlX2NvbnRhaW5lcl9ycG1fcmF3X2ZkcyAoOjpydXN0OjpWZWM8OjpzdGQ6Omlu dDMyX3Q+IGZkcyk7CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHN0YWdlX2NvbnRh aW5lcl9ycG1fcmF3X2Zkcyg6OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4gZmRzKTsKKytib29s IGNvbW1pdF9oYXNfbWF0Y2hpbmdfc2Vwb2xpY3kgKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBj b25zdCAmY29tbWl0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVNlUG9saWN5IGNvbnN0ICZwb2xpY3kpOworIAorLWJvb2wgY29tbWl0 X2hhc19tYXRjaGluZ19zZXBvbGljeSg6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNv bW1pdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVNlUG9saWN5IGNvbnN0ICZwb2xpY3kpOworKzo6 cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqZ2V0X2hlYWRlcl92YXJpYW50ICg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY2FjaGVicmFuY2gpOworIAorLTo6cnBtb3N0 cmVlY3h4OjpHVmFyaWFudCAqZ2V0X2hlYWRlcl92YXJpYW50KDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjYWNoZWJyYW5jaCk7Cisrdm9pZCBjb21w b3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBhcmdzKTsKKyAKKy12b2lkIGNvbXBvc2VfYnVpbGRfY2h1bmtlZF9vY2lfZW50cnlwb2lu dCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7Cisrdm9pZCBjb21wb3NlX2ltYWdl ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7CisgCistdm9pZCBjb21wb3NlX2lt YWdlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsKKyt2b2lkIGNvbXBvc2Vfcm9v dGZzX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsKKyAKKy12 b2lkIGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGFyZ3MpOworK3ZvaWQgY29uZmlndXJlX2J1aWxkX3JlcG9fZnJvbV90YXJnZXQgKDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZidWlsZF9yZXBvLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZ0 YXJnZXRfcmVwbyk7CisgCistdm9pZCBjb25maWd1cmVfYnVpbGRfcmVwb19mcm9tX3RhcmdldCg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmYnVpbGRfcmVwbywgOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVJlcG8gY29uc3QgJnRhcmdldF9yZXBvKTsKKyt2b2lkIGNvbXBvc2VfcHJlcGFy ZV9yb290ZnMgKDo6c3RkOjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50MzJfdCBk ZXN0X3Jvb3Rmc19kZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKTsKKyAKKy12b2lkIGNvbXBvc2VfcHJlcGFyZV9yb290 ZnMoOjpzdGQ6OmludDMyX3Qgc3JjX3Jvb3Rmc19kZmQsIDo6c3RkOjppbnQzMl90IGRlc3Rfcm9v dGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSk7Cisrdm9pZCBjb21w b3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCk7Cisg Cistdm9pZCBjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyg6OnN0ZDo6aW50MzJfdCByb290 ZnNfZGZkKTsKKyt2b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3MgKDo6c3RkOjppbnQzMl90IHJvb3Rm c19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBuZXh0X3ZlcnNpb24sIGJvb2wgdW5pZmllZF9jb3Jl KTsKKyAKKy12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3MoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgbmV4dF92 ZXJzaW9uLCBib29sIHVuaWZpZWRfY29yZSk7Cisrdm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzX2Zp bmFsX3ByZSAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxl KTsKKyAKKy12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWxfcHJlKDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpOwor K3ZvaWQgY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmdHJlZWZpbGUpOworIAorLXZvaWQgY29tcG9zZV9wb3N0cHJvY2Vzc19maW5h bCg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnRyZWVmaWxlKTsKKyt2b2lkIGNvbnZlcnRfdmFyX3RvX3RtcGZpbGVzX2QgKDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJw bW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7CisgCistdm9pZCBj b252ZXJ0X3Zhcl90b190bXBmaWxlc19kKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBt b3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKKyt2b2lkIHJvb3Rm c19wcmVwYXJlX2xpbmtzICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgc2tpcF91c3Jsb2NhbCk7CisgCistdm9pZCByb290ZnNfcHJlcGFyZV9saW5rcyg6OnN0 ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRy ZWVmaWxlLCBib29sIHNraXBfdXNybG9jYWwpOworK3ZvaWQgd29ya2Fyb3VuZF9zZWxpbnV4X2Ny b3NzX2xhYmVsaW5nICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZj YW5jZWxsYWJsZSk7CisgCistdm9pZCB3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFiZWxpbmco OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAm Y2FuY2VsbGFibGUpOworK3ZvaWQgcG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYiAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCk7CisgCistdm9pZCBwb3N0cHJvY2Vzc19jbGVhbnVwX3JwbWRiKDo6 c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpOworK3ZvaWQgcmV3cml0ZV9ycG1kYl9mb3JfdGFyZ2V0 ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCBib29sIG5vcm1hbGl6ZSk7CisgCistdm9pZCBy ZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBu b3JtYWxpemUpOworKzo6c3RkOjp1aW50NjRfdCBkaXJlY3Rvcnlfc2l6ZSAoOjpzdGQ6OmludDMy X3QgZGZkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpOworIAorLTo6c3RkOjp1aW50NjRfdCBk aXJlY3Rvcnlfc2l6ZSg6OnN0ZDo6aW50MzJfdCBkZmQsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKKys6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95 bWVudCAqZGVwbG95bWVudF9mb3JfaWQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZz eXNyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpTdHIgZGVwbG95X2lkKTsKKyAKKy06OnJwbW9zdHJlZWN4eDo6T3N0cmVl RGVwbG95bWVudCAqZGVwbG95bWVudF9mb3JfaWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jv b3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxveV9pZCk7CisrOjpydXN0OjpTdHJpbmcgZGVw bG95bWVudF9jaGVja3N1bV9mb3JfaWQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZz eXNyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1 c3Q6OlN0ciBkZXBsb3lfaWQpOworIAorLTo6cnVzdDo6U3RyaW5nIGRlcGxveW1lbnRfY2hlY2tz dW1fZm9yX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6 OlN0ciBkZXBsb3lfaWQpOworKzo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICpkZXBs b3ltZW50X2dldF9iYXNlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpydXN0OjpTdHIgb3B0X2RlcGxveV9pZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgb3B0X29zX25hbWUpOworIAor LTo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICpkZXBsb3ltZW50X2dldF9iYXNlKDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBvcHRfZGVw bG95X2lkLCA6OnJ1c3Q6OlN0ciBvcHRfb3NfbmFtZSk7CisrYm9vbCBkZXBsb3ltZW50X2FkZF9t YW5pZmVzdF9kaWZmICg6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkV4cG9y dGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBub2V4Y2VwdDsKKyAKKy1ib29sIGRlcGxveW1l bnRfYWRkX21hbmlmZXN0X2RpZmYoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAm ZGljdCwgOjpycG1vc3RyZWVjeHg6OkV4cG9ydGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBu b2V4Y2VwdDsKKyt2b2lkIGRhZW1vbl9zYW5pdHljaGVja19lbnZpcm9ubWVudCAoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpOworIAorLXZvaWQgZGFlbW9uX3Nh bml0eWNoZWNrX2Vudmlyb25tZW50KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0 ICZzeXNyb290KTsKKys6OnJ1c3Q6OlN0cmluZyBkZXBsb3ltZW50X2dlbmVyYXRlX2lkICg6OnJw bW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCkgbm9leGNlcHQ7 CisgCistOjpydXN0OjpTdHJpbmcgZGVwbG95bWVudF9nZW5lcmF0ZV9pZCg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCkgbm9leGNlcHQ7Cisrdm9pZCBk ZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290 IGNvbnN0ICZzeXNyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJw bW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBj b25zdCAmZGljdCk7CisgCistdm9pZCBkZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnREaWN0IGNvbnN0ICZkaWN0KTsKKyt2b2lkIGdlbmVyYXRlX2Jhc2VsYXllcl9yZWZzICg6OnJw bW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxh YmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7CisgCistdm9pZCBnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVm cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFi bGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKKyt2b2lkIHZhcmlhbnRfYWRkX3JlbW90ZV9zdGF0dXMg KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZz cGVjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgYmFzZV9j aGVja3N1bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4 OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpOworIAorLXZvaWQgdmFyaWFudF9hZGRfcmVtb3Rl X3N0YXR1cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpT dHIgcmVmc3BlYywgOjpydXN0OjpTdHIgYmFzZV9jaGVja3N1bSwgOjpycG1vc3RyZWVjeHg6OkdW YXJpYW50RGljdCBjb25zdCAmZGljdCk7CisrOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXll cmVkTWV0YQorK2RlcGxveW1lbnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQgKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29t bWl0KTsKKyAKKy06OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhIGRlcGxveW1l bnRfbGF5ZXJlZG1ldGFfZnJvbV9jb21taXQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1l bnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29t bWl0KTsKKys6OnJwbW9zdHJlZWN4eDo6RGVwbG95bWVudExheWVyZWRNZXRhCisrZGVwbG95bWVu dF9sYXllcmVkbWV0YV9sb2FkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVw bywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVE ZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KTsKKyAKKy06OnJwbW9zdHJlZWN4eDo6RGVwbG95 bWVudExheWVyZWRNZXRhIGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfbG9hZCg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1l bnQgY29uc3QgJmRlcGxveW1lbnQpOworKzo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50U291cmNlIHBhcnNlX292ZXJyaWRlX3NvdXJjZSAoOjpydXN0OjpTdHIgc291cmNlKTsKKyAK Ky06OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBwYXJzZV9vdmVycmlk ZV9zb3VyY2UoOjpydXN0OjpTdHIgc291cmNlKTsKKys6OnJwbW9zdHJlZWN4eDo6UGFyc2VkUmV2 aXNpb24gcGFyc2VfcmV2aXNpb24gKDo6cnVzdDo6U3RyIHNvdXJjZSk7CisgCistOjpycG1vc3Ry ZWVjeHg6OlBhcnNlZFJldmlzaW9uIHBhcnNlX3JldmlzaW9uKDo6cnVzdDo6U3RyIHNvdXJjZSk7 CisrOjpydXN0OjpTdHJpbmcgZ2VuZXJhdGVfb2JqZWN0X3BhdGggKDo6cnVzdDo6U3RyIGJhc2Us IDo6cnVzdDo6U3RyIG5leHRfc2VnbWVudCk7CisgCistOjpydXN0OjpTdHJpbmcgZ2VuZXJhdGVf b2JqZWN0X3BhdGgoOjpydXN0OjpTdHIgYmFzZSwgOjpydXN0OjpTdHIgbmV4dF9zZWdtZW50KTsK Kyt2b2lkIGZhaWxwb2ludCAoOjpydXN0OjpTdHIgcCk7CisgCistdm9pZCBmYWlscG9pbnQoOjpy dXN0OjpTdHIgcCk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxh Z3M+IHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkgKCkgbm9leGNlcHQ7CisgCistOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+IHJwbV9pbXBvcnRlcl9mbGFn c19uZXdfZW1wdHkoKSBub2V4Y2VwdDsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBt SW1wb3J0ZXI+CisrcnBtX2ltcG9ydGVyX25ldyAoOjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVz dDo6U3RyIG9zdHJlZV9icmFuY2gsCisrICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OlJwbUltcG9ydGVyRmxhZ3MgY29uc3QgJmZsYWdzKTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6UnBtSW1wb3J0ZXI+IHJwbV9pbXBvcnRlcl9uZXcoOjpydXN0OjpTdHIgcGtnX25h bWUsIDo6cnVzdDo6U3RyIG9zdHJlZV9icmFuY2gsIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRl ckZsYWdzIGNvbnN0ICZmbGFncyk7CisrOjpydXN0OjpTdHJpbmcgdG1wZmlsZXNfdHJhbnNsYXRl ICg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAm ZmlsZV9pbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSk7CisgCistOjpydXN0OjpTdHJpbmcg dG1wZmlsZXNfdHJhbnNsYXRlKDo6cnVzdDo6U3RyIGFic19wYXRoLCA6OnJwbW9zdHJlZWN4eDo6 R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6 OlN0ciBncm91cG5hbWUpOworK3ZvaWQgYXBwZW5kX2RyYWN1dF9yYW5kb21fY3BpbyAoOjpzdGQ6 OmludDMyX3QgZmQpOworIAorLXZvaWQgYXBwZW5kX2RyYWN1dF9yYW5kb21fY3Bpbyg6OnN0ZDo6 aW50MzJfdCBmZCk7CisrOjpzdGQ6OmludDMyX3QgaW5pdHJhbWZzX292ZXJsYXlfZ2VuZXJhdGUg KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZXMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFi bGUgJmNhbmNlbGxhYmxlKTsKKyAKKy06OnN0ZDo6aW50MzJfdCBpbml0cmFtZnNfb3ZlcmxheV9n ZW5lcmF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVzLCA6OnJwbW9z dHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSk7Cisrdm9pZCBqb3VybmFsX3ByaW50 X3N0YWdpbmdfZmFpbHVyZSAoKSBub2V4Y2VwdDsKKyAKKy12b2lkIGpvdXJuYWxfcHJpbnRfc3Rh Z2luZ19mYWlsdXJlKCkgbm9leGNlcHQ7Cisrdm9pZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rh c2sgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7CisgCistdm9pZCBjb25zb2xlX3Byb2dyZXNz X2JlZ2luX3Rhc2soOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKKyt2b2lkIGNvbnNvbGVfcHJv Z3Jlc3NfYmVnaW5fbl9pdGVtcyAoOjpydXN0OjpTdHIgbXNnLCA6OnN0ZDo6dWludDY0X3Qgbikg bm9leGNlcHQ7CisgCistdm9pZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX25faXRlbXMoOjpydXN0 OjpTdHIgbXNnLCA6OnN0ZDo6dWludDY0X3Qgbikgbm9leGNlcHQ7Cisrdm9pZCBjb25zb2xlX3By b2dyZXNzX2JlZ2luX3BlcmNlbnQgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7CisgCistdm9p ZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2Vw dDsKKyt2b2lkIGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X21lc3NhZ2UgKDo6cnVzdDo6U3RyIG1zZykg bm9leGNlcHQ7CisgCistdm9pZCBjb25zb2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlKDo6cnVzdDo6 U3RyIG1zZykgbm9leGNlcHQ7Cisrdm9pZCBjb25zb2xlX3Byb2dyZXNzX3NldF9zdWJfbWVzc2Fn ZSAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKKyAKKy12b2lkIGNvbnNvbGVfcHJvZ3Jlc3Nf c2V0X3N1Yl9tZXNzYWdlKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Cisrdm9pZCBjb25zb2xl X3Byb2dyZXNzX3VwZGF0ZSAoOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0OworIAorLXZvaWQg Y29uc29sZV9wcm9ncmVzc191cGRhdGUoOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0OworK3Zv aWQgY29uc29sZV9wcm9ncmVzc19lbmQgKDo6cnVzdDo6U3RyIHN1ZmZpeCkgbm9leGNlcHQ7Cisg Cistdm9pZCBjb25zb2xlX3Byb2dyZXNzX2VuZCg6OnJ1c3Q6OlN0ciBzdWZmaXgpIG5vZXhjZXB0 OworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4PiBoaXN0b3J5X2N0eF9u ZXcgKCk7CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHg+IGhpc3Rv cnlfY3R4X25ldygpOworK3ZvaWQgaGlzdG9yeV9wcnVuZSAoKTsKKyAKKy12b2lkIGhpc3Rvcnlf cHJ1bmUoKTsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+IHRva2lv X2hhbmRsZV9nZXQgKCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRva2lvSGFuZGxlPiB0b2tpb19oYW5kbGVfZ2V0KCkgbm9leGNlcHQ7CisrYm9vbCBzY3JpcHRf aXNfaWdub3JlZCAoOjpydXN0OjpTdHIgcGtnLCA6OnJ1c3Q6OlN0ciBzY3JpcHQsIGJvb2wgdXNl X2tlcm5lbF9pbnN0YWxsKSBub2V4Y2VwdDsKKyAKKy1ib29sIHNjcmlwdF9pc19pZ25vcmVkKDo6 cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LCBib29sIHVzZV9rZXJuZWxfaW5zdGFs bCkgbm9leGNlcHQ7Cisrdm9pZCB0ZXN0dXRpbHNfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGFyZ3YpOworIAorLXZvaWQgdGVzdHV0aWxzX2VudHJ5cG9pbnQoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3YpOworKzo6cnVzdDo6U3RyaW5nIG1heWJlX3NoZWxs X3F1b3RlICg6OnJ1c3Q6OlN0ciBpbnB1dCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpTdHJpbmcg bWF5YmVfc2hlbGxfcXVvdGUoOjpydXN0OjpTdHIgaW5wdXQpIG5vZXhjZXB0OworKzo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3ICg6OnJ1c3Q6OlN0ciBm aWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3KDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1 c3Q6OlN0ciBiYXNlYXJjaCk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl PiB0cmVlZmlsZV9uZXdfZW1wdHkgKCk7CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfZW1wdHkoKTsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19mcm9tX3N0cmluZyAoOjpydXN0OjpTdHIgYnVm LCBib29sIGNsaWVudCk7CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl PiB0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcoOjpydXN0OjpTdHIgYnVmLCBib29sIGNsaWVudCk7 CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfY29t cG9zZSAoOjpydXN0OjpTdHIgZmlsZW5hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgYmFzZWFyY2gpOwor IAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2Nv bXBvc2UoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKKys6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnQgKDo6 cnVzdDo6U3RyIGZpbGVuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgYmFzZWFyY2gpOworIAorLTo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NsaWVudCg6OnJ1 c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpOworKzo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0YyAoOjpy dXN0OjpTdHIgYmFzZWFyY2gpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZT4gdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0Yyg6OnJ1c3Q6OlN0ciBiYXNlYXJjaCk7 CisrOjpzdGQ6OnVpbnQzMl90IHRyZWVmaWxlX2RlbGV0ZV9jbGllbnRfZXRjICgpOworIAorLTo6 c3RkOjp1aW50MzJfdCB0cmVlZmlsZV9kZWxldGVfY2xpZW50X2V0YygpOworKy8vIFJldHVybiB0 aGUgbGlzdCBvZiByZXBvIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgdG8gc2VhcmNoCisrLy8g KGUuZy4gWyIvZXRjL3l1bS5yZXBvcy5kIiwgIi91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIl0pLgor Kzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVwb3NfZGlycyAoKSBub2V4Y2VwdDsK KyAKKy06OnJ1c3Q6OlN0cmluZyB2YXJzdWJzdGl0dXRlKDo6cnVzdDo6U3RyIHMsIDo6cnVzdDo6 VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmdmFycyk7CisrOjpydXN0 OjpTdHJpbmcgdmFyc3Vic3RpdHV0ZSAoOjpydXN0OjpTdHIgcywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4g Y29uc3QgJnZhcnMpOworIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZmVhdHVy ZXMoKSBub2V4Y2VwdDsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZlYXR1cmVz ICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6U3RyaW5nIGdldF9ycG1fYmFzZWFyY2goKSBub2V4 Y2VwdDsKKys6OnJ1c3Q6OlN0cmluZyBnZXRfcnBtX2Jhc2VhcmNoICgpIG5vZXhjZXB0OworIAor LTo6c3RkOjppbnQzMl90IHNlYWxlZF9tZW1mZCg6OnJ1c3Q6OlN0ciBkZXNjcmlwdGlvbiwgOjpy dXN0OjpTbGljZTw6OnN0ZDo6dWludDhfdCBjb25zdD4gY29udGVudCk7CisrOjpzdGQ6OmludDMy X3Qgc2VhbGVkX21lbWZkICg6OnJ1c3Q6OlN0ciBkZXNjcmlwdGlvbiwgOjpydXN0OjpTbGljZTw6 OnN0ZDo6dWludDhfdCBjb25zdD4gY29udGVudCk7CisgCistYm9vbCBydW5uaW5nX2luX3N5c3Rl bWQoKSBub2V4Y2VwdDsKKytib29sIHJ1bm5pbmdfaW5fc3lzdGVtZCAoKSBub2V4Y2VwdDsKKyAK Ky06OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKmNhbGN1bGF0ZV9hZHZpc29yaWVzX2RpZmYoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGNoZWNrc3Vt X2Zyb20sIDo6cnVzdDo6U3RyIGNoZWNrc3VtX3RvKTsKKys6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnQgKmNhbGN1bGF0ZV9hZHZpc29yaWVzX2RpZmYgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBv IGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpTdHIgY2hlY2tzdW1fZnJvbSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGNoZWNrc3Vt X3RvKTsKKyAKKy06OnJ1c3Q6OlN0cmluZyB0cmFuc2xhdGVfcGF0aF9mb3Jfb3N0cmVlKDo6cnVz dDo6U3RyIHBhdGgpIG5vZXhjZXB0OworKzo6cnVzdDo6U3RyaW5nIHRyYW5zbGF0ZV9wYXRoX2Zv cl9vc3RyZWUgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVlY3h4 OjpMaXZlQXBwbHlTdGF0ZSBnZXRfbGl2ZV9hcHBseV9zdGF0ZSg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1l bnQgY29uc3QgJmRlcGxveW1lbnQpOworKzo6cnBtb3N0cmVlY3h4OjpMaXZlQXBwbHlTdGF0ZQor K2dldF9saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25z dCAmc3lzcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpOworIAorLWJvb2wgaGFzX2xpdmVfYXBwbHlf c3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KTsKKytib29sIGhh c19saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAm c3lzcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCk7CisgCistdm9pZCBhcHBseWxpdmVfc3lu Y19yZWYoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpOworK3Zv aWQgYXBwbHlsaXZlX3N5bmNfcmVmICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25z dCAmc3lzcm9vdCk7CisgCistdm9pZCB0cmFuc2FjdGlvbl9hcHBseV9saXZlKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnQgY29uc3QgJnRhcmdldCk7Cisrdm9pZCB0cmFuc2FjdGlvbl9hcHBseV9saXZlICg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmdGFyZ2V0KTsKKyAK Ky12b2lkIG5vcm1hbGl6ZV9ldGNfc2hhZG93KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpOwor K3ZvaWQgbm9ybWFsaXplX2V0Y19zaGFkb3cgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpOwor IAorLWJvb2wgcHJlcGFyZV9ycG1fbGF5ZXJpbmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnN0 ZDo6aW50MzJfdCBtZXJnZV9wYXNzd2RfZGlyKTsKKytib29sIHByZXBhcmVfcnBtX2xheWVyaW5n ICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6c3RkOjppbnQzMl90IG1lcmdlX3Bhc3N3ZF9kaXIp OworIAorLXZvaWQgY29tcGxldGVfcnBtX2xheWVyaW5nKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7 Cisrdm9pZCBjb21wbGV0ZV9ycG1fbGF5ZXJpbmcgKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7Cisg Cistdm9pZCBkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRyaWVzKDo6c3RkOjppbnQzMl90IHJvb3Rm cyk7Cisrdm9pZCBkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRyaWVzICg6OnN0ZDo6aW50MzJfdCBy b290ZnMpOworIAorLXZvaWQgcGFzc3dkX2NsZWFudXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsK Kyt2b2lkIHBhc3N3ZF9jbGVhbnVwICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworIAorLXZvaWQg bWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmcHJlc2VydmVkX2dyb3Vwcyk7Cisrdm9pZCBtaWdy YXRlX2dyb3VwX2V4Y2VwdF9yb290ICg6OnN0ZDo6aW50MzJfdCByb290ZnMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3Qg JnByZXNlcnZlZF9ncm91cHMpOworIAorLXZvaWQgbWlncmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3Qo OjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKKyt2b2lkIG1pZ3JhdGVfcGFzc3dkX2V4Y2VwdF9yb290 ICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworIAorLXZvaWQgcGFzc3dkX2NvbXBvc2VfcHJlcCg6 OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUp OworK3ZvaWQgcGFzc3dkX2NvbXBvc2VfcHJlcCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKTsKKyAKKy12b2lkIHBhc3N3ZF9jb21wb3Nl X3ByZXBfcmVwbyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSAmdHJlZWZpbGUsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1 c3Q6OlN0ciBwcmV2aW91c19jaGVja3N1bSwgYm9vbCB1bmlmaWVkX2NvcmUpOworK3ZvaWQgcGFz c3dkX2NvbXBvc2VfcHJlcF9yZXBvICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBwcmV2aW91c19jaGVja3N1bSwgYm9vbCB1bmlm aWVkX2NvcmUpOworIAorLWJvb2wgZGlyX2NvbnRhaW5zX3VpZCg6OnN0ZDo6aW50MzJfdCBkaXJm ZCwgOjpzdGQ6OnVpbnQzMl90IGlkKTsKKytib29sIGRpcl9jb250YWluc191aWQgKDo6c3RkOjpp bnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQpOworIAorLWJvb2wgZGlyX2NvbnRhaW5z X2dpZCg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKTsKKytib29sIGRp cl9jb250YWluc19naWQgKDo6c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQp OworIAorLXZvaWQgY2hlY2tfcGFzc3dkX2dyb3VwX2VudHJpZXMoOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVJlcG8gY29uc3QgJmZmaV9yZXBvLCA6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19yZXYp OworK3ZvaWQgY2hlY2tfcGFzc3dkX2dyb3VwX2VudHJpZXMgKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZmZmlfcmVwbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRy ZWVmaWxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHBy ZXZpb3VzX3Jldik7CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiBw YXNzd2RkYl9vcGVuKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7CisrOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlBhc3N3ZERCPiBwYXNzd2RkYl9vcGVuICg6OnN0ZDo6aW50MzJfdCByb290ZnMp OworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzPiBuZXdfcGFz c3dkX2VudHJpZXMoKSBub2V4Y2VwdDsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFz c3dkRW50cmllcz4gbmV3X3Bhc3N3ZF9lbnRyaWVzICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPiBleHRlbnNpb25zX2xvYWQoOjpydXN0OjpT dHIgcGF0aCwgOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4 OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzKTsKKys6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6RXh0ZW5zaW9ucz4KKytleHRlbnNpb25zX2xvYWQgKDo6cnVzdDo6U3RyIHBhdGgs IDo6cnVzdDo6U3RyIGJhc2VhcmNoLAorKyAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8Ojpy cG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZiYXNlX3BrZ3MpOworIAorLTo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4gbG9ja2ZpbGVfcmVhZCg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcyk7CisrOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPgorK2xvY2tmaWxlX3JlYWQgKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZW5hbWVzKTsKKyAKKy12b2lkIGxvY2tmaWxl X3dyaXRlKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFy cmF5ICZwYWNrYWdlcywgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcnBtbWRfcmVw b3MpOworK3ZvaWQgbG9ja2ZpbGVfd3JpdGUgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9z dHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNrYWdlcywKKysgICAgICAgICAgICAgICAgICAg ICA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZycG1tZF9yZXBvcyk7CisgCistOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiBvcmlnaW5fdG9fdHJlZWZpbGUoOjpy cG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZik7CisrOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlPiBvcmlnaW5fdG9fdHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4OjpHS2V5 RmlsZSBjb25zdCAma2YpOworIAorLTo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSAqdHJlZWZpbGVf dG9fb3JpZ2luKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYpOworKzo6cnBtb3N0 cmVlY3h4OjpHS2V5RmlsZSAqdHJlZWZpbGVfdG9fb3JpZ2luICg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnRmKTsKKyAKKy12b2lkIG9yaWdpbl92YWxpZGF0ZV9yb3VuZHRyaXAoOjpy cG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZikgbm9leGNlcHQ7Cisrdm9pZCBvcmlnaW5f dmFsaWRhdGVfcm91bmR0cmlwICg6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmKSBu b2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OlN0cmluZyBjYWNoZV9icmFuY2hfdG9fbmV2cmEoOjpydXN0 OjpTdHIgbmV2cmEpIG5vZXhjZXB0OworKzo6cnVzdDo6U3RyaW5nIGNhY2hlX2JyYW5jaF90b19u ZXZyYSAoOjpydXN0OjpTdHIgbmV2cmEpIG5vZXhjZXB0OworIH0gLy8gbmFtZXNwYWNlIHJwbW9z dHJlZWN4eAorIAorICNpZmRlZiBfX2NsYW5nX18KK2RpZmYgLS1naXQgYS9ydXN0L3NyYy9jb21w b3NlLnJzIGIvcnVzdC9zcmMvY29tcG9zZS5ycworaW5kZXggMTA4MzU0MGUxNy4uN2YxMDg4MWE1 OSAxMDA2NDQKKy0tLSBhL3J1c3Qvc3JjL2NvbXBvc2UucnMKKysrKyBiL3J1c3Qvc3JjL2NvbXBv c2UucnMKK0BAIC0zMyw3ICszMyw3IEBAIHVzZSBjcmF0ZTo6Y21kdXRpbHM6OkNvbW1hbmRSdW5F eHQ7CisgdXNlIGNyYXRlOjpjb250YWluZXJzX3N0b3JhZ2U6Ok1vdW50OworIHVzZSBjcmF0ZTo6 Y3h4cnN1dGlsOjp7Q3h4UmVzdWx0LCBGRklHT2JqZWN0V3JhcHBlcn07CisgdXNlIGNyYXRlOjpp c29sYXRpb246OnNlbGZfY29tbWFuZDsKKy11c2UgY3JhdGU6OntSUE1PU1RSRUVfUlBNREJfTE9D QVRJT04sIFJQTU9TVFJFRV9TWVNJTUFHRV9SUE1EQn07CisrdXNlIGNyYXRlOjp7UkVQT1NfRElS UywgUlBNT1NUUkVFX1JQTURCX0xPQ0FUSU9OLCBSUE1PU1RSRUVfU1lTSU1BR0VfUlBNREJ9Owor IAorIGNvbnN0IE9TVFJFRV9DT01QT1NFRlNfRElHRVNUX1YwX0tFWTogJnN0ciA9ICJvc3RyZWUu Y29tcG9zZWZzLmRpZ2VzdC52MCI7CisgCitAQCAtNjQwLDIzICs2NDAsMjQgQEAgZm4gbXV0YXRl X3NvdXJjZV9yb290KGV4ZWNfcm9vdDogJkRpciwgc291cmNlX3Jvb3Q6ICZVdGY4UGF0aCkgLT4g UmVzdWx0PCgpPiB7CisgICAgICAgICBwcmludGxuISgiU3ltbGlua2VkIHtSUE1PU1RSRUVfUlBN REJfTE9DQVRJT059IGluIHNvdXJjZSByb290Iik7CisgICAgIH0KKyAKKy0gICAgaWYgIXNvdXJj ZV9yb290X2Rpci50cnlfZXhpc3RzKCJldGMiKT8geworLSAgICAgICAgcmV0dXJuIE9rKCgpKTsK Ky0gICAgfQorLSAgICBpZiBsZXQgU29tZShyZXBvcykgPSBzb3VyY2Vfcm9vdF9kaXIKKy0gICAg ICAgIC5vcGVuX2Rpcl9vcHRpb25hbCgiZXRjL3l1bS5yZXBvcy5kIikKKy0gICAgICAgIC5jb250 ZXh0KCJPcGVuaW5nIHl1bS5yZXBvcy5kIik/CistICAgIHsKKy0gICAgICAgIGZvciBlbnQgaW4g cmVwb3MuZW50cmllc191dGY4KCk/IHsKKy0gICAgICAgICAgICBsZXQgZW50ID0gZW50PzsKKy0g ICAgICAgICAgICBpZiAhZW50LmZpbGVfdHlwZSgpPy5pc19maWxlKCkgeworLSAgICAgICAgICAg ICAgICBjb250aW51ZTsKKysgICAgLy8gU2NhbiBhbGwgcmVwbyBkaXJlY3RvcnkgbG9jYXRpb25z IGZvciAucmVwbyBmaWxlcyB0aGF0IG1heSBuZWVkCisrICAgIC8vIEdQRyBrZXkgcGF0aCByZXdy aXRpbmcuCisrICAgIGZvciByZXBvc19kaXIgaW4gUkVQT1NfRElSUyB7CisrICAgICAgICBpZiBs ZXQgU29tZShyZXBvcykgPSBzb3VyY2Vfcm9vdF9kaXIKKysgICAgICAgICAgICAub3Blbl9kaXJf b3B0aW9uYWwocmVwb3NfZGlyKQorKyAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0 ISgiT3BlbmluZyB7cmVwb3NfZGlyfSIpKT8KKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3Ig ZW50IGluIHJlcG9zLmVudHJpZXNfdXRmOCgpPyB7CisrICAgICAgICAgICAgICAgIGxldCBlbnQg PSBlbnQ/OworKyAgICAgICAgICAgICAgICBpZiAhZW50LmZpbGVfdHlwZSgpPy5pc19maWxlKCkg eworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgIH0KKysg ICAgICAgICAgICAgICAgbGV0IG5hbWU6IFV0ZjhQYXRoQnVmID0gZW50LmZpbGVfbmFtZSgpPy5p bnRvKCk7CisrICAgICAgICAgICAgICAgIGxldCBTb21lKCJyZXBvIikgPSBuYW1lLmV4dGVuc2lv bigpIGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAg ICAgIH07CisrICAgICAgICAgICAgICAgIG11dGF0ZV9vbmVfZG5mX3JlcG8oZXhlY19yb290LCBz b3VyY2Vfcm9vdCwgJnJlcG9zLCAmbmFtZSk/OworICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICBsZXQgbmFtZTogVXRmOFBhdGhCdWYgPSBlbnQuZmlsZV9uYW1lKCk/LmludG8oKTsKKy0gICAg ICAgICAgICBsZXQgU29tZSgicmVwbyIpID0gbmFtZS5leHRlbnNpb24oKSBlbHNlIHsKKy0gICAg ICAgICAgICAgICAgY29udGludWU7CistICAgICAgICAgICAgfTsKKy0gICAgICAgICAgICBtdXRh dGVfb25lX2RuZl9yZXBvKGV4ZWNfcm9vdCwgc291cmNlX3Jvb3QsICZyZXBvcywgJm5hbWUpPzsK KyAgICAgICAgIH0KKyAgICAgfQorIAorQEAgLTE2ODQsNiArMTY4NSwyOSBAQCBtb2QgdGVzdHMg eworICAgICAiI307CisgICAgICAgICBzaW1pbGFyX2Fzc2VydHM6OmFzc2VydF9lcSEoZXhwZWN0 ZWQsIGZvdW5kX3JlcG9zKTsKKyAKKysgICAgICAgIC8vIEFsc28gdGVzdCB3aXRoIHJlcG9zIGlu IHRoZSBuZXcgL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQgbG9jYXRpb24KKysgICAgICAgIHJvb3Rm cy5jcmVhdGVfZGlyX2FsbCgicmVwb3MvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCIpPzsKKysgICAg ICAgIHJvb3Rmcy5jcmVhdGVfZGlyX2FsbCgicmVwb3MvdXNyL3NoYXJlL3BraS9ycG0tZ3BnIik/ OworKyAgICAgICAgcm9vdGZzLndyaXRlKCJyZXBvcy91c3Ivc2hhcmUvcGtpL3JwbS1ncGcvcmVw bzUua2V5IiwgInJlcG81IGdwZyBrZXkiKT87CisrICAgICAgICBsZXQgZG5mNV9yZXBvX2NvbnRl bnQgPSBpbmRvYzo6aW5kb2MhIHsgciMiCisrICAgICAgICBbcmVwbzVdCisrICAgICAgICBiYXNl dXJsPWJsYWgKKysgICAgICAgIGdwZ2tleT1maWxlOi8vL3Vzci9zaGFyZS9wa2kvcnBtLWdwZy9y ZXBvNS5rZXkKKysgICAgIiN9OworKyAgICAgICAgcm9vdGZzLndyaXRlKAorKyAgICAgICAgICAg ICJyZXBvcy91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kL3Rlc3QtZG5mNS5yZXBvIiwKKysgICAgICAg ICAgICBkbmY1X3JlcG9fY29udGVudCwKKysgICAgICAgICk/OworKyAgICAgICAgbXV0YXRlX3Nv dXJjZV9yb290KHJvb3RmcywgInJlcG9zIi5pbnRvKCkpLnVud3JhcCgpOworKyAgICAgICAgbGV0 IGZvdW5kX2RuZjVfcmVwb3MgPQorKyAgICAgICAgICAgIHJvb3Rmcy5yZWFkX3RvX3N0cmluZygi cmVwb3MvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZC90ZXN0LWRuZjUucmVwbyIpPzsKKysgICAgICAg IGxldCBleHBlY3RlZF9kbmY1ID0gaW5kb2M6OmluZG9jISB7IHIjIgorKyAgICAgICAgW3JlcG81 XQorKyAgICAgICAgYmFzZXVybD1ibGFoCisrICAgICAgICBncGdrZXk9ZmlsZTovLy9yZXBvcy91 c3Ivc2hhcmUvcGtpL3JwbS1ncGcvcmVwbzUua2V5CisrICAgICIjfTsKKysgICAgICAgIHNpbWls YXJfYXNzZXJ0czo6YXNzZXJ0X2VxIShleHBlY3RlZF9kbmY1LCBmb3VuZF9kbmY1X3JlcG9zKTsK KysKKyAgICAgICAgIE9rKCgpKQorICAgICB9CisgfQorZGlmZiAtLWdpdCBhL3J1c3Qvc3JjL2Nv bXBvc2Vwb3N0LnJzIGIvcnVzdC9zcmMvY29tcG9zZXBvc3QucnMKK2luZGV4IGMxZmViNzM3ODku LjFkOGVkM2EyZDcgMTAwNjQ0CistLS0gYS9ydXN0L3NyYy9jb21wb3NlcG9zdC5ycworKysrIGIv cnVzdC9zcmMvY29tcG9zZXBvc3QucnMKK0BAIC01MCw2ICs1MCwyMyBAQCBwdWIoY3JhdGUpIGNv bnN0IFJQTU9TVFJFRV9SUE1EQl9MT0NBVElPTjogJnN0ciA9ICJ1c3Ivc2hhcmUvcnBtIjsKKyBw dWIoY3JhdGUpIGNvbnN0IFJQTU9TVFJFRV9TWVNJTUFHRV9SUE1EQjogJnN0ciA9ICJ1c3IvbGli L3N5c2ltYWdlL3JwbSI7CisgcHViKGNyYXRlKSBjb25zdCBUUkFESVRJT05BTF9SUE1EQl9MT0NB VElPTjogJnN0ciA9ICJ2YXIvbGliL3JwbSI7CisgCisrLy8vIFJlcG9zaXRvcnkgY29uZmlndXJh dGlvbiBkaXJlY3Rvcmllcy4gVGhlIC9ldGMgcGF0aCBpcyBmb3IgdXNlci1hZGRlZAorKy8vLyBj b25maWd1cmF0aW9uOyB0aGUgL3VzciBwYXRoIGlzIGZvciBkaXN0cmlidXRpb24tcHJvdmlkZWQg Y29uZmlndXJhdGlvbgorKy8vLyAoaW50cm9kdWNlZCB3aXRoIERORjUgaW4gRmVkb3JhIDQ1KS4K KytwdWIoY3JhdGUpIGNvbnN0IFlVTV9SRVBPU19EOiAmc3RyID0gImV0Yy95dW0ucmVwb3MuZCI7 CisrcHViKGNyYXRlKSBjb25zdCBETkY1X1JFUE9TX0Q6ICZzdHIgPSAidXNyL3NoYXJlL2RuZjUv cmVwb3MuZCI7CisrcHViKGNyYXRlKSBjb25zdCBSRVBPU19ESVJTOiAmWyZzdHJdID0gJltZVU1f UkVQT1NfRCwgRE5GNV9SRVBPU19EXTsKKysKKysvLy8gQWJzb2x1dGUtcGF0aCB2ZXJzaW9ucyBv ZiB0aGUgYWJvdmUsIGZvciB1c2UgaW4gY29udGV4dHMgdGhhdCBuZWVkIHRoZW0uCisrcHViKGNy YXRlKSBjb25zdCBBQlNfWVVNX1JFUE9TX0Q6ICZzdHIgPSAiL2V0Yy95dW0ucmVwb3MuZCI7Cisr cHViKGNyYXRlKSBjb25zdCBBQlNfRE5GNV9SRVBPU19EOiAmc3RyID0gIi91c3Ivc2hhcmUvZG5m NS9yZXBvcy5kIjsKKysKKysvLy8gUmV0dXJuIHRoZSBsaXN0IG9mIGFic29sdXRlIHJlcG8gY29u ZmlndXJhdGlvbiBkaXJlY3RvcmllcyB0byBzZWFyY2gsCisrLy8vIGV4cG9zZWQgdG8gQysrIHZp YSBjeHggYnJpZGdlLgorK3B1YihjcmF0ZSkgZm4gZ2V0X3JlcG9zX2RpcnMoKSAtPiBWZWM8U3Ry aW5nPiB7CisrICAgIHZlYyFbQUJTX1lVTV9SRVBPU19ELnRvX3N0cmluZygpLCBBQlNfRE5GNV9S RVBPU19ELnRvX3N0cmluZygpXQorK30KKysKKyBjb25zdCBTRF9MT0NBTF9GU19UQVJHRVRfUkVR VUlSRVM6ICZzdHIgPSAidXNyL2xpYi9zeXN0ZW1kL3N5c3RlbS9sb2NhbC1mcy50YXJnZXQucmVx dWlyZXMiOworIAorICNbY29udGV4dCgiTW92aW5nIHt9IiwgbmFtZSldCitkaWZmIC0tZ2l0IGEv cnVzdC9zcmMvY291bnRtZS9yZXBvLnJzIGIvcnVzdC9zcmMvY291bnRtZS9yZXBvLnJzCitpbmRl eCA3NDNkNzVjNjFlLi45ZjlmYWM5Njg4IDEwMDY0NAorLS0tIGEvcnVzdC9zcmMvY291bnRtZS9y ZXBvLnJzCisrKysgYi9ydXN0L3NyYy9jb3VudG1lL3JlcG8ucnMKK0BAIC0zLDE0ICszLDEyIEBA CisgdXNlIGFueWhvdzo6e0NvbnRleHQsIFJlc3VsdH07CisgdXNlIGZuX2Vycm9yX2NvbnRleHQ6 OmNvbnRleHQ7CisgdXNlIHN0ZDo6ZnM7CistdXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKKyt1c2Ug c3RkOjpwYXRoOjp7UGF0aCwgUGF0aEJ1Zn07CisgCisgdXNlIGluaTo6SW5pOworIAorIHVzZSBj cmF0ZTo6dXRpbHM7CistCistLy8vIExvY2F0aW9uIGZvciBETkYgcmVwb3NpdG9yaWVzIGNvbmZp Z3VyYXRpb24KKy1wdWIgY29uc3QgWVVNX1JFUE9TX0Q6ICZzdHIgPSAiL2V0Yy95dW0ucmVwb3Mu ZCI7CisrdXNlIGNyYXRlOjp7QUJTX0RORjVfUkVQT1NfRCwgQUJTX1lVTV9SRVBPU19EfTsKKyAK KyAvLy8gUmVwb3NpdG9yeSBjb25maWd1cmF0aW9uCisgLy8vIE5vdCBleGhhdXN0aXZlIGFuZCBv bmx5IGluY2x1ZGVzIHRoZSBvcHRpb25zIG5lZWRlZCBmb3IgQ291bnQgTWUgc3VwcG9ydC4KK0BA IC0yOCwxMiArMjYsMTcgQEAgZm4gaXNfdHJ1ZShzdHJpbmc6ICZzdHIpIC0+IGJvb2wgeworICAg ICBzdHJpbmcgPT0gIjEiIHx8IHN0cmluZyA9PSAieWVzIiB8fCBzdHJpbmcgPT0gInRydWUiIHx8 IHN0cmluZyA9PSAib24iCisgfQorIAorLS8vLyBSZWFkIGFsbCByZXBvc2l0b3J5IGNvbmZpZ3Vy YXRpb24gZmlsZXMgZnJvbSB0aGUgZGVmYXVsdCBsb2NhdGlvbgorLXB1YiBmbiBhbGwoKSAtPiBS ZXN1bHQ8VmVjPFJlcG8+PiB7CistICAgIGxldCBjb25maWdzID0gZnM6OnJlYWRfZGlyKFlVTV9S RVBPU19EKQorLSAgICAgICAgLndpdGhfY29udGV4dCh8fCBmb3JtYXQhKCJDb3VsZCBub3QgbGlz dCBmaWxlcyBpbjoge30iLCBZVU1fUkVQT1NfRCkpPzsKKy0gICAgbGV0IG11dCByZXBvcyA9IFZl Yzo6bmV3KCk7CistICAgIGZvciBjIGluIGNvbmZpZ3MgeworKy8vLyBSZWFkIHJlcG8gY29uZmln IGZpbGVzIGZyb20gYSBzaW5nbGUgZGlyZWN0b3J5LCBhcHBlbmRpbmcgdG8gYHJlcG9zYC4KKysv Ly8gU2lsZW50bHkgc2tpcHMgdGhlIGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKytm biBjb2xsZWN0X3JlcG9zX2Zyb21fZGlyKGRpcjogJlBhdGgsIHJlcG9zOiAmbXV0IFZlYzxSZXBv PikgLT4gUmVzdWx0PCgpPiB7CisrICAgIGxldCBlbnRyaWVzID0gbWF0Y2ggZnM6OnJlYWRfZGly KGRpcikgeworKyAgICAgICAgT2soZW50cmllcykgPT4gZW50cmllcywKKysgICAgICAgIEVycihl KSBpZiBlLmtpbmQoKSA9PSBzdGQ6OmlvOjpFcnJvcktpbmQ6Ok5vdEZvdW5kID0+IHJldHVybiBP aygoKSksCisrICAgICAgICBFcnIoZSkgPT4geworKyAgICAgICAgICAgIHJldHVybiBFcnIoZSku d2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIkNvdWxkIG5vdCBsaXN0IGZpbGVzIGluOiB7fSIsIGRp ci5kaXNwbGF5KCkpKQorKyAgICAgICAgfQorKyAgICB9OworKyAgICBmb3IgYyBpbiBlbnRyaWVz IHsKKyAgICAgICAgIGxldCBwYXRoID0gYz8ucGF0aCgpOworICAgICAgICAgbWF0Y2ggcGFyc2Vf cmVwb19maWxlKCZwYXRoKSB7CisgICAgICAgICAgICAgRXJyKGUpID0+IHsKK0BAIC00Niw2ICs0 OSwxNSBAQCBwdWIgZm4gYWxsKCkgLT4gUmVzdWx0PFZlYzxSZXBvPj4geworICAgICAgICAgICAg IE9rKG11dCByKSA9PiByZXBvcy5hcHBlbmQoJm11dCByKSwKKyAgICAgICAgIH0KKyAgICAgfQor KyAgICBPaygoKSkKKyt9CisrCisrLy8vIFJlYWQgYWxsIHJlcG9zaXRvcnkgY29uZmlndXJhdGlv biBmaWxlcyBmcm9tIGJvdGggcmVwbyBjb25maWcgZGlyZWN0b3JpZXMKKytwdWIgZm4gYWxsKCkg LT4gUmVzdWx0PFZlYzxSZXBvPj4geworKyAgICBsZXQgbXV0IHJlcG9zID0gVmVjOjpuZXcoKTsK KysgICAgZm9yIGRpciBpbiAmW0FCU19ZVU1fUkVQT1NfRCwgQUJTX0RORjVfUkVQT1NfRF0gewor KyAgICAgICAgY29sbGVjdF9yZXBvc19mcm9tX2RpcihQYXRoOjpuZXcoZGlyKSwgJm11dCByZXBv cyk/OworKyAgICB9CisgICAgIE9rKHJlcG9zKQorIH0KKyAKK2RpZmYgLS1naXQgYS9ydXN0L3Ny Yy9saWIucnMgYi9ydXN0L3NyYy9saWIucnMKK2luZGV4IDMxMzgzNjc3YTguLjAzNzgyNjk3NjMg MTAwNjQ0CistLS0gYS9ydXN0L3NyYy9saWIucnMKKysrKyBiL3J1c3Qvc3JjL2xpYi5ycworQEAg LTcwMSw2ICs3MDEsMTMgQEAgcHViIG1vZCBmZmkgeworICAgICAgICAgZm4gZ2V0X3BhY2thZ2Vz KCZzZWxmKSAtPiBWZWM8U3RyaW5nPjsKKyAgICAgfQorIAorKyAgICAvLyBjb21wb3NlcG9zdC5y cworKyAgICBleHRlcm4gIlJ1c3QiIHsKKysgICAgICAgIC8vLyBSZXR1cm4gdGhlIGxpc3Qgb2Yg cmVwbyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAorKyAgICAgICAgLy8vIChl LmcuIFsiL2V0Yy95dW0ucmVwb3MuZCIsICIvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCJdKS4KKysg ICAgICAgIGZuIGdldF9yZXBvc19kaXJzKCkgLT4gVmVjPFN0cmluZz47CisrICAgIH0KKysKKyAg ICAgLy8gdXRpbHMucnMKKyAgICAgZXh0ZXJuICJSdXN0IiB7CisgICAgICAgICBmbiB2YXJzdWJz dGl0dXRlKHM6ICZzdHIsIHZhcnM6ICZWZWM8U3RyaW5nTWFwcGluZz4pIC0+IFJlc3VsdDxTdHJp bmc+OworZGlmZiAtLWdpdCBhL3NyYy9kYWVtb24vcnBtb3N0cmVlLXN5c3Jvb3QtdXBncmFkZXIu aCBiL3NyYy9kYWVtb24vcnBtb3N0cmVlLXN5c3Jvb3QtdXBncmFkZXIuaAoraW5kZXggYjhmNjAy NjhkZS4uZTU2NDYwNGUwNSAxMDA2NDQKKy0tLSBhL3NyYy9kYWVtb24vcnBtb3N0cmVlLXN5c3Jv b3QtdXBncmFkZXIuaAorKysrIGIvc3JjL2RhZW1vbi9ycG1vc3RyZWUtc3lzcm9vdC11cGdyYWRl ci5oCitAQCAtNjUsNyArNjUsNyBAQCB0eXBlZGVmIGVudW0KKyAKKyAvKiBfTk9ORSBtZWFucyB3 ZSdyZSBkb2luZyBwdXJlIG9zdHJlZSwgbm8gY2xpZW50LXNpZGUgY29tcHV0YXRpb24uCisgICog X0xPQ0FMIGlzIGp1c3QgZS5nLiBycG0tb3N0cmVlIGluaXRyYW1mcworLSAqIF9SUE1NRF9SRVBP UyBpcyB3aGVyZSB3ZSdyZSBkb3dubG9hZGluZyBkYXRhIGZyb20gL2V0Yy95dW0ucmVwb3MuZAor KyAqIF9SUE1NRF9SRVBPUyBpcyB3aGVyZSB3ZSdyZSBkb3dubG9hZGluZyBkYXRhIGZyb20geXVt LnJlcG9zLmQgLyBkbmY1IHJlcG9zLmQKKyAgKi8KKyB0eXBlZGVmIGVudW0KKyB7CitkaWZmIC0t Z2l0IGEvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuY3h4IGIvc3JjL2xpYnByaXYvcnBtb3N0 cmVlLWNvcmUuY3h4CitpbmRleCBlOTQ0ZDkwOTE2Li40NTVjMmQwYWE4IDEwMDY0NAorLS0tIGEv c3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuY3h4CisrKysgYi9zcmMvbGlicHJpdi9ycG1vc3Ry ZWUtY29yZS5jeHgKK0BAIC0xODYsNiArMTg2LDI1IEBAIHN0YXRlX2FjdGlvbl9jaGFuZ2VkX2Ni IChEbmZTdGF0ZSAqc3RhdGUsIERuZlN0YXRlQWN0aW9uIGFjdGlvbiwgY29uc3QgZ2NoYXIgKmFj CisgICAgIH0KKyB9CisgCisrLyogQnVpbGQgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgcmVw byBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzLAorKyAqIHVzaW5nIHRoZSBjYW5vbmljYWwgbGlz dCBmcm9tIFJ1c3QuIElmIEByb290IGlzIG5vbi1OVUxMLCBlYWNoCisrICogcGF0aCBpcyBwcmVm aXhlZCB3aXRoIGl0IChmb3IgZGVwbG95bWVudC9zb3VyY2Ugcm9vdCBjb250ZXh0cykuCisrICov Cisrc3RhdGljIEdTdHJ2CisrYnVpbGRfcmVwb3NfZGlycyAoY29uc3QgY2hhciAqcm9vdCkKKyt7 CisrICBhdXRvIGRpcnMgPSBycG1vc3RyZWVjeHg6OmdldF9yZXBvc19kaXJzICgpOworKyAgYXV0 byByZXQgPSBnX25ldzAgKGdjaGFyICosIGRpcnMuc2l6ZSAoKSArIDEpOworKyAgZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBkaXJzLnNpemUgKCk7IGkrKykKKysgICAgeworKyAgICAgIGlmIChyb290 KQorKyAgICAgICAgcmV0W2ldID0gZ19idWlsZF9maWxlbmFtZSAocm9vdCwgZGlyc1tpXS5jX3N0 ciAoKSwgTlVMTCk7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0W2ldID0gZ19zdHJkdXAgKGRp cnNbaV0uY19zdHIgKCkpOworKyAgICB9CisrICByZXR1cm4gcmV0OworK30KKysKKyAvKiBMb3cg bGV2ZWwgQVBJIHRvIGNyZWF0ZSBhIGNvbnRleHQuICBBdm9pZCB0aGlzIGluIHByZWZlcmVuY2UK KyAgKiB0byBjcmVhdGluZyBhIGNsaWVudCBvciBjb21wb3NlIGNvbnRleHQgdW5sZXNzIG5lY2Vz c2FyeS4KKyAgKi8KK0BAIC0yMDYsNyArMjI1LDEzIEBAIHJwbW9zdHJlZV9jb250ZXh0X25ld19i YXNlIChPc3RyZWVSZXBvICpyZXBvKQorICAgc2VsZi0+ZG5mY3R4ID0gZG5mX2NvbnRleHRfbmV3 ICgpOworICAgZG5mX2NvbnRleHRfc2V0X2h0dHBfcHJveHkgKHNlbGYtPmRuZmN0eCwgZ19nZXRl bnYgKCJodHRwX3Byb3h5IikpOworIAorLSAgZG5mX2NvbnRleHRfc2V0X3JlcG9fZGlyIChzZWxm LT5kbmZjdHgsICIvZXRjL3l1bS5yZXBvcy5kIik7CisrICAvKiBTZXQgcmVwbyBjb25maWd1cmF0 aW9uIGRpcmVjdG9yaWVzIHVzaW5nIHRoZSBjYW5vbmljYWwgbGlzdCBmcm9tIFJ1c3QuCisrICAg KiBUaGUgcmVwbyBsb2FkZXIgZ3JhY2VmdWxseSBza2lwcyBub24tZXhpc3RlbnQgZGlyZWN0b3Jp ZXMuCisrICAgKi8KKysgIHsKKysgICAgZ19hdXRvIChHU3RydikgcmVwb3NfZGlycyA9IGJ1aWxk X3JlcG9zX2RpcnMgKE5VTEwpOworKyAgICBkbmZfY29udGV4dF9zZXRfcmVwb3NfZGlyIChzZWxm LT5kbmZjdHgsIChjb25zdCBnY2hhciAqY29uc3QgKilyZXBvc19kaXJzKTsKKysgIH0KKyAgIGRu Zl9jb250ZXh0X3NldF9jYWNoZV9kaXIgKHNlbGYtPmRuZmN0eCwgUlBNT1NUUkVFX0NPUkVfQ0FD SEVESVIgUlBNT1NUUkVFX0RJUl9DQUNIRV9SRVBPTUQpOworICAgZG5mX2NvbnRleHRfc2V0X3Nv bHZfZGlyIChzZWxmLT5kbmZjdHgsIFJQTU9TVFJFRV9DT1JFX0NBQ0hFRElSIFJQTU9TVFJFRV9E SVJfQ0FDSEVfU09MVik7CisgICBkbmZfY29udGV4dF9zZXRfbG9ja19kaXIgKHNlbGYtPmRuZmN0 eCwgIi9ydW4vcnBtLW9zdHJlZS8iIFJQTU9TVFJFRV9ESVJfTE9DSyk7CitAQCAtMzU3LDE2ICsz ODIsMjYgQEAgcnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9zX2RpciAoUnBtT3N0cmVlQ29udGV4 dCAqc2VsZiwgY29uc3QgY2hhciAqcmVwb3NkaXIpCisgICBnX2RlYnVnICgic2V0IG92ZXJyaWRl IGZvciByZXBvcyBkaXIiKTsKKyB9CisgCisrLy8gU2FtZSBhcyBhYm92ZSBidXQgdXNpbmcgdGhl IG11bHRpLWRpcmVjdG9yeSB2YXJpYW50IHRvIGFsbG93IHNldHRpbmcKKysvLyBtdWx0aXBsZSBy ZXBvcyBkaXJzIChlLmcuIGJvdGggL2V0Yy95dW0ucmVwb3MuZCBhbmQgL3Vzci9zaGFyZS9kbmY1 L3JlcG9zLmQpLgorK3ZvaWQKKytycG1vc3RyZWVfY29udGV4dF9zZXRfcmVwb3NfZGlycyAoUnBt T3N0cmVlQ29udGV4dCAqc2VsZiwgY29uc3QgY2hhciAqY29uc3QgKnJlcG9zZGlycykKKyt7Cisr ICBkbmZfY29udGV4dF9zZXRfcmVwb3NfZGlyIChzZWxmLT5kbmZjdHgsIHJlcG9zZGlycyk7Cisr ICBzZWxmLT5yZXBvc19kaXJfY29uZmlndXJlZCA9IFRSVUU7CisrICBnX2RlYnVnICgic2V0IG92 ZXJyaWRlIGZvciByZXBvcyBkaXJzIChtdWx0aSkiKTsKKyt9CisrCisgLyogUGljayB1cCByZXBv cyBkaXIgYW5kIHBhc3N3ZCBmcm9tIEBjZmdfZGVwbG95bWVudC4gKi8KKyB2b2lkCisgcnBtb3N0 cmVlX2NvbnRleHRfY29uZmlndXJlX2Zyb21fZGVwbG95bWVudCAoUnBtT3N0cmVlQ29udGV4dCAq c2VsZiwgT3N0cmVlU3lzcm9vdCAqc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPc3RyZWVEZXBsb3ltZW50ICpjZmdfZGVwbG95bWVudCkKKyB7 CisgICBnX2F1dG9mcmVlIGNoYXIgKmNmZ19kZXBsb3ltZW50X3Jvb3QgPSBycG1vc3RyZWVfZ2V0 X2RlcGxveW1lbnRfcm9vdCAoc3lzcm9vdCwgY2ZnX2RlcGxveW1lbnQpOworLSAgZ19hdXRvZnJl ZSBjaGFyICpyZXBvc2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKGNmZ19kZXBsb3ltZW50X3Jvb3Qs ICJldGMveXVtLnJlcG9zLmQiLCBOVUxMKTsKKyAKKy0gIC8qIHBvaW50IGxpYmhpZiB0byB0aGUg eXVtLnJlcG9zLmQgYW5kIG9zLXJlbGVhc2Ugb2YgdGhlIG1lcmdlIGRlcGxveW1lbnQgKi8KKy0g IHJwbW9zdHJlZV9jb250ZXh0X3NldF9yZXBvc19kaXIgKHNlbGYsIHJlcG9zZGlyKTsKKysgIC8q IFBvaW50IGxpYmRuZiB0byByZXBvIGNvbmZpZyBkaXJzIHVuZGVyIHRoZSBtZXJnZSBkZXBsb3lt ZW50LiAqLworKyAgZ19hdXRvIChHU3RydikgcmVwb3NfZGlycyA9IGJ1aWxkX3JlcG9zX2RpcnMg KGNmZ19kZXBsb3ltZW50X3Jvb3QpOworKyAgcnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9zX2Rp cnMgKHNlbGYsIChjb25zdCBnY2hhciAqY29uc3QgKilyZXBvc19kaXJzKTsKKyAKKyAgIC8qIHBv aW50IHRoZSBjb3JlIHRvIHRoZSBwYXNzd2QgJiBncm91cCBvZiB0aGUgbWVyZ2UgZGVwbG95bWVu dCAqLworICAgZ19hc3NlcnQgKCFzZWxmLT5wYXNzd2RfZGlyKTsKK0BAIC02OTQsOSArNzI5LDkg QEAgcnBtb3N0cmVlX2NvbnRleHRfc2V0dXAgKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYsIGNvbnN0 IGNoYXIgKmluc3RhbGxfcm9vdCwgY29uc3QKKyAgICAgICAvLyBvdmVycm9kZSB0aGUgcmVwb3Mg ZGlyLgorICAgICAgIGlmICghc2VsZi0+cmVwb3NfZGlyX2NvbmZpZ3VyZWQpCisgICAgICAgICB7 CistICAgICAgICAgIGdfYXV0b2ZyZWUgY2hhciAqc291cmNlX3JlcG9zID0gZ19idWlsZF9maWxl bmFtZSAoc291cmNlX3Jvb3QsICJldGMveXVtLnJlcG9zLmQiLCBOVUxMKTsKKy0gICAgICAgICAg ZG5mX2NvbnRleHRfc2V0X3JlcG9fZGlyIChzZWxmLT5kbmZjdHgsIHNvdXJjZV9yZXBvcyk7Cist ICAgICAgICAgIGdfZGVidWcgKCJTZXQgcmVwb3MgZGlyIGZyb20gc291cmNlIHJvb3QiKTsKKysg ICAgICAgICAgZ19hdXRvIChHU3RydikgcmVwb3NfZGlycyA9IGJ1aWxkX3JlcG9zX2RpcnMgKHNv dXJjZV9yb290KTsKKysgICAgICAgICAgZG5mX2NvbnRleHRfc2V0X3JlcG9zX2RpciAoc2VsZi0+ ZG5mY3R4LCAoY29uc3QgZ2NoYXIgKmNvbnN0ICopcmVwb3NfZGlycyk7CisrICAgICAgICAgIGdf ZGVidWcgKCJTZXQgcmVwb3MgZGlycyBmcm9tIHNvdXJjZSByb290Iik7CisgICAgICAgICB9Cisg ICAgIH0KKyAKK0BAIC0yMzcwLDggKzI0MDUsMTAgQEAgcnBtb3N0cmVlX2ZpbmRfYW5kX2Rvd25s b2FkX3BhY2thZ2VzIChjb25zdCBjaGFyICpjb25zdCAqcGFja2FnZXMsIGNvbnN0IGNoYXIgKnMK KyAgIGlmICghcnBtb3N0cmVlX2NvbnRleHRfc2V0dXAgKGN0eCwgTlVMTCwgc291cmNlX3Jvb3Qs IGNhbmNlbGxhYmxlLCBlcnJvcikpCisgICAgIHJldHVybiBnbG54X3ByZWZpeF9lcnJvciAoZXJy b3IsICJTZXR0aW5nIHVwIGRuZiBjb250ZXh0Iik7CisgCistICBnX2F1dG9mcmVlIGNoYXIgKnJl cG9zZGlyID0gZ19idWlsZF9maWxlbmFtZSAocmVwb19yb290ID86IHNvdXJjZV9yb290LCAiZXRj L3l1bS5yZXBvcy5kIiwgTlVMTCk7CistICBkbmZfY29udGV4dF9zZXRfcmVwb19kaXIgKGN0eC0+ ZG5mY3R4LCByZXBvc2Rpcik7CisrICB7CisrICAgIGdfYXV0byAoR1N0cnYpIHJlcG9zX2RpcnMg PSBidWlsZF9yZXBvc19kaXJzIChyZXBvX3Jvb3QgPzogc291cmNlX3Jvb3QpOworKyAgICBkbmZf Y29udGV4dF9zZXRfcmVwb3NfZGlyIChjdHgtPmRuZmN0eCwgKGNvbnN0IGdjaGFyICpjb25zdCAq KXJlcG9zX2RpcnMpOworKyAgfQorIAorICAgYXV0byBmbGFncyA9IChEbmZDb250ZXh0U2V0dXBT YWNrRmxhZ3MpKERORl9DT05URVhUX1NFVFVQX1NBQ0tfRkxBR19TS0lQX1JQTURCCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBETkZfQ09OVEVYVF9TRVRVUF9T QUNLX0ZMQUdfU0tJUF9GSUxFTElTVFMpOworZGlmZiAtLWdpdCBhL3NyYy9saWJwcml2L3JwbW9z dHJlZS1jb3JlLmggYi9zcmMvbGlicHJpdi9ycG1vc3RyZWUtY29yZS5oCitpbmRleCA3MmVjZWNi NWFkLi5kNzQzMDBjZGExIDEwMDY0NAorLS0tIGEvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUu aAorKysrIGIvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuaAorQEAgLTExNCw2ICsxMTQsNyBA QCB2b2lkIHJwbW9zdHJlZV9jb250ZXh0X2Rpc2FibGVfc2VsaW51eCAoUnBtT3N0cmVlQ29udGV4 dCAqc2VsZik7CisgY29uc3QgY2hhciAqcnBtb3N0cmVlX2NvbnRleHRfZ2V0X3JlZiAoUnBtT3N0 cmVlQ29udGV4dCAqc2VsZik7CisgCisgdm9pZCBycG1vc3RyZWVfY29udGV4dF9zZXRfcmVwb3Nf ZGlyIChScG1Pc3RyZWVDb250ZXh0ICpzZWxmLCBjb25zdCBjaGFyICpyZXBvc2Rpcik7Cisrdm9p ZCBycG1vc3RyZWVfY29udGV4dF9zZXRfcmVwb3NfZGlycyAoUnBtT3N0cmVlQ29udGV4dCAqc2Vs ZiwgY29uc3QgY2hhciAqY29uc3QgKnJlcG9zZGlycyk7CisgCisgdm9pZCBycG1vc3RyZWVfY29u dGV4dF9zZXRfcmVwb3MgKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYsIE9zdHJlZVJlcG8gKmJhc2Vf cmVwbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3N0cmVlUmVwbyAqcGtn Y2FjaGVfcmVwbyk7CitkaWZmIC0tZ2l0IGEvdGVzdHMvY29tbW9uL2xpYnRlc3RyZXBvcy5zaCBi L3Rlc3RzL2NvbW1vbi9saWJ0ZXN0cmVwb3Muc2gKK2luZGV4IDllNzBhYWRjM2IuLjJjM2VmMzM2 ZGQgMTAwNjQ0CistLS0gYS90ZXN0cy9jb21tb24vbGlidGVzdHJlcG9zLnNoCisrKysgYi90ZXN0 cy9jb21tb24vbGlidGVzdHJlcG9zLnNoCitAQCAtMjAsNyArMjAsMTMgQEAKKyBzZXR1cF9ycG1t ZF9yZXBvcygpIHsKKyAgICAgZGVzdD0kMQorICAgICBzaGlmdAorLSAgICByZXBvcz0ke1JQTU9T VFJFRV9DT01QT1NFX1RFU1RfVVNFX1JFUE9TOi0vZXRjL3l1bS5yZXBvcy5kfQorKyAgICBpZiBb IC1uICIke1JQTU9TVFJFRV9DT01QT1NFX1RFU1RfVVNFX1JFUE9TOi19IiBdOyB0aGVuCisrICAg ICAgICByZXBvcz0ke1JQTU9TVFJFRV9DT01QT1NFX1RFU1RfVVNFX1JFUE9TfQorKyAgICBlbGlm IFsgLWQgL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQgXTsgdGhlbgorKyAgICAgICAgcmVwb3M9L3Vz ci9zaGFyZS9kbmY1L3JlcG9zLmQKKysgICAgZWxzZQorKyAgICAgICAgcmVwb3M9L2V0Yy95dW0u cmVwb3MuZAorKyAgICBmaQorICAgICBmb3IgeCBpbiAke3JlcG9zfS9mZWRvcmF7LC11cGRhdGVz fS5yZXBvOyBkbworICAgICAgICAgYm49JChiYXNlbmFtZSAke3h9KQorICAgICAgICAgY3AgJHgg JHtkZXN0fS8ke2JufQorZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbXBvc2UtaW1hZ2Uuc2ggYi90ZXN0 cy9jb21wb3NlLWltYWdlLnNoCitpbmRleCA1MGFkMjcxNGFlLi4zNDEyNjA2YTg2IDEwMDc1NQor LS0tIGEvdGVzdHMvY29tcG9zZS1pbWFnZS5zaAorKysrIGIvdGVzdHMvY29tcG9zZS1pbWFnZS5z aAorQEAgLTU5LDcgKzU5LDEwIEBAICR7c3lzdGVtZF9zeXN1c2Vyc30KKyByZXBvczoKKyAgIC0g ZmVkb3JhICAjIEludGVudGlhbGx5IHVzaW5nIGZyb3plbiBHQSByZXBvCisgRU9GCistY3AgL2V0 Yy95dW0ucmVwb3MuZC8qLnJlcG8gLgorKyMgQ29weSByZXBvIGZpbGVzIGZyb20gd2hpY2hldmVy IGxvY2F0aW9uIGV4aXN0cworK2ZvciBkIGluIC91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIC9ldGMv eXVtLnJlcG9zLmQ7IGRvCisrICB0ZXN0IC1kICIkZCIgJiYgY3AgIiRkIi8qLnJlcG8gLiAyPi9k ZXYvbnVsbCB8fCB0cnVlCisrZG9uZQorIGlmIHJwbS1vc3RyZWUgY29tcG9zZSBpbWFnZSAtLWNh Y2hlZGlyPS4uL2NhY2hlLWNvbnRhaW5lciAtLWxhYmVsPWZvbz1iYXIgLS1sYWJlbD1iYXo9Ymxh aCAtLWluaXRpYWxpemUtbW9kZT1uZXZlciBtaW5pbWFsLnlhbWwgbWluaW1hbC5vY2lhcmNoaXZl IDI+L2Rldi9udWxsOyB0aGVuCisgICBmYXRhbCAiYnVpbHQgYW4gaW1hZ2UgaW4gLS1pbml0aWFs aXplLW1vZGU9bmV2ZXIiCisgZmkKK0BAIC05MCw3ICs5MywxMCBAQCBwYWNrYWdlczoKKyByZXBv czoKKyAgIC0gZmVkb3JhICAjIEludGVudGlhbGx5IHVzaW5nIGZyb3plbiBHQSByZXBvCisgRU9G CistY3AgL2V0Yy95dW0ucmVwb3MuZC8qLnJlcG8gLgorKyMgQ29weSByZXBvIGZpbGVzIGZyb20g d2hpY2hldmVyIGxvY2F0aW9uIGV4aXN0cworK2ZvciBkIGluIC91c3Ivc2hhcmUvZG5mNS9yZXBv cy5kIC9ldGMveXVtLnJlcG9zLmQ7IGRvCisrICB0ZXN0IC1kICIkZCIgJiYgY3AgIiRkIi8qLnJl cG8gLiAyPi9kZXYvbnVsbCB8fCB0cnVlCisrZG9uZQorICMgVW5mb3J0dW5hdGVseSwgLS1pbml0 aWFsaXplLW1vZGU9aWYtbm90LWV4aXN0cyBpcyBicm9rZW4gd2l0aCAub2NpYXJjaGl2ZS4uLgor IHJwbS1vc3RyZWUgY29tcG9zZSBpbWFnZSAtLWNhY2hlZGlyPS4uL2NhY2hlIC0tdG91Y2gtaWYt Y2hhbmdlZD1jaGFuZ2VkLnN0YW1wIC0taW5pdGlhbGl6ZS1tb2RlPWFsd2F5cyBtaW5pbWFsLnlh bWwgbWluaW1hbC5vY2lhcmNoaXZlCisgIyBUT0RPIGFjdHVhbGx5IHRlc3QgdGhpcyBjb250YWlu ZXIgaW1hZ2UKCmRpZmYgLS1naXQgYS9ycG0tb3N0cmVlLnNwZWMgYi9ycG0tb3N0cmVlLnNwZWMK aW5kZXggYTM1OWFlMS4uNDIwZjQ3YSAxMDA2NDQKLS0tIGEvcnBtLW9zdHJlZS5zcGVjCisrKyBi L3JwbS1vc3RyZWUuc3BlYwpAQCAtMTEsNiArMTEsMTYgQEAgVVJMOiBodHRwczovL2dpdGh1Yi5j b20vY29yZW9zL3JwbS1vc3RyZWUKICMgaW4gdGhlIHVwc3RyZWFtIGdpdC4gIEl0IGFsc28gY29u dGFpbnMgdmVuZG9yZWQgUnVzdCBzb3VyY2VzLgogU291cmNlMDogaHR0cHM6Ly9naXRodWIuY29t L2NvcmVvcy9ycG0tb3N0cmVlL3JlbGVhc2VzL2Rvd25sb2FkL3Yle3ZlcnNpb259L3JwbS1vc3Ry ZWUtJXt2ZXJzaW9ufS50YXIueHoKIAorIyBTdXBwb3J0IHJlbG9jYXRlZCByZXBvIGNvbmZpZ3Mg YW5kIEdQRyBrZXlzIChGZWRvcmEgNDUrKSAtICM1NjI0CisjIE1haW4gY29tbWl0IGZyb20gaHR0 cHM6Ly9naXRodWIuY29tL2NvcmVvcy9ycG0tb3N0cmVlL3B1bGwvNTYyNAorIyBTZWNvbmQgY29t bWl0IGlzIGEgc3VicHJvamVjdCB1cGRhdGUgdGhhdCBjYW5ub3QgYXBwbHksIGluc3RlYWQKKyMg d2UgaGF2ZSB0aGUgbmV4dCBwYXRjaAorUGF0Y2g6IDJkMTc3ZGZkNjZhYjQ1YWUyNzY2MWEwODk5 ZjBjNjRkNDlhYTgxNTQucGF0Y2gKKyMga2V5cmluZzogQWxzbyBzZWFyY2ggL3Vzci9zaGFyZS9w a2kvcnBtLWdwZyBmb3IgR1BHIGtleXMKKyMgaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2Fy ZS1tYW5hZ2VtZW50L2xpYmRuZi9jb21taXQvYThlOWZjYzVjNWI4MGZlMjVlNzI1ZDAyOGU5Zjli ODA4Y2IwMjczZgorIyBlZGl0ZWQgdG8gYXBwbHkgdG8gdGhlIHJwbS1vc3RyZWUncyBidW5kbGVk IGxpYmRuZiAoanVzdCBhZGRlZCBvbmUgZXh0cmEgbGliZG5mLykKK1BhdGNoOiAwMDAxLWtleXJp bmctQWxzby1zZWFyY2gtdXNyLXNoYXJlLXBraS1ycG0tZ3BnLWZvci1HUEcta2UucGF0Y2gKKwog IyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvcmVvcy9mZWRvcmEtY29yZW9zLXRyYWNrZXIvaXNz dWVzLzE3MTYKICMgb3N0cmVlIG5vdCBvbiBpNjg2IGZvciBSSEVMIDEwCiAjIGh0dHBzOi8vZ2l0 aHViLmNvbS9jb250YWluZXJzL2NvbXBvc2Vmcy9wdWxsLzIyOSNpc3N1ZWNvbW1lbnQtMTgzODcz NTc2NAo=